diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2018-09-27 02:52:31 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2018-09-28 07:04:22 +0200 |
commit | b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3 (patch) | |
tree | ea9bab0a098dbb7edec15ae3dc5d69874c3d8db4 /src/video_core/renderer_opengl/gl_state.cpp | |
parent | Merge pull request #1399 from lioncash/sched (diff) | |
download | yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.gz yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.bz2 yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.lz yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.xz yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.zst yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_state.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_state.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index e5173e20a..e494b3f16 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp @@ -205,9 +205,6 @@ void OpenGLState::Apply() const { glActiveTexture(TextureUnits::MaxwellTexture(static_cast<int>(i)).Enum()); glBindTexture(texture_unit.target, texture_unit.texture); } - if (texture_unit.sampler != cur_state_texture_unit.sampler) { - glBindSampler(static_cast<GLuint>(i), texture_unit.sampler); - } // Update the texture swizzle if (texture_unit.swizzle.r != cur_state_texture_unit.swizzle.r || texture_unit.swizzle.g != cur_state_texture_unit.swizzle.g || @@ -219,6 +216,27 @@ void OpenGLState::Apply() const { } } + // Samplers + { + bool has_delta{}; + std::size_t first{}, last{}; + std::array<GLuint, Tegra::Engines::Maxwell3D::Regs::NumTextureSamplers> samplers; + for (std::size_t i = 0; i < std::size(samplers); ++i) { + samplers[i] = texture_units[i].sampler; + if (samplers[i] != cur_state.texture_units[i].sampler) { + if (!has_delta) { + first = i; + has_delta = true; + } + last = i; + } + } + if (has_delta) { + glBindSamplers(static_cast<GLuint>(first), static_cast<GLsizei>(last - first + 1), + samplers.data()); + } + } + // Framebuffer if (draw.read_framebuffer != cur_state.draw.read_framebuffer) { glBindFramebuffer(GL_READ_FRAMEBUFFER, draw.read_framebuffer); |