proliferate opengl error checking
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2024-08-28 16:35:25 -04:00
parent 05c51896e0
commit 9292e74221
4 changed files with 78 additions and 1 deletions

View File

@ -152,66 +152,104 @@ public class HomogenousInstancedArray {
//"opengl matrix attribute"
//https://learnopengl.com/code_viewer_gh.php?code=src/4.advanced_opengl/10.3.asteroids_instanced/asteroids_instanced.cpp
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
//enable attributes
GL45.glEnableVertexAttribArray(matrixAttributeIndices[0]);
Globals.renderingEngine.checkError();
GL45.glEnableVertexAttribArray(matrixAttributeIndices[1]);
Globals.renderingEngine.checkError();
GL45.glEnableVertexAttribArray(matrixAttributeIndices[2]);
Globals.renderingEngine.checkError();
GL45.glEnableVertexAttribArray(matrixAttributeIndices[3]);
Globals.renderingEngine.checkError();
//update attribute to point to buffer at correct offset + stride
GL45.glVertexAttribPointer(matrixAttributeIndices[0], 4, GL45.GL_FLOAT, false, 64, 0 * 4);
Globals.renderingEngine.checkError();
GL45.glVertexAttribPointer(matrixAttributeIndices[1], 4, GL45.GL_FLOAT, false, 64, 4 * 4);
Globals.renderingEngine.checkError();
GL45.glVertexAttribPointer(matrixAttributeIndices[2], 4, GL45.GL_FLOAT, false, 64, 4 * 8);
Globals.renderingEngine.checkError();
GL45.glVertexAttribPointer(matrixAttributeIndices[3], 4, GL45.GL_FLOAT, false, 64, 4 * 12);
Globals.renderingEngine.checkError();
//bind buffer
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
//tell opengl to send a new value from buffer for each instance (instead of whole buffer for every instance)
GL45.glVertexAttribDivisor(matrixAttributeIndices[0], 1);
Globals.renderingEngine.checkError();
GL45.glVertexAttribDivisor(matrixAttributeIndices[1], 1);
Globals.renderingEngine.checkError();
GL45.glVertexAttribDivisor(matrixAttributeIndices[2], 1);
Globals.renderingEngine.checkError();
GL45.glVertexAttribDivisor(matrixAttributeIndices[3], 1);
Globals.renderingEngine.checkError();
} else if(type == HomogenousBufferTypes.MAT4D){
//https://solhsa.com/instancing.html
//https://stackoverflow.com/questions/17355051/using-a-matrix-as-vertex-attribute-in-opengl3-core-profile
//"opengl matrix attribute"
//https://learnopengl.com/code_viewer_gh.php?code=src/4.advanced_opengl/10.3.asteroids_instanced/asteroids_instanced.cpp
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
//enable attributes
GL45.glEnableVertexAttribArray(matrixAttributeIndices[0]);
Globals.renderingEngine.checkError();
GL45.glEnableVertexAttribArray(matrixAttributeIndices[1]);
Globals.renderingEngine.checkError();
GL45.glEnableVertexAttribArray(matrixAttributeIndices[2]);
Globals.renderingEngine.checkError();
GL45.glEnableVertexAttribArray(matrixAttributeIndices[3]);
Globals.renderingEngine.checkError();
//update attribute to point to buffer at correct offset + stride
GL45.glVertexAttribPointer(matrixAttributeIndices[0], 4, GL45.GL_FLOAT, false, 64, 0 * 4);
Globals.renderingEngine.checkError();
GL45.glVertexAttribPointer(matrixAttributeIndices[1], 4, GL45.GL_FLOAT, false, 64, 4 * 4);
Globals.renderingEngine.checkError();
GL45.glVertexAttribPointer(matrixAttributeIndices[2], 4, GL45.GL_FLOAT, false, 64, 4 * 8);
Globals.renderingEngine.checkError();
GL45.glVertexAttribPointer(matrixAttributeIndices[3], 4, GL45.GL_FLOAT, false, 64, 4 * 12);
Globals.renderingEngine.checkError();
//bind buffer
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
//tell opengl to send a new value from buffer for each instance (instead of whole buffer for every instance)
GL45.glVertexAttribDivisor(matrixAttributeIndices[0], 1);
Globals.renderingEngine.checkError();
GL45.glVertexAttribDivisor(matrixAttributeIndices[1], 1);
Globals.renderingEngine.checkError();
GL45.glVertexAttribDivisor(matrixAttributeIndices[2], 1);
Globals.renderingEngine.checkError();
GL45.glVertexAttribDivisor(matrixAttributeIndices[3], 1);
Globals.renderingEngine.checkError();
} else if(type == HomogenousBufferTypes.FLOAT){
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
//enable attributes
GL45.glEnableVertexAttribArray(attributeIndex);
Globals.renderingEngine.checkError();
//update attribute to point to buffer at correct offset + stride
GL45.glVertexAttribPointer(attributeIndex, 1, GL45.GL_FLOAT, false, 0, 0);
Globals.renderingEngine.checkError();
//bind buffer
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
//tell opengl to send a new value from buffer for each instance (instead of whole buffer for every instance)
GL45.glVertexAttribDivisor(attributeIndex, 1);
Globals.renderingEngine.checkError();
} else if(type == HomogenousBufferTypes.VEC3F){
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
//enable attributes
GL45.glEnableVertexAttribArray(attributeIndex);
Globals.renderingEngine.checkError();
//update attribute to point to buffer at correct offset + stride
GL45.glVertexAttribPointer(attributeIndex, 3, GL45.GL_FLOAT, false, 0, 0);
Globals.renderingEngine.checkError();
//bind buffer
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
//tell opengl to send a new value from buffer for each instance (instead of whole buffer for every instance)
GL45.glVertexAttribDivisor(attributeIndex, 1);
Globals.renderingEngine.checkError();
} else {
LoggerInterface.loggerRenderer.ERROR("Unsupported operation", new Exception());
}
@ -226,45 +264,56 @@ public class HomogenousInstancedArray {
public void updateBuffer(Object object, int startIndex){
//bind the buffer
GL45.glBindBuffer(GL45.GL_ARRAY_BUFFER, bufferPointer);
Globals.renderingEngine.checkError();
switch(type){
case VEC3F: {
FloatBuffer buffer = (FloatBuffer)object;
GL45.glNamedBufferSubData(bufferPointer,startIndex,buffer);
Globals.renderingEngine.checkError();
} break;
case VEC3D: {
DoubleBuffer buffer = (DoubleBuffer)object;
GL45.glNamedBufferSubData(bufferPointer,startIndex,buffer);
Globals.renderingEngine.checkError();
} break;
case VEC4F: {
FloatBuffer buffer = (FloatBuffer)object;
GL45.glNamedBufferSubData(bufferPointer,startIndex,buffer);
Globals.renderingEngine.checkError();
} break;
case VEC4D: {
DoubleBuffer buffer = (DoubleBuffer)object;
GL45.glNamedBufferSubData(bufferPointer,startIndex,buffer);
Globals.renderingEngine.checkError();
} break;
case DOUBLE: {
DoubleBuffer buffer = (DoubleBuffer)object;
GL45.glNamedBufferSubData(bufferPointer,startIndex,buffer);
Globals.renderingEngine.checkError();
} break;
case FLOAT: {
FloatBuffer buffer = (FloatBuffer)object;
GL45.glNamedBufferSubData(bufferPointer,startIndex,buffer);
Globals.renderingEngine.checkError();
} break;
case INT: {
IntBuffer buffer = (IntBuffer)object;
GL45.glNamedBufferSubData(bufferPointer,startIndex,buffer);
Globals.renderingEngine.checkError();
} break;
case MAT4F: {
FloatBuffer buffer = (FloatBuffer)object;
GL45.glNamedBufferSubData(bufferPointer, startIndex, buffer);
Globals.renderingEngine.checkError();
} break;
case MAT4D: {
FloatBuffer buffer = (FloatBuffer)object;
GL45.glNamedBufferSubData(bufferPointer, startIndex, buffer);
Globals.renderingEngine.checkError();
} break;
}
//unbind the buffer
GL33.glBindBuffer(GL45.GL_ARRAY_BUFFER, 0);
Globals.renderingEngine.checkError();
}
}

View File

@ -309,14 +309,17 @@ public class Mesh {
if(currentUniformRaw instanceof Matrix4f){
Matrix4f currentUniform = (Matrix4f)currentUniformRaw;
glUniformMatrix4fv(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), key), false, currentUniform.get(new float[16]));
Globals.renderingEngine.checkError();
}
if(currentUniformRaw instanceof Vector3f){
Vector3f currentUniform = (Vector3f)currentUniformRaw;
glUniform3fv(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), key), currentUniform.get(BufferUtils.createFloatBuffer(3)));
Globals.renderingEngine.checkError();
}
if(currentUniformRaw instanceof Integer){
int currentInform = (Integer)currentUniformRaw;
glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), key), currentInform);
Globals.renderingEngine.checkError();
}
}
}
@ -347,6 +350,7 @@ public class Mesh {
//bind vao off the rip
glBindVertexArray(vertexArrayObject);
Globals.renderingEngine.checkError();
if(renderPipelineState.getUseMeshShader()){
ShaderProgram selectedProgram = null;
@ -409,6 +413,7 @@ public class Mesh {
texture.bind(openGLState,5+i);
}
glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), textureMask.getUniformNames().get(i)),5+i);
Globals.renderingEngine.checkError();
i++;
}
} else if(textureMask.getTexturePaths() != null){
@ -428,7 +433,9 @@ public class Mesh {
if(renderPipelineState.getUseShadowMap()){
openGLState.glActiveTexture(GL_TEXTURE3);
Globals.renderingEngine.checkError();
openGLState.glBindTexture(GL_TEXTURE_2D, RenderingEngine.lightBufferDepthTexture.getTexturePointer());
Globals.renderingEngine.checkError();
glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "shadowMap"), 3);
Globals.renderingEngine.checkError();
}
@ -440,7 +447,9 @@ public class Mesh {
//
if(bones != null && !bones.isEmpty()){
glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "hasBones"), 1);
Globals.renderingEngine.checkError();
glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "numBones"), bones.size());
Globals.renderingEngine.checkError();
Iterator<String> boneIterator = boneIdList.iterator();
// float bufferarray[] = new float[16];
int incrementer = 0;
@ -457,20 +466,24 @@ public class Mesh {
// System.out.println(currentMat);
// }
openGLState.getActiveShader().setUniform(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), currentUniform), currentMat);
Globals.renderingEngine.checkError();
// GL45.glUniformMatrix4fv(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), currentUniform), false, bufferarray);
} else {
// System.out.println("Bonename: " + boneName);
// System.exit(1);
openGLState.getActiveShader().setUniform(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), currentUniform), new float[16]);
Globals.renderingEngine.checkError();
// GL45.glUniformMatrix4fv(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), currentUniform), false, new float[16]);
}
incrementer++;
}
} else {
glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "hasBones"), 0);
Globals.renderingEngine.checkError();
}
} else {
glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "hasBones"), 0);
Globals.renderingEngine.checkError();
}
Globals.renderingEngine.checkError();
@ -479,14 +492,23 @@ public class Mesh {
//buffer model/view/proj matrices
try(MemoryStack stack = MemoryStack.stackPush()){
GL45.glUniformMatrix4fv(openGLState.getActiveShader().shaderVertexModelLoc, false, parent.getModelMatrix().get(new float[16]));
Globals.renderingEngine.checkError();
glUniformMatrix4fv(openGLState.getActiveShader().shaderVertexViewLoc, false, Globals.viewMatrix.get(new float[16]));
Globals.renderingEngine.checkError();
glUniformMatrix4fv(openGLState.getActiveShader().shaderVertexProjectionLoc, false, Globals.projectionMatrix.get(new float[16]));
Globals.renderingEngine.checkError();
glUniform3fv(openGLState.getActiveShader().shaderVertexViewPosLoc, CameraEntityUtils.getCameraEye(Globals.playerCamera).get(stack.floats(3)));
Globals.renderingEngine.checkError();
Vector3f worldPos = new Vector3f((float)parent.getWorldPos().x,(float)parent.getWorldPos().y,(float)parent.getWorldPos().z);
Globals.renderingEngine.checkError();
glUniform3fv(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "modelWorldPos"), worldPos.get(stack.mallocFloat(3)));
Globals.renderingEngine.checkError();
glUniformMatrix4fv(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "lightSpaceMatrix"), false, Globals.lightDepthMatrix.get(new float[16]));
Globals.renderingEngine.checkError();
glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "frame"), (int)Globals.timekeeper.getNumberOfRenderFramesElapsed());
Globals.renderingEngine.checkError();
glUniform1f(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "time"), (float)Globals.timekeeper.getCurrentRendererTime());
Globals.renderingEngine.checkError();
}
Globals.renderingEngine.checkError();
}
@ -510,15 +532,18 @@ public class Mesh {
if(renderPipelineState.getInstanced()){
GL45.glDrawElementsInstanced(GL_TRIANGLES, elementCount, GL_UNSIGNED_INT, 0, renderPipelineState.getInstanceCount());
Globals.renderingEngine.checkError();
} else {
if(useElementArray){
GL11.glDrawElements(GL_TRIANGLES, elementCount, GL_UNSIGNED_INT, 0);
Globals.renderingEngine.checkError();
} else {
GL11.glDrawArrays(GL_TRIANGLES, 0, elementCount);
Globals.renderingEngine.checkError();
}
}
Globals.renderingEngine.checkError();
glBindVertexArray(0);
Globals.renderingEngine.checkError();
}
/**

View File

@ -777,10 +777,12 @@ public class ShaderProgram {
*/
public void setUniform(OpenGLState openGLState, String uniformName, Object value){
int uniformLocation = glGetUniformLocation(this.getShaderId(), uniformName);
Globals.renderingEngine.checkError();
if(uniformLocation == INVALID_UNIFORM_NAME){
LoggerInterface.loggerRenderer.DEBUG_LOOP("Searched for uniform in a shader that does not contain it. Uniform name: \"" + uniformName + "\"");
} else {
setUniform(uniformLocation, value);
Globals.renderingEngine.checkError();
}
}

View File

@ -304,6 +304,7 @@ public class Texture {
LoggerInterface.loggerRenderer.ERROR(new IllegalStateException("Trying to bind texture object that has texturepointer of 0"));
}
openGLState.glBindTextureUnit(GL_TEXTURE0 + attrib_val,this.texturePointer,GL_TEXTURE_2D);
Globals.renderingEngine.checkError();
// openGLState.glActiveTexture(GL_TEXTURE0 + attrib_val);
// openGLState.glBindTexture(GL_TEXTURE_2D, texturePointer);
}