mirror of
https://github.com/raysan5/raylib.git
synced 2025-10-08 19:06:27 +00:00
[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
This commit is contained in:
15
src/rcore.c
15
src/rcore.c
@@ -952,9 +952,6 @@ void BeginMode2D(Camera2D camera)
|
|||||||
|
|
||||||
// Apply 2d camera transformation to modelview
|
// Apply 2d camera transformation to modelview
|
||||||
rlMultMatrixf(MatrixToFloat(GetCameraMatrix2D(camera)));
|
rlMultMatrixf(MatrixToFloat(GetCameraMatrix2D(camera)));
|
||||||
|
|
||||||
// Apply screen scaling if required
|
|
||||||
rlMultMatrixf(MatrixToFloat(CORE.Window.screenScale));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ends 2D mode with custom camera
|
// Ends 2D mode with custom camera
|
||||||
@@ -963,7 +960,9 @@ void EndMode2D(void)
|
|||||||
rlDrawRenderBatchActive(); // Update and draw internal render batch
|
rlDrawRenderBatchActive(); // Update and draw internal render batch
|
||||||
|
|
||||||
rlLoadIdentity(); // Reset current matrix (modelview)
|
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)
|
// Initializes 3D mode with custom camera (3D)
|
||||||
@@ -1016,7 +1015,8 @@ void EndMode3D(void)
|
|||||||
rlMatrixMode(RL_MODELVIEW); // Switch back to modelview matrix
|
rlMatrixMode(RL_MODELVIEW); // Switch back to modelview matrix
|
||||||
rlLoadIdentity(); // Reset current matrix (modelview)
|
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
|
rlDisableDepthTest(); // Disable DEPTH_TEST for 2D
|
||||||
}
|
}
|
||||||
@@ -1062,6 +1062,11 @@ void EndTextureMode(void)
|
|||||||
// Set viewport to default framebuffer size
|
// Set viewport to default framebuffer size
|
||||||
SetupViewport(CORE.Window.render.width, CORE.Window.render.height);
|
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
|
// Reset current fbo to screen size
|
||||||
CORE.Window.currentFbo.width = CORE.Window.render.width;
|
CORE.Window.currentFbo.width = CORE.Window.render.width;
|
||||||
CORE.Window.currentFbo.height = CORE.Window.render.height;
|
CORE.Window.currentFbo.height = CORE.Window.render.height;
|
||||||
|
12
src/rlgl.h
12
src/rlgl.h
@@ -621,6 +621,7 @@ RLAPI void rlDisableShader(void); // Disable shader progra
|
|||||||
// Framebuffer state
|
// Framebuffer state
|
||||||
RLAPI void rlEnableFramebuffer(unsigned int id); // Enable render texture (fbo)
|
RLAPI void rlEnableFramebuffer(unsigned int id); // Enable render texture (fbo)
|
||||||
RLAPI void rlDisableFramebuffer(void); // Disable render texture (fbo), return to default framebuffer
|
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 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 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)
|
RLAPI void rlBindFramebuffer(unsigned int target, unsigned int framebuffer); // Bind framebuffer (FBO)
|
||||||
@@ -1725,6 +1726,17 @@ void rlEnableFramebuffer(unsigned int id)
|
|||||||
#endif
|
#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
|
// Disable rendering to texture
|
||||||
void rlDisableFramebuffer(void)
|
void rlDisableFramebuffer(void)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user