From d16d7102d8ba34d017e673cdc6ad7a1d8b7468c3 Mon Sep 17 00:00:00 2001 From: blobt Date: Sat, 8 Aug 2020 22:37:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E6=BB=91=EF=BC=8C=E9=94=90=E5=8C=96?= =?UTF-8?q?=EF=BC=8Cedge=20detect?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/shader3/v14/.suo | Bin 47104 -> 47616 bytes main.cpp | 40 ++++++++++++-------------------------- res/shader/edge_detect.fs | 28 ++++++++++++++++++++++++++ res/shader/sharpen.fs | 29 +++++++++++++++++++++++++++ res/shader/smooth.fs | 28 ++++++++++++++++++++++++++ shader3.vcxproj | 8 ++++---- shader3.vcxproj.filters | 8 ++++---- 7 files changed, 105 insertions(+), 36 deletions(-) create mode 100644 res/shader/edge_detect.fs create mode 100644 res/shader/sharpen.fs create mode 100644 res/shader/smooth.fs diff --git a/.vs/shader3/v14/.suo b/.vs/shader3/v14/.suo index 166c1eb2f3ec32278123d0bc43a6e49d6dd67376..d57249a29a6e4f019096316edf79cb587c6781f3 100644 GIT binary patch delta 3542 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 diff --git a/main.cpp b/main.cpp index de97841..8f7514b 100644 --- a/main.cpp +++ b/main.cpp @@ -75,42 +75,38 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ //combine program GPUProgram combineProgram1; combineProgram1.AttachShader(GL_VERTEX_SHADER, "res/shader/fullscreenquad.vs"); - combineProgram1.AttachShader(GL_FRAGMENT_SHADER, "res/shader/zpdd.fs"); + combineProgram1.AttachShader(GL_FRAGMENT_SHADER, "res/shader/fullscreenquad.fs"); combineProgram1.Link(); combineProgram1.DetectAttribute("pos"); combineProgram1.DetectAttribute("texcoord"); - combineProgram1.DetectUniform("U_BaseTexture"); - combineProgram1.DetectUniform("U_BlendTexture"); + combineProgram1.DetectUniform("U_MainTexture"); //combine program GPUProgram combineProgram2; combineProgram2.AttachShader(GL_VERTEX_SHADER, "res/shader/fullscreenquad.vs"); - combineProgram2.AttachShader(GL_FRAGMENT_SHADER, "res/shader/zpdd_inverse.fs"); + combineProgram2.AttachShader(GL_FRAGMENT_SHADER, "res/shader/smooth.fs"); combineProgram2.Link(); combineProgram2.DetectAttribute("pos"); combineProgram2.DetectAttribute("texcoord"); - combineProgram2.DetectUniform("U_BaseTexture"); - combineProgram2.DetectUniform("U_BlendTexture"); + combineProgram2.DetectUniform("U_MainTexture"); //combine program GPUProgram combineProgram3; combineProgram3.AttachShader(GL_VERTEX_SHADER, "res/shader/fullscreenquad.vs"); - combineProgram3.AttachShader(GL_FRAGMENT_SHADER, "res/shader/zpdd_dark.fs"); + combineProgram3.AttachShader(GL_FRAGMENT_SHADER, "res/shader/sharpen.fs"); combineProgram3.Link(); combineProgram3.DetectAttribute("pos"); combineProgram3.DetectAttribute("texcoord"); - combineProgram3.DetectUniform("U_BaseTexture"); - combineProgram3.DetectUniform("U_BlendTexture"); + combineProgram3.DetectUniform("U_MainTexture"); //combine program GPUProgram combineProgram4; combineProgram4.AttachShader(GL_VERTEX_SHADER, "res/shader/fullscreenquad.vs"); - combineProgram4.AttachShader(GL_FRAGMENT_SHADER, "res/shader/zpdd_light.fs"); + combineProgram4.AttachShader(GL_FRAGMENT_SHADER, "res/shader/edge_detect.fs"); combineProgram4.Link(); combineProgram4.DetectAttribute("pos"); combineProgram4.DetectAttribute("texcoord"); - combineProgram4.DetectUniform("U_BaseTexture"); - combineProgram4.DetectUniform("U_BlendTexture"); + combineProgram4.DetectUniform("U_MainTexture"); @@ -169,37 +165,25 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ glUseProgram(combineProgram1.mProgram); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, head); - glUniform1i(combineProgram1.GetLocation("U_BaseTexture"), 0); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, grass); - glUniform1i(combineProgram1.GetLocation("U_BlendTexture"), 1); + glUniform1i(combineProgram1.GetLocation("U_MainTexture"), 0); fsq.DrawToLeftTop(combineProgram1.GetLocation("pos"), combineProgram1.GetLocation("texcoord")); glUseProgram(combineProgram2.mProgram); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, head); - glUniform1i(combineProgram2.GetLocation("U_BaseTexture"), 0); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, grass); - glUniform1i(combineProgram2.GetLocation("U_BlendTexture"), 1); + glUniform1i(combineProgram2.GetLocation("U_MainTexture"), 0); fsq.DrawToRightTop(combineProgram2.GetLocation("pos"), combineProgram2.GetLocation("texcoord")); glUseProgram(combineProgram3.mProgram); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, head); - glUniform1i(combineProgram3.GetLocation("U_BaseTexture"), 0); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, grass); - glUniform1i(combineProgram3.GetLocation("U_BlendTexture"), 1); + glUniform1i(combineProgram3.GetLocation("U_MainTexture"), 0); fsq.DrawToLeftBottom(combineProgram3.GetLocation("pos"), combineProgram3.GetLocation("texcoord")); glUseProgram(combineProgram4.mProgram); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, head); - glUniform1i(combineProgram4.GetLocation("U_BaseTexture"), 0); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, grass); - glUniform1i(combineProgram4.GetLocation("U_BlendTexture"), 1); + glUniform1i(combineProgram4.GetLocation("U_MainTexture"), 0); fsq.DrawToRightBottom(combineProgram4.GetLocation("pos"), combineProgram4.GetLocation("texcoord")); glDisable(GL_BLEND); diff --git a/res/shader/edge_detect.fs b/res/shader/edge_detect.fs new file mode 100644 index 0000000..74281e3 --- /dev/null +++ b/res/shader/edge_detect.fs @@ -0,0 +1,28 @@ + +varying vec2 V_Texcoord; + +uniform sampler2D U_MainTexture; + +void main() +{ + //1 2 1 + //2 4 2 + //1 2 1 + vec4 color = vec4(0.0); + int coreSize = 3; + float texelOffset = 1/150.0; + float kernel[9]; + + kernel[6]=0;kernel[7]=1;kernel[8]=0; + kernel[3]=1;kernel[4]=-4;kernel[5]=1; + kernel[0]=0;kernel[1]=1;kernel[2]=0; + + int index = 0; + for(int y=0; y - - - - + + + + diff --git a/shader3.vcxproj.filters b/shader3.vcxproj.filters index e28ec95..a041bdb 100644 --- a/shader3.vcxproj.filters +++ b/shader3.vcxproj.filters @@ -46,16 +46,16 @@ - + src - + src - + src - + src