Queste sono tutte buone risposte, eppure c'è un altro modo: (Non c'è sempre?)
A causa della crescente popolarità della realtà virtuale, la gente di OculusVR ha sviluppato un trio di estensioni "Multiview" chiamate:
- OVR_multiview ,
- OVR_multiview2 , &
- OVR_multiview_multisampled_render_to_texture
Queste estensioni consentono di visualizzare più viste della stessa scena in una singola chiamata di disegno, eliminando la ridondanza del rendering della stessa scena nello stesso stato dal punto di vista di ciascun occhio. Sebbene creato ai fini della realtà virtuale, lo sviluppatore non è necessariamente limitato a due sole visualizzazioni. Piuttosto, questa estensione consente tutte le visualizzazioni specificate da MAX_VIEWS_OVR .
Prima di utilizzare queste estensioni, lo sviluppatore dovrebbe verificare il supporto nel driver grafico dell'utente aggiungendo il seguente codice:
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 );
}
Da lì, si tratta di configurare il tuo framebuffer per utilizzare questa funzione:
glFramebufferTextureMultisampledMultiviewOVR = PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEDMULTIVIEWOVR(eglGetProcAddress("glFramebufferTextureMultisampleMultiviewOVR"));
glFramebufferTextureMultisampledMultiviewOVR (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, textureID, 0, 0, 2);
e allo stesso modo nello shader:
#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);
}
In un'applicazione associata alla CPU, questa estensione può ridurre drasticamente i tempi di rendering, specialmente con scene più complesse :