diff --git a/AerofoilSDL/AerofoilSDL.vcxproj b/AerofoilSDL/AerofoilSDL.vcxproj index 38f189d..978eefc 100644 --- a/AerofoilSDL/AerofoilSDL.vcxproj +++ b/AerofoilSDL/AerofoilSDL.vcxproj @@ -97,6 +97,7 @@ + diff --git a/AerofoilSDL/AerofoilSDL.vcxproj.filters b/AerofoilSDL/AerofoilSDL.vcxproj.filters index 7fde39b..082d386 100644 --- a/AerofoilSDL/AerofoilSDL.vcxproj.filters +++ b/AerofoilSDL/AerofoilSDL.vcxproj.filters @@ -66,6 +66,9 @@ Source Files\ShaderCode + + Source Files\ShaderCode + diff --git a/AerofoilSDL/Android.mk b/AerofoilSDL/Android.mk index e9f4211..471fc92 100644 --- a/AerofoilSDL/Android.mk +++ b/AerofoilSDL/Android.mk @@ -23,6 +23,7 @@ LOCAL_SRC_FILES := \ GpFiberStarter_SDL.cpp \ ShaderCode/CopyQuadP.cpp \ ShaderCode/DrawQuadPaletteP.cpp \ + ShaderCode/DrawQuad32P.cpp \ ShaderCode/DrawQuadV.cpp \ ShaderCode/ScaleQuadP.cpp diff --git a/AerofoilSDL/GpDisplayDriver_SDL_GL2.cpp b/AerofoilSDL/GpDisplayDriver_SDL_GL2.cpp index 376ee4e..cd0fe2d 100644 --- a/AerofoilSDL/GpDisplayDriver_SDL_GL2.cpp +++ b/AerofoilSDL/GpDisplayDriver_SDL_GL2.cpp @@ -108,17 +108,13 @@ namespace GpBinarizedShaders extern const char *g_drawQuadPalettePF_GL2; extern const char *g_drawQuadPalettePNF_GL2; - extern const char *g_drawQuadRGBPF_GL2; - extern const char *g_drawQuadRGBPNF_GL2; - extern const char *g_drawQuad15BitPF_GL2; - extern const char *g_drawQuad15BitPNF_GL2; + extern const char *g_drawQuad32PF_GL2; + extern const char *g_drawQuad32PNF_GL2; extern const char *g_drawQuadPaletteICCPF_GL2; extern const char *g_drawQuadPaletteICCPNF_GL2; - extern const char *g_drawQuadRGBICCPF_GL2; - extern const char *g_drawQuadRGBICCPNF_GL2; - extern const char *g_drawQuad15BitICCPF_GL2; - extern const char *g_drawQuad15BitICCPNF_GL2; + extern const char *g_drawQuad32ICCPF_GL2; + extern const char *g_drawQuad32ICCPNF_GL2; extern const char *g_copyQuadP_GL2; extern const char *g_scaleQuadP_GL2; @@ -849,12 +845,16 @@ private: DrawQuadProgram m_drawQuadPaletteNoFlickerProgram; DrawQuadProgram m_drawQuadPaletteFlickerProgram; - DrawQuadProgram m_drawQuadRGBProgram; - DrawQuadProgram m_drawQuad15BitProgram; + DrawQuadProgram m_drawQuad15NoFlickerProgram; + DrawQuadProgram m_drawQuad15FlickerProgram; + DrawQuadProgram m_drawQuad32NoFlickerProgram; + DrawQuadProgram m_drawQuad32FlickerProgram; DrawQuadProgram m_drawQuadPaletteICCNoFlickerProgram; DrawQuadProgram m_drawQuadPaletteICCFlickerProgram; - DrawQuadProgram m_drawQuadRGBICCProgram; - DrawQuadProgram m_drawQuad15BitICCProgram; + DrawQuadProgram m_drawQuad15ICCNoFlickerProgram; + DrawQuadProgram m_drawQuad15ICCFlickerProgram; + DrawQuadProgram m_drawQuad32ICCNoFlickerProgram; + DrawQuadProgram m_drawQuad32ICCFlickerProgram; }; InstancedResources m_res; @@ -2117,7 +2117,20 @@ void GpDisplayDriver_SDL_GL2::DrawSurface(IGpDisplayDriverSurface *surface, int3 } else if (pixelFormat == GpPixelFormats::kRGB32) { - return; + if (m_useICCProfile) + { + if (effects->m_flicker) + program = &m_res.m_drawQuad32ICCFlickerProgram; + else + program = &m_res.m_drawQuad32ICCNoFlickerProgram; + } + else + { + if (effects->m_flicker) + program = &m_res.m_drawQuad32FlickerProgram; + else + program = &m_res.m_drawQuad32NoFlickerProgram; + } } else { @@ -2496,23 +2509,29 @@ bool GpDisplayDriver_SDL_GL2::InitResources(uint32_t physicalWidth, uint32_t phy } GpComPtr> drawQuadVertexShader = CreateShader(GpBinarizedShaders::g_drawQuadV_GL2); + GpComPtr> drawQuadPaletteFlickerPixelShader = CreateShader(GpBinarizedShaders::g_drawQuadPalettePF_GL2); GpComPtr> drawQuadPaletteNoFlickerPixelShader = CreateShader(GpBinarizedShaders::g_drawQuadPalettePNF_GL2); - //m_drawQuadRGBPixelShader = CreateShader(GpBinarizedShaders::g_drawQuadRGBP_GL2); - //m_drawQuad15BitPixelShader = CreateShader(GpBinarizedShaders::g_drawQuad15BitP_GL2); + GpComPtr> drawQuad32FlickerPixelShader = CreateShader(GpBinarizedShaders::g_drawQuad32PF_GL2); + GpComPtr> drawQuad32NoFlickerPixelShader = CreateShader(GpBinarizedShaders::g_drawQuad32PNF_GL2); + GpComPtr> drawQuadPaletteICCFPixelShader = CreateShader(GpBinarizedShaders::g_drawQuadPaletteICCPF_GL2); GpComPtr> drawQuadPaletteICCNFPixelShader = CreateShader(GpBinarizedShaders::g_drawQuadPaletteICCPNF_GL2); - //m_drawQuadRGBICCPixelShader = CreateShader(GpBinarizedShaders::g_drawQuadRGBICCP_GL2); - //m_drawQuad15BitICCPixelShader = CreateShader(GpBinarizedShaders::g_drawQuad15BitICCP_GL2); + GpComPtr> drawQuad32ICCFPixelShader = CreateShader(GpBinarizedShaders::g_drawQuad32ICCPF_GL2); + GpComPtr> drawQuad32ICCNFPixelShader = CreateShader(GpBinarizedShaders::g_drawQuad32ICCPNF_GL2); + GpComPtr> scaleQuadPixelShader = CreateShader(GpBinarizedShaders::g_scaleQuadP_GL2); GpComPtr> copyQuadPixelShader = CreateShader(GpBinarizedShaders::g_copyQuadP_GL2); if (!m_res.m_drawQuadPaletteFlickerProgram.Link(this, drawQuadVertexShader, drawQuadPaletteFlickerPixelShader) - || !m_res.m_drawQuadPaletteNoFlickerProgram.Link(this, drawQuadVertexShader, drawQuadPaletteFlickerPixelShader) - //|| !m_drawQuadRGBProgram.Link(this, drawQuadVertexShader, drawQuadRGBPixelShader) - //|| !m_drawQuad15BitProgram.Link(this, drawQuadVertexShader, drawQuad15BitPixelShader) + || !m_res.m_drawQuadPaletteNoFlickerProgram.Link(this, drawQuadVertexShader, drawQuadPaletteNoFlickerPixelShader) + || !m_res.m_drawQuad32FlickerProgram.Link(this, drawQuadVertexShader, drawQuad32FlickerPixelShader) + || !m_res.m_drawQuad32NoFlickerProgram.Link(this, drawQuadVertexShader, drawQuad32NoFlickerPixelShader) || !m_res.m_drawQuadPaletteICCFlickerProgram.Link(this, drawQuadVertexShader, drawQuadPaletteICCFPixelShader) || !m_res.m_drawQuadPaletteICCNoFlickerProgram.Link(this, drawQuadVertexShader, drawQuadPaletteICCNFPixelShader) + || !m_res.m_drawQuad32ICCFlickerProgram.Link(this, drawQuadVertexShader, drawQuad32ICCFPixelShader) + || !m_res.m_drawQuad32ICCNoFlickerProgram.Link(this, drawQuadVertexShader, drawQuad32ICCNFPixelShader) + //|| !m_drawQuadRGBICCProgram.Link(this, drawQuadVertexShader, drawQuadRGBICCPixelShader) //|| !m_drawQuad15BitICCProgram.Link(this, drawQuadVertexShader, drawQuad15BitICCPixelShader) || !m_res.m_scaleQuadProgram.Link(this, drawQuadVertexShader, scaleQuadPixelShader) diff --git a/AerofoilSDL/ShaderCode/DrawQuad32P.cpp b/AerofoilSDL/ShaderCode/DrawQuad32P.cpp new file mode 100644 index 0000000..90b03a4 --- /dev/null +++ b/AerofoilSDL/ShaderCode/DrawQuad32P.cpp @@ -0,0 +1,35 @@ +#include "Functions.h" +#include "DrawQuadPixelConstants.h" + +#define GP_GL_SHADER_CODE_DRAWQUAD32P_GLSL \ +"\n"\ +"varying vec4 texCoord;\n"\ +"uniform sampler2D surfaceTexture;\n"\ +"uniform sampler2D paletteTexture;\n"\ +"\n"\ +"vec3 SamplePixel(vec2 tc)\n"\ +"{\n"\ +" return texture2D(surfaceTexture, tc).rgb;\n"\ +"}\n"\ +"\n"\ +"void main()\n"\ +"{\n"\ +" vec4 resultColor = vec4(SamplePixel(texCoord.xy), 1.0);\n"\ +" resultColor *= constants_Modulation;\n"\ +"#ifdef ENABLE_FLICKER\n"\ +" resultColor = ApplyFlicker(constants_FlickerAxis, texCoord.zw, constants_FlickerStartThreshold, constants_FlickerEndThreshold, resultColor * constants_Modulation);\n"\ +" if (resultColor.a < 1.0)\n"\ +" discard;\n"\ +"#endif\n"\ +" resultColor = ApplyDesaturation(constants_Desaturation, resultColor);\n"\ +"\n"\ +" gl_FragColor = vec4(ApplyColorSpaceTransform(resultColor.rgb), resultColor.a);\n"\ +"}\n" + +namespace GpBinarizedShaders +{ + const char *g_drawQuad32PF_GL2 = "#define ENABLE_FLICKER\n" GP_GL_SHADER_CODE_MEDIUM_PRECISION_PREFIX GP_GL_SHADER_CODE_DRAWQUADPIXELCONSTANTS_H GP_GL_SHADER_CODE_FUNCTIONS_H GP_GL_SHADER_CODE_DRAWQUAD32P_GLSL; + const char *g_drawQuad32PNF_GL2 = GP_GL_SHADER_CODE_MEDIUM_PRECISION_PREFIX GP_GL_SHADER_CODE_DRAWQUADPIXELCONSTANTS_H GP_GL_SHADER_CODE_FUNCTIONS_H GP_GL_SHADER_CODE_DRAWQUAD32P_GLSL; + const char *g_drawQuad32ICCPF_GL2 = "#define USE_ICC_PROFILE\n" "#define ENABLE_FLICKER\n" GP_GL_SHADER_CODE_MEDIUM_PRECISION_PREFIX GP_GL_SHADER_CODE_DRAWQUADPIXELCONSTANTS_H GP_GL_SHADER_CODE_FUNCTIONS_H GP_GL_SHADER_CODE_DRAWQUAD32P_GLSL; + const char *g_drawQuad32ICCPNF_GL2 = "#define USE_ICC_PROFILE\n" GP_GL_SHADER_CODE_MEDIUM_PRECISION_PREFIX GP_GL_SHADER_CODE_DRAWQUADPIXELCONSTANTS_H GP_GL_SHADER_CODE_FUNCTIONS_H GP_GL_SHADER_CODE_DRAWQUAD32P_GLSL; +}