summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_opengl/gl_state.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_state.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp
index f4777d0b0..a38f88182 100644
--- a/src/video_core/renderer_opengl/gl_state.cpp
+++ b/src/video_core/renderer_opengl/gl_state.cpp
@@ -545,6 +545,26 @@ void OpenGLState::ApplySamplers() const {
}
}
+void OpenGLState::ApplyImages() const {
+ bool has_delta{};
+ std::size_t first{};
+ std::size_t last{};
+ for (std::size_t i = 0; i < std::size(images); ++i) {
+ if (!UpdateValue(cur_state.images[i], images[i])) {
+ continue;
+ }
+ if (!has_delta) {
+ first = i;
+ has_delta = true;
+ }
+ last = i;
+ }
+ if (has_delta) {
+ glBindImageTextures(static_cast<GLuint>(first), static_cast<GLsizei>(last - first + 1),
+ images.data() + first);
+ }
+}
+
void OpenGLState::Apply() {
MICROPROFILE_SCOPE(OpenGL_State);
ApplyFramebufferState();
@@ -576,6 +596,7 @@ void OpenGLState::Apply() {
ApplyLogicOp();
ApplyTextures();
ApplySamplers();
+ ApplyImages();
if (dirty.polygon_offset) {
ApplyPolygonOffset();
dirty.polygon_offset = false;