これらはすべて良い答えですが、別の方法もあります(常にあるわけではありませんか?)
バーチャルリアリティの人気が高まっているため、OculusVRの人々は「マルチビュー」拡張機能のトリオを開発しました。
- OVR_multiview、
- OVR_multiview2、&
- OVR_multiview_multisampled_render_to_texture
これらの拡張により、同じシーンの複数のビューを1回の描画呼び出しでレンダリングできるため、それぞれの目から見た同じシーンを同じ状態でレンダリングする冗長性がなくなります。VRを目的として作成されていますが、開発者は必ずしも2つのビューに限定されるわけではありません。むしろ、この拡張は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);
}
CPUにバインドされたアプリケーションでは、この拡張機能により、特により複雑なシーンでレンダリング時間を大幅に削減できます。