237    glEnable( GL_TEXTURE_2D );
 
  238    glActiveTexture( GL_TEXTURE0 );
 
  242    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
 
  243    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
 
  244    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
 
  245    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
 
  248    checkGlError( 
"loading smaa area tex", __FILE__, __LINE__ );
 
  252    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
 
  253    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
 
  254    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
 
  255    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
 
  258    checkGlError( 
"loading smaa search tex", __FILE__, __LINE__ );
 
  272    std::string quality_string;
 
  273    std::string edge_detect_shader;
 
  277    quality_string = 
"#define SMAA_THRESHOLD 0.005\n" 
  278                     "#define SMAA_MAX_SEARCH_STEPS 1\n" 
  279                     "#define SMAA_MAX_SEARCH_STEPS_DIAG 2\n" 
  280                     "#define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 1.5\n" 
  281                     "#define SMAA_CORNER_ROUNDING 0\n";
 
  282    edge_detect_shader = BUILTIN_SHADERS::glsl_smaa_pass_1_frag_luma;
 
  285    std::string vert_preamble( R
"SHADER( 
  288#define SMAA_INCLUDE_VS 1 
  289#define SMAA_INCLUDE_PS 0 
  290uniform vec4 SMAA_RT_METRICS; 
  293    std::string frag_preamble( R"SHADER( 
  296#define SMAA_INCLUDE_VS 0 
  297#define SMAA_INCLUDE_PS 1 
  298uniform vec4 SMAA_RT_METRICS; 
  306                                          BUILTIN_SHADERS::glsl_smaa_base,
 
  307                                          BUILTIN_SHADERS::glsl_smaa_pass_1_vert );
 
  309                                          quality_string, BUILTIN_SHADERS::glsl_smaa_base,
 
  310                                          edge_detect_shader );
 
  312    checkGlError( 
"linking pass 1 shader", __FILE__, __LINE__ );
 
  314    GLint smaaColorTexParameter = 
pass_1_shader->AddParameter( 
"colorTex" );
 
  315    checkGlError( 
"pass1: getting colorTex uniform", __FILE__, __LINE__ );
 
  317    checkGlError( 
"pass1: getting metrics uniform", __FILE__, __LINE__ );
 
  320    checkGlError( 
"pass1: using shader", __FILE__, __LINE__ );
 
  322    checkGlError( 
"pass1: setting colorTex uniform", __FILE__, __LINE__ );
 
  324    checkGlError( 
"pass1: deactivating shader", __FILE__, __LINE__ );
 
  331                                          BUILTIN_SHADERS::glsl_smaa_base,
 
  332                                          BUILTIN_SHADERS::glsl_smaa_pass_2_vert );
 
  334                                          quality_string, BUILTIN_SHADERS::glsl_smaa_base,
 
  335                                          BUILTIN_SHADERS::glsl_smaa_pass_2_frag );
 
  337    checkGlError( 
"linking pass 2 shader", __FILE__, __LINE__ );
 
  339    GLint smaaEdgesTexParameter = 
pass_2_shader->AddParameter( 
"edgesTex" );
 
  340    checkGlError( 
"pass2: getting colorTex uniform", __FILE__, __LINE__ );
 
  341    GLint smaaAreaTexParameter = 
pass_2_shader->AddParameter( 
"areaTex" );
 
  342    checkGlError( 
"pass2: getting areaTex uniform", __FILE__, __LINE__ );
 
  343    GLint smaaSearchTexParameter = 
pass_2_shader->AddParameter( 
"searchTex" );
 
  344    checkGlError( 
"pass2: getting searchTex uniform", __FILE__, __LINE__ );
 
  346    checkGlError( 
"pass2: getting metrics uniform", __FILE__, __LINE__ );
 
  349    checkGlError( 
"pass2: using shader", __FILE__, __LINE__ );
 
  351    checkGlError( 
"pass2: setting colorTex uniform", __FILE__, __LINE__ );
 
  353    checkGlError( 
"pass2: setting areaTex uniform", __FILE__, __LINE__ );
 
  355    checkGlError( 
"pass2: setting searchTex uniform", __FILE__, __LINE__ );
 
  357    checkGlError( 
"pass2: deactivating shader", __FILE__, __LINE__ );
 
  364                                          BUILTIN_SHADERS::glsl_smaa_base,
 
  365                                          BUILTIN_SHADERS::glsl_smaa_pass_3_vert );
 
  367                                          quality_string, BUILTIN_SHADERS::glsl_smaa_base,
 
  368                                          BUILTIN_SHADERS::glsl_smaa_pass_3_frag );
 
  371    GLint smaaP3ColorTexParameter = 
pass_3_shader->AddParameter( 
"colorTex" );
 
  372    checkGlError( 
"pass3: getting colorTex uniform", __FILE__, __LINE__ );
 
  373    GLint smaaBlendTexParameter = 
pass_3_shader->AddParameter( 
"blendTex" );
 
  374    checkGlError( 
"pass3: getting blendTex uniform", __FILE__, __LINE__ );
 
  376    checkGlError( 
"pass3: getting metrics uniform", __FILE__, __LINE__ );
 
  379    checkGlError( 
"pass3: using shader", __FILE__, __LINE__ );
 
  381    checkGlError( 
"pass3: setting colorTex uniform", __FILE__, __LINE__ );
 
  383    checkGlError( 
"pass3: setting blendTex uniform", __FILE__, __LINE__ );
 
  385    checkGlError( 
"pass3: deactivating shader", __FILE__, __LINE__ );
 
 
  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 );
 
  437        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
 
  438        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
 
 
  506    glDisable( GL_BLEND );
 
  507    glDisable( GL_DEPTH_TEST );
 
  508    glEnable( GL_TEXTURE_2D );
 
  516    glActiveTexture( GL_TEXTURE0 );
 
  517    glBindTexture( GL_TEXTURE_2D, sourceTexture );
 
  520    checkGlError( 
"using smaa pass 1 shader", __FILE__, __LINE__ );
 
  521    draw_fullscreen_triangle();
 
  532    glActiveTexture( GL_TEXTURE0 );
 
  533    glBindTexture( GL_TEXTURE_2D, edgesTex );
 
  534    glActiveTexture( GL_TEXTURE1 );
 
  536    glActiveTexture( GL_TEXTURE3 );
 
  540    draw_fullscreen_triangle();
 
  550    glActiveTexture( GL_TEXTURE0 );
 
  551    glBindTexture( GL_TEXTURE_2D, sourceTexture );
 
  552    glActiveTexture( GL_TEXTURE1 );
 
  553    glBindTexture( GL_TEXTURE_2D, blendTex );
 
  555    glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE );
 
  558    draw_fullscreen_triangle();
 
  561    glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );