Поддерживает ли iOS, iPhone, iPad (OpenGL ES) PBuffer? - PullRequest
1 голос
/ 03 сентября 2011

Поддерживает ли реализация iPhone OpenGL ES PBuffer?

Я посмотрел в документации и не могу найти что-то вроде "eglCreatePbufferSurface"

Если это так, может кто-нибудь опубликовать пример кода дляего использование?

Спасибо

1 Ответ

2 голосов
/ 03 сентября 2011

Пиксельные буферы являются специфичным для платформы расширением OpenGL. В ES такого расширения нет, потому что объекты кадрового буфера являются частью основного API. Буферный объект кадра может использоваться для полного рендеринга вне экрана, обычно в текстуру, которая затем используется для некоторой другой задачи в конвейере рендеринга. Вот как в OpenGL ES достигаются такие эффекты, как затенение в буфер глубины и отложенный рендеринг.

Например, чтобы сгенерировать объект кадрового буфера с буферами цвета и глубины, связанными с текстурами, которые вы уже сгенерировали в другом месте, вы можете сделать:

glGenFramebuffers(1, &framebufferID);
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colourTextureID, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTextureID, 0);

if((status = glCheckFramebufferStatus(GL_FRAMEBUFFER)) != GL_FRAMEBUFFER_COMPLETE)
{
    // there was some sort of problem
}

Вы бы использовали glBindFramebuffer, чтобы связать этот буфер кадров позже. Затем вы должны перепривязать буфер кадров, который связан с дисплеем, если вы хотите визуализировать то, что действительно видно. Вы будете использовать EAGLContext -renderbufferStorage:fromDrawable: где-нибудь для создания объекта буфера кадра, который использует CAEAGLLayer в качестве хранилища для буфера цвета.

Каждая отдельная вещь, которая связана с буфером кадров, например, хранилище для цветового буфера или хранилище для буфера глубины, называется буфером рендеринга. Вы можете попросить водителя построить его в любой области, которая ему нравится, без привязки к текстуре через glGenRenderbuffers и glRenderbufferStorage. Так, например, вы можете получить только цветовой буфер в текстуре и оставить графический процессор, если хотите, для хранения буфера глубины.

...