Проблемы с изменением содержимого кадрового буфера - PullRequest
0 голосов
/ 26 апреля 2011

Я пытаюсь повернуть содержимое буфера кадра, поместив его в текстуру, а затем снова поместив в буфер. Я получаю белый повернутый прямоугольник. Я подозреваю, что пропускаю что-то очевидное. Вот код, который я использую:

  glReadBuffer(GL_AUX1);
  glEnable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D, textures[1]);
  glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, rect.width(),
        rect.height(), 0);
  glDrawBuffer(GL_AUX1);
  glPushMatrix();
  glRotatef(head - new_head, 0, 0, -1);
  glBegin(GL_POLYGON);
  glTexCoord2f(0, 0);
  glVertex2f(-1, -1);
  glTexCoord2f(0, 1);
  glVertex2f(-1, 1);
  glTexCoord2f(1, 1);
  glVertex2f(1, 1);
  glTexCoord2f(1, 0);
  glVertex2f(1, -1);
  glEnd();
  glPopMatrix();
  glDisable(GL_TEXTURE_2D);

Я решил проблему. Добавив эти строки, чтобы он заработал:

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

1 Ответ

1 голос
/ 26 апреля 2011

Вы не можете создать текстуру с помощью glCopyTexImage2D, вы только копируете данные в текстуру, но текстура на этом этапе не завершена, поэтому вы получаете черно-белую текстуру (признак незавершенного состояния).

Решение: создать текстуру с:

glGenTextures(....)
glBindTexture(...)
glTexParameter(...) //Set MIN/MAG filter
glTexImage2D(....., NULL)

glTexImage2D определяет изображение текстуры, так как вы хотите визуализировать эту текстуру (или скопировать в нее), вы передаете NULL для последних параметров, чтобы было создано хранилище текстурной поддержки, но его содержимое осталось неопределенным. Другое предложение - использовать объекты Framebuffer (FBO) для рисования непосредственно в текстуру (без копии)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...