未知错误导致OpenGL ES 2.0 FBO创建出错

我一直在为此苦苦挣扎了一段时间,而这段代码对我来说是崩溃的,原因不明。 我创建了一个FBO,绑定了一个纹理,然后第一个glDrawArrays()在我的iPhone模拟器上使用“EXC_BAD_ACCESS”崩溃。

这里是我用来创建FBO的代码(并绑定纹理和...)

glGenFramebuffers(1, &lastFrameBuffer);
glGenRenderbuffers(1, &lastFrameDepthBuffer);
glGenTextures(1, &lastFrameTexture);

glBindTexture(GL_TEXTURE1, lastFrameTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 768, 1029, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, NULL);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

//Bind/alloc depthbuf
glBindRenderbuffer(GL_RENDERBUFFER, lastFrameDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 768, 1029);

glBindFramebuffer(GL_FRAMEBUFFER, lastFrameBuffer);

//binding the texture to the FBO :D
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, lastFrameTexture, 0);

// attach the renderbuffer to depth attachment point
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, lastFrameDepthBuffer);

[self checkFramebufferStatus];

正如你所看到的,它参与了一个对象,checkFrameBufferStatus看起来像这样:

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
switch(status)
{
  case GL_FRAMEBUFFER_COMPLETE:
    JNLogString(@"Framebuffer complete.");
    return TRUE;

  case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
    JNLogString(@"[ERROR] Framebuffer incomplete: Attachment is NOT complete.");
    return false;

  case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
    JNLogString(@"[ERROR] Framebuffer incomplete: No image is attached to FBO.");
    return false;

  case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
    JNLogString(@"[ERROR] Framebuffer incomplete: Attached images have different dimensions.");
    return false;

  case GL_FRAMEBUFFER_UNSUPPORTED:
    JNLogString(@"[ERROR] Unsupported by FBO implementation.");
    return false;

   default:
    JNLogString(@"[ERROR] Unknown error.");
    return false;

JNLogString只是一个NSLog,在这种情况下,它给了我:

2010-04-03 02:46:54.854 Bubbleeh[6634:207] ES2Renderer.m:372 [ERROR] Unknown error.

当我在那里称呼它。

所以,它崩溃了,诊断告诉我有一个未知的错误,我有点卡住了。 我基本上从OpenGL ES 2.0编程指南中复制了代码...

我究竟做错了什么?


        glBindTexture(GL_TEXTURE1, lastFrameTexture);

这是不允许的,我试图将纹理绑定到单元一(GL_TEXTURE1),但这应该由glActiveTexture()完成,而不是由glBindTexture()完成,glBindTexture()想要知道纹理的类型(GL_TEXTURE_2D,GL_TEXTURE_3D等)。 )而不是纹理单元。 要在纹理单元1中放置纹理,我现在有以下代码,我认为这是正确的:

//Bind 2D Texture lastFrameTexture to texture unit 1
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, lastFrameTexture);

在每次GL调用后尝试使用glGetError 。 特别是glTexImage2D


如果使用XCode,请在“断点导航器”([+] - > [添加OpenGL ES错误断点])中为OpenGL错误添加断点。 然后所有的OpenGL问题将在线显示,问题出现在哪里。

链接地址: http://www.djcxy.com/p/45295.html

上一篇: OpenGL ES 2.0 FBO creation goes wrong with unknown error

下一篇: How to turn off particular monitor with .NET?