Browse Source

简化blur

master
blobt 4 years ago
parent
commit
ff004d3031
  1. BIN
      .vs/shader3/v14/.suo
  2. 42
      main.cpp
  3. 21
      res/shader/fullscreenquad_gaussian_horizontal.fs
  4. 21
      res/shader/fullscreenquad_gaussian_vertical.fs
  5. 6
      shader3.vcxproj
  6. 12
      shader3.vcxproj.filters

BIN
.vs/shader3/v14/.suo

42
main.cpp

@ -81,23 +81,23 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _
originalProgram.DetectAttribute("texcoord");
originalProgram.DetectUniform("U_MainTexture");
//init erosion program
GPUProgram erosionProgram;
erosionProgram.AttachShader(GL_VERTEX_SHADER, "res/shader/fullscreenquad.vs");
erosionProgram.AttachShader(GL_FRAGMENT_SHADER, "res/shader/fullscreenquad_erosion.fs");
erosionProgram.Link();
erosionProgram.DetectAttribute("pos");
erosionProgram.DetectAttribute("texcoord");
erosionProgram.DetectUniform("U_MainTexture");
//init dilation program
GPUProgram dilationProgram;
dilationProgram.AttachShader(GL_VERTEX_SHADER, "res/shader/fullscreenquad.vs");
dilationProgram.AttachShader(GL_FRAGMENT_SHADER, "res/shader/fullscreenquad_dilation.fs");
dilationProgram.Link();
dilationProgram.DetectAttribute("pos");
dilationProgram.DetectAttribute("texcoord");
dilationProgram.DetectUniform("U_MainTexture");
//init vertical program
GPUProgram verticalProgram;
verticalProgram.AttachShader(GL_VERTEX_SHADER, "res/shader/fullscreenquad.vs");
verticalProgram.AttachShader(GL_FRAGMENT_SHADER, "res/shader/fullscreenquad_gaussian_vertical.fs");
verticalProgram.Link();
verticalProgram.DetectAttribute("pos");
verticalProgram.DetectAttribute("texcoord");
verticalProgram.DetectUniform("U_MainTexture");
//init horizontal program
GPUProgram horizontalProgram;
horizontalProgram.AttachShader(GL_VERTEX_SHADER, "res/shader/fullscreenquad.vs");
horizontalProgram.AttachShader(GL_FRAGMENT_SHADER, "res/shader/fullscreenquad_gaussian_horizontal.fs");
horizontalProgram.Link();
horizontalProgram.DetectAttribute("pos");
horizontalProgram.DetectAttribute("texcoord");
horizontalProgram.DetectUniform("U_MainTexture");
//init dilation program
GPUProgram gaussianProgram;
@ -245,11 +245,11 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _
fsq.DrawToLeftTop(originalProgram.GetLocation("pos"), originalProgram.GetLocation("texcoord"));
glUseProgram(erosionProgram.mProgram);
fsq.DrawToRightTop(erosionProgram.GetLocation("pos"), erosionProgram.GetLocation("texcoord"));
glUseProgram(verticalProgram.mProgram);
fsq.DrawToRightTop(verticalProgram.GetLocation("pos"), verticalProgram.GetLocation("texcoord"));
glUseProgram(dilationProgram.mProgram);
fsq.DrawToLeftBottom(dilationProgram.GetLocation("pos"), dilationProgram.GetLocation("texcoord"));
glUseProgram(horizontalProgram.mProgram);
fsq.DrawToLeftBottom(horizontalProgram.GetLocation("pos"), horizontalProgram.GetLocation("texcoord"));
glUseProgram(gaussianProgram.mProgram);
glBindTexture(GL_TEXTURE_2D, fbo2.GetBuffer("color"));

21
res/shader/fullscreenquad_gaussian_horizontal.fs

@ -0,0 +1,21 @@
varying vec2 V_Texcoord;
uniform sampler2D U_MainTexture;
void main()
{
//1 2 1
//2 4 2
//1 2 1
vec4 color = vec4(0.0);
float texelOffset = 1/100.0;
float weight[5] = float[](0.22,0.19,0.12,0.08,0.01);
for(int i = 0; i < 5; i++){
color += texture2D(U_MainTexture, vec2(V_Texcoord.x+texelOffset*i, V_Texcoord.y))*weight[i];
color += texture2D(U_MainTexture, vec2(V_Texcoord.x-texelOffset*i, V_Texcoord.y))*weight[i];
}
gl_FragColor = color;
}

21
res/shader/fullscreenquad_gaussian_vertical.fs

@ -0,0 +1,21 @@
varying vec2 V_Texcoord;
uniform sampler2D U_MainTexture;
void main()
{
//1 2 1
//2 4 2
//1 2 1
vec4 color = vec4(0.0);
float texelOffset = 1/100.0;
float weight[5] = float[](0.22,0.19,0.12,0.08,0.01);
for(int i = 0; i < 5; i++){
color += texture2D(U_MainTexture, vec2(V_Texcoord.x, V_Texcoord.y+texelOffset*i))*weight[i];
color += texture2D(U_MainTexture, vec2(V_Texcoord.x, V_Texcoord.y-texelOffset*i))*weight[i];
}
gl_FragColor = color;
}

6
shader3.vcxproj

@ -82,11 +82,9 @@
<ClInclude Include="utils.h" />
</ItemGroup>
<ItemGroup>
<None Include="res\shader\fullscreenquad.fs" />
<None Include="res\shader\fullscreenquad.vs" />
<None Include="res\shader\fullscreenquad_dilation.fs" />
<None Include="res\shader\fullscreenquad_erosion.fs" />
<None Include="res\shader\fullscreenquad_gaussian.fs" />
<None Include="res\shader\fullscreenquad_gaussian_horizontal.fs" />
<None Include="res\shader\fullscreenquad_gaussian_vertical.fs" />
<None Include="res\shader\test.fs" />
<None Include="res\shader\test.vs" />
</ItemGroup>

12
shader3.vcxproj.filters

@ -52,19 +52,13 @@
<None Include="res\shader\test.vs">
<Filter>src</Filter>
</None>
<None Include="res\shader\fullscreenquad.fs">
<Filter>src</Filter>
</None>
<None Include="res\shader\fullscreenquad.vs">
<Filter>src</Filter>
</None>
<None Include="res\shader\fullscreenquad_dilation.fs">
<None Include="res\shader\fullscreenquad_gaussian.fs">
<Filter>src</Filter>
</None>
<None Include="res\shader\fullscreenquad_erosion.fs">
<None Include="res\shader\fullscreenquad_gaussian_horizontal.fs">
<Filter>src</Filter>
</None>
<None Include="res\shader\fullscreenquad_gaussian.fs">
<None Include="res\shader\fullscreenquad_gaussian_vertical.fs">
<Filter>src</Filter>
</None>
</ItemGroup>
Loading…
Cancel
Save