From 977b4eb63e484df9374b2692d7e90688b85c91b5 Mon Sep 17 00:00:00 2001 From: TheRedShip Date: Thu, 30 Jan 2025 17:16:03 +0100 Subject: [PATCH] ~ | some opti --- includes/RT/Shader.hpp | 2 +- scenes/dragon.rt | 9 ++------- shaders/trace.glsl | 19 +++++++++-------- srcs/RT.cpp | 46 ++---------------------------------------- srcs/class/Shader.cpp | 6 +++++- 5 files changed, 21 insertions(+), 61 deletions(-) diff --git a/includes/RT/Shader.hpp b/includes/RT/Shader.hpp index 029de67..e94714b 100644 --- a/includes/RT/Shader.hpp +++ b/includes/RT/Shader.hpp @@ -22,7 +22,7 @@ class Shader ~Shader(void); void attach(void); - void setupVertexBuffer(const Vertex* vertices, size_t size); + void setupVertexBuffer(); void drawTriangles(size_t size); // void setBool(const std::string &name, bool value) const; diff --git a/scenes/dragon.rt b/scenes/dragon.rt index a0ed4e7..bb191c4 100644 --- a/scenes/dragon.rt +++ b/scenes/dragon.rt @@ -24,13 +24,8 @@ pl 0 -2 0 0 1 0 2 // floor qu -1 1.999 -1 2 0 0 0 0 2 6 -OBJ scenes/obj/Dragon_800K.obj -0.5 0 0.55 5 0 90 0 -OBJ scenes/obj/Dragon_800K.obj 0.5 0 -0.55 5 0 -90 0 - - -# OBJ obj/Model.obj - -# OBJ obj/Lowpoly_tree_sample.obj +OBJ obj/Dragon_800K.obj -0.5 0 0.55 5 0 90 0 +OBJ obj/Dragon_800K.obj 0.5 0 -0.55 5 0 -90 0 po -1.99 -0.5 -0.5 0 1 0 0 0 1 1 4 po 1.99 -0.5 -0.5 0 1 0 0 0 1 0 4 diff --git a/shaders/trace.glsl b/shaders/trace.glsl index 110ba58..df84795 100644 --- a/shaders/trace.glsl +++ b/shaders/trace.glsl @@ -168,21 +168,24 @@ hitInfo traceRay(Ray ray) hitInfo hitScene; hitInfo hit; + #if 0 for (int i = 0; i < 10; i++) // portal ray { hitBVH = traverseBVHs(ray); hitScene = traceScene(ray); hit = hitBVH.t < hitScene.t ? hitBVH : hitScene; - #if 1 - if (hit.obj_index == -1 || objects[hit.obj_index].type != 5) - break ; - ray = portalRay(ray, hit); - ray.inv_direction = (1.0 / ray.direction); - #else - return (hit); - #endif + if (hit.obj_index == -1 || objects[hit.obj_index].type != 5) + break ; + ray = portalRay(ray, hit); + ray.inv_direction = (1.0 / ray.direction); + return (hit); } + #else + hitBVH = traverseBVHs(ray); + hitScene = traceScene(ray); + return (hitBVH.t < hitScene.t ? hitBVH : hitScene); + #endif return (hit); } diff --git a/srcs/RT.cpp b/srcs/RT.cpp index ccf2e97..8b995d8 100644 --- a/srcs/RT.cpp +++ b/srcs/RT.cpp @@ -112,15 +112,10 @@ int main(int argc, char **argv) shader.attach(); - Vertex vertices[3] = {{{-1.0f, -1.0f}, {0.0f, 0.0f}},{{3.0f, -1.0f}, {2.0f, 0.0f}},{{-1.0f, 3.0f}, {0.0f, 2.0f}}}; - size_t size = sizeof(vertices) / sizeof(Vertex) / 3; - shader.setupVertexBuffer(vertices, size); - - std::vector recorded_fps; + shader.setupVertexBuffer(); while (!window.shouldClose()) { - glUseProgram(shader.getProgramCompute()); glBindBuffer(GL_SHADER_STORAGE_BUFFER, materialSSBO); @@ -131,37 +126,7 @@ int main(int argc, char **argv) glBindBuffer(GL_SHADER_STORAGE_BUFFER, lightSSBO); glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, gpu_lights_array.size() * sizeof(int), gpu_lights_array.data()); - Camera *camera = scene.getCamera(); - - // performance profiling - if (false) - { - float time = (float)(glfwGetTime()) ; - - recorded_fps.push_back((int)window.getFps()); - - float y_offset = 35; - float dist_to_obj = 55; - float speed = 0.5; - - camera->setPosition(glm::vec3( - cos((time + 6.28) * speed) * dist_to_obj, - y_offset, - sin((time + 6.28) * speed) * dist_to_obj - )); - - glm::vec3 direction = glm::normalize(camera->getPosition()); - float yaw = glm::degrees(atan2(direction.z, direction.x)); - - if ((int)yaw == 179) - break; - - camera->setDirection(0, yaw - 180); - camera->updateCameraVectors(); - } - // - - GPUCamera camera_data = camera->getGPUData(); + GPUCamera camera_data = scene.getCamera()->getGPUData(); glBindBuffer(GL_UNIFORM_BUFFER, cameraUBO); glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(GPUCamera), &camera_data); @@ -200,13 +165,6 @@ int main(int argc, char **argv) ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); - - // performance profiling - std::ofstream file("fps.txt"); - for (int i = 0; i < (int) recorded_fps.size(); i++) - file << recorded_fps[i] << std::endl; - file.close(); - // return (0); } diff --git a/srcs/class/Shader.cpp b/srcs/class/Shader.cpp index a17a557..2d569f7 100644 --- a/srcs/class/Shader.cpp +++ b/srcs/class/Shader.cpp @@ -151,8 +151,12 @@ void Shader::checkCompileErrors(GLuint shader) } } -void Shader::setupVertexBuffer(const Vertex* vertices, size_t size) +void Shader::setupVertexBuffer() { + + Vertex vertices[3] = {{{-1.0f, -1.0f}, {0.0f, 0.0f}},{{3.0f, -1.0f}, {2.0f, 0.0f}},{{-1.0f, 3.0f}, {0.0f, 2.0f}}}; + size_t size = sizeof(vertices) / sizeof(Vertex) / 3; + glGenVertexArrays(1, &_screen_VAO); glGenBuffers(1, &_screen_VBO);