diff --git a/misc/opengl/GLCommon.h b/misc/opengl/GLCommon.h index 9c8b6f0ee..207c7328d 100644 --- a/misc/opengl/GLCommon.h +++ b/misc/opengl/GLCommon.h @@ -42,6 +42,8 @@ typedef cc_uintptr GLpointer; #define GL_TRIANGLES 0x0004 #define GL_QUADS 0x0007 +#define GL_ZERO 0 +#define GL_ONE 1 #define GL_BLEND 0x0BE2 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 diff --git a/src/Graphics_GL1.c b/src/Graphics_GL1.c index 02a21331c..4f027d8e1 100644 --- a/src/Graphics_GL1.c +++ b/src/Graphics_GL1.c @@ -25,6 +25,8 @@ #include "../misc/opengl/GL1Funcs.h" #if defined CC_BUILD_SYMBIAN #include "../misc/opengl/GL2Funcs.h" + +static cc_bool mbx; #endif #if CC_BUILD_MAXSTACK <= (64 * 1024) @@ -84,7 +86,9 @@ void Gfx_Create(void) { #ifdef CC_BUILD_GL11_FALLBACK GLContext_GetAll(coreFuncs, Array_Elems(coreFuncs)); #endif +#ifndef CC_BUILD_GLES customMipmapsLevels = true; +#endif Gfx.BackendType = CC_GFX_BACKEND_GL1; GL_InitCommon(); @@ -335,6 +339,17 @@ static void SetAlphaTest(cc_bool enabled) { void Gfx_DepthOnlyRendering(cc_bool depthOnly) { cc_bool enabled = !depthOnly; +#ifdef CC_BUILD_SYMBIAN + if (mbx) { + if (depthOnly) { + _glBlendFunc(GL_ZERO, GL_ONE); + Gfx_SetAlphaBlending(true); + } else { + _glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + return; + } +#endif SetColorWrite(enabled & gfx_colorMask[0], enabled & gfx_colorMask[1], enabled & gfx_colorMask[2], enabled & gfx_colorMask[3]); @@ -422,6 +437,18 @@ cc_bool Gfx_WarnIfNecessary(void) { Gfx.Limitations |= GFX_LIMIT_VERTEX_ONLY_FOG; return true; } +#if defined CC_BUILD_SYMBIAN + if (String_ContainsConst(&renderer, "SGX")) { + } else if (String_ContainsConst(&renderer, "MBX")) { + Gfx.Limitations |= GFX_LIMIT_VERTEX_ONLY_FOG; + mbx = true; + } else if (!String_ContainsConst(&renderer, "HW")) { + Chat_AddRaw("&cSoftware rendering is being used, performance will greatly suffer."); + + Gfx.Limitations |= GFX_LIMIT_MINIMAL; + return true; + } +#endif return false; }