This commit is contained in:
Ben Kyd
2023-10-17 19:14:52 +01:00
parent 01a57125d0
commit 5352a22ff8
5 changed files with 31 additions and 15 deletions

View File

@@ -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 {

View File

@@ -3,6 +3,7 @@
#include <version.hpp>
// #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();
}

View File

@@ -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)

View File

@@ -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);

View File

@@ -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),