diff --git a/libhart/scene/camera.hpp b/libhart/scene/camera.hpp index f294803..1e3f004 100644 --- a/libhart/scene/camera.hpp +++ b/libhart/scene/camera.hpp @@ -14,8 +14,8 @@ typedef struct _CameraImpl { } _CameraImpl; typedef struct Viewport { - glm::ivec2 Raster; - glm::ivec2 Ray; + glm::ivec2 Raster = {1920, 1080}; + glm::ivec2 Ray = {1920, 1080}; } Viewports; typedef struct Camera { diff --git a/src/inferno.cpp b/src/inferno.cpp index 6f8f151..e296d32 100644 --- a/src/inferno.cpp +++ b/src/inferno.cpp @@ -3,6 +3,7 @@ #include // #include "gui/layout.hpp" #include "imgui/imgui.h" +#include "renderer/renderer.hpp" #include "scene/scene.hpp" #include "window.hpp" @@ -104,7 +105,12 @@ InfernoApp* inferno_create() scene::scene_add_object(app->Scene, object); app->PreviewRenderer = graphics::preview_create(); + graphics::preview_set_viewport(app->PreviewRenderer, app->Scene->Camera); app->RayRenderer = graphics::rayr_create(app->Scene); + graphics::rayr_set_viewport(app->RayRenderer, app->Scene->Camera); + + yolo::info("Preview viewport size: {}x{}", app->PreviewRenderer->Viewport->x, app->PreviewRenderer->Viewport->y); + yolo::info("Rayr viewport size: {}x{}", app->RayRenderer->Viewport->x, app->RayRenderer->Viewport->y); return app; } @@ -278,7 +284,6 @@ int inferno_run(InfernoApp* app) } if (ImGui::TreeNode("RayTraced Render")) { - ImGui::Text("Lol"); graphics::rayr_draw_ui(app->RayRenderer); ImGui::TreePop(); } @@ -303,12 +308,17 @@ int inferno_run(InfernoApp* app) { ImGui::GetWindowSize().x, ImGui::GetWindowSize().y }, ImVec2(0, 1), ImVec2(1, 0)); - glBindFramebuffer(GL_FRAMEBUFFER, 0); ImGui::End(); } if (ImGui::Begin("Render")) { graphics::rayr_draw(app->RayRenderer); + + ImTextureID texture = (ImTextureID)graphics::rayr_get_rendered_texture(app->RayRenderer); + ImGui::Image( + texture, + { ImGui::GetWindowSize().x, ImGui::GetWindowSize().y }, + ImVec2(0, 1), ImVec2(1, 0)); ImGui::End(); } diff --git a/src/renderer/renderer.cpp b/src/renderer/renderer.cpp index 026a48e..e11d055 100644 --- a/src/renderer/renderer.cpp +++ b/src/renderer/renderer.cpp @@ -28,6 +28,7 @@ RayRenderer* rayr_create(scene::Scene* scene) auto viewport = camera_ray_get_viewport(camera); renderer->Viewport = &viewport; + yolo::debug("Raytracing Rendering {}x{} viewport", renderer->Viewport->x, renderer->Viewport->y); renderer->RenderData = new glm::fvec4[renderer->Viewport->x * renderer->Viewport->y]; glGenTextures(1, &renderer->RenderTargetTexture); @@ -55,9 +56,10 @@ void rayr_draw_ui(RayRenderer* renderer) { } -void rayr_set_viewport(RayRenderer* renderer, glm::ivec2 size) +void rayr_set_viewport(RayRenderer* renderer, Camera* camera) { - renderer->Viewport = &size; + auto viewport = camera_ray_get_viewport(camera); + renderer->Viewport = &viewport; delete renderer->RenderData; renderer->RenderData = new glm::fvec4[renderer->Viewport->x * renderer->Viewport->y]; @@ -76,19 +78,20 @@ void rayr_set_viewport(RayRenderer* renderer, glm::ivec2 size) glBindTexture(GL_TEXTURE_2D, 0); } -GLuint rayr_get_rendered_texture(RayRenderer*& renderer) +GLuint rayr_get_rendered_texture(RayRenderer* renderer) { glBindFramebuffer(GL_FRAMEBUFFER, 0); + yolo::debug("Getting rendered texture {}", renderer->RenderTargetTexture); glBindTexture(GL_TEXTURE_2D, renderer->RenderTargetTexture); return renderer->RenderTargetTexture; } -glm::fvec4* rayr_get_render_data(RayRenderer*& renderer) +glm::fvec4* rayr_get_render_data(RayRenderer* renderer) { return renderer->RenderData; } -void rayr_prepare(RayRenderer*& renderer) +void rayr_prepare(RayRenderer* renderer) { assert(renderer->Scene != nullptr); if (scene::scene_did_update(renderer->Scene)) { @@ -104,9 +107,14 @@ void rayr_draw(RayRenderer* renderer) // ray data and nothing else being reallocated every frame for no reason // ReferencedRayField startRays = mRaySource->getInitialRays(true); - // for (int x = 0; x < renderer->Viewport->x; x++) - // for (int y = 0; y < renderer->Viewport->y; y++) - // renderer->RenderData[y * renderer->Viewport->x + x] = { 0.1f, 0.1f, 0.1f, 1.0f }; + yolo::debug("Rendering {}x{} viewport", renderer->Viewport->x, renderer->Viewport->y); + for (int x = 0; x < renderer->Viewport->x; x++) { + yolo::debug("Rendering column {}", x); + for (int y = 0; y < renderer->Viewport->y; y++) { + yolo::debug("Rendering row {}", y); + renderer->RenderData[y * renderer->Viewport->x + x] = { 0.1f, 1.0f, 0.1f, 1.0f }; + } + } } // // void RayRenderer::computeHit(HitInfo* info) diff --git a/src/renderer/renderer.hpp b/src/renderer/renderer.hpp index ca6054a..130e5f2 100644 --- a/src/renderer/renderer.hpp +++ b/src/renderer/renderer.hpp @@ -37,7 +37,7 @@ RayRenderer* rayr_create(scene::Scene* scene); void rayr_cleanup(RayRenderer* renderer); void rayr_draw_ui(RayRenderer* renderer); -void rayr_set_viewport(RayRenderer* renderer, glm::ivec2 size); +void rayr_set_viewport(RayRenderer* renderer, Camera* camera); GLuint rayr_get_rendered_texture(RayRenderer* renderer); glm::fvec4* rayr_get_render_data(RayRenderer* renderer); diff --git a/src/scene/camera.cpp b/src/scene/camera.cpp index c9945cd..6ba2401 100644 --- a/src/scene/camera.cpp +++ b/src/scene/camera.cpp @@ -10,8 +10,6 @@ Camera* camera_create() camera->_impl = new _CameraImpl; camera->Views = Viewports(); - camera->Views.Raster = glm::ivec2(800, 600); - camera->Views.Ray = glm::ivec2(800, 600); camera->ProjectionMatrix = glm::perspective( glm::radians(camera->FOV),