From b671f5ae096e1006c5b9ea5599895d4d5dee17f0 Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Tue, 22 Nov 2022 23:24:52 +0000 Subject: [PATCH] render flow a bit more padded --- CMakeLists.txt | 1 + libhart/scene/material.hpp | 5 +++++ libhart/tracing/ray.hpp | 13 +++++++++++++ src/hart_module.cpp | 25 +++++++++++++++++++++++++ src/hart_module.hpp | 11 ++--------- src/inferno.cpp | 6 +++--- src/renderer/renderer.cpp | 8 ++++++-- src/renderer/renderer.hpp | 9 +++++++-- 8 files changed, 62 insertions(+), 16 deletions(-) create mode 100644 libhart/tracing/ray.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b10ba8..fcff00f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ target_include_directories(inferno PRIVATE "libhart/thirdparty") target_include_directories(inferno PRIVATE "src/") target_include_directories(inferno PRIVATE "src/thirdparty") +# Hardware Acceleration Modules (HART) add_subdirectory("hart/inferno-hart-cpu") add_subdirectory("hart/inferno-hart-opencl") diff --git a/libhart/scene/material.hpp b/libhart/scene/material.hpp index 0650fc4..482a48e 100644 --- a/libhart/scene/material.hpp +++ b/libhart/scene/material.hpp @@ -2,9 +2,12 @@ #include +#include + namespace inferno { class Shader; +class HitInfo; class Material { public: @@ -15,6 +18,8 @@ public: void setGlShader(Shader* shader); Shader* getGlShader(); + glm::vec3 sample(HitInfo* hit); + private: std::string mName; Shader* mGlShader; diff --git a/libhart/tracing/ray.hpp b/libhart/tracing/ray.hpp new file mode 100644 index 0000000..90d55f4 --- /dev/null +++ b/libhart/tracing/ray.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace inferno { + +struct Ray +{ + glm::vec3 Origin; + glm::vec3 Direction; +}; + +} diff --git a/src/hart_module.cpp b/src/hart_module.cpp index a02a8b9..58f0444 100644 --- a/src/hart_module.cpp +++ b/src/hart_module.cpp @@ -18,3 +18,28 @@ HARTModuleDirectory* HHM::getModuleDirectory() return &mDirectory; } +void HHM::newScene(Scene* scene) +{ + // extract mesh's +} + +void HHM::notifySceneUpdate() +{ + // same again +} + +void HHM::startTrace(RaySource* sourceScatter) +{ + +} + +void HHM::rayReturn(HitInfo* hit) +{ + +} + +void HHM::bounce(Ray* newRay) +{ + +} + diff --git a/src/hart_module.hpp b/src/hart_module.hpp index 7adf2cb..afa10ac 100644 --- a/src/hart_module.hpp +++ b/src/hart_module.hpp @@ -9,7 +9,7 @@ namespace inferno { class Scene; class Ray; -class RaySouce; +class RaySource; class HitInfo; class HARTModule; @@ -22,14 +22,10 @@ public: HARTModuleDirectory* getModuleDirectory(); - // needs to syncronusly stop the module's execution and - // prepare for setting up a new HART layer - void notifyModuleChange(HARTModule* newModule); - void newScene(Scene* scene); void notifySceneUpdate(); - void startTrace(RaySouce* sourceScatter); + void startTrace(RaySource* sourceScatter); void rayReturn(HitInfo* hit); void bounce(Ray* newRay); @@ -37,9 +33,6 @@ public: private: HARTModuleDirectory mDirectory; -private: - HARTModule* activeModule; - }; } diff --git a/src/inferno.cpp b/src/inferno.cpp index f262be9..9f71712 100644 --- a/src/inferno.cpp +++ b/src/inferno.cpp @@ -34,10 +34,10 @@ Inferno::Inferno() mWin = &Window::GetInstance(); mWin->init("Inferno v" INFERNO_VERSION, 1280, 720); - mRasterRenderer = new RasterizeRenderer(); - mRayRenderer = new RayRenderer(); - mScene = new Scene(); mHeadHartModule = new HHM(); + mRasterRenderer = new RasterizeRenderer(); + mRayRenderer = new RayRenderer(mHeadHartModule); + mScene = new Scene(); } Inferno::~Inferno() diff --git a/src/renderer/renderer.cpp b/src/renderer/renderer.cpp index 07ffce8..9da1376 100644 --- a/src/renderer/renderer.cpp +++ b/src/renderer/renderer.cpp @@ -3,9 +3,12 @@ #include #include +#include "hart_module.hpp" + using namespace inferno; -RayRenderer::RayRenderer() +RayRenderer::RayRenderer(HHM* accelIface) + : mIface(accelIface) { mTarget = new glm::fvec4[mRenderTargetSize.x * mRenderTargetSize.y]; @@ -52,7 +55,8 @@ GLuint RayRenderer::getRenderedTexture() void RayRenderer::prepare() { - + assert(mCurrentScene == NULL); + mIface->newScene(mCurrentScene); } void RayRenderer::draw() diff --git a/src/renderer/renderer.hpp b/src/renderer/renderer.hpp index d8076f9..b15d80e 100644 --- a/src/renderer/renderer.hpp +++ b/src/renderer/renderer.hpp @@ -4,13 +4,15 @@ namespace inferno { +class HHM; + class Scene; class Colour; class RayRenderer { public: - RayRenderer(); + RayRenderer(HHM* accelIface); ~RayRenderer(); void setScene(Scene* scene); @@ -28,7 +30,10 @@ private: glm::fvec4* mTarget; glm::ivec2 mRenderTargetSize = {300, 300}; - Scene* mCurrentScene; + Scene* mCurrentScene = nullptr; + +private: + HHM* mIface; }; }