feat: resizable window
This commit is contained in:
parent
4795d88b91
commit
2b6444dfac
18
src/gfx.cpp
18
src/gfx.cpp
|
@ -7,9 +7,7 @@
|
||||||
|
|
||||||
#include "io.hpp"
|
#include "io.hpp"
|
||||||
|
|
||||||
const int WIDTH = 640;
|
float aspect_;
|
||||||
const int HEIGHT = 480;
|
|
||||||
const float ASPECT = (float)WIDTH / (float)HEIGHT;
|
|
||||||
|
|
||||||
// Initialize GLFW, OpenGL and GLEW, open a window and make it the current context.
|
// Initialize GLFW, OpenGL and GLEW, open a window and make it the current context.
|
||||||
// Returns 0 for success, and -1 for any failure.
|
// Returns 0 for success, and -1 for any failure.
|
||||||
|
@ -25,8 +23,10 @@ int initGraphics(GLFWwindow** window, const std::string& title)
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||||
|
glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
|
||||||
|
|
||||||
|
*window = glfwCreateWindow(640, 480, title.c_str(), NULL, NULL);
|
||||||
|
|
||||||
*window = glfwCreateWindow(WIDTH, HEIGHT, title.c_str(), NULL, NULL);
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
@ -34,6 +34,8 @@ int initGraphics(GLFWwindow** window, const std::string& title)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glfwSetWindowSizeCallback(*window, windowSizeCallback);
|
||||||
|
|
||||||
glfwMakeContextCurrent(*window);
|
glfwMakeContextCurrent(*window);
|
||||||
|
|
||||||
glewExperimental = GL_TRUE;
|
glewExperimental = GL_TRUE;
|
||||||
|
@ -48,6 +50,12 @@ int initGraphics(GLFWwindow** window, const std::string& title)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void windowSizeCallback(GLFWwindow* window, int width, int height)
|
||||||
|
{
|
||||||
|
aspect_ = (float)width / (float)height;
|
||||||
|
glViewport(0, 0, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
GLuint compileShader(const std::string& shaderPath, GLenum shaderType)
|
GLuint compileShader(const std::string& shaderPath, GLenum shaderType)
|
||||||
{
|
{
|
||||||
GLuint shader;
|
GLuint shader;
|
||||||
|
@ -102,7 +110,7 @@ GLuint compileShaderProgram(const std::string& fragShaderPath)
|
||||||
|
|
||||||
void updateProjectionMatrix(GLuint shaderProgram)
|
void updateProjectionMatrix(GLuint shaderProgram)
|
||||||
{
|
{
|
||||||
float left = -ASPECT, right = ASPECT, bottom = -1.0, top = 1.0, near = -1.0, far = 1.0;
|
float left = -aspect_, right = aspect_, bottom = -1.0, top = 1.0, near = -1.0, far = 1.0;
|
||||||
glm::mat4 projection = glm::ortho(left, right, bottom, top, near, far);
|
glm::mat4 projection = glm::ortho(left, right, bottom, top, near, far);
|
||||||
GLint projectionLocation = getShaderUniformLocation(shaderProgram, "_Projection");
|
GLint projectionLocation = getShaderUniformLocation(shaderProgram, "_Projection");
|
||||||
glUniformMatrix4fv(projectionLocation, 1, GL_FALSE, &projection[0][0]);
|
glUniformMatrix4fv(projectionLocation, 1, GL_FALSE, &projection[0][0]);
|
||||||
|
|
|
@ -5,11 +5,8 @@
|
||||||
#include "GL/glew.h"
|
#include "GL/glew.h"
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
extern const int WIDTH;
|
|
||||||
extern const int HEIGHT;
|
|
||||||
extern const float ASPECT;
|
|
||||||
|
|
||||||
int initGraphics(GLFWwindow** window, const std::string& title);
|
int initGraphics(GLFWwindow** window, const std::string& title);
|
||||||
|
void windowSizeCallback(GLFWwindow* window, int width, int height);
|
||||||
|
|
||||||
GLuint compileShaderProgram(const std::string& fragShaderPath);
|
GLuint compileShaderProgram(const std::string& fragShaderPath);
|
||||||
GLuint compileShader(const std::string& shaderPath, GLenum shaderType);
|
GLuint compileShader(const std::string& shaderPath, GLenum shaderType);
|
||||||
|
@ -18,4 +15,4 @@ GLint getShaderUniformLocation(GLuint shaderProgram, const std::string& uniformN
|
||||||
void updateProjectionMatrix(GLuint shaderProgram);
|
void updateProjectionMatrix(GLuint shaderProgram);
|
||||||
void updateModelMatrix(GLuint shaderProgram, float time);
|
void updateModelMatrix(GLuint shaderProgram, float time);
|
||||||
void updateViewMatrix(GLuint shaderProgram);
|
void updateViewMatrix(GLuint shaderProgram);
|
||||||
void updateModelViewProjectionMatrix(GLuint shaderProgram, float time);
|
void updateModelViewProjectionMatrix(GLuint shaderProgram, float time);
|
||||||
|
|
Loading…
Reference in New Issue