summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorJeffery Myers <[email protected]>2024-01-29 12:10:23 -0800
committerGitHub <[email protected]>2024-01-29 21:10:23 +0100
commitbebf9547bd244727fa06a2ce1db2faf474ba23ad (patch)
tree8c2d88b708d2fb9bcd01cd40b59ef68383a46d6d /src
parent812645b077dbd5579ee5e03d89a6a07f431bf3c6 (diff)
downloadraylib-bebf9547bd244727fa06a2ce1db2faf474ba23ad.tar.gz
raylib-bebf9547bd244727fa06a2ce1db2faf474ba23ad.zip
[CORE,RLGL] Fix scale issues when ending a mode (#3746)
* Only restore GL scale back to screen scale if we are returning to a screen, not a render texture. * blankspace * reset back to default screen scale when ending a render texture since we are back on the default fbo
Diffstat (limited to 'src')
-rw-r--r--src/rcore.c15
-rw-r--r--src/rlgl.h12
2 files changed, 22 insertions, 5 deletions
diff --git a/src/rcore.c b/src/rcore.c
index bb06e9be..b057fc05 100644
--- a/src/rcore.c
+++ b/src/rcore.c
@@ -952,9 +952,6 @@ void BeginMode2D(Camera2D camera)
// Apply 2d camera transformation to modelview
rlMultMatrixf(MatrixToFloat(GetCameraMatrix2D(camera)));
-
- // Apply screen scaling if required
- rlMultMatrixf(MatrixToFloat(CORE.Window.screenScale));
}
// Ends 2D mode with custom camera
@@ -963,7 +960,9 @@ void EndMode2D(void)
rlDrawRenderBatchActive(); // Update and draw internal render batch
rlLoadIdentity(); // Reset current matrix (modelview)
- rlMultMatrixf(MatrixToFloat(CORE.Window.screenScale)); // Apply screen scaling if required
+
+ if (rlGetActiveFramebuffer() == 0)
+ rlMultMatrixf(MatrixToFloat(CORE.Window.screenScale)); // Apply screen scaling if required
}
// Initializes 3D mode with custom camera (3D)
@@ -1016,7 +1015,8 @@ void EndMode3D(void)
rlMatrixMode(RL_MODELVIEW); // Switch back to modelview matrix
rlLoadIdentity(); // Reset current matrix (modelview)
- rlMultMatrixf(MatrixToFloat(CORE.Window.screenScale)); // Apply screen scaling if required
+ if (rlGetActiveFramebuffer() == 0)
+ rlMultMatrixf(MatrixToFloat(CORE.Window.screenScale)); // Apply screen scaling if required
rlDisableDepthTest(); // Disable DEPTH_TEST for 2D
}
@@ -1062,6 +1062,11 @@ void EndTextureMode(void)
// Set viewport to default framebuffer size
SetupViewport(CORE.Window.render.width, CORE.Window.render.height);
+ // go back to the modelview state from BeginDrawing since we are back to the default FBO
+ rlMatrixMode(RL_MODELVIEW); // Switch back to modelview matrix
+ rlLoadIdentity(); // Reset current matrix (modelview)
+ rlMultMatrixf(MatrixToFloat(CORE.Window.screenScale)); // Apply screen scaling if required
+
// Reset current fbo to screen size
CORE.Window.currentFbo.width = CORE.Window.render.width;
CORE.Window.currentFbo.height = CORE.Window.render.height;
diff --git a/src/rlgl.h b/src/rlgl.h
index 6ad6394d..6dd3eb2c 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -621,6 +621,7 @@ RLAPI void rlDisableShader(void); // Disable shader progra
// Framebuffer state
RLAPI void rlEnableFramebuffer(unsigned int id); // Enable render texture (fbo)
RLAPI void rlDisableFramebuffer(void); // Disable render texture (fbo), return to default framebuffer
+RLAPI unsigned int rlGetActiveFramebuffer(void); // Returns the active render texture (fbo), 0 for default framebuffer
RLAPI void rlActiveDrawBuffers(int count); // Activate multiple draw color buffers
RLAPI void rlBlitFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int dstX, int dstY, int dstWidth, int dstHeight, int bufferMask); // Blit active framebuffer to main framebuffer
RLAPI void rlBindFramebuffer(unsigned int target, unsigned int framebuffer); // Bind framebuffer (FBO)
@@ -1725,6 +1726,17 @@ void rlEnableFramebuffer(unsigned int id)
#endif
}
+// return the active render texture (fbo)
+unsigned int rlGetActiveFramebuffer(void)
+{
+#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES3)) && defined(RLGL_RENDER_TEXTURES_HINT)
+ GLint fboId = 0;
+ glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &fboId);
+ return fboId;
+#endif
+ return 0;
+}
+
// Disable rendering to texture
void rlDisableFramebuffer(void)
{