0

最初のシャドウ マップを起動して実行しようとしています (ここから) が、非常に奇妙な問題に遭遇しました。これはエラーの原因となるコードです:

@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」であることがわかります。何が原因である可能性がありますか?

4

1 に答える 1

2

glReadBuffer(GL_NONE)への呼び出しの後にへの呼び出しを追加しますglDrawBuffer(GL_NONE)。FBO にも読み取り操作用のカラー バッファ ソースがないことを示す必要があります。

于 2013-01-24T07:22:34.957 に答える