| 2477 | } |
| 2478 | |
| 2479 | void ApplyPostEffects(std::string post_shader, Engine::DrawingViewport drawing_viewport, vec2 active_screen_start, vec2 active_screen_end, Engine::PostEffectsType post_effects_type, const VBOContainer& quad_vert_vbo, const VBOContainer& quad_index_vbo) { |
| 2480 | ; |
| 2481 | Shaders* shaders = Shaders::Instance(); |
| 2482 | Textures* textures = Textures::Instance(); |
| 2483 | Graphics* graphics = Graphics::Instance(); |
| 2484 | Camera* camera = ActiveCameras::Get(); |
| 2485 | |
| 2486 | PROFILER_GPU_ZONE(g_profiler_ctx, "Apply post effects"); |
| 2487 | graphics->PopFramebuffer(); |
| 2488 | |
| 2489 | if (graphics->multisample_framebuffer_exists) { |
| 2490 | PROFILER_GPU_ZONE(g_profiler_ctx, "Blit MSAA color buffer"); |
| 2491 | graphics->BlitColorBuffer(); |
| 2492 | } |
| 2493 | |
| 2494 | if (kDrawHistogram) { |
| 2495 | CreateHistogram(graphics->screen_color_tex); |
| 2496 | } |
| 2497 | |
| 2498 | GLState gl_state; |
| 2499 | gl_state.blend = false; |
| 2500 | gl_state.cull_face = false; |
| 2501 | gl_state.depth_test = false; |
| 2502 | gl_state.depth_write = false; |
| 2503 | graphics->setGLState(gl_state); |
| 2504 | |
| 2505 | // Blur screen |
| 2506 | quad_vert_vbo.Bind(); |
| 2507 | quad_index_vbo.Bind(); |
| 2508 | CHECK_GL_ERROR(); |
| 2509 | |
| 2510 | if (post_effects_type == Engine::kStraight) { |
| 2511 | PROFILER_GPU_ZONE(g_profiler_ctx, "Draw unfiltered screen quad"); |
| 2512 | // Draw unfiltered HDR scene (e.g. for reflection capture) |
| 2513 | int shader_id = shaders->returnProgram(post_shader); |
| 2514 | graphics->PushViewport(); |
| 2515 | if (drawing_viewport != Engine::kViewport) { |
| 2516 | graphics->setViewport(0, 0, graphics->window_dims[0], graphics->window_dims[1]); |
| 2517 | } else { |
| 2518 | glViewport(0, 0, graphics->window_dims[0], graphics->window_dims[1]); |
| 2519 | } |
| 2520 | shaders->setProgram(shader_id); |
| 2521 | textures->bindTexture(graphics->screen_color_tex); |
| 2522 | // glEnable(GL_FRAMEBUFFER_SRGB ); |
| 2523 | DrawQuad(shader_id); |
| 2524 | // glDisable(GL_FRAMEBUFFER_SRGB ); |
| 2525 | graphics->PopViewport(); |
| 2526 | graphics->PopViewport(); |
| 2527 | } /*else if(post_effects_type == Engine::kFinal && drawing_viewport == Engine::kViewport){ |
| 2528 | PROFILER_GPU_ZONE(g_profiler_ctx, "Tone map only"); |
| 2529 | int shader_id = shaders->returnProgram(post_shader + " #TONE_MAP"); |
| 2530 | graphics->PushViewport(); |
| 2531 | glViewport(0,0,graphics->window_dims[0],graphics->window_dims[1]); |
| 2532 | shaders->setProgram(shader_id); |
| 2533 | textures->bindTexture(graphics->screen_color_tex); |
| 2534 | glEnable(GL_FRAMEBUFFER_SRGB ); |
| 2535 | DrawQuad(shader_id); |
| 2536 | glDisable(GL_FRAMEBUFFER_SRGB ); |
no test coverage detected