mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	video_core/GLES: fix issues cause by missing glTextureBarrier
create a duplicate for sampling instead
This commit is contained in:
		
							parent
							
								
									8ce81b19be
								
							
						
					
					
						commit
						d04071d6b3
					
				
					 3 changed files with 18 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -776,6 +776,20 @@ bool RasterizerOpenGL::Draw(bool accelerate, bool is_indexed) {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    OGLTexture temp_tex;
 | 
			
		||||
    if (need_texture_barrier && GLES) {
 | 
			
		||||
        temp_tex.Create();
 | 
			
		||||
        AllocateSurfaceTexture(temp_tex.handle, GetFormatTuple(color_surface->pixel_format),
 | 
			
		||||
                               color_surface->GetScaledWidth(), color_surface->GetScaledHeight());
 | 
			
		||||
        glCopyImageSubData(color_surface->texture.handle, GL_TEXTURE_2D, 0, 0, 0, 0,
 | 
			
		||||
                           temp_tex.handle, GL_TEXTURE_2D, 0, 0, 0, 0, color_surface->GetScaledWidth(),
 | 
			
		||||
                           color_surface->GetScaledHeight(), 1);
 | 
			
		||||
        for (auto& unit : state.texture_units) {
 | 
			
		||||
            if (unit.texture_2d == color_surface->texture.handle)
 | 
			
		||||
                unit.texture_2d = temp_tex.handle;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Sync and bind the shader
 | 
			
		||||
    if (shader_dirty) {
 | 
			
		||||
        SetShader();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -311,7 +311,7 @@ static constexpr std::array<void (*)(u32, u32, u8*, PAddr, PAddr, PAddr), 18> gl
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
// Allocate an uninitialized texture of appropriate size and format for the surface
 | 
			
		||||
static void AllocateSurfaceTexture(GLuint texture, const FormatTuple& format_tuple, u32 width,
 | 
			
		||||
void AllocateSurfaceTexture(GLuint texture, const FormatTuple& format_tuple, u32 width,
 | 
			
		||||
                                   u32 height) {
 | 
			
		||||
    OpenGLState cur_state = OpenGLState::GetCurState();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -339,4 +339,7 @@ struct FormatTuple {
 | 
			
		|||
constexpr FormatTuple tex_tuple = {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE};
 | 
			
		||||
 | 
			
		||||
const FormatTuple& GetFormatTuple(SurfaceParams::PixelFormat pixel_format);
 | 
			
		||||
 | 
			
		||||
void AllocateSurfaceTexture(GLuint texture, const FormatTuple& format_tuple, u32 width,
 | 
			
		||||
                            u32 height);
 | 
			
		||||
} // namespace OpenGL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue