summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_resource_manager.h2
-rw-r--r--src/video_core/renderer_opengl/gl_state.cpp11
-rw-r--r--src/video_core/renderer_opengl/gl_state.h15
5 files changed, 20 insertions, 12 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 0f6dec60b..aadf7e233 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -437,7 +437,7 @@ void RasterizerOpenGL::DrawArrays() {
437 437
438 // Unbind textures for potential future use as framebuffer attachments 438 // Unbind textures for potential future use as framebuffer attachments
439 for (auto& texture_unit : state.texture_units) { 439 for (auto& texture_unit : state.texture_units) {
440 texture_unit.texture_2d = 0; 440 texture_unit.Unbind();
441 } 441 }
442 state.Apply(); 442 state.Apply();
443 443
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
index 8e74c9412..857164ff6 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
@@ -645,7 +645,7 @@ void CachedSurface::DownloadGLTexture(const MathUtil::Rectangle<u32>& rect, GLui
645 glActiveTexture(GL_TEXTURE0); 645 glActiveTexture(GL_TEXTURE0);
646 glGetTexImage(GL_TEXTURE_2D, 0, tuple.format, tuple.type, &gl_buffer[buffer_offset]); 646 glGetTexImage(GL_TEXTURE_2D, 0, tuple.format, tuple.type, &gl_buffer[buffer_offset]);
647 } else { 647 } else {
648 state.ResetTexture(texture.handle); 648 state.UnbindTexture(texture.handle);
649 state.draw.read_framebuffer = read_fb_handle; 649 state.draw.read_framebuffer = read_fb_handle;
650 state.Apply(); 650 state.Apply();
651 651
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.h b/src/video_core/renderer_opengl/gl_resource_manager.h
index 93f9172e7..0fed93ca5 100644
--- a/src/video_core/renderer_opengl/gl_resource_manager.h
+++ b/src/video_core/renderer_opengl/gl_resource_manager.h
@@ -38,7 +38,7 @@ public:
38 if (handle == 0) 38 if (handle == 0)
39 return; 39 return;
40 glDeleteTextures(1, &handle); 40 glDeleteTextures(1, &handle);
41 OpenGLState::GetCurState().ResetTexture(handle).Apply(); 41 OpenGLState::GetCurState().UnbindTexture(handle).Apply();
42 handle = 0; 42 handle = 0;
43 } 43 }
44 44
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp
index dd5e8de26..2e8a422a8 100644
--- a/src/video_core/renderer_opengl/gl_state.cpp
+++ b/src/video_core/renderer_opengl/gl_state.cpp
@@ -48,12 +48,7 @@ OpenGLState::OpenGLState() {
48 logic_op = GL_COPY; 48 logic_op = GL_COPY;
49 49
50 for (auto& texture_unit : texture_units) { 50 for (auto& texture_unit : texture_units) {
51 texture_unit.texture_2d = 0; 51 texture_unit.Reset();
52 texture_unit.sampler = 0;
53 texture_unit.swizzle.r = GL_RED;
54 texture_unit.swizzle.g = GL_GREEN;
55 texture_unit.swizzle.b = GL_BLUE;
56 texture_unit.swizzle.a = GL_ALPHA;
57 } 52 }
58 53
59 draw.read_framebuffer = 0; 54 draw.read_framebuffer = 0;
@@ -286,10 +281,10 @@ void OpenGLState::Apply() const {
286 cur_state = *this; 281 cur_state = *this;
287} 282}
288 283
289OpenGLState& OpenGLState::ResetTexture(GLuint handle) { 284OpenGLState& OpenGLState::UnbindTexture(GLuint handle) {
290 for (auto& unit : texture_units) { 285 for (auto& unit : texture_units) {
291 if (unit.texture_2d == handle) { 286 if (unit.texture_2d == handle) {
292 unit.texture_2d = 0; 287 unit.Unbind();
293 } 288 }
294 } 289 }
295 return *this; 290 return *this;
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h
index 844144215..3398d7c04 100644
--- a/src/video_core/renderer_opengl/gl_state.h
+++ b/src/video_core/renderer_opengl/gl_state.h
@@ -91,6 +91,19 @@ public:
91 GLint b; // GL_TEXTURE_SWIZZLE_B 91 GLint b; // GL_TEXTURE_SWIZZLE_B
92 GLint a; // GL_TEXTURE_SWIZZLE_A 92 GLint a; // GL_TEXTURE_SWIZZLE_A
93 } swizzle; 93 } swizzle;
94
95 void Unbind() {
96 texture_2d = 0;
97 swizzle.r = GL_RED;
98 swizzle.g = GL_GREEN;
99 swizzle.b = GL_BLUE;
100 swizzle.a = GL_ALPHA;
101 }
102
103 void Reset() {
104 Unbind();
105 sampler = 0;
106 }
94 } texture_units[32]; 107 } texture_units[32];
95 108
96 struct { 109 struct {
@@ -137,7 +150,7 @@ public:
137 void Apply() const; 150 void Apply() const;
138 151
139 /// Resets any references to the given resource 152 /// Resets any references to the given resource
140 OpenGLState& ResetTexture(GLuint handle); 153 OpenGLState& UnbindTexture(GLuint handle);
141 OpenGLState& ResetSampler(GLuint handle); 154 OpenGLState& ResetSampler(GLuint handle);
142 OpenGLState& ResetProgram(GLuint handle); 155 OpenGLState& ResetProgram(GLuint handle);
143 OpenGLState& ResetPipeline(GLuint handle); 156 OpenGLState& ResetPipeline(GLuint handle);