From 889d8aaab3e8d7370f1f14e846ec06b3b601b0fb Mon Sep 17 00:00:00 2001 From: wwylele Date: Sun, 11 Mar 2018 13:31:29 +0200 Subject: [PATCH] gl_rasterizer/cache: only reallocate cubemap when size/format mismatch --- .../renderer_opengl/gl_rasterizer_cache.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 81ba557d9..1500519fc 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -1264,9 +1264,17 @@ void RasterizerCacheOpenGL::FillTextureCube(GLuint dest_handle, state.Apply(); glActiveTexture(TextureUnits::TextureCube.Enum()); FormatTuple format_tuple = GetFormatTuple(faces[0].surface->pixel_format); - for (auto& face : faces) { - glTexImage2D(face.gl_face, 0, format_tuple.internal_format, scaled_size, scaled_size, 0, - format_tuple.format, format_tuple.type, nullptr); + + GLint cur_size, cur_format; + glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_TEXTURE_WIDTH, &cur_size); + glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_TEXTURE_INTERNAL_FORMAT, + &cur_format); + + if (cur_size != scaled_size || cur_format != format_tuple.internal_format) { + for (auto& face : faces) { + glTexImage2D(face.gl_face, 0, format_tuple.internal_format, scaled_size, scaled_size, 0, + format_tuple.format, format_tuple.type, nullptr); + } } state.draw.read_framebuffer = read_framebuffer.handle;