| @@ -45,7 +45,7 @@ public: | |||||
| m_ready(false) | m_ready(false) | ||||
| { | { | ||||
| m_camera = new Camera(); | m_camera = new Camera(); | ||||
| m_camera->SetProjection(mat4::perspective(radians(30.f), 960.f, 600.f, .1f, 1000.f)); | |||||
| m_camera->SetProjection(mat4::perspective(radians(30.f), 640.f, 480.f, .1f, 1000.f)); | |||||
| m_camera->SetView(mat4::lookat(vec3(-15.f, 5.f, 0.f), | m_camera->SetView(mat4::lookat(vec3(-15.f, 5.f, 0.f), | ||||
| vec3(0.f, -1.f, 0.f), | vec3(0.f, -1.f, 0.f), | ||||
| vec3(0.f, 1.f, 0.f))); | vec3(0.f, 1.f, 0.f))); | ||||
| @@ -1,7 +1,7 @@ | |||||
| // | // | ||||
| // Lol Engine | // Lol Engine | ||||
| // | // | ||||
| // Copyright © 2010—2016 Sam Hocevar <sam@hocevar.net> | |||||
| // Copyright © 2010—2019 Sam Hocevar <sam@hocevar.net> | |||||
| // | // | ||||
| // Lol Engine is free software. It comes without any warranty, to | // Lol Engine is free software. It comes without any warranty, to | ||||
| // the extent permitted by applicable law. You can redistribute it | // the extent permitted by applicable law. You can redistribute it | ||||
| @@ -69,7 +69,7 @@ SdlAppDisplay::SdlAppDisplay(char const *title, ivec2 res) | |||||
| * However, perfs warning have been may occur. */ | * However, perfs warning have been may occur. */ | ||||
| SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); | SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); | ||||
| int flags = SDL_WINDOW_OPENGL; | |||||
| int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE; | |||||
| if (window_size == ivec2(0)) | if (window_size == ivec2(0)) | ||||
| flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; | flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; | ||||
| data->m_window = SDL_CreateWindow(title, | data->m_window = SDL_CreateWindow(title, | ||||
| @@ -1,7 +1,7 @@ | |||||
| // | // | ||||
| // Lol Engine | // Lol Engine | ||||
| // | // | ||||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||||
| // Copyright © 2010—2019 Sam Hocevar <sam@hocevar.net> | |||||
| // | // | ||||
| // Lol Engine is free software. It comes without any warranty, to | // Lol Engine is free software. It comes without any warranty, to | ||||
| // the extent permitted by applicable law. You can redistribute it | // the extent permitted by applicable law. You can redistribute it | ||||
| @@ -332,6 +332,9 @@ void SdlInputData::Tick(float seconds) | |||||
| case SDL_WINDOWEVENT_FOCUS_LOST: | case SDL_WINDOWEVENT_FOCUS_LOST: | ||||
| m_mouse->SetKey(3, false); | m_mouse->SetKey(3, false); | ||||
| break; | break; | ||||
| case SDL_WINDOWEVENT_RESIZED: | |||||
| Video::Resize(ivec2(event.window.data1, event.window.data2)); | |||||
| break; | |||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -204,14 +204,15 @@ mutex SceneData::m_prim_mutex; | |||||
| * Public Scene class | * Public Scene class | ||||
| */ | */ | ||||
| Scene::Scene(ivec2 size) | Scene::Scene(ivec2 size) | ||||
| : data(new SceneData()) | |||||
| { | |||||
| m_renderer = new Renderer(size); | |||||
| data->m_renderbuffer[0] = new Framebuffer(size); | |||||
| data->m_renderbuffer[1] = new Framebuffer(size); | |||||
| data->m_renderbuffer[2] = new Framebuffer(size); | |||||
| data->m_renderbuffer[3] = new Framebuffer(size); | |||||
| : m_size(size), | |||||
| m_wanted_size(size), | |||||
| data(new SceneData()), | |||||
| m_renderer(new Renderer(size)) | |||||
| { | |||||
| data->m_renderbuffer[0] = new Framebuffer(m_size); | |||||
| data->m_renderbuffer[1] = new Framebuffer(m_size); | |||||
| data->m_renderbuffer[2] = new Framebuffer(m_size); | |||||
| data->m_renderbuffer[3] = new Framebuffer(m_size); | |||||
| data->m_pp.m_shader[0] = Shader::Create(LOLFX_RESOURCE_NAME(gpu_blit)); | data->m_pp.m_shader[0] = Shader::Create(LOLFX_RESOURCE_NAME(gpu_blit)); | ||||
| data->m_pp.m_shader[1] = Shader::Create(LOLFX_RESOURCE_NAME(gpu_postprocess)); | data->m_pp.m_shader[1] = Shader::Create(LOLFX_RESOURCE_NAME(gpu_postprocess)); | ||||
| data->m_pp.m_coord[0] = data->m_pp.m_shader[0]->GetAttribLocation(VertexUsage::Position, 0); | data->m_pp.m_coord[0] = data->m_pp.m_shader[0]->GetAttribLocation(VertexUsage::Position, 0); | ||||
| @@ -232,7 +233,7 @@ Scene::Scene(ivec2 size) | |||||
| /* Create a default orthographic camera, in case the user doesn’t. */ | /* Create a default orthographic camera, in case the user doesn’t. */ | ||||
| data->m_default_cam = new Camera(); | data->m_default_cam = new Camera(); | ||||
| mat4 proj = mat4::ortho(0.f, (float)size.x, 0.f, (float)size.y, -1000.f, 1000.f); | |||||
| mat4 proj = mat4::ortho(0.f, (float)m_size.x, 0.f, (float)m_size.y, -1000.f, 1000.f); | |||||
| data->m_default_cam->SetProjection(proj); | data->m_default_cam->SetProjection(proj); | ||||
| PushCamera(data->m_default_cam); | PushCamera(data->m_default_cam); | ||||
| @@ -248,6 +249,11 @@ Scene::Scene(ivec2 size) | |||||
| data->m_line_api.m_debug_mask = 1; | data->m_line_api.m_debug_mask = 1; | ||||
| } | } | ||||
| void Scene::resize(ivec2 size) | |||||
| { | |||||
| m_wanted_size = size; | |||||
| } | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| Scene::~Scene() | Scene::~Scene() | ||||
| { | { | ||||
| @@ -591,6 +597,23 @@ void Scene::pre_render(float) | |||||
| { | { | ||||
| gpu_marker("Pre Render"); | gpu_marker("Pre Render"); | ||||
| // Handle resize event | |||||
| if (m_size != m_wanted_size) | |||||
| { | |||||
| m_size = m_wanted_size; | |||||
| delete data->m_renderbuffer[0]; | |||||
| delete data->m_renderbuffer[1]; | |||||
| delete data->m_renderbuffer[2]; | |||||
| delete data->m_renderbuffer[3]; | |||||
| data->m_renderbuffer[0] = new Framebuffer(m_size); | |||||
| data->m_renderbuffer[1] = new Framebuffer(m_size); | |||||
| data->m_renderbuffer[2] = new Framebuffer(m_size); | |||||
| data->m_renderbuffer[3] = new Framebuffer(m_size); | |||||
| mat4 proj = mat4::ortho(0.f, (float)m_size.x, 0.f, (float)m_size.y, -1000.f, 1000.f); | |||||
| data->m_default_cam->SetProjection(proj); | |||||
| } | |||||
| /* First render into the offline buffer */ | /* First render into the offline buffer */ | ||||
| if (do_pp) | if (do_pp) | ||||
| { | { | ||||
| @@ -250,6 +250,8 @@ public: | |||||
| void EnableDisplay(); | void EnableDisplay(); | ||||
| void DisableDisplay(); | void DisableDisplay(); | ||||
| void resize(ivec2 size); | |||||
| void pre_render(float seconds); | void pre_render(float seconds); | ||||
| void render(float seconds); | void render(float seconds); | ||||
| void post_render(float seconds); | void post_render(float seconds); | ||||
| @@ -259,6 +261,8 @@ private: | |||||
| void render_tiles(); | void render_tiles(); | ||||
| void render_lines(float seconds); | void render_lines(float seconds); | ||||
| ivec2 m_size, m_wanted_size; | |||||
| SceneData *data; | SceneData *data; | ||||
| Renderer *m_renderer; | Renderer *m_renderer; | ||||
| }; | }; | ||||
| @@ -120,6 +120,11 @@ void Video::Capture(uint32_t *buffer) | |||||
| #endif | #endif | ||||
| } | } | ||||
| void Video::Resize(ivec2 size) | |||||
| { | |||||
| Scene::GetScene(0).resize(size); | |||||
| } | |||||
| ivec2 Video::GetSize() | ivec2 Video::GetSize() | ||||
| { | { | ||||
| return Scene::GetScene(0).get_renderer()->GetViewport().extent(); | return Scene::GetScene(0).get_renderer()->GetViewport().extent(); | ||||
| @@ -1,11 +1,13 @@ | |||||
| // | // | ||||
| // Lol Engine | |||||
| // Lol Engine | |||||
| // | // | ||||
| // Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net> | |||||
| // This program is free software; you can redistribute it and/or | |||||
| // modify it under the terms of the Do What The Fuck You Want To | |||||
| // Public License, Version 2, as published by Sam Hocevar. See | |||||
| // http://www.wtfpl.net/ for more details. | |||||
| // Copyright © 2010—2019 Sam Hocevar <sam@hocevar.net> | |||||
| // | |||||
| // Lol Engine is free software. It comes without any warranty, to | |||||
| // the extent permitted by applicable law. You can redistribute it | |||||
| // and/or modify it under the terms of the Do What the Fuck You Want | |||||
| // to Public License, Version 2, as published by the WTFPL Task Force. | |||||
| // See http://www.wtfpl.net/ for more details. | |||||
| // | // | ||||
| #pragma once | #pragma once | ||||
| @@ -49,6 +51,7 @@ public: | |||||
| static void Setup(ivec2 size); | static void Setup(ivec2 size); | ||||
| static void Destroy(); | static void Destroy(); | ||||
| static void Resize(ivec2 size); | |||||
| static ivec2 GetSize(); | static ivec2 GetSize(); | ||||
| static void SetDebugRenderMode(DebugRenderMode d); | static void SetDebugRenderMode(DebugRenderMode d); | ||||