Создание OpenGL ES 2.0 FBO идет не так, как надо с неизвестной ошибкой

Я боролся с этим некоторое время теперь и этим кодом катастрофические отказы с, мне, неизвестным причинам. Я создаю FBO, связывая структуру и затем самый первый glDrawArrays () катастрофические отказы с "EXC_BAD_ACCESS" на моем iPhone Simulator.

Вот код, который я использую, чтобы создать 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...

Что я делаю неправильно?

7
задан Brad Larson 16 October 2010 в 22:04
поделиться

2 ответа

        glBindTexture(GL_TEXTURE1, lastFrameTexture);

Это запрещено, я пытался привязать текстуру к первому блоку (GL_TEXTURE1), но это должно быть сделано glActiveTexture (), а не glBindTexture (), которая хочет знать тип текстуры (GL_TEXTURE_2D, GL_TEXTURE_3D и т. д.), а не текстурный блок. Чтобы разместить текстуру в блоке текстуры 1, у меня теперь есть следующий код, который я считаю правильным:

//Bind 2D Texture lastFrameTexture to texture unit 1
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, lastFrameTexture);
3
ответ дан 7 December 2019 в 14:30
поделиться

Попробуйте использовать glGetError после каждого вызова GL. Особенно glTexImage2D .

1
ответ дан 7 December 2019 в 14:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: