Пример #1
0
 public XBRShader()
 {
     Console.WriteLine("{0}", string.Join("\n", Assembly.GetExecutingAssembly().GetManifestResourceNames()));
     Shader = new GLShader(
         GLShaderFilter.DefaultVertexShader,
         Assembly.GetExecutingAssembly().GetManifestResourceStream("CSPspEmu.Gui.XBR.Shader.Shader_2xBR.frag")
         .ReadAllContentsAsString()
         );
     Filter = GLShaderFilter.Create(1, 1, Shader);
 }
Пример #2
0
        private GLTexture edge_pass(GLTexture albedo_tex, GLTexture depthTex)
        {
            if (edge_shader == null)
            {
                edge_shader = GLShaderFilter.Create(Width, Height, new GLShader(
                                                        VertexHeader + @"
						out vec2 texcoord;
						out vec4 offset[3];
						out vec4 dummy2;
						void main()
						{
							texcoord = a_texcoords.xy;
							vec4 dummy1 = vec4(0);
							SMAAEdgeDetectionVS(dummy1, dummy2, texcoord, offset);
							gl_Position = a_position;
						}
					"                    ,
                                                        FragmentHeader + @"
						uniform sampler2D albedo_tex;
						uniform sampler2D depthTex;

						in vec2 texcoord;
						in vec4 offset[3];
						in vec4 dummy2;

						void main()
						{
							#if SMAA_PREDICATION == 1
								gl_FragColor = SMAAColorEdgeDetectionPS(texcoord, offset, albedo_tex, depthTex);
							#else
								gl_FragColor = SMAAColorEdgeDetectionPS(texcoord, offset, albedo_tex);
							#endif
						}
					"
                                                        ));
            }

            return(edge_shader.Process((Shader) =>
            {
                Shader.GetUniform("albedo_tex").Set(GLTextureUnit.CreateAtIndex(0).SetWrap(GLWrap.ClampToEdge)
                                                    .SetFiltering(GLScaleFilter.Linear).SetTexture(albedo_tex));
                Shader.GetUniform("depthTex").NoWarning().Set(GLTextureUnit.CreateAtIndex(1).SetWrap(GLWrap.ClampToEdge)
                                                              .SetFiltering(GLScaleFilter.Linear).SetTexture(depthTex));
            }));
        }
Пример #3
0
        private GLTexture pass_blend(GLTexture edge_tex)
        {
            if (blend_shader == null)
            {
                blend_shader = GLShaderFilter.Create(Width, Height, new GLShader(
                                                         VertexHeader + @"
						out vec2 texcoord;
						out vec2 pixcoord;
						out vec4 offset[3];
						out vec4 dummy2;
						void main()
						{
							texcoord = a_texcoords.xy;
							vec4 dummy1 = vec4(0);
							SMAABlendingWeightCalculationVS(dummy1, dummy2, texcoord, pixcoord, offset);
							gl_Position = a_position;
						}
					"                    ,
                                                         FragmentHeader + @"
						uniform sampler2D edge_tex;
						uniform sampler2D area_tex;
						uniform sampler2D search_tex;
						in vec2 texcoord;
						in vec2 pixcoord;
						in vec4 offset[3];
						in vec4 dummy2;
						void main()
						{
							gl_FragColor = SMAABlendingWeightCalculationPS(texcoord, pixcoord, offset, edge_tex, area_tex, search_tex, ivec4(1, 1, 1, 0));
							//gl_FragColor = SMAABlendingWeightCalculationPS(texcoord, pixcoord, offset, edge_tex, area_tex, search_tex, ivec4(0));
						}
					"
                                                         ));
            }

            return(blend_shader.Process((Shader) =>
            {
                Shader.GetUniform("edge_tex").Set(GLTextureUnit.CreateAtIndex(0).SetWrap(GLWrap.ClampToEdge)
                                                  .SetFiltering(GLScaleFilter.Linear).SetTexture(edge_tex));
                Shader.GetUniform("area_tex").Set(area_tex_unit.SetIndex(1));
                Shader.GetUniform("search_tex").Set(search_tex_unit.SetIndex(2));
            }));
        }
Пример #4
0
        private GLTexture pass_neighborhood(GLTexture albedo_tex, GLTexture blend_tex)
        {
            if (neighborhood_shader == null)
            {
                neighborhood_shader = GLShaderFilter.Create(Width, Height, new GLShader(
                                                                VertexHeader + @"
						out vec2 texcoord;
						out vec4 offset[2];
						out vec4 dummy2;
						void main()
						{
							texcoord = a_texcoords.xy;
							vec4 dummy1 = vec4(0);
							SMAANeighborhoodBlendingVS(dummy1, dummy2, texcoord, offset);
							gl_Position = a_position;
						}
					"                    ,
                                                                FragmentHeader + @"
						uniform sampler2D albedo_tex;
						uniform sampler2D blend_tex;
						in vec2 texcoord;
						in vec4 offset[2];
						in vec4 dummy2;
						void main()
						{
							gl_FragColor = SMAANeighborhoodBlendingPS(texcoord, offset, albedo_tex, blend_tex);
						}
					"
                                                                ));
            }
            return(neighborhood_shader.Process((Shader) =>
            {
                Shader.GetUniform("albedo_tex").Set(GLTextureUnit.CreateAtIndex(0).SetWrap(GLWrap.ClampToEdge)
                                                    .SetFiltering(GLScaleFilter.Linear).SetTexture(albedo_tex));
                Shader.GetUniform("blend_tex").Set(GLTextureUnit.CreateAtIndex(1).SetWrap(GLWrap.ClampToEdge)
                                                   .SetFiltering(GLScaleFilter.Linear).SetTexture(blend_tex));
            }));
        }