From b03bcd75ebc59bc7e445ed95b64be4ba9f025934 Mon Sep 17 00:00:00 2001
From: Joseph Walton-Rivers <joseph@walton-rivers.uk>
Date: Sun, 18 Jul 2021 12:04:55 +0100
Subject: [PATCH] ensure that viewport matches framebuffer size

---
 demo/main.cpp       | 10 +++++-----
 fggl/gfx/window.cpp | 10 ++++++++++
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/demo/main.cpp b/demo/main.cpp
index f38b2c1..fa91b2e 100644
--- a/demo/main.cpp
+++ b/demo/main.cpp
@@ -82,8 +82,8 @@ int main(int argc, char* argv[]) {
 	ecs.registerComponent<fggl::gfx::MeshToken>();
 	ecs.registerComponent<fggl::math::Transform>();
 
-	int nCubes = 1;
-	int nSections = 3;
+	int nCubes = 3;
+	int nSections = 2;
 
 	constexpr float HALF_PI = M_PI / 2.0f;
 
@@ -92,7 +92,7 @@ int main(int argc, char* argv[]) {
 
 		// set the position
 		auto result = ecs.addComponent<fggl::math::Transform>(entity);
-		result->origin( glm::vec3( 0.0f, 0.0f, i * -1.0f) );
+		result->origin( glm::vec3( i * 5.0f, 0.0f, 0.0f) );
 
 		fggl::data::Mesh mesh;
 		for (int i=-(nSections/2); i<=nSections/2; i++) {
@@ -123,12 +123,12 @@ int main(int argc, char* argv[]) {
 		// update step
 		time += dt;
 
-		float amount = glm::radians( time / 2048.0f * 360.0f );
+/*		float amount = glm::radians( time / 2048.0f * 360.0f );
 		auto spinners = ecs.getEntityWith<fggl::math::Transform>();
 		for ( auto entity : spinners ) {
 			auto transform = ecs.getComponent<fggl::math::Transform>(entity);
 			transform->euler(glm::vec3(0.0f, amount, 0.0f));
-		}
+		}*/
 
 		// render step
 		ogl.clear();
diff --git a/fggl/gfx/window.cpp b/fggl/gfx/window.cpp
index 0b94278..044f1d9 100644
--- a/fggl/gfx/window.cpp
+++ b/fggl/gfx/window.cpp
@@ -13,6 +13,11 @@ static void glfw_error(int code, const char* description) {
 	std::cerr << "[GLFW] " << code << " " << description << std::endl;
 }
 
+static void framebuffer_resize(GLFWwindow* window, int width, int height) {
+	glfwMakeContextCurrent( window );
+	glViewport(0, 0, width, height);
+}
+
 Context::Context() {
 	int state = glfwInit();
 	if ( state == GLFW_FALSE ) {
@@ -37,7 +42,12 @@ Window::Window() : m_window(nullptr), m_input(nullptr) {
 	glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, true);  
 
 	m_window = glfwCreateWindow(1920, 1080, "main", nullptr, nullptr);
+	if ( m_window == nullptr ) {
+		return;
+	}
+
 	glfwSetWindowUserPointer(m_window, this);
+	glfwSetFramebufferSizeCallback( m_window, framebuffer_resize );
 }
 
 Window::~Window() {
-- 
GitLab