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;
+}