1
0
Fork 0

improve shader

This commit is contained in:
Sen 2025-08-28 23:48:33 +02:00
parent 64396b28b9
commit 01ceef058c
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
7 changed files with 127 additions and 106 deletions

View file

@ -668,10 +668,6 @@ public class Client implements IThreadListener {
@Variable(name = "gl_dynlight_viewdist", category = CVarCategory.RENDER, min = 1.0f, max = 10000.0f, display = "Entfernung Lichtq. -> Kamera")
public float lightDistCam = 256.0f;
public float ambientX = 0.1f;
public float ambientY = -1.0f;
public float ambientZ = 0.2f;
@Variable(name = "gl_dynlight_max", category = CVarCategory.RENDER, min = 0, max = 112, display = "Max. Dyn. Lichtquellen", callback = MaxLightFunction.class)
public int lightMaximum = 64;
@Variable(name = "gl_dynlight_chunkrange", category = CVarCategory.RENDER, min = 0, max = 64, display = "Lichtq. Sichtweite")
@ -2008,7 +2004,8 @@ public class Client implements IThreadListener {
"Licht: " + chunk.getLightSub(pos, 0) + " (" + (this.world.dimension.hasSkyLight() ? + World.getSkyLightFor(pos.getY()) + " Himmel, " : "")
+ chunk.getLight(pos) + " Blöcke, " + String.format(
"%.1f", this.renderer.getSunBrightness(1.0f) * 15.0f) + " Welt), A: "
+ String.format("%.1f °", this.world.getCelestialAngle(1.0f)) + "\n" +
+ String.format("%.1f ° (%.1f, %.1f)", this.world.getCelestialAngle(1.0f), !this.world.dimension.hasRotation() ? 0.0f : ExtMath.cos((-90.0f + this.world.getCelestialAngle(1.0f)) / 180.0f * (float)Math.PI),
!this.world.dimension.hasRotation() ? -1.0f : ExtMath.sin((-90.0f + this.world.getCelestialAngle(1.0f)) / 180.0f * (float)Math.PI)) + "\n" +
String.format("Zeit: %s" + (this.world.dimension.hasRotation() ? ", R %d / %d T" : "") + (this.world.dimension.hasOrbit() ? ", U %d / %d T" : ""),
this.world.formatEpochSimple(),
this.world.getRotation(),

View file

@ -54,7 +54,7 @@ public class MatrixState {
return new Vec3((double)SCREENCOORDS.get(0), (double)SCREENCOORDS.get(1), (double)SCREENCOORDS.get(2));
}
private static Vec3 project(Entity entity, double partial) {
public static Vec3 project(Entity entity, double partial) {
double x = entity.prevX + (entity.posX - entity.prevX) * partial;
double y = entity.prevY + (entity.posY - entity.prevY) * partial;
double z = entity.prevZ + (entity.posZ - entity.prevZ) * partial;

View file

@ -213,6 +213,12 @@ public class Renderer {
private double prevRenderSortY;
private double prevRenderSortZ;
private boolean displayListEntitiesDirty = true;
private float lightColorRed;
private float lightColorGreen;
private float lightColorBlue;
private float blockColorRed;
private float blockColorGreen;
private float blockColorBlue;
public Renderer(Client gm, ModelManager manager)
{
@ -253,15 +259,27 @@ public class Renderer {
}
public float getFogColorRed() {
return this.fogColorRed;
return this.lightColorRed;
}
public float getFogColorGreen() {
return this.fogColorGreen;
return this.lightColorGreen;
}
public float getFogColorBlue() {
return this.fogColorBlue;
return this.lightColorBlue;
}
public float getBlockColorRed() {
return this.blockColorRed;
}
public float getBlockColorGreen() {
return this.blockColorGreen;
}
public float getBlockColorBlue() {
return this.blockColorBlue;
}
public ModelManager getModelManager()
@ -1151,6 +1169,16 @@ public class Renderer {
int r = (int)(red * 255.0F);
int g = (int)(green * 255.0F);
int b = (int)(blue * 255.0F);
if(n == 240) {
this.lightColorRed = red;
this.lightColorGreen = green;
this.lightColorBlue = blue;
}
else if(n == 15) {
this.blockColorRed = red;
this.blockColorGreen = green;
this.blockColorBlue = blue;
}
this.lightmapColors[n] = a << 24 | r << 16 | g << 8 | b;
}
@ -2576,13 +2604,9 @@ public class Renderer {
this.renderChunks.add(renderchunk);
}
}
// this.gm.renderer.enableLightmap();
GlState.setActiveTexture(GL46.GL_TEXTURE1);
GL46.glMatrixMode(GL46.GL_TEXTURE);
GL46.glLoadIdentity();
// float f = 0.00390625F;
// GL46.glScalef(f, f, f);
// GL46.glTranslatef(8.0F, 8.0F, 8.0F);
GL46.glMatrixMode(GL46.GL_MODELVIEW);
this.gm.getTextureManager().bindTexture(TEX_LIGHTMAP);
GL46.glTexParameteri(GL46.GL_TEXTURE_2D, GL46.GL_TEXTURE_MIN_FILTER, GL46.GL_LINEAR);
@ -2593,43 +2617,34 @@ public class Renderer {
GlState.enableTexture2D();
GlState.setActiveTexture(GL46.GL_TEXTURE0);
// GL46.glEnableClientState(GL46.GL_VERTEX_ARRAY);
// GL46.glClientActiveTexture(GL46.GL_TEXTURE0);
// GL46.glEnableClientState(GL46.GL_TEXTURE_COORD_ARRAY);
// GL46.glClientActiveTexture(GL46.GL_TEXTURE1);
// GL46.glEnableClientState(GL46.GL_TEXTURE_COORD_ARRAY);
// GL46.glClientActiveTexture(GL46.GL_TEXTURE0);
// GL46.glEnableClientState(GL46.GL_COLOR_ARRAY);
if (this.initialized)
{
ShaderContext context = Shader.WORLD.use();
context.bool("sky_light", this.theWorld.dimension.hasSkyLight() && !this.gm.setGamma);
for (RenderChunk renderchunk : this.renderChunks)
{
VertexBuffer vertexbuffer = renderchunk.getVertexBuffer();
BlockPos blockpos = renderchunk.getPosition();
context.vec("offset", (float)((double)blockpos.getX() - this.viewEntityX), (float)((double)blockpos.getY() - this.viewEntityY), (float)((double)blockpos.getZ() - this.viewEntityZ));
// Vec3 cam = MatrixState.project(Client.CLIENT.getRenderViewEntity(), Client.CLIENT.getTickFraction());
context.vec("cam_pos", (float)this.viewEntityX, (float)this.viewEntityY + this.gm.player.getEyeHeight(), (float)this.viewEntityZ);
context.matrix("model", renderchunk.getModelviewMatrix());
context.integer("chunk_x", blockpos.getX());
context.integer("chunk_y", blockpos.getY());
context.integer("chunk_z", blockpos.getZ());
vertexbuffer.bindBuffer();
GL46.glVertexAttribPointer(0, 3, GL46.GL_FLOAT, false, 28, 0L);
GL46.glEnableVertexAttribArray(0);
GL46.glVertexAttribPointer(1, 4, GL46.GL_UNSIGNED_BYTE, true, 28, 12L);
GL46.glVertexAttribPointer(1, 4, GL46.GL_BYTE, true, 28, 12L);
GL46.glEnableVertexAttribArray(1);
GL46.glVertexAttribPointer(2, 2, GL46.GL_FLOAT, false, 28, 16L);
GL46.glEnableVertexAttribArray(2);
GL46.glVertexAttribPointer(3, 2, GL46.GL_UNSIGNED_SHORT, true, 28, 24L);
GL46.glEnableVertexAttribArray(3);
// GL46.nglVertexPointer(3, GL46.GL_FLOAT, 28, 0L);
// GL46.nglColorPointer(4, GL46.GL_UNSIGNED_BYTE, 28, 12L);
// GL46.glTexCoordPointer(2, GL46.GL_FLOAT, 28, 16L);
// GL46.glClientActiveTexture(GL46.GL_TEXTURE1);
// GL46.glTexCoordPointer(2, GL46.GL_SHORT, 28, 24L);
// GL46.glClientActiveTexture(GL46.GL_TEXTURE0);
vertexbuffer.drawArrays(GL46.GL_QUADS);
GL46.glDisableVertexAttribArray(0);
@ -2644,28 +2659,6 @@ public class Renderer {
this.renderChunks.clear();
}
// for (VertexFormatElement vertexformatelement : DefaultVertexFormats.BLOCK.getElements())
// {
// VertexFormatElement.EnumUsage vertexformatelement$enumusage = vertexformatelement.usage();
// int s = vertexformatelement.index();
//
// switch (vertexformatelement$enumusage)
// {
// case POSITION:
// GL46.glDisableClientState(GL46.GL_VERTEX_ARRAY);
// break;
//
// case UV:
// GL46.glClientActiveTexture(GL46.GL_TEXTURE0 + s);
// GL46.glDisableClientState(GL46.GL_TEXTURE_COORD_ARRAY);
// GL46.glClientActiveTexture(GL46.GL_TEXTURE0);
// break;
//
// case COLOR:
// GL46.glDisableClientState(GL46.GL_COLOR_ARRAY);
// GlState.resetColor();
// }
// }
this.gm.renderer.disableLightmap();
return l;
}
@ -3728,17 +3721,17 @@ public class Renderer {
float f24 = f4;
float f25 = f4;
float f26 = f4;
worldRendererIn.pos(d0 + 0.0D, d1 + (double)f7, d2 + 0.0D).color(f24, f25, f26, 1.0F).tex((double)f13, (double)f17).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 0.0D, d1 + (double)f8, d2 + 1.0D).color(f24, f25, f26, 1.0F).tex((double)f14, (double)f18).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1 + (double)f9, d2 + 1.0D).color(f24, f25, f26, 1.0F).tex((double)f15, (double)f19).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1 + (double)f10, d2 + 0.0D).color(f24, f25, f26, 1.0F).tex((double)f16, (double)f20).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 0.0D, d1 + (double)f7, d2 + 0.0D).color(f24, f25, f26, 0.5F).tex((double)f13, (double)f17).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 0.0D, d1 + (double)f8, d2 + 1.0D).color(f24, f25, f26, 0.5F).tex((double)f14, (double)f18).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1 + (double)f9, d2 + 1.0D).color(f24, f25, f26, 0.5F).tex((double)f15, (double)f19).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1 + (double)f10, d2 + 0.0D).color(f24, f25, f26, 0.5F).tex((double)f16, (double)f20).lightmap(l2, i3).endVertex();
if (blockliquid.shouldRenderSides(blockAccess, blockPosIn.up()))
{
worldRendererIn.pos(d0 + 0.0D, d1 + (double)f7, d2 + 0.0D).color(f24, f25, f26, 1.0F).tex((double)f13, (double)f17).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1 + (double)f10, d2 + 0.0D).color(f24, f25, f26, 1.0F).tex((double)f16, (double)f20).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1 + (double)f9, d2 + 1.0D).color(f24, f25, f26, 1.0F).tex((double)f15, (double)f19).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 0.0D, d1 + (double)f8, d2 + 1.0D).color(f24, f25, f26, 1.0F).tex((double)f14, (double)f18).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 0.0D, d1 + (double)f7, d2 + 0.0D).color(f24, f25, f26, 0.5F).tex((double)f13, (double)f17).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1 + (double)f10, d2 + 0.0D).color(f24, f25, f26, 0.5F).tex((double)f16, (double)f20).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1 + (double)f9, d2 + 1.0D).color(f24, f25, f26, 0.5F).tex((double)f15, (double)f19).lightmap(l2, i3).endVertex();
worldRendererIn.pos(d0 + 0.0D, d1 + (double)f8, d2 + 1.0D).color(f24, f25, f26, 0.5F).tex((double)f14, (double)f18).lightmap(l2, i3).endVertex();
}
}
@ -3751,10 +3744,10 @@ public class Renderer {
int l1 = getLightmapValueLiquid(blockAccess, blockPosIn.down());
int i2 = l1 >> 16 & 65535;
int j2 = l1 & 65535;
worldRendererIn.pos(d0, d1, d2 + 1.0D).color(f3, f3, f3, 1.0F).tex((double)f35, (double)f38).lightmap(i2, j2).endVertex();
worldRendererIn.pos(d0, d1, d2).color(f3, f3, f3, 1.0F).tex((double)f35, (double)f37).lightmap(i2, j2).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1, d2).color(f3, f3, f3, 1.0F).tex((double)f36, (double)f37).lightmap(i2, j2).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1, d2 + 1.0D).color(f3, f3, f3, 1.0F).tex((double)f36, (double)f38).lightmap(i2, j2).endVertex();
worldRendererIn.pos(d0, d1, d2 + 1.0D).color(f3, f3, f3, 0.5F).tex((double)f35, (double)f38).lightmap(i2, j2).endVertex();
worldRendererIn.pos(d0, d1, d2).color(f3, f3, f3, 0.5F).tex((double)f35, (double)f37).lightmap(i2, j2).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1, d2).color(f3, f3, f3, 0.5F).tex((double)f36, (double)f37).lightmap(i2, j2).endVertex();
worldRendererIn.pos(d0 + 1.0D, d1, d2 + 1.0D).color(f3, f3, f3, 0.5F).tex((double)f36, (double)f38).lightmap(i2, j2).endVertex();
flag2 = true;
}
@ -3845,14 +3838,14 @@ public class Renderer {
float f32 = f4 * f31;
float f33 = f4 * f31;
float f34 = f4 * f31;
worldRendererIn.pos(d3, d1 + (double)f39, d4).color(f32, f33, f34, 1.0F).tex((double)f41, (double)f28).lightmap(k, l).endVertex();
worldRendererIn.pos(d5, d1 + (double)f40, d6).color(f32, f33, f34, 1.0F).tex((double)f27, (double)f29).lightmap(k, l).endVertex();
worldRendererIn.pos(d5, d1 + 0.0D, d6).color(f32, f33, f34, 1.0F).tex((double)f27, (double)f30).lightmap(k, l).endVertex();
worldRendererIn.pos(d3, d1 + 0.0D, d4).color(f32, f33, f34, 1.0F).tex((double)f41, (double)f30).lightmap(k, l).endVertex();
worldRendererIn.pos(d3, d1 + 0.0D, d4).color(f32, f33, f34, 1.0F).tex((double)f41, (double)f30).lightmap(k, l).endVertex();
worldRendererIn.pos(d5, d1 + 0.0D, d6).color(f32, f33, f34, 1.0F).tex((double)f27, (double)f30).lightmap(k, l).endVertex();
worldRendererIn.pos(d5, d1 + (double)f40, d6).color(f32, f33, f34, 1.0F).tex((double)f27, (double)f29).lightmap(k, l).endVertex();
worldRendererIn.pos(d3, d1 + (double)f39, d4).color(f32, f33, f34, 1.0F).tex((double)f41, (double)f28).lightmap(k, l).endVertex();
worldRendererIn.pos(d3, d1 + (double)f39, d4).color(f32, f33, f34, 0.5F).tex((double)f41, (double)f28).lightmap(k, l).endVertex();
worldRendererIn.pos(d5, d1 + (double)f40, d6).color(f32, f33, f34, 0.5F).tex((double)f27, (double)f29).lightmap(k, l).endVertex();
worldRendererIn.pos(d5, d1 + 0.0D, d6).color(f32, f33, f34, 0.5F).tex((double)f27, (double)f30).lightmap(k, l).endVertex();
worldRendererIn.pos(d3, d1 + 0.0D, d4).color(f32, f33, f34, 0.5F).tex((double)f41, (double)f30).lightmap(k, l).endVertex();
worldRendererIn.pos(d3, d1 + 0.0D, d4).color(f32, f33, f34, 0.5F).tex((double)f41, (double)f30).lightmap(k, l).endVertex();
worldRendererIn.pos(d5, d1 + 0.0D, d6).color(f32, f33, f34, 0.5F).tex((double)f27, (double)f30).lightmap(k, l).endVertex();
worldRendererIn.pos(d5, d1 + (double)f40, d6).color(f32, f33, f34, 0.5F).tex((double)f27, (double)f29).lightmap(k, l).endVertex();
worldRendererIn.pos(d3, d1 + (double)f39, d4).color(f32, f33, f34, 0.5F).tex((double)f41, (double)f28).lightmap(k, l).endVertex();
}
}

View file

@ -15,6 +15,7 @@ import client.Client;
import client.util.FileUtils;
import common.collect.Maps;
import common.log.Log;
import common.util.ExtMath;
import common.util.Matrix4f;
import common.util.Util;
import common.util.Vec3;
@ -26,17 +27,24 @@ public enum Shader {
context.vec("clip_near", Client.CLIENT.renderer.getNearPlane());
context.vec("clip_far", Client.CLIENT.renderer.getFarPlane());
context.vec("screen", (float)Client.CLIENT.fbRawX, (float)Client.CLIENT.fbRawY);
Vec3 cam = MatrixState.getPosition();
context.vec("cam_pos", (float)cam.xCoord, (float)cam.yCoord, (float)cam.zCoord);
context.matrix("view", MatrixState.getModelView());
context.matrix("projection", MatrixState.getProjection());
context.vec("dir_direction", Client.CLIENT.ambientX, Client.CLIENT.ambientY, Client.CLIENT.ambientZ);
float angle = -90.0f + Client.CLIENT.world.getCelestialAngle(Client.CLIENT.getTickFraction());
float ambientX = !Client.CLIENT.world.dimension.hasRotation() ? 0.0f : ExtMath.cos(angle / 180.0f * (float)Math.PI);
float ambientY = !Client.CLIENT.world.dimension.hasRotation() ? -1.0f : ExtMath.sin(angle / 180.0f * (float)Math.PI);
float ambientZ = 0.0f;
context.vec("dir_direction", ambientX, ambientY, ambientZ);
float clear_r = Client.CLIENT.renderer.getFogColorRed();
float clear_g = Client.CLIENT.renderer.getFogColorGreen();
float clear_b = Client.CLIENT.renderer.getFogColorBlue();
context.vec("dir_ambient", clear_r, clear_g, clear_b);
context.vec("dir_diffuse", clear_r * 1.25f, clear_g * 1.25f, clear_b * 1.25f);
context.vec("dir_specular", clear_r * 1.5f, clear_g * 1.5f, clear_b * 1.5f);
float block_r = Client.CLIENT.renderer.getBlockColorRed();
float block_g = Client.CLIENT.renderer.getBlockColorGreen();
float block_b = Client.CLIENT.renderer.getBlockColorBlue();
context.vec("block_ambient", block_r, block_g, block_b);
context.vec("light_factor", Client.CLIENT.lightBlend);
context.vec("max_vert_dist", Client.CLIENT.lightDistVert);
context.vec("max_cam_dist", Client.CLIENT.lightDistCam);
@ -259,7 +267,8 @@ public enum Shader {
}
this.program = pr;
if(this.init != null) {
context = this.use();
GL46.glUseProgram(this.program);
context = new ShaderContext(this.program);
this.init.accept(context);
context.finish();
}

View file

@ -105,31 +105,49 @@ public class FaceBakery
private int getFaceShadeColor(Facing facing)
{
float f = this.getFaceBrightness(facing);
int i = ExtMath.clampi((int)(f * 255.0F), 0, 255);
return -16777216 | i << 16 | i << 8 | i;
return this.getFaceBrightness(facing) << 24 | this.getFaceNormal(facing);
}
private float getFaceBrightness(Facing facing)
private int getFaceNormal(Facing facing)
{
switch (facing)
{
case DOWN:
return 0.5F;
default:
return 0x008100;
case UP:
return 0x007f00;
case WEST:
return 0x000081;
case EAST:
return 0x00007f;
case NORTH:
return 0x810000;
case SOUTH:
return 0x7f0000;
}
}
private int getFaceBrightness(Facing facing)
{
switch (facing)
{
case DOWN:
return 0x3f;
case UP:
return 1.0F;
return 0x7f;
case NORTH:
case SOUTH:
return 0.8F;
return 0x65;
case WEST:
case EAST:
return 0.6F;
return 0x4c;
default:
return 1.0F;
return 0x7f;
}
}
@ -148,7 +166,7 @@ public class FaceBakery
private void fillVertexData(int[] faceData, int vertexIndex, Facing facing, BlockPartFace partFace, float[] p_178402_5_, Sprite sprite, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade)
{
Facing enumfacing = modelRotationIn.rotateFace(facing);
int i = shade ? this.getFaceShadeColor(enumfacing) : -1;
int i = shade ? this.getFaceShadeColor(enumfacing) : 0x7f000000;
VertexInformation enumfacedirection$vertexinformation = EnumFaceDirection.getFacing(facing).getVertexInformation(vertexIndex);
Vector3f vector3f = new Vector3f(p_178402_5_[enumfacedirection$vertexinformation.xIndex], p_178402_5_[enumfacedirection$vertexinformation.yIndex], p_178402_5_[enumfacedirection$vertexinformation.zIndex]);
this.rotatePart(vector3f, partRotation);

View file

@ -10,9 +10,9 @@ struct light_t {
in vec3 vertex;
in vec3 normal;
in vec4 brightness;
in vec2 tex_coord;
in vec2 lm_coord;
in float brightness;
uniform vec3 cam_pos;
uniform sampler2D tex;
@ -24,9 +24,9 @@ uniform float max_cam_dist;
uniform float light_factor;
uniform vec3 dir_direction;
uniform vec3 dir_ambient;
uniform vec3 dir_diffuse;
uniform vec3 dir_specular;
uniform vec3 block_ambient;
uniform int n_lights;
uniform bool sky_light;
uniform light_block {
light_t lights[MAX_LIGHTS];
};
@ -50,8 +50,8 @@ vec3 calc_dir_light(vec3 norm, vec3 dir, vec3 rgb) {
vec3 rdir = reflect(-ldir, norm);
float spec = pow(max(dot(dir, rdir), 0.0), shine);
vec3 ambient = dir_ambient * rgb + clamp(vec3(0.0), 0.0, 1.0);
vec3 diffuse = dir_diffuse * diff * rgb;
vec3 specular = dir_specular * spec * specular * rgb;
vec3 diffuse = dir_ambient * 0.125 * diff * rgb;
vec3 specular = dir_ambient * 1.25 * spec * specular * rgb;
return (ambient + diffuse + specular);
}
@ -75,10 +75,12 @@ vec3 calc_point_light(light_t light, vec3 norm, vec3 dir, vec3 rgb) {
void main() {
vec3 norm = normalize(normal);
vec3 dir = normalize(cam_pos - vertex);
vec4 texel = texture(tex, tex_coord) * brightness;
texel *= texture(lightmap, 0.03125 + lm_coord * 256.0);
vec3 rgb = texel.rgb;
vec3 result = calc_dir_light(norm, dir, rgb);
vec4 texel = texture(tex, tex_coord);
float sky = sky_light ? vertex.y < 0.0 ? 0.0 : (vertex.y < 64.0 ? vertex.y / 64.0 : 1.0) : 1.0;
float block = clamp(0.03125 + lm_coord.x * 256.0, 0.0, 1.0);
vec3 lm = block * block_ambient;
vec3 rgb = texel.rgb; // * brightness;
vec3 result = rgb * lm + calc_dir_light(norm, dir, rgb * sky * (1.0 - block));
// int l = 0;
for(int z = 0; z < n_lights; z++) {
// if(lights[z].enabled) {
@ -87,5 +89,5 @@ void main() {
// l++;
// }
}
FragColor = texel; // vec4(result, texel.a);
FragColor = vec4(result, texel.a);
}

View file

@ -1,27 +1,29 @@
layout (location = 0) in vec3 pos;
// layout (location = 1) in vec3 norm;
layout (location = 1) in vec4 color;
layout (location = 1) in vec4 norm;
layout (location = 2) in vec2 coord;
layout (location = 3) in vec2 light;
out vec3 vertex;
out vec3 normal;
out vec4 brightness;
out vec2 tex_coord;
out vec2 lm_coord;
out float brightness;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform sampler2D tex;
uniform vec3 offset;
uniform int chunk_x;
uniform int chunk_y;
uniform int chunk_z;
void main() {
vec3 norm = vec3(0.0, 1.0, 0.0);
vertex = offset + vec3(model * vec4(pos, 1.0));
normal = mat3(transpose(inverse(model))) * norm;
brightness = color;
vec3 nvertex = vec3(model * vec4(pos, 1.0));
vertex = vec3(float(chunk_x) + pos.x, float(chunk_y) + pos.y, float(chunk_z) + pos.z);
normal = mat3(transpose(inverse(model))) * norm.rgb;
brightness = norm.a;
tex_coord = coord;
lm_coord = light;
gl_Position = projection * view * vec4(vertex, 1.0);
gl_Position = projection * view * vec4(offset + nvertex, 1.0);
}