233 glEnable( GL_TEXTURE_2D );
234 glActiveTexture( GL_TEXTURE0 );
238 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
239 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
240 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
241 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
244 checkGlError(
"loading smaa area tex", __FILE__, __LINE__ );
248 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
249 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
250 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
251 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
254 checkGlError(
"loading smaa search tex", __FILE__, __LINE__ );
268 std::string quality_string;
269 std::string edge_detect_shader;
273 quality_string =
"#define SMAA_THRESHOLD 0.005\n"
274 "#define SMAA_MAX_SEARCH_STEPS 1\n"
275 "#define SMAA_MAX_SEARCH_STEPS_DIAG 2\n"
276 "#define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 1.5\n"
277 "#define SMAA_CORNER_ROUNDING 0\n";
278 edge_detect_shader = BUILTIN_SHADERS::glsl_smaa_pass_1_frag_luma;
281 std::string vert_preamble( R
"SHADER(
284#define SMAA_INCLUDE_VS 1
285#define SMAA_INCLUDE_PS 0
286uniform vec4 SMAA_RT_METRICS;
289 std::string frag_preamble( R"SHADER(
292#define SMAA_INCLUDE_VS 0
293#define SMAA_INCLUDE_PS 1
294uniform vec4 SMAA_RT_METRICS;
302 BUILTIN_SHADERS::glsl_smaa_base,
303 BUILTIN_SHADERS::glsl_smaa_pass_1_vert );
305 quality_string, BUILTIN_SHADERS::glsl_smaa_base,
306 edge_detect_shader );
308 checkGlError(
"linking pass 1 shader", __FILE__, __LINE__ );
310 GLint smaaColorTexParameter =
pass_1_shader->AddParameter(
"colorTex" );
311 checkGlError(
"pass1: getting colorTex uniform", __FILE__, __LINE__ );
313 checkGlError(
"pass1: getting metrics uniform", __FILE__, __LINE__ );
316 checkGlError(
"pass1: using shader", __FILE__, __LINE__ );
318 checkGlError(
"pass1: setting colorTex uniform", __FILE__, __LINE__ );
320 checkGlError(
"pass1: deactivating shader", __FILE__, __LINE__ );
327 BUILTIN_SHADERS::glsl_smaa_base,
328 BUILTIN_SHADERS::glsl_smaa_pass_2_vert );
330 quality_string, BUILTIN_SHADERS::glsl_smaa_base,
331 BUILTIN_SHADERS::glsl_smaa_pass_2_frag );
333 checkGlError(
"linking pass 2 shader", __FILE__, __LINE__ );
335 GLint smaaEdgesTexParameter =
pass_2_shader->AddParameter(
"edgesTex" );
336 checkGlError(
"pass2: getting colorTex uniform", __FILE__, __LINE__ );
337 GLint smaaAreaTexParameter =
pass_2_shader->AddParameter(
"areaTex" );
338 checkGlError(
"pass2: getting areaTex uniform", __FILE__, __LINE__ );
339 GLint smaaSearchTexParameter =
pass_2_shader->AddParameter(
"searchTex" );
340 checkGlError(
"pass2: getting searchTex uniform", __FILE__, __LINE__ );
342 checkGlError(
"pass2: getting metrics uniform", __FILE__, __LINE__ );
345 checkGlError(
"pass2: using shader", __FILE__, __LINE__ );
347 checkGlError(
"pass2: setting colorTex uniform", __FILE__, __LINE__ );
349 checkGlError(
"pass2: setting areaTex uniform", __FILE__, __LINE__ );
351 checkGlError(
"pass2: setting searchTex uniform", __FILE__, __LINE__ );
353 checkGlError(
"pass2: deactivating shader", __FILE__, __LINE__ );
360 BUILTIN_SHADERS::glsl_smaa_base,
361 BUILTIN_SHADERS::glsl_smaa_pass_3_vert );
363 quality_string, BUILTIN_SHADERS::glsl_smaa_base,
364 BUILTIN_SHADERS::glsl_smaa_pass_3_frag );
367 GLint smaaP3ColorTexParameter =
pass_3_shader->AddParameter(
"colorTex" );
368 checkGlError(
"pass3: getting colorTex uniform", __FILE__, __LINE__ );
369 GLint smaaBlendTexParameter =
pass_3_shader->AddParameter(
"blendTex" );
370 checkGlError(
"pass3: getting blendTex uniform", __FILE__, __LINE__ );
372 checkGlError(
"pass3: getting metrics uniform", __FILE__, __LINE__ );
375 checkGlError(
"pass3: using shader", __FILE__, __LINE__ );
377 checkGlError(
"pass3: setting colorTex uniform", __FILE__, __LINE__ );
379 checkGlError(
"pass3: setting blendTex uniform", __FILE__, __LINE__ );
381 checkGlError(
"pass3: deactivating shader", __FILE__, __LINE__ );
425 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
426 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
429 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
430 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
433 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
434 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
502 glDisable( GL_BLEND );
503 glDisable( GL_DEPTH_TEST );
504 glEnable( GL_TEXTURE_2D );
512 glActiveTexture( GL_TEXTURE0 );
513 glBindTexture( GL_TEXTURE_2D, sourceTexture );
516 checkGlError(
"using smaa pass 1 shader", __FILE__, __LINE__ );
517 draw_fullscreen_triangle();
528 glActiveTexture( GL_TEXTURE0 );
529 glBindTexture( GL_TEXTURE_2D, edgesTex );
530 glActiveTexture( GL_TEXTURE1 );
532 glActiveTexture( GL_TEXTURE3 );
536 draw_fullscreen_triangle();
546 glActiveTexture( GL_TEXTURE0 );
547 glBindTexture( GL_TEXTURE_2D, sourceTexture );
548 glActiveTexture( GL_TEXTURE1 );
549 glBindTexture( GL_TEXTURE_2D, blendTex );
551 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE );
554 draw_fullscreen_triangle();
557 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );