summaryrefslogtreecommitdiff
path: root/gfx/gl/sceneRenderer.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2025-03-14 01:54:26 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2025-03-14 01:54:26 +0000
commit478aabb2c27374117cbd91fb6812058d0a18f873 (patch)
tree078b079692aba9052dc84293c6c10592c4df276a /gfx/gl/sceneRenderer.cpp
parentAdd support for changing the aspect ratio of a camera (diff)
downloadilt-478aabb2c27374117cbd91fb6812058d0a18f873.tar.bz2
ilt-478aabb2c27374117cbd91fb6812058d0a18f873.tar.xz
ilt-478aabb2c27374117cbd91fb6812058d0a18f873.zip
Add support for resizing a SceneRendererHEADmain
Diffstat (limited to 'gfx/gl/sceneRenderer.cpp')
-rw-r--r--gfx/gl/sceneRenderer.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/gfx/gl/sceneRenderer.cpp b/gfx/gl/sceneRenderer.cpp
index 188c4fd..5d35d01 100644
--- a/gfx/gl/sceneRenderer.cpp
+++ b/gfx/gl/sceneRenderer.cpp
@@ -39,7 +39,7 @@ SceneRenderer::SceneRenderer(ScreenAbsCoord s, GLuint o) :
glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
configuregdata(gPosition, {GL_RGB32I}, GL_RGB_INTEGER, GL_COLOR_ATTACHMENT0);
- configuregdata(gNormal, {GL_RGB8_SNORM, GL_RGB16F}, GL_RGB, GL_COLOR_ATTACHMENT1);
+ normaliFormat = configuregdata(gNormal, {GL_RGB8_SNORM, GL_RGB16F}, GL_RGB, GL_COLOR_ATTACHMENT1);
configuregdata(gAlbedoSpec, {GL_RGB8}, GL_RGB, GL_COLOR_ATTACHMENT2);
constexpr std::array<unsigned int, 3> attachments {
GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2};
@@ -57,6 +57,23 @@ SceneRenderer::SceneRenderer(ScreenAbsCoord s, GLuint o) :
}
void
+SceneRenderer::resize(ScreenAbsCoord newSize)
+{
+ size = newSize;
+ camera.setAspect(ratio(size));
+ const auto configuregdata = [this](const GLuint data, const GLint iformat, const GLenum format) {
+ glBindTexture(GL_TEXTURE_2D, data);
+ glTexImage2D(GL_TEXTURE_2D, 0, iformat, size.x, size.y, 0, format, GL_BYTE, nullptr);
+ };
+ configuregdata(gPosition, GL_RGB32I, GL_RGB_INTEGER);
+ configuregdata(gNormal, normaliFormat, GL_RGB);
+ configuregdata(gAlbedoSpec, GL_RGB8, GL_RGB);
+ configuregdata(gIllumination, GL_RGB8, GL_RGB);
+ glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
+ glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, size.x, size.y);
+}
+
+void
SceneRenderer::render(const SceneProvider & scene) const
{
shader.setViewProjection(camera.getPosition(), camera.getViewProjection());