Differential D6922 Diff 22033 source/blender/gpu/shaders/gpu_shader_image_overlays_stereo_merge_frag.glsl
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpu/shaders/gpu_shader_image_overlays_stereo_merge_frag.glsl
- This file was added.
| #define S3D_DISPLAY_ANAGLYPH 0 | |||||
| #define S3D_DISPLAY_INTERLACE 1 | |||||
| // #define S3D_DISPLAY_PAGEFLIP 2 | |||||
| #define S3D_DISPLAY_SIDEBYSIDE 3 | |||||
| #define S3D_DISPLAY_TOPBOTTOM 4 | |||||
| #define S3D_INTERLACE_ROW 0 | |||||
| #define S3D_INTERLACE_COLUMN 1 | |||||
| #define S3D_INTERLACE_CHECKERBOARD 2 | |||||
| #define S3D_ANAGLYPH_REDCYAN 0 | |||||
| #define S3D_ANAGLYPH_GREENMAGENTA 1 | |||||
fclem: Camel Case for uniform samplers. | |||||
| #define S3D_ANAGLYPH_YELLOWBLUE 2 | |||||
| /* Composite stereo textures */ | |||||
| uniform sampler2D image_r_texture; | |||||
| uniform sampler2D image_l_texture; | |||||
| uniform sampler2D overlays_r_texture; | |||||
| uniform sampler2D overlays_l_texture; | |||||
Done Inline ActionsDid you mean layout(location = 1) ? Index is only when using dual source blending. Here we are using multitarget rendering. fclem: Did you mean `layout(location = 1)` ? Index is only when using dual source blending. Here we… | |||||
| uniform int stereoDisplaySettings; | |||||
| #define stereo_display_mode (stereoDisplaySettings & ((1 << 3) - 1)) | |||||
| #define stereo_interlace_mode (stereoDisplaySettings >> 3) | |||||
| #define stereo_anaglyph_mode (stereoDisplaySettings >> 3) | |||||
| in vec2 texCoord_interp; | |||||
| layout(location = 0, index = 0) out vec4 imageColor; | |||||
| layout(location = 0, index = 1) out vec4 overlayColor; | |||||
| const vec4 anaglyph_masks[6] = vec4[6](vec4(1.0, 0.0, 0.0, 0.5), | |||||
| vec4(0.0, 1.0, 1.0, 0.5), | |||||
| vec4(0.0, 1.0, 0.0, 0.5), | |||||
| vec4(1.0, 0.0, 1.0, 0.5), | |||||
| vec4(1.0, 1.0, 0.0, 0.5), | |||||
| vec4(0.0, 0.0, 1.0, 0.5)); | |||||
| bool interlace(ivec2 texel) | |||||
| { | |||||
| int interlace_mode = stereo_interlace_mode; | |||||
| if (interlace_mode == S3D_INTERLACE_CHECKERBOARD) { | |||||
| return ((texel.x + texel.y) & 1) != 0; | |||||
Done Inline Actionsdiscard implies return. fclem: discard implies return. | |||||
| } | |||||
| else if (interlace_mode == S3D_INTERLACE_ROW) { | |||||
| return (texel.y & 1) != 0; | |||||
| } | |||||
| else if (interlace_mode == S3D_INTERLACE_COLUMN) { | |||||
| return (texel.x & 1) != 0; | |||||
| } | |||||
| } | |||||
| vec4 stereo_composite(sampler2D sampler_r, sampler2D sampler_l) | |||||
| { | |||||
| if (stereo_display_mode == S3D_DISPLAY_ANAGLYPH) { | |||||
| ivec2 texel = ivec2(gl_FragCoord.xy); | |||||
| return texelFetch(sampler_r, texel, 0) * anaglyph_masks[stereo_anaglyph_mode * 2] + | |||||
| texelFetch(sampler_l, texel, 0) * anaglyph_masks[stereo_anaglyph_mode * 2 + 1]; | |||||
| } | |||||
| else if (stereo_display_mode == S3D_DISPLAY_INTERLACE) { | |||||
| ivec2 texel = ivec2(gl_FragCoord.xy); | |||||
| if (interlace(texel)) { | |||||
| return texelFetch(sampler_r, texel, 0); | |||||
| } | |||||
| else { | |||||
| return texelFetch(sampler_l, texel, 0); | |||||
| } | |||||
| } | |||||
| else { | |||||
| return vec4(1.0, 0.0, 1.0, 1.0); | |||||
| } | |||||
| } | |||||
| void main() | |||||
| { | |||||
| imageColor = stereo_composite(image_r_texture, image_l_texture); | |||||
| overlayColor = stereo_composite(overlays_r_texture, overlays_l_texture); | |||||
| } | |||||
Camel Case for uniform samplers.