From ff9ebb916f6a500deb8448bbfc1eb12d5bdeaba1 Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Fri, 24 Jan 2025 21:20:06 +0100 Subject: [PATCH] rough outline --- src/main.cpp | 23 ++++++++--------------- src/scene/Scene.cpp | 32 ++++++++++++++++++++++---------- src/scene/Scene.h | 12 ++++++++++++ 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 78051bf..5a219d4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,23 +4,16 @@ int main() { - BVH bvh; - bvh.addModels(ModelLoader::loadModel("../cube.fbx"), glm::mat4()); - bvh.generate(); - Window w(1920, 1080); - std::vector texture(1920 * 1080 * 3); - for (int j = 100; j < 200; ++j) - { - for (int i = 0; i < 1920; ++i) - { - texture[(j * 1920 + i) * 3] = 0xff; - texture[(j * 1920 + i) * 3 + 1] = 0xff; - texture[(j * 1920 + i) * 3 + 2] = 0x0; - } - } + Scene scene; + Window window; while (true) { - w.update(texture); + // IMGUI.... + if (Imgui.Button()) + { + scene.render(); + } + window.update(scene.getImage()); } return 0; } \ No newline at end of file diff --git a/src/scene/Scene.cpp b/src/scene/Scene.cpp index e6607ef..355dbd1 100644 --- a/src/scene/Scene.cpp +++ b/src/scene/Scene.cpp @@ -6,17 +6,29 @@ Scene::~Scene() {} void Scene::render(int width, int height, int numSamples) { - image.clear(); - accumulator.clear(); - image.resize(width * height * 3); - accumulator.resize(width * height * 3); - for (int samp = 0; samp < numSamples; ++samp) - { - for (int w = 0; w < width; ++w) + worker = std::thread( + [&]() { - for (int h = 0; h < height; ++h) + image.clear(); + accumulator.clear(); + image.resize(width * height * 3); + for (int samp = 0; samp < numSamples; ++samp) { + std::function job = [&]() + { + std::vector localAccumulator(width * height * 3); + for (int w = 0; w < width; ++w) + { + for (int h = 0; h < height; ++h) + { + if (cancel) + return; + bvh.traceRay(); + } + } + // lock image + // add result to image + }; } - } - } + }); } diff --git a/src/scene/Scene.h b/src/scene/Scene.h index d6142fe..9b517ec 100644 --- a/src/scene/Scene.h +++ b/src/scene/Scene.h @@ -3,12 +3,24 @@ #include "window/Window.h" #include "util/Camera.h" +/// +/// Ray1 +/// Ray2 +/// Ray3 +/// Ray4 +/// Ray5 +/// GammaResolve +/// Ray1 +/// Ray2 +/// Ray3 +/// class Scene { public: Scene(); ~Scene(); void render(Camera cam, int width, int height, int numSamples); + constexpr const std::vector& getImage() const { return image; } private: // the thing being displayed std::vector image;