2017-05-21 12 views
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); 

답변

0

많은 설탕 코드를 구현하기 전에 제대로 작동하는지 확인한 다음 단계별로 util 클래스로 이동하십시오.

그래서, UBO 클래스 제거 및 초기화에 :

  • glGenBuffers, glBufferData, glBindBufferBase 다음 쉐이더를

  • 을 설정 (나중에 -range, 그것은 몇 가지 물건을 추가 오프셋 포함) 0보다 크고 glGetUniformBlockIndex! = -1 인 다음에 glUniformBlockBinding

  • 도 제거하십시오.

    basicEntityShader.setUBO(ubo); 
    basicEntityShader.bindUniformBlocks(); 
    
  • init에 floatbuffer를 할당합니다. 매번 render 루프에서 수행하지 마십시오. 렌더링에서 지금

:

  • 당신의 버퍼를 소모 방지하고 위치 설정 처리/오류 노출을 줄이기 위해/되감기를 재설정하거나 플립 더 잘. 그런 다음 for을 수행하고 버퍼 내에 viewMatrix을 저장하십시오.

  • 퍼 바인드

    , glBufferSubData 및 바인딩을 해제

+0

난 그냥 당신이 내게 준 다음 팁과 UBO 코드를 재 작성하고 지금 일하고있어. 감사! – Maineri