diff --git a/gfx/drivers_shader/shader_gl_core.cpp b/gfx/drivers_shader/shader_gl_core.cpp index 64a8b1d420..c3048b6bdb 100644 --- a/gfx/drivers_shader/shader_gl_core.cpp +++ b/gfx/drivers_shader/shader_gl_core.cpp @@ -431,7 +431,7 @@ public: unsigned width, unsigned height, bool linear, bool mipmap, - GLenum address); + gl_core_filter_chain_address address); ~StaticTexture(); StaticTexture(StaticTexture&&) = delete; @@ -449,17 +449,27 @@ private: StaticTexture::StaticTexture(string id_, GLuint image_, unsigned width, unsigned height, bool linear, bool mipmap, - GLenum address) + gl_core_filter_chain_address address) : id(std::move(id_)), image(image_) { - texture.texture.width = width; + GLenum gl_address = address_to_gl(address); + + texture.filter = GL_CORE_FILTER_CHAIN_NEAREST; + texture.mip_filter = GL_CORE_FILTER_CHAIN_NEAREST; + texture.address = address; + texture.texture.width = width; texture.texture.height = height; texture.texture.format = 0; - texture.texture.image = image; + texture.texture.image = image; + + if (linear) + texture.filter = GL_CORE_FILTER_CHAIN_LINEAR; + if (mipmap && linear) + texture.mip_filter = GL_CORE_FILTER_CHAIN_LINEAR; glBindTexture(GL_TEXTURE_2D, image); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, address); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, address); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gl_address); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, gl_address); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, linear ? GL_LINEAR : GL_NEAREST); if (linear && mipmap) @@ -2126,7 +2136,7 @@ static unique_ptr gl_core_filter_chain_load_lut( tex, image.width, image.height, shader->filter != RARCH_FILTER_NEAREST, levels > 1, - gl_core_shader::address_to_gl(gl_core_shader::wrap_to_address(shader->wrap)))); + gl_core_shader::wrap_to_address(shader->wrap))); } static bool gl_core_filter_chain_load_luts( diff --git a/libretro-common/formats/image_texture.c b/libretro-common/formats/image_texture.c index 2fbc6a1184..e434766e3a 100644 --- a/libretro-common/formats/image_texture.c +++ b/libretro-common/formats/image_texture.c @@ -90,8 +90,13 @@ bool image_texture_color_convert(unsigned r_shift, uint8_t r = (uint8_t)(col >> 16); uint8_t g = (uint8_t)(col >> 8); uint8_t b = (uint8_t)(col >> 0); - pixels[i] = (a << a_shift) | - (r << r_shift) | (g << g_shift) | (b << b_shift); + /* Explicitly cast these to uint32_t to prevent + * ASAN runtime error: left shift of 255 by 24 places + * cannot be represented in type 'int' */ + pixels[i] = ((uint32_t)a << a_shift) | + ((uint32_t)r << r_shift) | + ((uint32_t)g << g_shift) | + ((uint32_t)b << b_shift); } return true;