diff --git a/core/rend/gl4/gles.cpp b/core/rend/gl4/gles.cpp index e092609c7..57af06010 100644 --- a/core/rend/gl4/gles.cpp +++ b/core/rend/gl4/gles.cpp @@ -164,8 +164,8 @@ vec4 fog_clamp(vec4 col) vec4 palettePixel(sampler2D tex, vec2 coords) { int color_idx = int(floor(texture(tex, coords).r * 255.0 + 0.5)) + palette_index; - vec2 c = vec2(float(color_idx % 32) / 31.0, float(color_idx / 32) / 31.0); - return texture(palette, c); + ivec2 c = ivec2(color_idx % 32, color_idx / 32); + return texelFetch(palette, c, 0); } #endif diff --git a/core/rend/gles/gles.cpp b/core/rend/gles/gles.cpp index 4bdd53dec..05e02e87f 100644 --- a/core/rend/gles/gles.cpp +++ b/core/rend/gles/gles.cpp @@ -160,9 +160,13 @@ highp vec4 fog_clamp(lowp vec4 col) lowp vec4 palettePixel(highp vec2 coords) { highp int color_idx = int(floor(texture(tex, coords).FOG_CHANNEL * 255.0 + 0.5)) + palette_index; - highp vec2 c = vec2(mod(float(color_idx), 32.0) / 31.0, float(color_idx / 32) / 31.0); - //highp vec2 c = vec2((mod(float(color_idx), 32.0) * 2.0 + 1.0) / 64.0, (float(color_idx / 32) * 2.0 + 1.0) / 64.0); +#if TARGET_GL == GLES2 || TARGET_GL == GL2 + highp vec2 c = vec2((mod(float(color_idx), 32.0) * 2.0 + 1.0) / 64.0, (float(color_idx / 32) * 2.0 + 1.0) / 64.0); return texture(palette, c); +#else + highp ivec2 c = ivec2(color_idx % 32, color_idx / 32); + return texelFetch(palette, c, 0); +#endif } #endif diff --git a/shell/libretro/libretro.cpp b/shell/libretro/libretro.cpp index b26ab0104..89a732d71 100644 --- a/shell/libretro/libretro.cpp +++ b/shell/libretro/libretro.cpp @@ -1330,6 +1330,7 @@ static bool set_opengl_hw_render(u32 preferred) // There are some weirdness with RA's gl context's versioning : // - any value above 3.0 won't provide a valid context, while the GLSM_CTL_STATE_CONTEXT_INIT call returns true... // - the only way to overwrite previously set version with zero values is to set them directly in hw_render, otherwise they are ignored (see glsm_state_ctx_init logic) + // FIXME what's the point of this? retro_hw_render_callback hw_render; hw_render.version_major = 3; hw_render.version_minor = 0; @@ -1341,19 +1342,14 @@ static bool set_opengl_hw_render(u32 preferred) } } else +#endif { params.context_type = (retro_hw_context_type)preferred; params.major = 3; - params.minor = 0; + params.minor = preferred == RETRO_HW_CONTEXT_OPENGL_CORE ? 2 : 0; config::RendererType = RenderType::OpenGL; + config::RendererType.commit(); } -#elif defined(HAVE_GL3) - params.context_type = (retro_hw_context_type)preferred; - params.major = 3; - params.minor = 0; - config::RendererType = RenderType::OpenGL; -#endif - config::RendererType.commit(); if (glsm_ctl(GLSM_CTL_STATE_CONTEXT_INIT, ¶ms)) return true;