From b53943ccfab3a0ae909059f67241583ff1fc0e05 Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Thu, 25 Jul 2019 03:44:49 +0100 Subject: [PATCH] little bit of work on frame buffer passing --- src/common.hpp | 2 ++ src/core/renderer.cpp | 14 +++++++++++++- src/core/renderer.hpp | 3 ++- src/inferno.cpp | 11 +++++++++-- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/common.hpp b/src/common.hpp index d40ce43..cc8bce1 100644 --- a/src/common.hpp +++ b/src/common.hpp @@ -1,6 +1,8 @@ #ifndef INFERNO_COMMON_H_ #define INFERNO_COMMON_H_ +#include + enum OperationMode { MODE_DEFAULT, MODE_PROGRESSIVE_GUI, diff --git a/src/core/renderer.cpp b/src/core/renderer.cpp index 61f23e3..d9d8d25 100644 --- a/src/core/renderer.cpp +++ b/src/core/renderer.cpp @@ -1,3 +1,4 @@ +#include "../display/display.hpp" #include "./renderer.hpp" Renderer::Renderer(OperationMode mode) { @@ -19,6 +20,17 @@ void Renderer::Render() { } } +void Renderer::Render(uint32_t* framebuffer) { + m_framebuffer = framebuffer; + if (m_mode == MODE_PROGRESSIVE_GUI || m_mode == MODE_PROGRESSIVE_IMG) { + RenderProgressive(); + } else if (m_mode == MODE_SAMPLES_IMG) { + RenderSamples(); + } else { + // Add an error & return + } +} + void Renderer::Init() { } @@ -26,7 +38,7 @@ void Renderer::Init() { void Renderer::Init(Display* display) { // Add warning if (!display) return; - m_display = display; + m_framebuffer = display->Framebuffer; } void Renderer::RenderProgressive() { diff --git a/src/core/renderer.hpp b/src/core/renderer.hpp index 17b7fae..853ec25 100644 --- a/src/core/renderer.hpp +++ b/src/core/renderer.hpp @@ -16,12 +16,13 @@ public: void Init(Display* display); void Render(); + void Render(uint32_t* framebuffer); private: int m_samples = -1; OperationMode m_mode = MODE_DEFAULT; - Display* m_display = nullptr; + uint32_t* m_framebuffer = nullptr; void RenderProgressive(); void RenderSamples(); diff --git a/src/inferno.cpp b/src/inferno.cpp index 1e5398c..8bebefd 100644 --- a/src/inferno.cpp +++ b/src/inferno.cpp @@ -5,6 +5,7 @@ #include "pixel.hpp" #include "display/display.hpp" +#include "core/renderer.hpp" InfernoEngine::InfernoEngine() { m_initialized = false; @@ -29,11 +30,16 @@ bool InfernoEngine::InitWindow(int xRes, int yRes) { m_display = new Display(); bool status = m_display->InitVideoDisplay("Inferno Engine", xRes, yRes); - if (!status) { return false; } + m_renderer = new Renderer(m_mode); + if (!m_renderer) { + return false; + } + m_renderer->Init(m_display); + m_initialized = true; return true; @@ -44,7 +50,8 @@ void InfernoEngine::Ready() { } void InfernoEngine::Render() { - while (m_display->WindowOpen) { + m_renderer->Render(m_display->Framebuffer); + while (m_display->WindowOpen) { SDL_Event e; while (SDL_PollEvent(&e) == SDL_TRUE) if (e.type == SDL_QUIT) m_display->CloseDisplay();