첫 섀도우 맵을 실행하려고 시도하고 있습니다 (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'으로 판명됩니다. 무엇 때문에 그 원인이 될 수 있습니까?
'glGetError()'의 결과를 로깅하는 것이 아니라'glCheckFramebufferStatus'의 반환 값을 출력해야합니다. framebuffer 객체의 상태에 따라 다양한 값을 반환합니다. – bdash
좋아, 내가 '36060'을 주겠다고했지만 그 코드가 무엇인지에 대한 정보를 찾을 수 없었다. – Justin
그건'GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER'입니다. – bdash