very basic working version

This commit is contained in:
Dynamitos
2025-01-24 22:23:33 +01:00
parent c534c540e0
commit 39b5de6576
5 changed files with 34 additions and 23 deletions
+25 -15
View File
@@ -1,21 +1,28 @@
#include "Scene.h"
#include <iostream>
#include <chrono>
Scene::Scene() {}
Scene::~Scene() {}
static bool firstTime = true;
void Scene::render(Camera cam, RenderParameter params)
{
pendingCancel = true;
worker.join();
if (!firstTime)
{
pendingCancel = true;
worker.join();
firstTime = false;
}
pendingCancel = false;
image.clear();
accumulator.clear();
image.resize(params.width * params.height);
accumulator.resize(params.width * params.height);
worker = std::thread(
[&]()
{
image.clear();
accumulator.clear();
image.resize(params.width * params.height * 3);
accumulator.resize(params.width * params.height * 3);
for (int samp = 0; samp < params.numSamples; ++samp)
{
if (pendingCancel)
@@ -23,18 +30,21 @@ void Scene::render(Camera cam, RenderParameter params)
Batch batch;
for (int w = 0; w < params.width; ++w)
{
for (int h = 0; h < params.height; ++h)
{
batch.jobs.push_back(
[&]()
batch.jobs.push_back(
[&, w]()
{
for (int h = 0; h < params.height; ++h)
{
Ray r = Ray();
bvh.traceRay(r);
});
}
// Ray r = Ray();
// bvh.traceRay(r);
accumulator[w + h * params.width] +=
glm::vec3(w / float(params.width * params.numSamples), h / float(params.height * params.numSamples), 0);
}
});
}
threadPool.runBatch(std::move(batch));
std::memcpy(image.data(), accumulator.data(), accumulator.size());
std::memcpy(image.data(), accumulator.data(), accumulator.size() * sizeof(glm::vec3));
std::cout << samp << std::endl;
}
});
}
+3 -3
View File
@@ -17,14 +17,14 @@ class Scene
Scene();
~Scene();
void render(Camera cam, RenderParameter params);
constexpr const std::vector<unsigned char>& getImage() const { return image; }
constexpr const std::vector<glm::vec3>& getImage() const { return image; }
private:
std::atomic_bool pendingCancel = false;
ThreadPool threadPool;
std::thread worker;
// the thing being displayed
std::vector<unsigned char> image;
std::vector<glm::vec3> image;
// radiance accumulator
std::vector<unsigned char> accumulator;
std::vector<glm::vec3> accumulator;
BVH bvh;
};