diff --git a/src/display/display.cpp b/src/display/display.cpp index f0bcfc1..ce286de 100644 --- a/src/display/display.cpp +++ b/src/display/display.cpp @@ -88,7 +88,7 @@ void Display::SetPixel(int x, int y, uint32_t p) { } void Display::SetPixel(int x, int y, glm::vec3 p) { - Pixel pixel{ (uint8_t)p.x, (uint8_t)p.y, (uint8_t)p.z }; + Pixel pixel{ (uint8_t)p.r, (uint8_t)p.g, (uint8_t)p.b }; m_framebufferMutex.lock(); Framebuffer[y * this->XRes + x] = pixel.rgb(); m_framebufferMutex.unlock(); @@ -112,7 +112,7 @@ void Display::SetPixelSafe(int x, int y, uint32_t p) { void Display::SetPixelSafe(int x, int y, glm::vec3 p) { if (x >= 0 && x < this->XRes && y >= 0 && this->YRes) { - Pixel pixel{ (uint8_t)p.x, (uint8_t)p.y, (uint8_t)p.z }; + Pixel pixel{ (uint8_t)p.r, (uint8_t)p.g, (uint8_t)p.b }; m_framebufferMutex.lock(); Framebuffer[y * this->XRes + x] = pixel.rgb(); m_framebufferMutex.unlock(); diff --git a/src/engine/progressiverenderer.cpp b/src/engine/progressiverenderer.cpp index a077d64..8da979a 100644 --- a/src/engine/progressiverenderer.cpp +++ b/src/engine/progressiverenderer.cpp @@ -33,22 +33,18 @@ void ProgressiveRenderer::Input() { ImGui::NewFrame(); ImGui::Begin("Debug"); - ImGui::Text("Hello, world %d", 123); - if (ImGui::Button("Save")) {} - ImGui::InputText("string", buf, IM_ARRAYSIZE(buf)); - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); ImGui::End(); } -void workerThread(ProgressiveRenderer* renderer, int idd, int xStart, int xRange) { +void workerThread(ProgressiveRenderer* renderer, int idd, int yStart, int yRange) { while (!renderer->Ready) { std::chrono::milliseconds dura(10); std::this_thread::sleep_for(dura); } while (renderer->Ready) { - for (int x = xStart; x < xStart + xRange; x++) - for (int y = 0; y < renderer->m_scene->h; y++) { + for (int y = yStart; y < yStart + yRange; y++) + for (int x = 0; x < renderer->m_scene->w; x++) { Ray ray = renderer->m_scene->camera->CastRay(x, y); glm::vec3 col = renderer->m_engine->GetColour(ray, 0); renderer->m_interface->SetPixelSafe(x, y, col); @@ -57,20 +53,37 @@ void workerThread(ProgressiveRenderer* renderer, int idd, int xStart, int xRange } void ProgressiveRenderer::Render() { - int frames = 0; - auto startTime = std::chrono::high_resolution_clock::now(); + + /* + New design is needed + as follows is pretty + good + + class threadpool { + vector thread* threads + vector bool status + vector uint32 buffers + void merge() + } + + maybe + + class thread { + framebuffer + } + */ // Allocates threads with ranges to render for (int i = 0; i < m_workerMax; i++) { if (i == m_workerMax - 1) { m_workers.push_back(new std::thread(workerThread, this, i, - (m_scene->w / m_workerMax) * i, - -((m_scene->w / m_workerMax) * i - m_scene->w) + (m_scene->h / m_workerMax) * i, + -((m_scene->h / m_workerMax) * i - m_scene->h) )); } else { m_workers.push_back(new std::thread(workerThread, this, i, - (m_scene->w / m_workerMax) * i, - (m_scene->w / m_workerMax) * (i + 1) - (m_scene->w / m_workerMax) * i + (m_scene->h / m_workerMax) * i, + (m_scene->h / m_workerMax) * (i + 1) - (m_scene->h / m_workerMax) * i )); } } @@ -90,22 +103,6 @@ void ProgressiveRenderer::Render() { for (auto& thread : m_workers) { thread->join(); } - - // auto frameStartTime = std::chrono::high_resolution_clock::now(); - - // auto endTime = std::chrono::high_resolution_clock::now(); - - // frames++; - // std::cout << "Frame: " << frames << std::endl; - // std::cout << "Frame Time: " << std::chrono::duration_cast(endTime - frameStartTime).count() - // << ":" << std::chrono::duration_cast(endTime - frameStartTime).count() << "s" << std::endl; - // std::cout << "Avg Frame Time: " << std::chrono::duration_cast(endTime - startTime).count() / frames - // << ":" << std::chrono::duration_cast(endTime - startTime).count() / frames << "s" - // << std::endl << std::endl; - - // Swap framebuffers - // m_interface->Update(); - // m_interface->ClearFramebuffer(); } void ProgressiveRenderer::RenderProgressive() { diff --git a/src/engine/progressiverenderer.hpp b/src/engine/progressiverenderer.hpp index 73cb8cd..91195ec 100644 --- a/src/engine/progressiverenderer.hpp +++ b/src/engine/progressiverenderer.hpp @@ -41,6 +41,6 @@ private: char* buf = ""; float f = 0.0f; }; -void workerThread(ProgressiveRenderer* renderer, int idd, int xStart, int xRange); +void workerThread(ProgressiveRenderer* renderer, int idd, int yStart, int yRange); #endif diff --git a/src/engine/tonemap.cpp b/src/engine/tonemap.cpp index e69de29..6f49600 100644 --- a/src/engine/tonemap.cpp +++ b/src/engine/tonemap.cpp @@ -0,0 +1,16 @@ +#include "tonemap.hpp" + +// Need to map a vector of floats to a buffer. need to rework engine first +void MapHRDLDRBasic(uint32_t* buffer, int w, int h) { + + for (int x = 0; x < w; x++) + for (int y = 0; y < h; y++) { + + } +} + + + +int index(int x, int y, int w) { + return (y * w + x); +} diff --git a/src/engine/tonemap.hpp b/src/engine/tonemap.hpp index e69de29..7b9697a 100644 --- a/src/engine/tonemap.hpp +++ b/src/engine/tonemap.hpp @@ -0,0 +1,8 @@ +#ifndef INFERNO_ENGINE_TONEMAP_H_ +#define INFERNO_ENGINE_TONEMAP_H_ + +#include "../common.hpp" + +void MapHRDLDRBasic(uint32_t* buffer, int w, int h); + +#endif diff --git a/test/main.cpp b/test/main.cpp index ffc9a89..dfd3e85 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -24,17 +24,17 @@ int main(int argc, char** argv) { // object->Translate({ 0.0f, -5.0f, -20.0f }); // std::vector tris = LoadTrianglesBasic("/home/ben/programming/inferno/resources/lucy-normals.obj"); - //std::vector tris = LoadTrianglesBasic("E:/Projects/Inferno/resources/lucy-normals.obj"); - //for (const auto& object : tris) - // object->Translate({ 0.0f, -3.9f, -10.6f }); + // std::vector tris = LoadTrianglesBasic("E:/Projects/Inferno/resources/lucy-normals.obj"); + // for (const auto& object : tris) + // object->Translate({ 0.0f, -3.9f, -10.6f }); //std::vector tris = LoadTrianglesBasic("/home/ben/programming/inferno/resources/cornell.obj"); std::vector tris = LoadTrianglesBasic("E:/Projects/Inferno/resources/cornell.obj"); for (const auto& object : tris) - object->Translate({ 0.0f, -0.9f, -3.0f }); + object->Translate({ 0.0f, -0.9f, -3.0f }); Mesh* mesh = new Mesh(tris); - //mesh->Optimise(); + mesh->Optimise(); scene->meshs.push_back(mesh); inferno.SetScene(scene);