passthrough of rendered objects to renderer

This commit is contained in:
Ben Kyd
2019-07-29 05:47:12 +01:00
parent 553f610413
commit 7f53c6714a
7 changed files with 63 additions and 8 deletions

View File

@@ -26,7 +26,14 @@ void Renderer::Init(DisplayInterface* display) {
m_interface = display;
}
void Renderer::InitRender(Camera* camera, Scene* scene) {
m_camera = camera;
m_scene = scene;
RendererInitialized = true;
}
void Renderer::Render() {
if (!RendererInitialized) return;
if (m_mode == MODE_PROGRESSIVE_GUI || m_mode == MODE_PROGRESSIVE_IMG) {
RenderProgressive();
} else if (m_mode == MODE_SAMPLES_IMG) {
@@ -37,6 +44,7 @@ void Renderer::Render() {
}
void Renderer::Render(uint32_t* framebuffer) {
if (!RendererInitialized) return;
m_framebuffer = framebuffer;
if (m_mode == MODE_PROGRESSIVE_GUI || m_mode == MODE_PROGRESSIVE_IMG) {
RenderProgressive();
@@ -50,7 +58,7 @@ void Renderer::Render(uint32_t* framebuffer) {
void Renderer::RenderProgressive() {
m_progressive = new ProgressiveRenderer();
m_progressive->Init(m_interface);
m_progressive->Init(m_interface, m_camera, m_scene);
m_progressive->Render();
}

View File

@@ -7,6 +7,9 @@ class DisplayInterface;
class ProgressiveRenderer;
class Camera;
class Scene;
// Function initProgressive or whatever takes a pointer to the display
class Renderer {
public:
@@ -17,6 +20,9 @@ public:
void Init();
void Init(DisplayInterface* display);
void InitRender(Camera* camera, Scene* scene);
bool RendererInitialized = false;
void Render();
void Render(uint32_t* framebuffer);
@@ -28,11 +34,14 @@ private:
DisplayInterface* m_interface = nullptr;
uint32_t* m_framebuffer = nullptr;
Camera* m_camera = nullptr;
Scene* m_scene = nullptr;
void RenderProgressive();
ProgressiveRenderer* m_progressive = nullptr;
void RenderSamples();
int m_sampleCount = -1;
};
#endif

View File

@@ -1,15 +1,20 @@
#include "./progressiverenderer.hpp"
#include "progressiverenderer.hpp"
#include "../common.hpp"
#include "../pixel.hpp"
#include "../display/displayinterface.hpp"
#include "../definitions/camera.hpp"
#include "../definitions/scene.hpp"
ProgressiveRenderer::ProgressiveRenderer() {
}
void ProgressiveRenderer::Init(DisplayInterface* interface) {
void ProgressiveRenderer::Init(DisplayInterface* interface, Camera* camera, Scene* scene) {
m_interface = interface;
m_camera = camera;
m_scene = scene;
}
void ProgressiveRenderer::Render() {
@@ -22,8 +27,8 @@ void ProgressiveRenderer::Render() {
for (int i = 0; i < 360000; i++) {
m_interface->SetPixelSafe(rand() % m_interface->XRes,
rand() % m_interface->YRes,
rgb888(rand() % 255, rand() % 255, rand() % 255));
rand() % m_interface->YRes,
rgb888(rand() % 255, rand() % 255, rand() % 255));
}
m_interface->Update();

View File

@@ -3,16 +3,22 @@
class DisplayInterface;
class Camera;
class Scene;
class ProgressiveRenderer {
public:
ProgressiveRenderer();
void Init(DisplayInterface* interface);
void Init(DisplayInterface* interface, Camera* camera, Scene* scene);
void Render();
private:
DisplayInterface* m_interface = nullptr;
DisplayInterface* m_interface = nullptr;
Camera* m_camera = nullptr;
Scene* m_scene = nullptr;
};
#endif

View File

@@ -45,7 +45,22 @@ bool InfernoEngine::InitWindow(int xRes, int yRes) {
return true;
}
void InfernoEngine::SetScene(Scene* scene) {
m_scene = scene;
}
void InfernoEngine::SetCamera(Camera* camera) {
m_camera = camera;
}
void InfernoEngine::AutoInitCamera() {
// set up a camera
}
void InfernoEngine::Ready() {
if (!m_camera || !m_scene) return;
m_renderer->InitRender(m_camera, m_scene);
if (!m_initialized) m_initialized = true;
}

View File

@@ -7,6 +7,7 @@
#include "common.hpp"
// Give the user access to the base classes to define shit
#include "definitions/camera.hpp"
#include "definitions/scene.hpp"
@@ -27,6 +28,11 @@ public:
// Initializes the SDL framebuffer with OpenGL
bool InitWindow(int xRes, int yRes);
// Functions related to raytracing
void SetScene(Scene* scene);
void SetCamera(Camera* camera);
void AutoInitCamera();
void Ready();
void Render();
@@ -54,6 +60,9 @@ private:
// mode is not selected then it is nothing
Display* m_display = nullptr;
Renderer* m_renderer = nullptr;
Camera* m_camera = nullptr;
Scene* m_scene = nullptr;
};
#endif

View File

@@ -11,6 +11,9 @@ int main(int argc, char** argv) {
std::cout << "Error initializing window: " << inferno.LastError() << std::endl;
}
inferno.SetCamera(new Camera());
inferno.SetScene(new Scene());
inferno.Ready();
inferno.Render();
}