Ini semua adalah jawaban yang baik, namun ada cara lain: (Bukankah selalu ada?)
Karena semakin populernya realitas virtual, orang-orang di OculusVR telah mengembangkan trio ekstensi "Multiview" yang disebut:
- OVR_multiview ,
- OVR_multiview2 , &
- OVR_multiview_multisampled_render_to_texture
Ekstensi ini memungkinkan beberapa tampilan adegan yang sama untuk ditampilkan dalam satu panggilan undian, menghilangkan redundansi rendering adegan yang sama dalam keadaan yang sama dari sudut pandang masing-masing mata. Meskipun dibuat untuk tujuan VR, pengembang tidak harus terbatas hanya pada dua pandangan. Sebaliknya, ekstensi ini memungkinkan untuk dilihat sebanyak yang ditentukan oleh MAX_VIEWS_OVR .
Sebelum menggunakan ekstensi ini, pengembang harus memeriksa dukungannya pada driver grafis pengguna dengan menambahkan kode berikut:
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 );
}
Dari sana, Anda perlu mengatur framebuffer Anda untuk menggunakan fitur ini:
glFramebufferTextureMultisampledMultiviewOVR = PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEDMULTIVIEWOVR(eglGetProcAddress("glFramebufferTextureMultisampleMultiviewOVR"));
glFramebufferTextureMultisampledMultiviewOVR (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, textureID, 0, 0, 2);
dan juga di 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);
}
Dalam aplikasi yang terikat CPU, ekstensi ini dapat secara dramatis mengurangi waktu render, terutama dengan adegan yang lebih kompleks :