| 12 | extern ImGuiLogger g_imgui_logger; |
| 13 | |
| 14 | DisplayViewSystem::DisplayViewSystem(std::shared_ptr<GPURenderer> renderer, RenderWindow* render_window) |
| 15 | { |
| 16 | m_renderer = renderer; |
| 17 | m_render_window = render_window; |
| 18 | |
| 19 | // Creating the texture that will contain the path traced data to be displayed |
| 20 | // by the shader. |
| 21 | glGenTextures(1, &m_display_texture_1.first); |
| 22 | glGenTextures(1, &m_display_texture_2.first); |
| 23 | |
| 24 | // This empty VAO is necessary on NVIDIA drivers even though |
| 25 | // we're hardcoding our full screen quad in the vertex shader |
| 26 | glCreateVertexArrays(1, &m_vao); |
| 27 | |
| 28 | OpenGLShader fullscreen_quad_vertex_shader = OpenGLShader(GLSL_SHADERS_DIRECTORY "/fullscreen_quad.vert", OpenGLShader::VERTEX_SHADER); |
| 29 | OpenGLShader default_display_fragment_shader = OpenGLShader(GLSL_SHADERS_DIRECTORY "/default_display.frag", OpenGLShader::FRAGMENT_SHADER); |
| 30 | OpenGLShader blend_2_display_fragment_shader = OpenGLShader(GLSL_SHADERS_DIRECTORY "/blend_2_display.frag", OpenGLShader::FRAGMENT_SHADER); |
| 31 | OpenGLShader normal_display_fragment_shader = OpenGLShader(GLSL_SHADERS_DIRECTORY "/normal_display.frag", OpenGLShader::FRAGMENT_SHADER); |
| 32 | OpenGLShader albedo_display_fragment_shader = OpenGLShader(GLSL_SHADERS_DIRECTORY "/albedo_display.frag", OpenGLShader::FRAGMENT_SHADER); |
| 33 | OpenGLShader adaptive_display_fragment_shader = OpenGLShader(GLSL_SHADERS_DIRECTORY "/heatmap_int.frag", OpenGLShader::FRAGMENT_SHADER); |
| 34 | OpenGLShader pixel_converged_display_fragment_shader = OpenGLShader(GLSL_SHADERS_DIRECTORY "/boolmap_int.frag", OpenGLShader::FRAGMENT_SHADER); |
| 35 | OpenGLShader white_furnace_threshold_shader = OpenGLShader(GLSL_SHADERS_DIRECTORY "/white_furnace_threshold.frag", OpenGLShader::FRAGMENT_SHADER); |
| 36 | |
| 37 | // Making shared_ptr<OpenGLProgram>s here because multiple display views may share the same OpenGLProgram |
| 38 | std::shared_ptr<OpenGLProgram> default_display_program = std::make_shared<OpenGLProgram>(fullscreen_quad_vertex_shader, default_display_fragment_shader); |
| 39 | std::shared_ptr<OpenGLProgram> blend_2_display_program = std::make_shared<OpenGLProgram>(fullscreen_quad_vertex_shader, blend_2_display_fragment_shader); |
| 40 | std::shared_ptr<OpenGLProgram> normal_display_program = std::make_shared<OpenGLProgram>(fullscreen_quad_vertex_shader, normal_display_fragment_shader); |
| 41 | std::shared_ptr<OpenGLProgram> albedo_display_program = std::make_shared<OpenGLProgram>(fullscreen_quad_vertex_shader, albedo_display_fragment_shader); |
| 42 | std::shared_ptr<OpenGLProgram> pixel_convergence_heatmap_display_program = std::make_shared<OpenGLProgram>(fullscreen_quad_vertex_shader, adaptive_display_fragment_shader); |
| 43 | std::shared_ptr<OpenGLProgram> pixel_converged_display_program = std::make_shared<OpenGLProgram>(fullscreen_quad_vertex_shader, pixel_converged_display_fragment_shader); |
| 44 | std::shared_ptr<OpenGLProgram> white_furnace_threshold_program = std::make_shared<OpenGLProgram>(fullscreen_quad_vertex_shader, white_furnace_threshold_shader); |
| 45 | |
| 46 | // Creating all the display views |
| 47 | DisplayView default_display_view = DisplayView(DisplayViewType::DEFAULT, default_display_program); |
| 48 | DisplayView gmon_blend_display_view = DisplayView(DisplayViewType::GMON_BLEND, blend_2_display_program); |
| 49 | DisplayView denoise_blend_display_view = DisplayView(DisplayViewType::DENOISED_BLEND, blend_2_display_program); |
| 50 | DisplayView normals_display_view = DisplayView(DisplayViewType::DISPLAY_DENOISER_NORMALS, normal_display_program); |
| 51 | DisplayView albedo_display_view = DisplayView(DisplayViewType::DISPLAY_DENOISER_ALBEDO, albedo_display_program); |
| 52 | DisplayView pixel_convergence_heatmap_display_view = DisplayView(DisplayViewType::PIXEL_CONVERGENCE_HEATMAP, pixel_convergence_heatmap_display_program); |
| 53 | DisplayView pixel_converged_display_view = DisplayView(DisplayViewType::PIXEL_CONVERGED_MAP, pixel_converged_display_program); |
| 54 | DisplayView white_furnace_threshold_view = DisplayView(DisplayViewType::WHITE_FURNACE_THRESHOLD, white_furnace_threshold_program); |
| 55 | |
| 56 | // Adding the display views to the map |
| 57 | m_display_views[DisplayViewType::DEFAULT] = default_display_view; |
| 58 | m_display_views[DisplayViewType::GMON_BLEND] = gmon_blend_display_view; |
| 59 | m_display_views[DisplayViewType::DENOISED_BLEND] = denoise_blend_display_view; |
| 60 | m_display_views[DisplayViewType::DISPLAY_DENOISER_NORMALS] = normals_display_view; |
| 61 | m_display_views[DisplayViewType::DISPLAY_DENOISER_ALBEDO] = albedo_display_view; |
| 62 | m_display_views[DisplayViewType::PIXEL_CONVERGENCE_HEATMAP] = pixel_convergence_heatmap_display_view; |
| 63 | m_display_views[DisplayViewType::PIXEL_CONVERGED_MAP] = pixel_converged_display_view; |
| 64 | m_display_views[DisplayViewType::WHITE_FURNACE_THRESHOLD] = white_furnace_threshold_view; |
| 65 | |
| 66 | // Denoiser blend by default if denoising enabled. Default view otherwise |
| 67 | DisplayViewType default_display_view_type = DisplayViewType::DEFAULT; |
| 68 | if (m_render_window->get_application_settings()->enable_denoising) |
| 69 | default_display_view_type = DisplayViewType::DENOISED_BLEND; |
| 70 | else if (m_renderer->get_gmon_render_pass()->is_render_pass_used()) |
| 71 | default_display_view_type = DisplayViewType::GMON_BLEND; |
nothing calls this directly
no test coverage detected