0
我試圖爲我的遊戲實現統一的緩衝區對象,但由於某種原因,我沒有得到它的工作。我不認爲它目前向着色器發送任何東西。在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