From ec7da6e521ba9773c37349c3c5ec29cc8494ed9c Mon Sep 17 00:00:00 2001 From: Francisco Zurita Date: Tue, 8 Mar 2016 00:58:33 -0500 Subject: [PATCH] video: test fix --- .../src/OGL3X/GLSLCombiner_ogl3x.cpp | 98 ++++++++++++++----- .../src/OGL3X/Shaders_ogl3x.h | 30 +++++- 2 files changed, 98 insertions(+), 30 deletions(-) diff --git a/jni/mupen64plus-video-gliden64/src/OGL3X/GLSLCombiner_ogl3x.cpp b/jni/mupen64plus-video-gliden64/src/OGL3X/GLSLCombiner_ogl3x.cpp index c68d64b76d..b523e82e2e 100644 --- a/jni/mupen64plus-video-gliden64/src/OGL3X/GLSLCombiner_ogl3x.cpp +++ b/jni/mupen64plus-video-gliden64/src/OGL3X/GLSLCombiner_ogl3x.cpp @@ -285,16 +285,55 @@ ShaderCombiner::ShaderCombiner(Combiner & _color, Combiner & _alpha, const gDPCo char strCombiner[1024]; m_nInputs = compileCombiner(_color, _alpha, strCombiner); - if (usesTexture()) { - strFragmentShader.assign(fragment_shader_header_common_variables); - strFragmentShader.append(fragment_shader_header_common_functions); - } - else { - strFragmentShader.assign(fragment_shader_header_common_variables_notex); - strFragmentShader.append(fragment_shader_header_common_functions_notex); - } + const bool bUseLod = usesLOD(); + const bool bUseHWLight = config.generalEmulation.enableHWLighting != 0 && GBI.isHWLSupported() && usesShadeColor(); + + if (usesTexture ()) + { + strFragmentShader.assign (fragment_shader_header_common_variables); + strFragmentShader.append (fragment_shader_header_noise); + strFragmentShader.append (fragment_shader_header_noise_dither); + + if (bUseLod) + { + strFragmentShader.append (fragment_shader_header_mipmap); + } + else + { + strFragmentShader.append (fragment_shader_header_readTex); +#ifdef GL_MULTISAMPLING_SUPPORT + if (config.video.multisampling > 0) + strFragmentShader.append(fragment_shader_header_readTexMS); +#endif + } +#ifdef GL_IMAGE_TEXTURES_SUPPORT + if (video().getRender().isImageTexturesSupported() && config.frameBufferEmulation.N64DepthCompare != 0) + strFragmentShader.append(fragment_shader_header_depth_compare); +#endif + + if (bUseHWLight) + { + strFragmentShader.append (fragment_shader_header_calc_light); + } + } + else + { + strFragmentShader.assign (fragment_shader_header_common_variables_notex); + strFragmentShader.append (fragment_shader_header_noise); + strFragmentShader.append (fragment_shader_header_noise_dither); + +#ifdef GL_IMAGE_TEXTURES_SUPPORT + if (video().getRender().isImageTexturesSupported() && config.frameBufferEmulation.N64DepthCompare != 0) + strFragmentShader.append(fragment_shader_header_depth_compare); +#endif + + if (bUseHWLight) + { + strFragmentShader.append (fragment_shader_header_calc_light); + } + } + strFragmentShader.append(fragment_shader_header_main); - const bool bUseLod = usesLOD(); if (bUseLod) { strFragmentShader.append(" lowp vec4 readtex0, readtex1; \n"); strFragmentShader.append(" lowp float lod_frac = mipmap(readtex0, readtex1); \n"); @@ -323,7 +362,6 @@ ShaderCombiner::ShaderCombiner(Combiner & _color, Combiner & _alpha, const gDPCo strFragmentShader.append(" lowp vec4 readtex1 = readTex(uTex1, vTexCoord1, uFbMonochrome[1], uFbFixedAlpha[1] != 0); \n"); #endif // GL_MULTISAMPLING_SUPPORT } - const bool bUseHWLight = config.generalEmulation.enableHWLighting != 0 && GBI.isHWLSupported() && usesShadeColor(); if (bUseHWLight) strFragmentShader.append(" calc_light(vNumLights, vShadeColor.rgb, input_color); \n"); else @@ -392,23 +430,29 @@ ShaderCombiner::ShaderCombiner(Combiner & _color, Combiner & _alpha, const gDPCo glCompileShader(fragmentShader); if (!checkShaderCompileStatus(fragmentShader)) { - int pos = 0; - int max = 800; - LOG(LOG_ERROR, "Error in fragment shader"); - - while(pos < strFragmentShader.length() ) - { - if(strFragmentShader.length() - pos < max) - { - LOG(LOG_ERROR, "%s", strFragmentShader.substr(pos).data()); - } - else - { - LOG(LOG_ERROR, "%s", strFragmentShader.substr(pos, max).data()); - } - - pos += max; - } + LOG(LOG_ERROR, "Error in fragment shader"); + + int pos = 0; + int max = 800; + + while(pos < strFragmentShader.length() ) + { + if(strFragmentShader.length() - pos < max) + { + LOG(LOG_ERROR, "%s", strFragmentShader.substr(pos).data()); + } + else + { + LOG(LOG_ERROR, "%s", strFragmentShader.substr(pos, max).data()); + } + + pos += max; + } + } + else + { + LOG(LOG_ERROR, "NO Error in fragment shader"); + } m_program = glCreateProgram(); diff --git a/jni/mupen64plus-video-gliden64/src/OGL3X/Shaders_ogl3x.h b/jni/mupen64plus-video-gliden64/src/OGL3X/Shaders_ogl3x.h index 3e7c77b8a9..bf5844c512 100644 --- a/jni/mupen64plus-video-gliden64/src/OGL3X/Shaders_ogl3x.h +++ b/jni/mupen64plus-video-gliden64/src/OGL3X/Shaders_ogl3x.h @@ -216,6 +216,30 @@ MAIN_SHADER_VERSION "out lowp vec4 fragColor; \n" ; +static const char* fragment_shader_header_noise = + "lowp float snoise();\n"; +static const char* fragment_shader_header_calc_light = + "void calc_light(in lowp float fLights, in lowp vec3 input_color, out lowp vec3 output_color);\n"; +static const char* fragment_shader_header_mipmap = + "mediump float mipmap(out lowp vec4 readtex0, out lowp vec4 readtex1);\n"; +static const char* fragment_shader_header_readTex = + "lowp vec4 readTex(in sampler2D tex, in mediump vec2 texCoord, in lowp int fbMonochrome, in bool fbFixedAlpha);\n"; +#ifdef GL_MULTISAMPLING_SUPPORT +static const char* fragment_shader_header_readTexMS = + "lowp vec4 readTexMS(in lowp sampler2DMS mstex, in mediump vec2 texCoord, in lowp int fbMonochrome, in bool fbFixedAlpha);\n"; +#endif // GL_MULTISAMPLING_SUPPORT +#ifdef GL_IMAGE_TEXTURES_SUPPORT +static const char* fragment_shader_header_depth_compare = + "bool depth_compare();\n"; +#endif // GL_IMAGE_TEXTURES_SUPPORT +static const char* fragment_shader_header_noise_dither = + "void colorNoiseDither(in lowp float _noise, inout lowp vec3 _color);\n" + "void alphaNoiseDither(in lowp float _noise, inout lowp float _alpha);\n"; +#ifdef USE_TOONIFY +static const char* fragment_shader_header_alpha_noise_toonify = + "void toonify(in mediump float intensity);\n" +#endif +/* static const char* fragment_shader_header_common_functions = " \n" "lowp float snoise(); \n" @@ -226,8 +250,8 @@ static const char* fragment_shader_header_common_functions = "lowp vec4 readTexMS(in lowp sampler2DMS mstex, in mediump vec2 texCoord, in lowp int fbMonochrome, in bool fbFixedAlpha); \n" #endif // GL_MULTISAMPLING_SUPPORT #ifdef GL_IMAGE_TEXTURES_SUPPORT -"bool depth_compare(); " -#endif // GL_IMAGE_TEXTURES_SUPPORT \n" +"bool depth_compare(); \n" +#endif // GL_IMAGE_TEXTURES_SUPPORT "void colorNoiseDither(in lowp float _noise, inout lowp vec3 _color); \n" "void alphaNoiseDither(in lowp float _noise, inout lowp float _alpha);\n" #ifdef USE_TOONIFY @@ -245,7 +269,7 @@ static const char* fragment_shader_header_common_functions_notex = "void colorNoiseDither(in lowp float _noise, inout lowp vec3 _color); \n" "void alphaNoiseDither(in lowp float _noise, inout lowp float _alpha);\n" ; - +*/ static const char* fragment_shader_calc_light = AUXILIARY_SHADER_VERSION "layout (std140) uniform LightBlock { \n"