implement basic shader
This commit is contained in:
parent
563f235b2f
commit
cf0239c76e
6 changed files with 114 additions and 104 deletions
|
@ -826,6 +826,7 @@ public class Client implements IThreadListener {
|
|||
Font.unloadFonts();
|
||||
Font.loadFonts();
|
||||
Font.select(this.font);
|
||||
Shader.loadShaders();
|
||||
this.textureManager.onReload();
|
||||
this.modelManager.onReload();
|
||||
this.renderItem.onReload();
|
||||
|
|
|
@ -19,6 +19,7 @@ import java.util.function.Predicate;
|
|||
import org.lwjgl.opengl.GL46;
|
||||
|
||||
import client.Client;
|
||||
import client.renderer.Shader.ShaderContext;
|
||||
import client.renderer.blockmodel.BakedModel;
|
||||
import client.renderer.blockmodel.BakedQuad;
|
||||
import client.renderer.blockmodel.IBakedModel;
|
||||
|
@ -1219,7 +1220,7 @@ public class Renderer {
|
|||
this.updateChunks(finishTimeNano);
|
||||
GL46.glMatrixMode(GL46.GL_MODELVIEW);
|
||||
GL46.glPushMatrix();
|
||||
this.renderBlockLayer((double)partialTicks, entity);
|
||||
this.renderChunks();
|
||||
GlState.shadeModel(GL46.GL_FLAT);
|
||||
GlState.alphaFunc(GL46.GL_GREATER, 0.1F);
|
||||
|
||||
|
@ -2561,72 +2562,112 @@ public class Renderer {
|
|||
return new Vector3f(f3 * f4, f5, f2 * f4);
|
||||
}
|
||||
|
||||
private int renderBlockLayer(double partialTicks, Entity entityIn)
|
||||
private int renderChunks()
|
||||
{
|
||||
ItemRenderer.disableStandardItemLighting();
|
||||
|
||||
int l = 0;
|
||||
int i = this.renderInfos.size();
|
||||
|
||||
for (int j = 0; j < i; j++)
|
||||
{
|
||||
RenderChunk renderchunk = ((RenderInfo)this.renderInfos.get(j)).chunk;
|
||||
|
||||
RenderChunk renderchunk = this.renderInfos.get(j).chunk;
|
||||
if (!renderchunk.getCompiledChunk().isLayerEmpty())
|
||||
{
|
||||
++l;
|
||||
this.addRenderChunk(renderchunk);
|
||||
this.renderChunks.add(renderchunk);
|
||||
}
|
||||
}
|
||||
this.renderBlockLayer();
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
private void renderBlockLayer()
|
||||
{
|
||||
this.gm.renderer.enableLightmap();
|
||||
|
||||
// if (OpenGl.useVbo())
|
||||
// {
|
||||
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);
|
||||
// }
|
||||
|
||||
this.renderChunkLayer();
|
||||
|
||||
// if (OpenGl.useVbo())
|
||||
// {
|
||||
for (VertexFormatElement vertexformatelement : DefaultVertexFormats.BLOCK.getElements())
|
||||
// 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);
|
||||
GL46.glTexParameteri(GL46.GL_TEXTURE_2D, GL46.GL_TEXTURE_MAG_FILTER, GL46.GL_LINEAR);
|
||||
GL46.glTexParameteri(GL46.GL_TEXTURE_2D, GL46.GL_TEXTURE_WRAP_S, GL46.GL_CLAMP);
|
||||
GL46.glTexParameteri(GL46.GL_TEXTURE_2D, GL46.GL_TEXTURE_WRAP_T, GL46.GL_CLAMP);
|
||||
GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
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();
|
||||
for (RenderChunk renderchunk : this.renderChunks)
|
||||
{
|
||||
VertexFormatElement.EnumUsage vertexformatelement$enumusage = vertexformatelement.usage();
|
||||
int i = vertexformatelement.index();
|
||||
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));
|
||||
context.matrix("model", renderchunk.getModelviewMatrix());
|
||||
|
||||
vertexbuffer.bindBuffer();
|
||||
|
||||
switch (vertexformatelement$enumusage)
|
||||
{
|
||||
case POSITION:
|
||||
GL46.glDisableClientState(GL46.GL_VERTEX_ARRAY);
|
||||
break;
|
||||
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.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);
|
||||
|
||||
case UV:
|
||||
GL46.glClientActiveTexture(GL46.GL_TEXTURE0 + i);
|
||||
GL46.glDisableClientState(GL46.GL_TEXTURE_COORD_ARRAY);
|
||||
GL46.glClientActiveTexture(GL46.GL_TEXTURE0);
|
||||
break;
|
||||
|
||||
case COLOR:
|
||||
GL46.glDisableClientState(GL46.GL_COLOR_ARRAY);
|
||||
GlState.resetColor();
|
||||
}
|
||||
GL46.glDisableVertexAttribArray(0);
|
||||
GL46.glDisableVertexAttribArray(1);
|
||||
GL46.glDisableVertexAttribArray(2);
|
||||
GL46.glDisableVertexAttribArray(3);
|
||||
}
|
||||
// }
|
||||
context.finish();
|
||||
|
||||
GL46.glBindBuffer(GL46.GL_ARRAY_BUFFER, 0);
|
||||
GlState.resetColor();
|
||||
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;
|
||||
}
|
||||
|
||||
private void cleanupDamagedBlocks(Iterator<DestroyProgress> iteratorIn)
|
||||
|
@ -3303,49 +3344,6 @@ public class Renderer {
|
|||
this.viewEntityZ = viewEntityZIn;
|
||||
}
|
||||
|
||||
private void preRenderChunk(RenderChunk renderChunkIn)
|
||||
{
|
||||
BlockPos blockpos = renderChunkIn.getPosition();
|
||||
GL46.glTranslatef((float)((double)blockpos.getX() - this.viewEntityX), (float)((double)blockpos.getY() - this.viewEntityY), (float)((double)blockpos.getZ() - this.viewEntityZ));
|
||||
}
|
||||
|
||||
private void addRenderChunk(RenderChunk renderChunkIn)
|
||||
{
|
||||
this.renderChunks.add(renderChunkIn);
|
||||
}
|
||||
|
||||
private void renderChunkLayer()
|
||||
{
|
||||
if (this.initialized)
|
||||
{
|
||||
for (RenderChunk renderchunk : this.renderChunks)
|
||||
{
|
||||
VertexBuffer vertexbuffer = renderchunk.getVertexBuffer();
|
||||
GL46.glPushMatrix();
|
||||
this.preRenderChunk(renderchunk);
|
||||
renderchunk.multModelviewMatrix();
|
||||
vertexbuffer.bindBuffer();
|
||||
this.setupArrayPointers();
|
||||
vertexbuffer.drawArrays(GL46.GL_QUADS);
|
||||
GL46.glPopMatrix();
|
||||
}
|
||||
|
||||
GL46.glBindBuffer(GL46.GL_ARRAY_BUFFER, 0);
|
||||
GlState.resetColor();
|
||||
this.renderChunks.clear();
|
||||
}
|
||||
}
|
||||
|
||||
private void setupArrayPointers()
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
public void renderStarField(int w, int h, int bg, int color, float ticks, Random rand) {
|
||||
long seed = rand.getSeed();
|
||||
Vec3 stars = new Vec3(color);
|
||||
|
|
|
@ -22,7 +22,7 @@ import common.util.Vector3f;
|
|||
import common.util.Vector4f;
|
||||
|
||||
public enum Shader {
|
||||
WORLD("world", "world", context -> {context.integer("tex", 0); GL46.glUniformBlockBinding(context.getProgram(), GL46.glGetUniformBlockIndex(context.getProgram(), "light_block"), 0);}, context -> {
|
||||
WORLD("world", "world", context -> {context.integer("tex", 0); context.integer("lightmap", 1); /* GL46.glUniformBlockBinding(context.getProgram(), GL46.glGetUniformBlockIndex(context.getProgram(), "light_block"), 0); */}, context -> {
|
||||
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);
|
||||
|
|
|
@ -257,9 +257,9 @@ public class RenderChunk
|
|||
GL46.glPopMatrix();
|
||||
}
|
||||
|
||||
public void multModelviewMatrix()
|
||||
public FloatBuffer getModelviewMatrix()
|
||||
{
|
||||
GL46.glMultMatrixf(this.modelviewMatrix);
|
||||
return this.modelviewMatrix;
|
||||
}
|
||||
|
||||
public CompiledChunk getCompiledChunk()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue