2016-12-20 7 views
0

Я использую OpenGL FrameBuffer Objects (FBO) для рендеринга в текстуры с использованием GL_ARB_FRAMEBUFFER_OBJECT или GL_EXT_FRAMEBUFFER_OBJECT расширений.Ограничение по размеру OpenGL Framebuffer равно 0

Однако существует значительное число видеокарт (в основном Intel, с OGL 2.0 и даже 3.0) с поддержкой GL_ARB_FRAMEBUFFER_OBJECT, но имеющие GL_MAX_FRAMEBUFFER_WIDTH = 0 и GL_MAX_FRAMEBUFFER_HEIGHT = 0, так что это терпит неудачу, когда я пытаюсь прикрепить текстуру FBO.

Действительно ли это означает, что FBO нельзя использовать для визуализации текстур на этих видеокартах? Есть ли обходной путь? Рендеринг текстуры - очень важная техника рендеринга, и она хорошо работает с Direct3D везде, поэтому должен быть способ использовать ее, используя OpenGL.

+1

Нет, это не так. GL_MAX_FRAMEBUFFER_WIDTH должен быть не менее 16384. Это может быть ошибка драйвера, но я считаю, что это скорее ошибка в коде, который вы не показывали. – ybungalobill

ответ

4

Однако существует значительное число видеокарт (в основном Intel, с OGL 2,0 и даже 3,0) с поддержкой GL_ARB_FRAMEBUFFER_OBJECT, но имеющие GL_MAX_FRAMEBUFFER_WIDTH=0 и GL_MAX_FRAMEBUFFER_HEIGHT=0, поэтому он терпит неудачу, когда я пытаюсь прикрепить текстуру FBO.

Ни GL_ARB_framebuffer_object, ни GL_EXT_framebuffer_object сделать определяют GL_MAX_FRAMEBUFFER_WIDTH или GL_MAX_FRAMEBUFFER_HEIGHT.

Эти перечисления фактически были добавлены в GL_ARB_framebuffer_no_attachments (ядро с OpenGL 4.3), поэтому неудивительно, что некоторые графические процессоры Intel не поддерживают их. (Если вы будете проверять наличие ошибок, вы заметили бы GL_INVALID_ENUM от вашего glGet s - поэтому он не возвращает ноль, это ошибка при получении, оставляя содержимое вашей переменной так, как было раньше). Однако главное, что эти ограничения применимы только для фрейм-буфера без привязки, поэтому вы запрашиваете неправильное свойство здесь.

Для фреймбуфера нет явного ограничения по размеру, но для каждого типа привязки существуют ограничения по размеру. Renderbuffers могут быть не более GL_MAX_RENDERBUFFER_SIZE в любом измерении, а 2D-тексты не более GL_TEXTURE_SIZE. Если вы хотите отобразить цель за один проход, вам также может понадобиться забота о GL_MAX_VIEWPORT_DIMS.