diff --git a/libhart/inferno_hart.hpp b/libhart/inferno_hart.hpp index 399606f..80c9d76 100644 --- a/libhart/inferno_hart.hpp +++ b/libhart/inferno_hart.hpp @@ -50,7 +50,8 @@ public: std::vector* mats, std::vector* indicies) = 0; - virtual void submitQueue(std::queue queue) = 0; + // module keeps queue reference + virtual void submitQueue(std::vector queue) = 0; virtual void pushtoQueue(Ray* ray) = 0; inline void passHitCallback(HART_HIT_CALLBACK callback) diff --git a/src/hart_module.cpp b/src/hart_module.cpp index 58f0444..c52ba0e 100644 --- a/src/hart_module.cpp +++ b/src/hart_module.cpp @@ -1,5 +1,9 @@ #include "hart_module.hpp" +#include +#include +#include + using namespace inferno; HHM::HHM() @@ -20,26 +24,35 @@ HARTModuleDirectory* HHM::getModuleDirectory() void HHM::newScene(Scene* scene) { - // extract mesh's + HARTModule* mod = mDirectory.getActiveModule(); + std::vector meshs = scene->getRenderables(); + for (const auto* mesh : meshs) { + // mesh->getVerticies(); + } + // mod->submitTris(); } void HHM::notifySceneUpdate() { + HARTModule* mod = mDirectory.getActiveModule(); // same again } -void HHM::startTrace(RaySource* sourceScatter) +void HHM::startTrace(RayField* sourceScatter) { - + HARTModule* mod = mDirectory.getActiveModule(); + mod->submitQueue(reinterpret_cast>(sourceScatter)); } void HHM::rayReturn(HitInfo* hit) { + HARTModule* mod = mDirectory.getActiveModule(); } void HHM::bounce(Ray* newRay) { + HARTModule* mod = mDirectory.getActiveModule(); } diff --git a/src/hart_module.hpp b/src/hart_module.hpp index afa10ac..795cfd1 100644 --- a/src/hart_module.hpp +++ b/src/hart_module.hpp @@ -9,7 +9,7 @@ namespace inferno { class Scene; class Ray; -class RaySource; +class RayField; class HitInfo; class HARTModule; @@ -25,7 +25,7 @@ public: void newScene(Scene* scene); void notifySceneUpdate(); - void startTrace(RaySource* sourceScatter); + void startTrace(RayField* sourceScatter); void rayReturn(HitInfo* hit); void bounce(Ray* newRay); diff --git a/src/renderer/renderer.cpp b/src/renderer/renderer.cpp index 34ca190..0199a53 100644 --- a/src/renderer/renderer.cpp +++ b/src/renderer/renderer.cpp @@ -42,6 +42,7 @@ void RayRenderer::setScene(Scene* scene) delete mRaySource; } mRaySource = new RaySource(scene->getCamera()); + mIface->newScene(scene); } void RayRenderer::setTargetSize(glm::ivec2 size) @@ -70,6 +71,7 @@ void RayRenderer::prepare() void RayRenderer::draw() { RayField startRays = mRaySource->getInitialRays(true); + mIface->startTrace(&startRays); for (int x = 0; x < mRenderTargetSize.x; x++) for (int y = 0; y < mRenderTargetSize.y; y++)