Как сделать текстурированный полноэкранный квад в OpenGL 2.0 с помощью SDL? - PullRequest
0 голосов
/ 04 декабря 2011

Простое задание: нарисовать полноэкранный квад с текстурой, не более того, чтобы мы могли быть уверены, что текстура заполнит все пространство экрана. (Мы сделаем еще немного магии шейдеров позже).

Рисовать полноэкранный четырехугольник с помощью простого фрагментного шейдера было легко, но теперь мы застряли на целый день, пытаясь сделать его текстурированным. Мы прочитали множество учебных пособий, но ни один из них не помог нам. Теория о в основном использует 1.x, те, что касаются OpenGL 2.0, не касаются текстурирования или SDL. (

Код здесь . Все в colorLUT.c, а фрагментный шейдер в colorLUT.fs. В результате получается окно того же размера, что и изображение, и если вы прокомментируете последнюю строку в шейдере, вы получите хороший красный / зеленый градиент, поэтому с шейдером все в порядке.

1 Ответ

3 голосов
/ 04 декабря 2011
  1. Инициализация текстуры не изменилась по сравнению с OpenGL 1.4. Учебники будут работать нормально.
  2. Если фрагментный шейдер работает, но вы не видите текстуру (и получаете черный экран), загрузка текстуры прервана или текстура была установлена ​​неправильно. Отключите шейдер и попробуйте отобразить текстурированный многоугольник с фиксированной функциональностью.
  3. Возможно, вы захотите позвонить glPixelStorei(GL_UNPACK_ALIGNMENT, 1), прежде чем пытаться инициировать текстуру. Значение по умолчанию 4.
  4. Более простой способ выровнять текстуру к экрану - добавить вершинный шейдер и передать координаты текстуры - вместо того, чтобы пытаться вычислить их с помощью gl_FragCoord.
  5. Вы передаете размер поверхности в униформу "разрешение". Это ошибка Вместо этого вы должны передать размер области просмотра.
  6. Возможно, вы захотите сгенерировать мипмапы. Либо сгенерируйте их самостоятельно, либо используйте GL_GENERATE_MIPMAPS, поскольку он доступен в OpenGL 2 (но не рекомендуется в более поздних версиях)
  7. OpenGL.org имеет спецификации для OpenGL 2.0 и GLSL 1.5. Загрузите их и используйте в качестве справочной информации, если вы сомневаетесь.
  8. В NVIdia OpenGL SDK есть примеры, которые вы, возможно, захотите проверить - они охватывают шейдеры.
  9. А еще есть «Оранжевая книга OpenGL» (язык шейдеров OpenGL), специально посвященный шейдерам.
  10. В следующий раз включите код в вопрос.
...