Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpu/intern/gpu_compositing.c
| Context not available. | |||||
| return false; | return false; | ||||
| } | } | ||||
| if (!(fx->depth_buffer = GPU_texture_create_depth(w, h, err_out))) { | if (!(fx->depth_buffer = GPU_texture_create_depth(w, h, true, err_out))) { | ||||
| printf("%.256s\n", err_out); | printf("%.256s\n", err_out); | ||||
| cleanup_fx_gl_data(fx, true); | cleanup_fx_gl_data(fx, true); | ||||
| return false; | return false; | ||||
| Context not available. | |||||
| if (do_xray) { | if (do_xray) { | ||||
| if (!fx->depth_buffer_xray && | if (!fx->depth_buffer_xray && | ||||
| !(fx->depth_buffer_xray = GPU_texture_create_depth(fx->gbuffer_dim[0], fx->gbuffer_dim[1], err_out))) | !(fx->depth_buffer_xray = GPU_texture_create_depth(fx->gbuffer_dim[0], fx->gbuffer_dim[1], true, err_out))) | ||||
| { | { | ||||
| printf("%.256s\n", err_out); | printf("%.256s\n", err_out); | ||||
| cleanup_fx_gl_data(fx, true); | cleanup_fx_gl_data(fx, true); | ||||
| Context not available. | |||||
| GPU_shader_bind(depth_resolve_shader); | GPU_shader_bind(depth_resolve_shader); | ||||
| GPU_texture_bind(fx->depth_buffer_xray, 0); | GPU_texture_bind(fx->depth_buffer_xray, 0); | ||||
| GPU_texture_filter_mode(fx->depth_buffer_xray, false, true); | GPU_texture_filter_mode(fx->depth_buffer_xray, false, true, false); | ||||
| GPU_shader_uniform_texture(depth_resolve_shader, interface->depth_uniform, fx->depth_buffer_xray); | GPU_shader_uniform_texture(depth_resolve_shader, interface->depth_uniform, fx->depth_buffer_xray); | ||||
| /* draw */ | /* draw */ | ||||
| glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||||
| /* disable bindings */ | /* disable bindings */ | ||||
| GPU_texture_filter_mode(fx->depth_buffer_xray, true, false); | GPU_texture_filter_mode(fx->depth_buffer_xray, true, false, false); | ||||
| GPU_texture_unbind(fx->depth_buffer_xray); | GPU_texture_unbind(fx->depth_buffer_xray); | ||||
| GPU_shader_unbind(); | GPU_shader_unbind(); | ||||
| Context not available. | |||||
| GPU_shader_uniform_texture(ssao_shader, interface->color_uniform, src); | GPU_shader_uniform_texture(ssao_shader, interface->color_uniform, src); | ||||
| GPU_texture_bind(fx->depth_buffer, numslots++); | GPU_texture_bind(fx->depth_buffer, numslots++); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, false, true); | GPU_texture_filter_mode(fx->depth_buffer, false, true, false); | ||||
| GPU_shader_uniform_texture(ssao_shader, interface->depth_uniform, fx->depth_buffer); | GPU_shader_uniform_texture(ssao_shader, interface->depth_uniform, fx->depth_buffer); | ||||
| GPU_texture_bind(fx->jitter_buffer, numslots++); | GPU_texture_bind(fx->jitter_buffer, numslots++); | ||||
| Context not available. | |||||
| /* disable bindings */ | /* disable bindings */ | ||||
| GPU_texture_unbind(src); | GPU_texture_unbind(src); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, true, false); | GPU_texture_filter_mode(fx->depth_buffer, true, false, false); | ||||
| GPU_texture_unbind(fx->depth_buffer); | GPU_texture_unbind(fx->depth_buffer); | ||||
| GPU_texture_unbind(fx->jitter_buffer); | GPU_texture_unbind(fx->jitter_buffer); | ||||
| GPU_texture_unbind(fx->ssao_spiral_samples_tex); | GPU_texture_unbind(fx->ssao_spiral_samples_tex); | ||||
| Context not available. | |||||
| GPU_shader_uniform_vector(dof_shader_pass1, interface->invrendertargetdim_uniform, 2, 1, invrendertargetdim); | GPU_shader_uniform_vector(dof_shader_pass1, interface->invrendertargetdim_uniform, 2, 1, invrendertargetdim); | ||||
| GPU_texture_bind(fx->depth_buffer, numslots++); | GPU_texture_bind(fx->depth_buffer, numslots++); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, false, false); | GPU_texture_filter_mode(fx->depth_buffer, false, false, false); | ||||
| GPU_shader_uniform_texture(dof_shader_pass1, interface->depth_uniform, fx->depth_buffer); | GPU_shader_uniform_texture(dof_shader_pass1, interface->depth_uniform, fx->depth_buffer); | ||||
| GPU_texture_bind(src, numslots++); | GPU_texture_bind(src, numslots++); | ||||
| /* disable filtering for the texture so custom downsample can do the right thing */ | /* disable filtering for the texture so custom downsample can do the right thing */ | ||||
| GPU_texture_filter_mode(src, false, false); | GPU_texture_filter_mode(src, false, false, false); | ||||
| GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, src); | GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, src); | ||||
| /* target is the downsampled coc buffer */ | /* target is the downsampled coc buffer */ | ||||
| Context not available. | |||||
| glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||||
| /* disable bindings */ | /* disable bindings */ | ||||
| GPU_texture_filter_mode(src, false, true); | GPU_texture_filter_mode(src, false, true, false); | ||||
| GPU_texture_unbind(src); | GPU_texture_unbind(src); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, true, false); | GPU_texture_filter_mode(fx->depth_buffer, true, false, false); | ||||
| GPU_texture_unbind(fx->depth_buffer); | GPU_texture_unbind(fx->depth_buffer); | ||||
| GPU_framebuffer_texture_detach(fx->dof_half_downsampled_near); | GPU_framebuffer_texture_detach(fx->dof_half_downsampled_near); | ||||
| Context not available. | |||||
| GPU_texture_bind(fx->dof_half_downsampled_far, numslots++); | GPU_texture_bind(fx->dof_half_downsampled_far, numslots++); | ||||
| GPU_texture_bind(fx->dof_half_downsampled_near, numslots++); | GPU_texture_bind(fx->dof_half_downsampled_near, numslots++); | ||||
| GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_half_downsampled_far); | GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_half_downsampled_far); | ||||
| GPU_texture_filter_mode(fx->dof_half_downsampled_far, false, false); | GPU_texture_filter_mode(fx->dof_half_downsampled_far, false, false, false); | ||||
| /* target is the downsampled coc buffer */ | /* target is the downsampled coc buffer */ | ||||
| GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_far_blur, 0, NULL); | GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_far_blur, 0, NULL); | ||||
| Context not available. | |||||
| GPU_framebuffer_texture_detach(fx->dof_far_blur); | GPU_framebuffer_texture_detach(fx->dof_far_blur); | ||||
| GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_half_downsampled_near); | GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_half_downsampled_near); | ||||
| GPU_texture_filter_mode(fx->dof_half_downsampled_near, false, false); | GPU_texture_filter_mode(fx->dof_half_downsampled_near, false, false, false); | ||||
| selection[0] = 1.0f; | selection[0] = 1.0f; | ||||
| selection[1] = 0.0f; | selection[1] = 0.0f; | ||||
| Context not available. | |||||
| GPU_texture_bind(fx->dof_near_blur, numslots++); | GPU_texture_bind(fx->dof_near_blur, numslots++); | ||||
| GPU_shader_uniform_texture(dof_shader_pass3, interface->near_uniform, fx->dof_near_blur); | GPU_shader_uniform_texture(dof_shader_pass3, interface->near_uniform, fx->dof_near_blur); | ||||
| GPU_texture_filter_mode(fx->dof_near_blur, false, true); | GPU_texture_filter_mode(fx->dof_near_blur, false, true, false); | ||||
| GPU_texture_bind(fx->dof_far_blur, numslots++); | GPU_texture_bind(fx->dof_far_blur, numslots++); | ||||
| GPU_shader_uniform_texture(dof_shader_pass3, interface->far_uniform, fx->dof_far_blur); | GPU_shader_uniform_texture(dof_shader_pass3, interface->far_uniform, fx->dof_far_blur); | ||||
| GPU_texture_filter_mode(fx->dof_far_blur, false, true); | GPU_texture_filter_mode(fx->dof_far_blur, false, true, false); | ||||
| GPU_texture_bind(fx->depth_buffer, numslots++); | GPU_texture_bind(fx->depth_buffer, numslots++); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, false, false); | GPU_texture_filter_mode(fx->depth_buffer, false, false, false); | ||||
| GPU_shader_uniform_texture(dof_shader_pass3, interface->depth_uniform, fx->depth_buffer); | GPU_shader_uniform_texture(dof_shader_pass3, interface->depth_uniform, fx->depth_buffer); | ||||
| GPU_texture_bind(src, numslots++); | GPU_texture_bind(src, numslots++); | ||||
| Context not available. | |||||
| GPU_texture_unbind(fx->dof_near_blur); | GPU_texture_unbind(fx->dof_near_blur); | ||||
| GPU_texture_unbind(fx->dof_far_blur); | GPU_texture_unbind(fx->dof_far_blur); | ||||
| GPU_texture_unbind(src); | GPU_texture_unbind(src); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, true, false); | GPU_texture_filter_mode(fx->depth_buffer, true, false, false); | ||||
| GPU_texture_unbind(fx->depth_buffer); | GPU_texture_unbind(fx->depth_buffer); | ||||
| /* may not be attached, in that case this just returns */ | /* may not be attached, in that case this just returns */ | ||||
| Context not available. | |||||
| GPU_shader_uniform_texture(dof_shader_pass1, interface->color_uniform, src); | GPU_shader_uniform_texture(dof_shader_pass1, interface->color_uniform, src); | ||||
| GPU_texture_bind(fx->depth_buffer, numslots++); | GPU_texture_bind(fx->depth_buffer, numslots++); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, false, true); | GPU_texture_filter_mode(fx->depth_buffer, false, true, false); | ||||
| GPU_shader_uniform_texture(dof_shader_pass1, interface->depth_uniform, fx->depth_buffer); | GPU_shader_uniform_texture(dof_shader_pass1, interface->depth_uniform, fx->depth_buffer); | ||||
| /* target is the downsampled coc buffer */ | /* target is the downsampled coc buffer */ | ||||
| Context not available. | |||||
| glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||||
| /* disable bindings */ | /* disable bindings */ | ||||
| GPU_texture_unbind(src); | GPU_texture_unbind(src); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, true, false); | GPU_texture_filter_mode(fx->depth_buffer, true, false, false); | ||||
| GPU_texture_unbind(fx->depth_buffer); | GPU_texture_unbind(fx->depth_buffer); | ||||
| GPU_framebuffer_texture_detach(fx->dof_near_coc_buffer); | GPU_framebuffer_texture_detach(fx->dof_near_coc_buffer); | ||||
| Context not available. | |||||
| GPU_shader_uniform_vector(dof_shader_pass2, interface->viewvecs_uniform, 4, 3, viewvecs[0]); | GPU_shader_uniform_vector(dof_shader_pass2, interface->viewvecs_uniform, 4, 3, viewvecs[0]); | ||||
| GPU_texture_bind(fx->depth_buffer, numslots++); | GPU_texture_bind(fx->depth_buffer, numslots++); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, false, true); | GPU_texture_filter_mode(fx->depth_buffer, false, true, false); | ||||
| GPU_shader_uniform_texture(dof_shader_pass2, interface->depth_uniform, fx->depth_buffer); | GPU_shader_uniform_texture(dof_shader_pass2, interface->depth_uniform, fx->depth_buffer); | ||||
| GPU_texture_bind(fx->dof_near_coc_buffer, numslots++); | GPU_texture_bind(fx->dof_near_coc_buffer, numslots++); | ||||
| Context not available. | |||||
| glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||||
| /* *unbind/detach */ | /* *unbind/detach */ | ||||
| GPU_texture_filter_mode(fx->depth_buffer, true, false); | GPU_texture_filter_mode(fx->depth_buffer, true, false, false); | ||||
| GPU_texture_unbind(fx->depth_buffer); | GPU_texture_unbind(fx->depth_buffer); | ||||
| GPU_texture_unbind(fx->dof_near_coc_final_buffer); | GPU_texture_unbind(fx->dof_near_coc_final_buffer); | ||||
| Context not available. | |||||
| GPU_shader_uniform_texture(dof_shader_pass5, interface->medium_blurred_uniform, fx->dof_near_coc_buffer); | GPU_shader_uniform_texture(dof_shader_pass5, interface->medium_blurred_uniform, fx->dof_near_coc_buffer); | ||||
| GPU_texture_bind(fx->depth_buffer, numslots++); | GPU_texture_bind(fx->depth_buffer, numslots++); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, false, true); | GPU_texture_filter_mode(fx->depth_buffer, false, true, false); | ||||
| GPU_shader_uniform_texture(dof_shader_pass5, interface->depth_uniform, fx->depth_buffer); | GPU_shader_uniform_texture(dof_shader_pass5, interface->depth_uniform, fx->depth_buffer); | ||||
| /* if this is the last pass, prepare for rendering on the frambuffer */ | /* if this is the last pass, prepare for rendering on the frambuffer */ | ||||
| Context not available. | |||||
| GPU_texture_unbind(fx->dof_near_coc_buffer); | GPU_texture_unbind(fx->dof_near_coc_buffer); | ||||
| GPU_texture_unbind(fx->dof_near_coc_blurred_buffer); | GPU_texture_unbind(fx->dof_near_coc_blurred_buffer); | ||||
| GPU_texture_unbind(src); | GPU_texture_unbind(src); | ||||
| GPU_texture_filter_mode(fx->depth_buffer, true, false); | GPU_texture_filter_mode(fx->depth_buffer, true, false, false); | ||||
| GPU_texture_unbind(fx->depth_buffer); | GPU_texture_unbind(fx->depth_buffer); | ||||
| /* may not be attached, in that case this just returns */ | /* may not be attached, in that case this just returns */ | ||||
| Context not available. | |||||