Todas essas são boas respostas e, no entanto, existe outra maneira: (nem sempre existe?)
Devido à crescente popularidade da realidade virtual, o pessoal do OculusVR desenvolveu um trio de extensões "Multiview" chamadas:
- OVR_multiview ,
- OVR_multiview2 , &
- OVR_multiview_multisampled_render_to_texture
Essas extensões permitem que várias visualizações da mesma cena sejam renderizadas em uma única chamada de desenho, eliminando a redundância de renderizar a mesma cena no mesmo estado do ponto de vista de cada olho. Embora criado para o propósito de VR, o desenvolvedor não está necessariamente limitado a apenas duas visualizações. Em vez disso, essa extensão permite quantas visualizações o MAX_VIEWS_OVR especifica.
Antes de usar essas extensões, o desenvolvedor deve verificar seu suporte no driver gráfico do usuário adicionando o seguinte código:
const GLubyte* extensions = GL_CHECK( glGetString( GL_EXTENSIONS ) );
char * found_extension = strstr( (const char*)extensions, "GL_OVR_multiview" );
if (NULL == found_extension)
{
exit( EXIT_FAILURE );
}
A partir daí, é necessário configurar o buffer de estrutura para utilizar este recurso:
glFramebufferTextureMultisampledMultiviewOVR = PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEDMULTIVIEWOVR(eglGetProcAddress("glFramebufferTextureMultisampleMultiviewOVR"));
glFramebufferTextureMultisampledMultiviewOVR (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, textureID, 0, 0, 2);
e da mesma forma no sombreador:
#version 300 es
#extension GL_OVR_multiview : enable
layout(num_views = 2) in;
in vec3 vertexPosition;
uniform mat4 MVP[2];
void main(){
gl_Position = MVP[gl_ViewID_OVR] * vec4(vertexPosition, 1.0f);
}
Em um aplicativo vinculado à CPU, essa extensão pode reduzir drasticamente o tempo de renderização, especialmente em cenas mais complexas :