|
@@ -929,6 +929,11 @@ typedef struct rlglData {
|
|
|
|
|
|
int framebufferWidth; // Default framebuffer width
|
|
|
int framebufferHeight; // Default framebuffer height
|
|
|
+
|
|
|
+ int viewportX; // Current opengl viewport offset x
|
|
|
+ int viewportY; // Current opengl viewport offset y
|
|
|
+ int viewportWidth; // Current opengl viewport width
|
|
|
+ int viewportHeight; // Current opengl viewport height
|
|
|
|
|
|
} State; // Renderer state
|
|
|
struct {
|
|
@@ -1232,6 +1237,11 @@ void rlOrtho(double left, double right, double bottom, double top, double znear,
|
|
|
// Set the viewport area (transformation from normalized device coordinates to window coordinates)
|
|
|
void rlViewport(int x, int y, int width, int height)
|
|
|
{
|
|
|
+ RLGL.State.viewportX = x;
|
|
|
+ RLGL.State.viewportY = y;
|
|
|
+ RLGL.State.viewportWidth = width;
|
|
|
+ RLGL.State.viewportHeight = height;
|
|
|
+
|
|
|
glViewport(x, y, width, height);
|
|
|
}
|
|
|
|
|
@@ -2494,6 +2504,11 @@ void rlDrawRenderBatch(rlRenderBatch *batch)
|
|
|
Matrix matProjection = RLGL.State.projection;
|
|
|
Matrix matModelView = RLGL.State.modelview;
|
|
|
|
|
|
+ int originalViewportX = RLGL.State.viewportX;
|
|
|
+ int originalViewportY = RLGL.State.viewportY;
|
|
|
+ int originalViewportWidth = RLGL.State.viewportWidth;
|
|
|
+ int originalViewportHeight = RLGL.State.viewportHeight;
|
|
|
+
|
|
|
int eyeCount = 1;
|
|
|
if (RLGL.State.stereoRender) eyeCount = 2;
|
|
|
|
|
@@ -2502,7 +2517,7 @@ void rlDrawRenderBatch(rlRenderBatch *batch)
|
|
|
if (eyeCount == 2)
|
|
|
{
|
|
|
// Setup current eye viewport (half screen width)
|
|
|
- rlViewport(eye*RLGL.State.framebufferWidth/2, 0, RLGL.State.framebufferWidth/2, RLGL.State.framebufferHeight);
|
|
|
+ rlViewport(originalViewportX + eye * originalViewportWidth / 2, originalViewportY, originalViewportWidth / 2, originalViewportHeight);
|
|
|
|
|
|
// Set current eye view offset to modelview matrix
|
|
|
rlSetMatrixModelview(rlMatrixMultiply(matModelView, RLGL.State.viewOffsetStereo[eye]));
|
|
@@ -2601,6 +2616,8 @@ void rlDrawRenderBatch(rlRenderBatch *batch)
|
|
|
|
|
|
glUseProgram(0); // Unbind shader program
|
|
|
}
|
|
|
+
|
|
|
+ if (eyeCount == 2) rlViewport(originalViewportX, originalViewportY, originalViewportWidth, originalViewportHeight);
|
|
|
//------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
// Reset batch buffers
|