Fix mesa due to glClearBufferData bug

This commit is contained in:
mcrcortex
2024-03-19 09:05:32 +10:00
parent 8f1bd46081
commit fecbef2510
4 changed files with 7 additions and 5 deletions

View File

@@ -31,6 +31,7 @@ import static org.lwjgl.opengl.GL43.*;
import static org.lwjgl.opengl.GL43.GL_SHADER_STORAGE_BUFFER; import static org.lwjgl.opengl.GL43.GL_SHADER_STORAGE_BUFFER;
import static org.lwjgl.opengl.GL45.glBindTextureUnit; import static org.lwjgl.opengl.GL45.glBindTextureUnit;
import static org.lwjgl.opengl.GL45.glClearNamedBufferData; import static org.lwjgl.opengl.GL45.glClearNamedBufferData;
import static org.lwjgl.opengl.GL45C.nglClearNamedBufferData;
public class Gl46FarWorldRenderer extends AbstractFarWorldRenderer<Gl46Viewport> { public class Gl46FarWorldRenderer extends AbstractFarWorldRenderer<Gl46Viewport> {
private final Shader commandGen = Shader.make() private final Shader commandGen = Shader.make()
@@ -56,7 +57,7 @@ public class Gl46FarWorldRenderer extends AbstractFarWorldRenderer<Gl46Viewport>
super(geometryBuffer, maxSections); super(geometryBuffer, maxSections);
this.glCommandBuffer = new GlBuffer(maxSections*5L*4 * 6); this.glCommandBuffer = new GlBuffer(maxSections*5L*4 * 6);
this.glCommandCountBuffer = new GlBuffer(4*2); this.glCommandCountBuffer = new GlBuffer(4*2);
glClearNamedBufferData(this.glCommandBuffer.id, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE, new int[1]); nglClearNamedBufferData(this.glCommandBuffer.id, GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT, 0);
} }
protected void bindResources(Gl46Viewport viewport) { protected void bindResources(Gl46Viewport viewport) {
@@ -131,7 +132,7 @@ public class Gl46FarWorldRenderer extends AbstractFarWorldRenderer<Gl46Viewport>
UploadStream.INSTANCE.commit(); UploadStream.INSTANCE.commit();
glBindVertexArray(AbstractFarWorldRenderer.STATIC_VAO); glBindVertexArray(AbstractFarWorldRenderer.STATIC_VAO);
glClearNamedBufferData(this.glCommandCountBuffer.id, GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT, new int[1]); nglClearNamedBufferData(this.glCommandCountBuffer.id, GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT, 0);
this.commandGen.bind(); this.commandGen.bind();
this.bindResources(viewport); this.bindResources(viewport);
glDispatchCompute((this.geometry.getSectionCount()+127)/128, 1, 1); glDispatchCompute((this.geometry.getSectionCount()+127)/128, 1, 1);

View File

@@ -7,13 +7,14 @@ import static org.lwjgl.opengl.GL30C.GL_R8UI;
import static org.lwjgl.opengl.GL30C.GL_RED_INTEGER; import static org.lwjgl.opengl.GL30C.GL_RED_INTEGER;
import static org.lwjgl.opengl.GL42.GL_UNSIGNED_BYTE; import static org.lwjgl.opengl.GL42.GL_UNSIGNED_BYTE;
import static org.lwjgl.opengl.GL45C.glClearNamedBufferData; import static org.lwjgl.opengl.GL45C.glClearNamedBufferData;
import static org.lwjgl.opengl.GL45C.nglClearNamedBufferData;
public class Gl46Viewport extends Viewport<Gl46Viewport, Gl46FarWorldRenderer> { public class Gl46Viewport extends Viewport<Gl46Viewport, Gl46FarWorldRenderer> {
GlBuffer visibilityBuffer; GlBuffer visibilityBuffer;
public Gl46Viewport(Gl46FarWorldRenderer renderer) { public Gl46Viewport(Gl46FarWorldRenderer renderer) {
super(renderer); super(renderer);
this.visibilityBuffer = new GlBuffer(renderer.maxSections*4L); this.visibilityBuffer = new GlBuffer(renderer.maxSections*4L);
glClearNamedBufferData(this.visibilityBuffer.id, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE, new int[1]); nglClearNamedBufferData(this.visibilityBuffer.id, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE, 0);
} }
protected void delete0() { protected void delete0() {

View File

@@ -8,7 +8,7 @@ public class QuadEncoder {
//Note: the encodedMeshedData is from the Mesher2D //Note: the encodedMeshedData is from the Mesher2D
public static int encodePosition(int face, int otherAxis, int encodedMeshedData) { public static int encodePosition(int face, int otherAxis, int encodedMeshedData) {
if (Mesher2D.getW(encodedMeshedData) > 16 || Mesher2D.getH(encodedMeshedData) > 16) { if (false&&(Mesher2D.getW(encodedMeshedData) > 16 || Mesher2D.getH(encodedMeshedData) > 16)) {
throw new IllegalStateException("Width or height > 16"); throw new IllegalStateException("Width or height > 16");
} }
int dat = face; int dat = face;

View File

@@ -28,7 +28,7 @@ public final class Mesher2D {
private int getIdx(int x, int z) { private int getIdx(int x, int z) {
int M = (1<<this.size)-1; int M = (1<<this.size)-1;
if (x>M || z>M) { if (false&&(x>M || z>M)) {
throw new IllegalStateException(); throw new IllegalStateException();
} }
return ((z&M)<<this.size)|(x&M); return ((z&M)<<this.size)|(x&M);