Improved windows resizing system...

...despite not being enabled on GLFW3
This commit is contained in:
raysan5 2016-03-20 14:20:42 +01:00
parent 5e45c3c824
commit ebc2b9a286
2 changed files with 19 additions and 13 deletions

View File

@ -1488,11 +1488,11 @@ static void InitDisplay(int width, int height)
TraceLog(INFO, "Viewport offsets: %i, %i", renderOffsetX, renderOffsetY);
}
glfwSetWindowSizeCallback(window, WindowSizeCallback);
glfwSetWindowSizeCallback(window, WindowSizeCallback); // NOTE: Resizing not allowed by default!
glfwSetCursorEnterCallback(window, CursorEnterCallback);
glfwSetKeyCallback(window, KeyCallback);
glfwSetMouseButtonCallback(window, MouseButtonCallback);
glfwSetCursorPosCallback(window, MouseCursorPosCallback); // Track mouse position changes
glfwSetCursorPosCallback(window, MouseCursorPosCallback); // Track mouse position changes
glfwSetCharCallback(window, CharCallback);
glfwSetScrollCallback(window, ScrollCallback);
glfwSetWindowIconifyCallback(window, WindowIconifyCallback);
@ -1818,16 +1818,19 @@ static void CursorEnterCallback(GLFWwindow *window, int enter)
}
// GLFW3 WindowSize Callback, runs when window is resized
// NOTE: Window resizing not allowed by default
static void WindowSizeCallback(GLFWwindow *window, int width, int height)
{
// If window is resized, graphics device is re-initialized (but only ortho mode)
rlglInitGraphics(renderOffsetX, renderOffsetY, renderWidth, renderHeight);
rlglInitGraphics(0, 0, width, height);
// Window size must be updated to be used on 3D mode to get new aspect ratio (Begin3dMode())
//screenWidth = width;
//screenHeight = height;
// TODO: Update render size?
screenWidth = width;
screenHeight = height;
renderWidth = width;
renderHeight = height;
// NOTE: Postprocessing texture is not scaled to new size
// Background must be also re-cleared
ClearBackground(RAYWHITE);

View File

@ -188,6 +188,8 @@ typedef struct {
// Framebuffer Object type
typedef struct {
GLuint id;
int width;
int height;
GLuint colorTextureId;
GLuint depthTextureId;
} FBO;
@ -1071,8 +1073,8 @@ void rlglInitPostpro(void)
quad.vertexCount = 6;
float w = (float)screenWidth;
float h = (float)screenHeight;
float w = (float)postproFbo.width;
float h = (float)postproFbo.height;
float quadPositions[6*3] = { w, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, h, 0.0f, 0.0f, h, 0.0f, w, h, 0.0f, w, 0.0f, 0.0f };
float quadTexcoords[6*2] = { 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f };
@ -1096,6 +1098,8 @@ FBO rlglLoadFBO(int width, int height)
{
FBO fbo;
fbo.id = 0;
fbo.width = width;
fbo.height = height;
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
// Create the texture that will serve as the color attachment for the framebuffer
@ -2339,22 +2343,21 @@ void SetCustomShader(Shader shader)
}
// Set postprocessing shader
// NOTE: Uses global variables screenWidth and screenHeight
void SetPostproShader(Shader shader)
{
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
if (!enabledPostpro)
{
enabledPostpro = true;
rlglInitPostpro();
rlglInitPostpro(); // Lazy initialization on postprocessing usage
}
SetModelShader(&postproQuad, shader);
Texture2D texture;
texture.id = postproFbo.colorTextureId;
texture.width = screenWidth;
texture.height = screenHeight;
texture.width = postproFbo.width;
texture.height = postproFbo.height;
postproQuad.material.texDiffuse = texture;