Guest User

Untitled

a guest
Feb 28th, 2016
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.51 KB | None | 0 0
  1. // Based on libretro shader https://github.com/libretro/common-shaders/blob/master/test/lab/misc/sharpness.cg
  2. // Converted to obs effect file by Nibbles
  3.  
  4. uniform float4x4 ViewProj;
  5. uniform texture2d image;
  6. uniform float4x4 color_matrix;
  7. uniform float3 color_range_min = {0.0, 0.0, 0.0};
  8. uniform float3 color_range_max = {1.0, 1.0, 1.0};
  9.  
  10. uniform texture2d target;
  11. uniform float4 color = {1.0, 1.0, 1.0, 1.0};
  12.  
  13. uniform float sharpness;
  14. uniform float texture_width;
  15. uniform float texture_height;
  16.  
  17. sampler_state def_sampler {
  18.     Filter   = Linear;
  19.     AddressU = Clamp;
  20.     AddressV = Clamp;
  21. };
  22.  
  23. struct VertInOut {
  24.     float4 pos : POSITION;
  25.     float2 uv  : TEXCOORD0;
  26. };
  27.  
  28. struct VertOut {
  29.     float4 pos : POSITION;
  30.     float4 col : COLOR;
  31.     float2 uv  : TEXCOORD0;
  32. };
  33.  
  34. VertOut VSDefault(VertInOut vert_in)
  35. {
  36.     VertOut vert_out;
  37.     vert_out.pos = mul(float4(vert_in.pos.xyz, 1.0), ViewProj);
  38.     vert_out.uv  = vert_in.uv;
  39.     vert_out.col = color;
  40.  
  41.     return vert_out;
  42. }
  43.  
  44. float4 PSDrawMatrix(VertOut vert_in) : TARGET
  45. {
  46.     float numBlurPixelsPerSide = 4.0;
  47.     float2  blurMultiplyVec = float2(1.0, 0.0);
  48.     float2  blurMultiplyVec2 = float2(0.0, 1.0);
  49.     float sigma = 4.0;
  50.     float pi = 3.14159265;
  51.     float blurSize = sharpness / 25;
  52.    
  53.     float3 incrementalGaussian = float3(1.0 / (sqrt(2.0 * pi) * sigma), exp(-0.5 / (sigma * sigma)), exp(-0.5 / (sigma * sigma)) * exp(-0.5 / (sigma * sigma)));
  54.    
  55.     float4 avgValue = vec4(0.0, 0.0, 0.0, 0.0);
  56.     float coefficientSum = 0.0;
  57.    
  58.     avgValue += image.Sample(def_sampler, vert_in.uv) * incrementalGaussian.x;
  59.     coefficientSum += incrementalGaussian.x;
  60.     incrementalGaussian.xy *= incrementalGaussian.yz;
  61.    
  62.     for (float i = 1.0f; i <= numBlurPixelsPerSide; i++)
  63.     {
  64.         avgValue += image.Sample(def_sampler, vert_in.uv - i * blurSize * blurMultiplyVec) * incrementalGaussian.x;
  65.         avgValue += image.Sample(def_sampler, vert_in.uv + i * blurSize * blurMultiplyVec) * incrementalGaussian.x;
  66.         avgValue += image.Sample(def_sampler, vert_in.uv - i * blurSize * blurMultiplyVec2) * incrementalGaussian.x;
  67.         avgValue += image.Sample(def_sampler, vert_in.uv + i * blurSize * blurMultiplyVec2) * incrementalGaussian.x;
  68.                          
  69.         coefficientSum += 4 * incrementalGaussian.x;
  70.         incrementalGaussian.xy *= incrementalGaussian.yz;
  71.     }
  72.    
  73.     return avgValue / coefficientSum;
  74. }
  75.  
  76. technique Draw
  77. {
  78.     pass
  79.     {
  80.         vertex_shader = VSDefault(vert_in);
  81.         pixel_shader  = PSDrawMatrix(vert_in);
  82.     }
  83. }
  84.  
  85. technique DrawMatrix
  86. {
  87.     pass
  88.     {
  89.         vertex_shader = VSDefault(vert_in);
  90.         pixel_shader  = PSDrawMatrix(vert_in);
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment