Index: binaries/data/mods/public/shaders/glsl/model_common.fs =================================================================== --- binaries/data/mods/public/shaders/glsl/model_common.fs +++ binaries/data/mods/public/shaders/glsl/model_common.fs @@ -129,13 +129,13 @@ float height = 1.0; float scale = effectSettings.z; - int iter = int(min(20, 25.0 - dist/10.0)); + int iter = int(min(20.0, 25.0 - dist/10.0)); - if (iter > 0.01) + if (iter > 0) { - float s = 1.0/iter; + float s = 1.0/float(iter); float t = s; - move = vec2(-eyeDir.x, eyeDir.y) * scale / (eyeDir.z * iter); + move = vec2(-eyeDir.x, eyeDir.y) * scale / (eyeDir.z * float(iter)); vec2 nil = vec2(0.0); for (int i = 0; i < iter; ++i) { Index: source/gui/ObjectTypes/CChart.cpp =================================================================== --- source/gui/ObjectTypes/CChart.cpp +++ source/gui/ObjectTypes/CChart.cpp @@ -86,12 +86,16 @@ shader->VertexPointer(3, GL_FLOAT, 0, &vertices[0]); shader->AssertPointersBound(); +#if !CONFIG2_GLES glEnable(GL_LINE_SMOOTH); +#endif glLineWidth(1.1f); if (!g_Renderer.m_SkipSubmit) glDrawArrays(GL_LINE_STRIP, 0, vertices.size() / 3); glLineWidth(1.0f); +#if !CONFIG2_GLES glDisable(GL_LINE_SMOOTH); +#endif } void CChart::DrawTriangleStrip(const CShaderProgramPtr& shader, const CGUIColor& color, const std::vector& vertices) const Index: source/lib/external_libraries/glext_funcs.h =================================================================== --- source/lib/external_libraries/glext_funcs.h +++ source/lib/external_libraries/glext_funcs.h @@ -65,8 +65,6 @@ #if CONFIG2_GLES -// no GLES extensions used yet - // some functions that are extensions in GL are core functions in GLES, // so we should use them without the function pointer indirection #define pglActiveTextureARB glActiveTexture @@ -106,22 +104,41 @@ #define pglBufferSubDataARB glBufferSubData #define pglDeleteBuffersARB glDeleteBuffers #define pglGenBuffersARB glGenBuffers -#define pglMapBufferARB glMapBuffer -#define pglUnmapBufferARB glUnmapBuffer +// Those EXT symbols don’t exist in GLES 2.0, since it imported the ARB version instead. #define pglBindFramebufferEXT glBindFramebuffer #define pglCheckFramebufferStatusEXT glCheckFramebufferStatus #define pglDeleteFramebuffersEXT glDeleteFramebuffers #define pglFramebufferTexture2DEXT glFramebufferTexture2D #define pglGenFramebuffersEXT glGenFramebuffers - -#define GL_DEPTH_ATTACHMENT_EXT GL_DEPTH_ATTACHMENT -#define GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0 #define GL_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING #define GL_FRAMEBUFFER_COMPLETE_EXT GL_FRAMEBUFFER_COMPLETE #define GL_FRAMEBUFFER_EXT GL_FRAMEBUFFER -#define GL_CLAMP_TO_BORDER GL_CLAMP_TO_EDGE // TODO: should fix code that relies on GL_CLAMP_TO_BORDER +// Those should come from GLES 2.0 core, not from GL_EXT_draw_buffers. +#ifndef GL_COLOR_ATTACHMENT0_EXT +#define GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0 +#define GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT1 +#endif +#ifndef GL_DEPTH_ATTACHMENT_EXT +#define GL_DEPTH_ATTACHMENT_EXT GL_DEPTH_ATTACHMENT +#endif + +// GL_OES_mapbuffer +FUNC(void*, glMapBufferOES, (int target, int access)) +FUNC(bool, glUnmapBufferOES, (int target)) +#define pglMapBufferARB pglMapBufferOES +#define pglUnmapBufferARB pglUnmapBufferOES +#define GL_WRITE_ONLY GL_WRITE_ONLY_OES + +// GL_OES_texture_border_clamp +#define GL_CLAMP_TO_BORDER GL_CLAMP_TO_EDGE + +// GL_OES_rgb8_rgba8 +#define GL_RGBA8 GL_RGBA8_OES + +// GL_OES_depth32 +#define GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT32_OES typedef GLuint GLhandleARB; Index: source/ps/GameSetup/Config.cpp =================================================================== --- source/ps/GameSetup/Config.cpp +++ source/ps/GameSetup/Config.cpp @@ -52,7 +52,7 @@ bool g_Silhouettes = false; bool g_ShowSky = false; -bool g_PreferGLSL = false; +bool g_PreferGLSL = true; bool g_PostProc = false; bool g_SmoothLOS = false; @@ -106,7 +106,9 @@ CFG_GET_VAL("fog", g_Fog); CFG_GET_VAL("silhouettes", g_Silhouettes); CFG_GET_VAL("showsky", g_ShowSky); +#if !CONFIG2_GLES CFG_GET_VAL("preferglsl", g_PreferGLSL); +#endif CFG_GET_VAL("postproc", g_PostProc); CFG_GET_VAL("smoothlos", g_SmoothLOS); CFG_GET_VAL("gui.scale", g_GuiScale); Index: source/ps/GameSetup/HWDetect.cpp =================================================================== --- source/ps/GameSetup/HWDetect.cpp +++ source/ps/GameSetup/HWDetect.cpp @@ -712,7 +712,9 @@ #endif // CONFIG2_GLES -#ifdef SDL_VIDEO_DRIVER_X11 +// TODO: Running on X11 doesn’t imply that we use GLX, EGL is a totally valid +// API on this platform too. +#if defined(SDL_VIDEO_DRIVER_X11) && !CONFIG2_GLES #define GLXQCR_INTEGER(id) do { \ unsigned int i = UINT_MAX; \ Index: source/renderer/Renderer.cpp =================================================================== --- source/renderer/Renderer.cpp +++ source/renderer/Renderer.cpp @@ -433,11 +433,6 @@ if (skycolor.ParseString(skystring, 255.f)) SetClearColor(skycolor.AsSColor4ub()); -#if CONFIG2_GLES - // Override config option since GLES only supports GLSL - g_RenderingOptions.GetPreferGLSL() = true; -#endif - m_ShadowZBias = 0.02f; m_ShadowMapSize = 0; Index: source/renderer/SkyManager.cpp =================================================================== --- source/renderer/SkyManager.cpp +++ source/renderer/SkyManager.cpp @@ -126,11 +126,11 @@ } } - glTexImage2D(types[i], 0, GL_RGB, tex.m_Width, tex.m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &rotated[0]); + glTexImage2D(types[i], 0, GL_RGBA, tex.m_Width, tex.m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &rotated[0]); } else { - glTexImage2D(types[i], 0, GL_RGB, tex.m_Width, tex.m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); + glTexImage2D(types[i], 0, GL_RGBA, tex.m_Width, tex.m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); } }