2014-09-19 2 views
0

В opengl-es 2.0 может быть рендеринг fbo для текстуры, использовать цель текстуры, которая больше, чем экран? Если да, можно ли рисовать текстурированный квадрат, заполняя угол fbo-текстуры до угла? Если это невозможно, можно сделать это по-другому в opengl-es? У меня есть многослойная обработанная процедурами графика во время загрузки, которую я хотел бы объединить в отдельные текстуры, чтобы сэкономить на производительности во время рисования.Opengl-es Рисование к текстуре

ответ

2

Да, абсолютно. Пока текстура имеет цветно-визуализируемый формат (который в ES 2.0 содержит только RGBA4, RGB5_A1 и RGB565), он может использоваться как цель рендеринга. В зависимости от пределов вашего графического процессора это может быть значительно больше разрешения экрана.

Это означает, что вы в основном ограничены максимальным размером текстуры. Вы можете запросить это значение с помощью glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...).

Существует еще один предел, который вступает в игру. GL_MAX_VIEWPORT_DIMS определяет максимальный размер видового экрана, который вы можете установить. Вы не можете визуализировать поверхность, превышающую эти значения.

Положив эти два вместе, это даст максимальный размер текстуры вы можете сделать, чтобы:

GLint maxTexSize = 0; 
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); 

GLint maxViewportSize[2] = {0}; 
glGetIntegerv(GL_MAX_VIEWPORT_DIMS, maxViewportSize); 

GLint maxRenderWidth = maxTexSize; 
if (maxRenderWidth > maxViewportSize[0]) { 
    maxRenderWidth = maxViewportSize[0]; 
} 

GLint maxRenderHeight = maxTexSize; 
if (maxRenderHeight > maxViewportSize[1]) { 
    maxRenderHeight = maxViewportSize[1]; 
} 

Используя эти значения, вы можете создать текстуру размером maxRenderWidth x maxRenderHeight, и использовать его в качестве вложения FBO , Не забудьте установить область просмотра того же размера, что и перед началом рендеринга.

Я проверил ограничения на пару планшетов с графическими процессорами от двух разных крупных поставщиков. На обоих из них максимальный размер текстуры и максимальный размер видового экрана были одинаковыми (4096 на одном, 8192 на другом). Меня это не удивит, если это очень распространено, но это определенно не гарантируется спецификацией.

ES 2.0 позволяет максимальный размер текстуры быть размером 64. Но вы найдете, что предел будет намного больше на чем-либо наполовину недавнем. 2048 находится в нижней части того, что вы видите на любом разумно текущем графическом процессоре, и 4096/8192 является обычным явлением. Максимальные размеры видовых экранов гарантированно не меньше, чем на дисплее.

Смежные вопросы