mirror of
https://github.com/TheRedShip/RT_GPU.git
synced 2025-09-27 18:48:36 +02:00
~ | some opti
This commit is contained in:
@ -22,7 +22,7 @@ class Shader
|
|||||||
~Shader(void);
|
~Shader(void);
|
||||||
|
|
||||||
void attach(void);
|
void attach(void);
|
||||||
void setupVertexBuffer(const Vertex* vertices, size_t size);
|
void setupVertexBuffer();
|
||||||
void drawTriangles(size_t size);
|
void drawTriangles(size_t size);
|
||||||
|
|
||||||
// void setBool(const std::string &name, bool value) const;
|
// void setBool(const std::string &name, bool value) const;
|
||||||
|
@ -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
|
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 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/Dragon_800K.obj 0.5 0 -0.55 5 0 -90 0
|
||||||
|
|
||||||
|
|
||||||
# OBJ obj/Model.obj
|
|
||||||
|
|
||||||
# OBJ obj/Lowpoly_tree_sample.obj
|
|
||||||
|
|
||||||
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 1 4
|
||||||
po 1.99 -0.5 -0.5 0 1 0 0 0 1 0 4
|
po 1.99 -0.5 -0.5 0 1 0 0 0 1 0 4
|
||||||
|
@ -168,21 +168,24 @@ hitInfo traceRay(Ray ray)
|
|||||||
hitInfo hitScene;
|
hitInfo hitScene;
|
||||||
hitInfo hit;
|
hitInfo hit;
|
||||||
|
|
||||||
|
#if 0
|
||||||
for (int i = 0; i < 10; i++) // portal ray
|
for (int i = 0; i < 10; i++) // portal ray
|
||||||
{
|
{
|
||||||
hitBVH = traverseBVHs(ray);
|
hitBVH = traverseBVHs(ray);
|
||||||
hitScene = traceScene(ray);
|
hitScene = traceScene(ray);
|
||||||
|
|
||||||
hit = hitBVH.t < hitScene.t ? hitBVH : hitScene;
|
hit = hitBVH.t < hitScene.t ? hitBVH : hitScene;
|
||||||
#if 1
|
|
||||||
if (hit.obj_index == -1 || objects[hit.obj_index].type != 5)
|
if (hit.obj_index == -1 || objects[hit.obj_index].type != 5)
|
||||||
break ;
|
break ;
|
||||||
ray = portalRay(ray, hit);
|
ray = portalRay(ray, hit);
|
||||||
ray.inv_direction = (1.0 / ray.direction);
|
ray.inv_direction = (1.0 / ray.direction);
|
||||||
#else
|
|
||||||
return (hit);
|
return (hit);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
hitBVH = traverseBVHs(ray);
|
||||||
|
hitScene = traceScene(ray);
|
||||||
|
return (hitBVH.t < hitScene.t ? hitBVH : hitScene);
|
||||||
|
#endif
|
||||||
|
|
||||||
return (hit);
|
return (hit);
|
||||||
}
|
}
|
||||||
|
46
srcs/RT.cpp
46
srcs/RT.cpp
@ -112,15 +112,10 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
shader.attach();
|
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}}};
|
shader.setupVertexBuffer();
|
||||||
size_t size = sizeof(vertices) / sizeof(Vertex) / 3;
|
|
||||||
shader.setupVertexBuffer(vertices, size);
|
|
||||||
|
|
||||||
std::vector<int> recorded_fps;
|
|
||||||
|
|
||||||
while (!window.shouldClose())
|
while (!window.shouldClose())
|
||||||
{
|
{
|
||||||
|
|
||||||
glUseProgram(shader.getProgramCompute());
|
glUseProgram(shader.getProgramCompute());
|
||||||
|
|
||||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, materialSSBO);
|
glBindBuffer(GL_SHADER_STORAGE_BUFFER, materialSSBO);
|
||||||
@ -131,37 +126,7 @@ int main(int argc, char **argv)
|
|||||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, lightSSBO);
|
glBindBuffer(GL_SHADER_STORAGE_BUFFER, lightSSBO);
|
||||||
glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, gpu_lights_array.size() * sizeof(int), gpu_lights_array.data());
|
glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, gpu_lights_array.size() * sizeof(int), gpu_lights_array.data());
|
||||||
|
|
||||||
Camera *camera = scene.getCamera();
|
GPUCamera camera_data = scene.getCamera()->getGPUData();
|
||||||
|
|
||||||
// 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();
|
|
||||||
glBindBuffer(GL_UNIFORM_BUFFER, cameraUBO);
|
glBindBuffer(GL_UNIFORM_BUFFER, cameraUBO);
|
||||||
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(GPUCamera), &camera_data);
|
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(GPUCamera), &camera_data);
|
||||||
|
|
||||||
@ -201,12 +166,5 @@ int main(int argc, char **argv)
|
|||||||
ImGui_ImplGlfw_Shutdown();
|
ImGui_ImplGlfw_Shutdown();
|
||||||
ImGui::DestroyContext();
|
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);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
glGenVertexArrays(1, &_screen_VAO);
|
||||||
glGenBuffers(1, &_screen_VBO);
|
glGenBuffers(1, &_screen_VBO);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user