2013-01-23 49 views
0

我試圖讓我的第一陰影貼圖和運行(從here),但我遇到了一個很奇怪的問題。這是導致錯誤的代碼:OpenGL的失敗紋理綁定

@interface HSOpenGLView() { 
    GLuint shadowFramebuffer; 
    GLuint shadowTexture; 
} 

@end 

@implementation HSOpenGLView 

- (void) drawRect:(NSRect)dirtyRect { 

} 

#pragma mark - Init 

- (void) prepareOpenGL { 
    [super prepareOpenGL]; 

    glEnable(GL_TEXTURE_2D); 

    glGenFramebuffers(1, &shadowFramebuffer); 
    glBindFramebuffer(GL_FRAMEBUFFER, shadowFramebuffer); 

    // Depth texture. Slower than a depth buffer, but you can sample it later in your shader 
    glGenTextures(1, &shadowTexture); 
    glBindTexture(GL_TEXTURE_2D, shadowTexture); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, 1024, 1024, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

    //glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, shadowTexture, 0); 
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, shadowTexture, 0); 
    //glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, shadowTexture); 

    glDrawBuffer(GL_NONE); // No color buffer is drawn to. 

    // Always check that our framebuffer is ok 
    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { 
     NSLog(@"Failed to create the shadow framebuffer! %u", glGetError()); 
    } 
} 

這個類是「NSOpenGLView」的子類。當它輸出錯誤號碼時,它變成'0'。什麼可能導致它?

+0

而不是記錄'glGetError()'的結果,你應該輸出'glCheckFramebufferStatus'的返回值。它根據幀緩衝區對象的狀態返回各種不同的值。 – bdash

+0

好吧,當我試圖給我'36060',但我無法找到任何有關該代碼的信息。 – Justin

+1

這是'GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER'。 – bdash

回答

2

您的來電glDrawBuffer(GL_NONE)後加入glReadBuffer(GL_NONE)通話。您需要指出您的FBO也沒有用於讀取操作的顏色緩衝區來源。

+0

嗯,我沒有得到任何錯誤。我將假設這意味着它運作正常。如果我發現它不是,我會報告回來。謝謝。 – Justin