2013-06-10 5 views
0

다음은 새로운 FBO를 생성하기위한 코드입니다. 지금 당장은 렌더링 버퍼를 사용하고 있습니다.렌더 버퍼에서 깊이 텍스처로 바꾸기

/** 
* Creates a new FBO. 
* @param width The width of the FBO to create. 
* @param height The height of the FBO to create. 
* @return an int[] array containing the buffer IDs in the 
* following order: {frameBufferID, colorBufferID (texture), depthBufferID}. 
*/ 
public static int[] newFBO(int width, int height) { 
    int[] out = new int[3]; 
    out[0] = glGenFramebuffersEXT(); 
    out[1] = glGenTextures(); 
    out[2] = glGenRenderbuffersEXT(); 

    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, out[0]); 

    glBindTexture(GL_TEXTURE_2D, out[1]); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, org.lwjgl.opengl.GL12.GL_TEXTURE_MAX_LEVEL,20); 
    glTexParameteri(GL_TEXTURE_2D, GL14.GL_GENERATE_MIPMAP,GL_TRUE); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0,GL_RGBA, GL_INT, (java.nio.ByteBuffer) null); 

    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D, out[1], 0); 

    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, out[2]); 
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL14.GL_DEPTH_COMPONENT24, width, height); 
    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_ATTACHMENT_EXT,GL_RENDERBUFFER_EXT, out[2]); 

    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 

    return out; 
} 

render/depthbuffer를 깊이 텍스처로 전환하고 싶습니다. 이 일을하기 위해 나는 무엇을 바꿀 것인가? (대신 렌더링 버퍼) 그것의 저장소를 생성

out[2] = glGenTextures(); 

다음 :

out[2] = glGenRenderbuffersEXT(); 

가된다 :

우선
+0

'GL_GENERATE_MIPMAP' 그 사용을 중지하십시오. 또한, 텍스처에 깊이 * 형식 *을 적용하는 데 도움이 될 것이라고 생각하는 것은 무엇입니까? –

+0

원하는 깊이 형식으로 텍스처를 만들고'glFramebufferTexture2D'와 함께 첨부 파일'GL_DEPTH_ATTACHMENT'에 첨부 하시겠습니까? – Grimmy

답변

1

이 대신 렌더링 버퍼의 텍스쳐를 생성 (I는 LWJGL 사용하고) :

glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, out[2]); 
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL14.GL_DEPTH_COMPONENT24, 
         width, height); 

가된다 :

,
glBindTexture(GL_TEXTURE_2D, out[2]); 
glTexImage2D(GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT24, width, height, 
      0, GL_DEPTH_COMPONENT, GL_INT, (java.nio.ByteBuffer) null); 

마지막으로, 대신 renderbuffer 당신의 프레임 버퍼에이 텍스처를 결합 :

glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, 
          GL_RENDERBUFFER_EXT, out[2]); 

가된다 :

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, 
          GL_TEXTURE_2D, out[2], 0); 
+0

그들을 대체하면 검은 화면이 생깁니다 ... 그 방법에 문제가 있습니까? – Abaab

+0

검은 화면이 나타나면 깊이 텍스처를 표시하려고하지 않습니다. 이전과 똑같은 작업을하고 있습니다. – Abaab

+0

OpenGL에서 오류를보고합니까? 각 GL 호출 후에 glGetError를 호출해야합니다. 또한 모든 텍스처/렌더 버퍼를 첨부 한 후에 glCheckFramebufferStatus를 호출하십시오. – GuyRT

관련 문제