From 256032f46ba7bcc86882617bbca325cafdcd538f Mon Sep 17 00:00:00 2001 From: benkyd Date: Sat, 3 Dec 2022 19:05:32 +0000 Subject: [PATCH] what an obtuse error --- hart/inferno-hart-cpu/src/main.cpp | 6 +++- hart/inferno-hart-opencl/src/main.cpp | 2 +- src/hart_module.cpp | 6 ++-- src/hart_module.hpp | 9 +++--- src/inferno.cpp | 21 ++++++------- src/inferno.hpp | 6 ++-- src/renderer/dispatcher.cpp | 45 +++++++++++++++++++++++++++ src/renderer/dispatcher.hpp | 32 +++++++++++++++++++ src/renderer/ray_source.hpp | 2 +- src/renderer/renderer.cpp | 2 +- 10 files changed, 106 insertions(+), 25 deletions(-) create mode 100644 src/renderer/dispatcher.cpp create mode 100644 src/renderer/dispatcher.hpp diff --git a/hart/inferno-hart-cpu/src/main.cpp b/hart/inferno-hart-cpu/src/main.cpp index a495b85..9aa5c86 100644 --- a/hart/inferno-hart-cpu/src/main.cpp +++ b/hart/inferno-hart-cpu/src/main.cpp @@ -27,7 +27,11 @@ public: std::vector* mats, std::vector* indicies) override {} - void submitQueue(std::queue queue) override {} + void submitQueue(std::vector queue) override + { + + } + void pushtoQueue(Ray* ray) override {} }; diff --git a/hart/inferno-hart-opencl/src/main.cpp b/hart/inferno-hart-opencl/src/main.cpp index eeb6c83..cd02c17 100644 --- a/hart/inferno-hart-opencl/src/main.cpp +++ b/hart/inferno-hart-opencl/src/main.cpp @@ -27,7 +27,7 @@ public: std::vector* mats, std::vector* indicies) override {} - void submitQueue(std::queue queue) override {} + void submitQueue(std::vector queue) override {} void pushtoQueue(Ray* ray) override {} }; diff --git a/src/hart_module.cpp b/src/hart_module.cpp index c52ba0e..920afd7 100644 --- a/src/hart_module.cpp +++ b/src/hart_module.cpp @@ -1,5 +1,7 @@ #include "hart_module.hpp" +#include + #include #include #include @@ -38,10 +40,10 @@ void HHM::notifySceneUpdate() // same again } -void HHM::startTrace(RayField* sourceScatter) +void HHM::startTrace(RayField sourceScatter) { HARTModule* mod = mDirectory.getActiveModule(); - mod->submitQueue(reinterpret_cast>(sourceScatter)); + mod->submitQueue(sourceScatter); } void HHM::rayReturn(HitInfo* hit) diff --git a/src/hart_module.hpp b/src/hart_module.hpp index 795cfd1..b0d0665 100644 --- a/src/hart_module.hpp +++ b/src/hart_module.hpp @@ -3,17 +3,19 @@ // the HHM (Hamlin Hamlin McGill) aka the Head HART Module keeps track of the module // and gives the renderer a cleaner interface to talk to a HART Module +#include + #include "hart_directory.hpp" namespace inferno { class Scene; class Ray; -class RayField; class HitInfo; - class HARTModule; +using RayField = std::vector; + class HHM { public: @@ -25,14 +27,13 @@ public: void newScene(Scene* scene); void notifySceneUpdate(); - void startTrace(RayField* sourceScatter); + void startTrace(RayField sourceScatter); void rayReturn(HitInfo* hit); void bounce(Ray* newRay); private: HARTModuleDirectory mDirectory; - }; } diff --git a/src/inferno.cpp b/src/inferno.cpp index d38d213..1ee8b03 100644 --- a/src/inferno.cpp +++ b/src/inferno.cpp @@ -9,6 +9,7 @@ #include "preview_renderer/renderer.hpp" #include "preview_renderer/shader.hpp" +#include "renderer/dispatcher.hpp" #include "renderer/renderer.hpp" #include "scene/camera.hpp" #include "scene/scene.hpp" @@ -34,9 +35,7 @@ Inferno::Inferno() mWin = &Window::GetInstance(); mWin->init("Inferno v" INFERNO_VERSION, 1280, 720); - mHeadHartModule = new HHM(); mRasterRenderer = new RasterizeRenderer(); - mRayRenderer = new RayRenderer(mHeadHartModule); mScene = new Scene(); } @@ -146,7 +145,7 @@ int Inferno::run() mScene->setCamera(&camera); mRasterRenderer->setScene(mScene); - mRayRenderer->setScene(mScene); + mRayRenderer->getRenderer()->setScene(mScene); while (true) { @@ -207,10 +206,9 @@ int Inferno::run() if (ImGui::Begin("Render", nullptr, ImGuiWindowFlags_NoScrollbar)) { - mRayRenderer->prepare(); - mRayRenderer->draw(); - ImGui::Image((ImTextureID)mRayRenderer->getRenderedTexture(), - { mRayRenderer->getTargetSize().x, mRayRenderer->getTargetSize().y }, + ImGui::Image((ImTextureID)mRayRenderer->getLatestTexture(), + { mRayRenderer->getRenderer()->getTargetSize().x, + mRayRenderer->getRenderer()->getTargetSize().y }, ImVec2(0,1), ImVec2(1,0)); glBindTexture(GL_TEXTURE_2D, 0); ImGui::End(); @@ -220,25 +218,26 @@ int Inferno::run() { if (ImGui::TreeNode("Render")) { + HHM* hhm = mRayRenderer->getTopModule(); if (ImGui::TreeNode("Accelerator")) { ImGui::Button("Find Accelerator..."); ImGui::Text("Select Accelerator:"); if (ImGui::BeginListBox("", ImVec2(-FLT_MIN, 3 * ImGui::GetTextLineHeightWithSpacing()))) { - std::vector moduleNames = mHeadHartModule->getModuleDirectory()->getModules(); - int active = mHeadHartModule->getModuleDirectory()->getActiveIndex(); + std::vector moduleNames = hhm->getModuleDirectory()->getModules(); + int active = hhm->getModuleDirectory()->getActiveIndex(); for (int n = 0; n < moduleNames.size(); n++) { const bool isSelected = (active == n); if (ImGui::Selectable(moduleNames[n].c_str(), isSelected)) - mHeadHartModule->getModuleDirectory()->setActiveIndex(n); + hhm->getModuleDirectory()->setActiveIndex(n); if (isSelected) ImGui::SetItemDefaultFocus(); } ImGui::EndListBox(); } - auto* activeCredit = mHeadHartModule->getModuleDirectory()->getActiveCredit(); + auto* activeCredit = hhm->getModuleDirectory()->getActiveCredit(); ImGui::Text(activeCredit->ModuleName.c_str()); ImGui::SameLine(); ImGui::Text("v%i.%i.%i", activeCredit->VersionMajor, diff --git a/src/inferno.hpp b/src/inferno.hpp index 253e29b..0eeb685 100644 --- a/src/inferno.hpp +++ b/src/inferno.hpp @@ -10,7 +10,7 @@ class Window; class HHM; class RasterizeRenderer; -class RayRenderer; +class RenderDispatcher; class Scene; class Inferno : public helpers::Singleton @@ -35,10 +35,8 @@ private: // need deffered init as they need an OpenGL context // could and should be fixed with a static window RasterizeRenderer* mRasterRenderer; - RayRenderer* mRayRenderer; + RenderDispatcher* mRayRenderer; Scene* mScene; - - HHM* mHeadHartModule; private: Window* mWin; diff --git a/src/renderer/dispatcher.cpp b/src/renderer/dispatcher.cpp new file mode 100644 index 0000000..1799d89 --- /dev/null +++ b/src/renderer/dispatcher.cpp @@ -0,0 +1,45 @@ +#include "dispatcher.hpp" + +#include + +#include "renderer.hpp" + +#include "hart_module.hpp" + +using namespace inferno; + +RenderDispatcher::RenderDispatcher() +{ + mHHM = new HHM(); + mRenderer = new RayRenderer(mHHM); +} + +RenderDispatcher::~RenderDispatcher() +{ + +} + +RayRenderer* RenderDispatcher::getRenderer() +{ + return mRenderer; +} + +HHM* RenderDispatcher::getTopModule() +{ + return mHHM; +} + +void RenderDispatcher::startProgression() +{ + +} + +void RenderDispatcher::stopProgression() +{ + +} + +GLuint RenderDispatcher::getLatestTexture() +{ + +} diff --git a/src/renderer/dispatcher.hpp b/src/renderer/dispatcher.hpp new file mode 100644 index 0000000..f8de254 --- /dev/null +++ b/src/renderer/dispatcher.hpp @@ -0,0 +1,32 @@ +#pragma once + +namespace inferno { + +// Thread dispatcher keeps track of the thread that calls the +// copy function because OpenGL is a nightmare + +#include + +class HHM; +class Scene; +class RayRenderer; + +class RenderDispatcher +{ +public: + RenderDispatcher(); + ~RenderDispatcher(); + + RayRenderer* getRenderer(); + HHM* getTopModule(); + + void startProgression(); + void stopProgression(); + GLuint getLatestTexture(); + +private: + HHM* mHHM; + RayRenderer* mRenderer; +}; + +} diff --git a/src/renderer/ray_source.hpp b/src/renderer/ray_source.hpp index 9280a1e..658b431 100644 --- a/src/renderer/ray_source.hpp +++ b/src/renderer/ray_source.hpp @@ -8,7 +8,7 @@ namespace inferno { -typedef std::vector RayField; +using RayField = std::vector; class Camera; diff --git a/src/renderer/renderer.cpp b/src/renderer/renderer.cpp index 0199a53..ef5e6d0 100644 --- a/src/renderer/renderer.cpp +++ b/src/renderer/renderer.cpp @@ -71,7 +71,7 @@ void RayRenderer::prepare() void RayRenderer::draw() { RayField startRays = mRaySource->getInitialRays(true); - mIface->startTrace(&startRays); + mIface->startTrace(startRays); for (int x = 0; x < mRenderTargetSize.x; x++) for (int y = 0; y < mRenderTargetSize.y; y++)