제 게임에 균일 한 버퍼 객체를 구현하려고했지만 어떤 이유로 작동하지 않았습니다. 나는 현재 셰이더에 아무 것도 보내지 않는다고 생각한다. UBO 이전에는 모든 것이 잘되었습니다. 이것은 완전히 임시 시스템입니다. 나는 단지 그것을 작동시키고 싶었다. LWJGL - 균일 버퍼 객체가 작동하지 않습니다.
내 UBO 클래스 :private int ubo;
public void createUBO() {
ubo = GL15.glGenBuffers();
}
public void allocate(int bytes) {
bindBuffer();
GL15.glBufferData(GL31.GL_UNIFORM_BUFFER, bytes, GL15.GL_STATIC_DRAW);
unbindBuffer();
}
public void updateUBO(FloatBuffer buffer) {
buffer.flip();
bindBuffer();
GL15.glBufferSubData(GL31.GL_UNIFORM_BUFFER, 0, buffer);
unbindBuffer();
}
내 gameloop :
public void init() {
ubo = new UBO();
ubo.createUBO();
ubo.allocate(64);
}
public void render() {
basicEntityShader.start();
basicEntityShader.loadFog(fogColor, fogDensity, fogGradient);
basicEntityShader.loadLights(lights);
Matrix4f viewMatrix = Maths.createViewMatrix(camera);
FloatBuffer buffer = BufferUtils.createFloatBuffer(16);
viewMatrix.storeTranspose(buffer);
ubo.updateUBO(buffer);
basicEntityShader.setUBO(ubo);
basicEntityShader.bindUniformBlocks();
entityRenderer.render(entities, camera);
}
쉐이더 :
layout (std140) uniform Matrices {
mat4 viewMatrix;
};
바인딩 :
GL30.glBindBufferRange(GL31.GL_UNIFORM_BUFFER, 0, ubo.getUbo(), 0, 64);
int block = GL31.glGetUniformBlockIndex(programID, "Matrices");
GL31.glUniformBlockBinding(programID, block, 0);
난 그냥 당신이 내게 준 다음 팁과 UBO 코드를 재 작성하고 지금 일하고있어. 감사! – Maineri