7

私はしばらくこれに苦労してきましたが、このコードは原因不明でクラッシュします。FBO を作成してテクスチャをバインドすると、iPhone シミュレーターで最初の glDrawArrays() が「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プログラミングガイドからコードをコピーしました...

私は何を間違っていますか?

4

3 に答える 3

3
        glBindTexture(GL_TEXTURE1, lastFrameTexture);

これは許可されていません。テクスチャをユニット 1 (GL_TEXTURE1) にバインドしようとしましたが、テクスチャのタイプ (GL_TEXTURE_2D、GL_TEXTURE_3D など) を知りたい glBindTexture() ではなく、glActiveTexture() で行う必要があります。 ) テクスチャ ユニットではありません。テクスチャ ユニット 1 にテクスチャを配置するには、次のコードが正しいと思います。

//Bind 2D Texture lastFrameTexture to texture unit 1
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, lastFrameTexture);
于 2010-04-05T10:54:14.357 に答える
1

glGetError各GL呼び出しの後に使用してみてください。特にglTexImage2D

于 2010-04-03T16:37:20.717 に答える
0

XCode を使用する場合は、「ブレークポイント ナビゲーター」で OpenGL エラーのブレークポイントを追加します ([+] -> [OpenGL ES エラー ブレークポイントの追加])。次に、すべての OpenGL の問題が、問題が発生する場所にオンラインで表示されます。

于 2014-04-30T05:01:19.127 に答える