Đây đều là những câu trả lời hay, nhưng vẫn có một cách khác: (Không phải lúc nào cũng vậy sao?)
Do sự phổ biến ngày càng tăng của thực tế ảo, những người ở OculusVR đã phát triển một bộ ba phần mở rộng "Multiview" được gọi là:
- OVR_multiview ,
- OVR_multiview2 , &
- OVR_multiview_multisampling_Vnder_to lòng
Các tiện ích mở rộng này cho phép nhiều chế độ xem của cùng một cảnh được hiển thị trong một lệnh gọi rút thăm duy nhất, loại bỏ sự dư thừa của việc hiển thị cùng một cảnh trong cùng một trạng thái khỏi quan điểm của mỗi mắt. Mặc dù được tạo ra cho mục đích VR, nhà phát triển không nhất thiết chỉ giới hạn ở hai chế độ xem. Thay vào đó, tiện ích mở rộng này cho phép có nhiều lượt xem như MAX_VIEWS_OVR chỉ định.
Trước khi sử dụng các tiện ích mở rộng này, nhà phát triển nên kiểm tra sự hỗ trợ của chúng trong trình điều khiển đồ họa của người dùng bằng cách thêm mã sau đây:
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 );
}
Từ đó, vấn đề thiết lập bộ đệm khung của bạn để sử dụng tính năng này:
glFramebufferTextureMultisampledMultiviewOVR = PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEDMULTIVIEWOVR(eglGetProcAddress("glFramebufferTextureMultisampleMultiviewOVR"));
glFramebufferTextureMultisampledMultiviewOVR (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, textureID, 0, 0, 2);
và tương tự như vậy trong 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);
}
Trong một ứng dụng giới hạn CPU, tiện ích mở rộng này có thể giảm đáng kể thời gian kết xuất, đặc biệt là với các cảnh phức tạp hơn :