diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 7fb1ed6811..1e553ce533 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -325,13 +325,15 @@ void GLGSRender::end() for (int i = 0; i < rsx::limits::textures_count; ++i) { if (!textures[i].enabled()) + { continue; + } int location; if (m_program->uniforms.has_location("tex" + std::to_string(i), &location)) { - __glcheck m_gl_textures[i].init(textures[i]); - __glcheck m_program->uniforms.texture(location, i, gl::texture_view(gl::texture::target::texture2D, m_gl_textures[i].id())); + __glcheck m_gl_textures[i].init(i, textures[i]); + glProgramUniform1i(m_program->id(), location, i); } } diff --git a/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp b/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp index baad5818f7..132378acdd 100644 --- a/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp +++ b/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp @@ -51,7 +51,6 @@ namespace rsx } glGenTextures(1, &m_id); - bind(); } int texture::gl_wrap(int wrap) @@ -90,13 +89,14 @@ namespace rsx return 1.0f; } - void texture::init(rsx::texture& tex) + void texture::init(int index, rsx::texture& tex) { if (!m_id) { create(); } + glActiveTexture(GL_TEXTURE0 + index); bind(); const u32 texaddr = rsx::get_address(tex.offset(), tex.location()); diff --git a/rpcs3/Emu/RSX/GL/rsx_gl_texture.h b/rpcs3/Emu/RSX/GL/rsx_gl_texture.h index ace0b86c2e..1b66efa05a 100644 --- a/rpcs3/Emu/RSX/GL/rsx_gl_texture.h +++ b/rpcs3/Emu/RSX/GL/rsx_gl_texture.h @@ -34,7 +34,7 @@ namespace rsx return (v << 2) | (v >> 4); } - void init(rsx::texture& tex); + void init(int index, rsx::texture& tex); void bind(); void unbind(); void remove();