Changeset View
Changeset View
Standalone View
Standalone View
effects/blur/blurshader.cpp
Show First 20 Lines • Show All 85 Lines • ▼ Show 20 Line(s) | 35 | { | |||
---|---|---|---|---|---|
86 | // Fragment shader (Dual Kawase Blur) - Downsample | 86 | // Fragment shader (Dual Kawase Blur) - Downsample | ||
87 | QTextStream streamFragDown(&fragmentDownSource); | 87 | QTextStream streamFragDown(&fragmentDownSource); | ||
88 | 88 | | |||
89 | streamFragDown << glHeaderString << glUniformString; | 89 | streamFragDown << glHeaderString << glUniformString; | ||
90 | 90 | | |||
91 | streamFragDown << "void main(void)\n"; | 91 | streamFragDown << "void main(void)\n"; | ||
92 | streamFragDown << "{\n"; | 92 | streamFragDown << "{\n"; | ||
93 | streamFragDown << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; | 93 | streamFragDown << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; | ||
94 | streamFragDown << " const vec4 powVal = vec4(2, 2, 2, 2);\n"; | ||||
94 | streamFragDown << " \n"; | 95 | streamFragDown << " \n"; | ||
95 | streamFragDown << " vec4 sum = " << texture2D << "(texUnit, uv) * 4.0;\n"; | 96 | streamFragDown << " vec4 sum = pow(" << texture2D << "(texUnit, uv) * 4.0, powVal);\n"; | ||
96 | streamFragDown << " sum += " << texture2D << "(texUnit, uv - halfpixel.xy * offset);\n"; | 97 | streamFragDown << " sum += pow(" << texture2D << "(texUnit, uv - halfpixel.xy * offset), powVal);\n"; | ||
97 | streamFragDown << " sum += " << texture2D << "(texUnit, uv + halfpixel.xy * offset);\n"; | 98 | streamFragDown << " sum += pow(" << texture2D << "(texUnit, uv + halfpixel.xy * offset), powVal);\n"; | ||
98 | streamFragDown << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset);\n"; | 99 | streamFragDown << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset), powVal);\n"; | ||
99 | streamFragDown << " sum += " << texture2D << "(texUnit, uv - vec2(halfpixel.x, -halfpixel.y) * offset);\n"; | 100 | streamFragDown << " sum += pow(" << texture2D << "(texUnit, uv - vec2(halfpixel.x, -halfpixel.y) * offset), powVal);\n"; | ||
100 | streamFragDown << " \n"; | 101 | streamFragDown << " \n"; | ||
101 | streamFragDown << " " << fragColor << " = sum / 8.0;\n"; | 102 | streamFragDown << " " << fragColor << " = sqrt(sum) / 4.6;\n"; | ||
102 | streamFragDown << "}\n"; | 103 | streamFragDown << "}\n"; | ||
103 | 104 | | |||
104 | streamFragDown.flush(); | 105 | streamFragDown.flush(); | ||
105 | 106 | | |||
106 | // Fragment shader (Dual Kawase Blur) - Upsample | 107 | // Fragment shader (Dual Kawase Blur) - Upsample | ||
107 | QTextStream streamFragUp(&fragmentUpSource); | 108 | QTextStream streamFragUp(&fragmentUpSource); | ||
108 | 109 | | |||
109 | streamFragUp << glHeaderString << glUniformString; | 110 | streamFragUp << glHeaderString << glUniformString; | ||
110 | 111 | | |||
111 | streamFragUp << "void main(void)\n"; | 112 | streamFragUp << "void main(void)\n"; | ||
112 | streamFragUp << "{\n"; | 113 | streamFragUp << "{\n"; | ||
113 | streamFragUp << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; | 114 | streamFragUp << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; | ||
115 | streamFragUp << " const vec4 powVal = vec4(2, 2, 2, 2);\n"; | ||||
114 | streamFragUp << " \n"; | 116 | streamFragUp << " \n"; | ||
115 | streamFragUp << " vec4 sum = " << texture2D << "(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset);\n"; | 117 | streamFragUp << " vec4 sum = pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset), powVal);\n"; | ||
116 | streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0;\n"; | 118 | streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0, powVal);\n"; | ||
117 | streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset);\n"; | 119 | streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset), powVal);\n"; | ||
118 | streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0;\n"; | 120 | streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0, powVal);\n"; | ||
119 | streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset);\n"; | 121 | streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset), powVal);\n"; | ||
120 | streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0;\n"; | 122 | streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0, powVal);\n"; | ||
121 | streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset);\n"; | 123 | streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset), powVal);\n"; | ||
122 | streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0;\n"; | 124 | streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0, powVal);\n"; | ||
123 | streamFragUp << " \n"; | 125 | streamFragUp << " \n"; | ||
124 | streamFragUp << " " << fragColor << " = sum / 12.0;\n"; | 126 | streamFragUp << " " << fragColor << " = sqrt(sum) / 4.35;\n"; | ||
125 | streamFragUp << "}\n"; | 127 | streamFragUp << "}\n"; | ||
126 | 128 | | |||
127 | streamFragUp.flush(); | 129 | streamFragUp.flush(); | ||
128 | 130 | | |||
129 | // Fragment shader - Copy texture | 131 | // Fragment shader - Copy texture | ||
130 | QTextStream streamFragCopy(&fragmentCopySource); | 132 | QTextStream streamFragCopy(&fragmentCopySource); | ||
131 | 133 | | |||
132 | streamFragCopy << glHeaderString; | 134 | streamFragCopy << glHeaderString; | ||
Show All 23 Lines | |||||
156 | streamFragNoise << "uniform vec2 noiseTextureSize;\n"; | 158 | streamFragNoise << "uniform vec2 noiseTextureSize;\n"; | ||
157 | streamFragNoise << "uniform vec2 texStartPos;\n"; | 159 | streamFragNoise << "uniform vec2 texStartPos;\n"; | ||
158 | 160 | | |||
159 | // Upsampling + Noise | 161 | // Upsampling + Noise | ||
160 | streamFragNoise << "void main(void)\n"; | 162 | streamFragNoise << "void main(void)\n"; | ||
161 | streamFragNoise << "{\n"; | 163 | streamFragNoise << "{\n"; | ||
162 | streamFragNoise << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; | 164 | streamFragNoise << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; | ||
163 | streamFragNoise << " vec2 uvNoise = vec2((texStartPos.xy + gl_FragCoord.xy) / noiseTextureSize);\n"; | 165 | streamFragNoise << " vec2 uvNoise = vec2((texStartPos.xy + gl_FragCoord.xy) / noiseTextureSize);\n"; | ||
166 | streamFragNoise << " const vec4 powVal = vec4(2, 2, 2, 2);\n"; | ||||
164 | streamFragNoise << " \n"; | 167 | streamFragNoise << " \n"; | ||
165 | streamFragNoise << " vec4 sum = " << texture2D << "(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset);\n"; | 168 | streamFragNoise << " vec4 sum = pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset), powVal);\n"; | ||
166 | streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0;\n"; | 169 | streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0, powVal);\n"; | ||
167 | streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset);\n"; | 170 | streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset), powVal);\n"; | ||
168 | streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0;\n"; | 171 | streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0, powVal);\n"; | ||
169 | streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset);\n"; | 172 | streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset), powVal);\n"; | ||
170 | streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0;\n"; | 173 | streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0, powVal);\n"; | ||
171 | streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset);\n"; | 174 | streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset), powVal);\n"; | ||
172 | streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0;\n"; | 175 | streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0, powVal);\n"; | ||
173 | streamFragNoise << " \n"; | 176 | streamFragNoise << " \n"; | ||
174 | streamFragNoise << " " << fragColor << " = sum / 12.0 - (vec4(0.5, 0.5, 0.5, 0) - vec4(" << texture2D << "(noiseTexUnit, uvNoise).rrr, 0));\n"; | 177 | streamFragNoise << " " << fragColor << " = sqrt(sum) / 4.35 - (vec4(0.5, 0.5, 0.5, 0) - vec4(" << texture2D << "(noiseTexUnit, uvNoise).rrr, 0));\n"; | ||
175 | streamFragNoise << "}\n"; | 178 | streamFragNoise << "}\n"; | ||
176 | 179 | | |||
177 | streamFragNoise.flush(); | 180 | streamFragNoise.flush(); | ||
178 | 181 | | |||
179 | m_shaderDownsample.reset(ShaderManager::instance()->loadShaderFromCode(vertexSource, fragmentDownSource)); | 182 | m_shaderDownsample.reset(ShaderManager::instance()->loadShaderFromCode(vertexSource, fragmentDownSource)); | ||
180 | m_shaderUpsample.reset(ShaderManager::instance()->loadShaderFromCode(vertexSource, fragmentUpSource)); | 183 | m_shaderUpsample.reset(ShaderManager::instance()->loadShaderFromCode(vertexSource, fragmentUpSource)); | ||
181 | m_shaderCopysample.reset(ShaderManager::instance()->loadShaderFromCode(vertexSource, fragmentCopySource)); | 184 | m_shaderCopysample.reset(ShaderManager::instance()->loadShaderFromCode(vertexSource, fragmentCopySource)); | ||
182 | m_shaderNoisesample.reset(ShaderManager::instance()->loadShaderFromCode(vertexSource, fragmentNoiseSource)); | 185 | m_shaderNoisesample.reset(ShaderManager::instance()->loadShaderFromCode(vertexSource, fragmentNoiseSource)); | ||
▲ Show 20 Lines • Show All 263 Lines • Show Last 20 Lines |