Це всі хороші відповіді, і все ж є інший спосіб: (Чи не завжди це є?)
Завдяки зростаючій популярності віртуальної реальності, люди в OculusVR розробили трійку розширень "Multiview" під назвою:
- OVR_multiview ,
- OVR_multiview2 , &
- OVR_multiview_multisampled_render_to_texture
Ці розширення дозволяють відображати кілька переглядів однієї сцени за один виклик малювання, виключаючи надмірність відображення тієї ж сцени в одному стані з точки зору кожного ока. Хоча створений для цілей VR, розробник не обов'язково обмежується лише двома переглядами. Швидше, це розширення дозволяє отримати стільки переглядів, скільки задає MAX_VIEWS_OVR .
Перш ніж використовувати ці розширення, розробник повинен перевірити їх підтримку у графічному драйвері користувача, додавши наступний код:
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 );
}
Звідси слід налаштувати ваш фреймбуфер для використання цієї функції:
glFramebufferTextureMultisampledMultiviewOVR = PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEDMULTIVIEWOVR(eglGetProcAddress("glFramebufferTextureMultisampleMultiviewOVR"));
glFramebufferTextureMultisampledMultiviewOVR (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, textureID, 0, 0, 2);
і так само в шейдері:
#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);
}
У додатку, пов'язаному з процесором, це розширення може значно скоротити час візуалізації, особливо при складніших сценах :