From 71b22702a1b65d024311d6a92069ab76a3b48c96 Mon Sep 17 00:00:00 2001 From: degasus Date: Thu, 29 Oct 2015 08:45:17 +0100 Subject: [PATCH] OGL-TextureConverter: Keep care about the global state ifself --- Source/Core/VideoBackends/OGL/TextureCache.cpp | 10 ++++------ .../Core/VideoBackends/OGL/TextureConverter.cpp | 15 ++++++++++++--- Source/Core/VideoBackends/OGL/TextureConverter.h | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp index 287e9b2188..24fcb81e82 100644 --- a/Source/Core/VideoBackends/OGL/TextureCache.cpp +++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp @@ -264,6 +264,9 @@ void TextureCache::TCacheEntry::FromRenderTarget(u8* dstPointer, unsigned int ds glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + FramebufferManager::SetFramebuffer(0); + g_renderer->RestoreAPIState(); + if (g_ActiveConfig.bSkipEFBCopyToRam) { this->Zero(dstPointer); @@ -277,16 +280,11 @@ void TextureCache::TCacheEntry::FromRenderTarget(u8* dstPointer, unsigned int ds BytesPerRow(), NumBlocksY(), memory_stride, - read_texture, - srcFormat == PEControl::Z24, + srcFormat, isIntensity, scaleByHalf, srcRect); } - - FramebufferManager::SetFramebuffer(0); - - g_renderer->RestoreAPIState(); } TextureCache::TextureCache() diff --git a/Source/Core/VideoBackends/OGL/TextureConverter.cpp b/Source/Core/VideoBackends/OGL/TextureConverter.cpp index ba2046d9a3..bd51ca745f 100644 --- a/Source/Core/VideoBackends/OGL/TextureConverter.cpp +++ b/Source/Core/VideoBackends/OGL/TextureConverter.cpp @@ -270,17 +270,26 @@ static void EncodeToRamUsingShader(GLuint srcTexture, } void EncodeToRamFromTexture(u8 *dest_ptr, u32 format, u32 native_width, u32 bytes_per_row, u32 num_blocks_y, u32 memory_stride, - GLuint source_texture, bool bFromZBuffer, bool bIsIntensityFmt, int bScaleByHalf, const EFBRectangle& source) + PEControl::PixelFormat srcFormat, bool bIsIntensityFmt, int bScaleByHalf, const EFBRectangle& source) { + g_renderer->ResetAPIState(); + SHADER& texconv_shader = GetOrCreateEncodingShader(format); texconv_shader.Bind(); glUniform4i(s_encodingUniforms[format], source.left, source.top, native_width, bScaleByHalf ? 2 : 1); - EncodeToRamUsingShader(source_texture, + const GLuint read_texture = (srcFormat == PEControl::Z24) ? + FramebufferManager::ResolveAndGetDepthTarget(source) : + FramebufferManager::ResolveAndGetRenderTarget(source); + + EncodeToRamUsingShader(read_texture, dest_ptr, bytes_per_row, num_blocks_y, - memory_stride, bScaleByHalf > 0 && !bFromZBuffer); + memory_stride, bScaleByHalf > 0 && srcFormat != PEControl::Z24); + + FramebufferManager::SetFramebuffer(0); + g_renderer->RestoreAPIState(); } void EncodeToRamYUYV(GLuint srcTexture, const TargetRectangle& sourceRc, u8* destAddr, u32 dstWidth, u32 dstStride, u32 dstHeight) diff --git a/Source/Core/VideoBackends/OGL/TextureConverter.h b/Source/Core/VideoBackends/OGL/TextureConverter.h index 7a9fbca53e..e417e431a4 100644 --- a/Source/Core/VideoBackends/OGL/TextureConverter.h +++ b/Source/Core/VideoBackends/OGL/TextureConverter.h @@ -27,7 +27,7 @@ void DecodeToTexture(u32 xfbAddr, int srcWidth, int srcHeight, GLuint destTextur // returns size of the encoded data (in bytes) void EncodeToRamFromTexture(u8 *dest_ptr, u32 format, u32 native_width, u32 bytes_per_row, u32 num_blocks_y, u32 memory_stride, - GLuint source_texture, bool bFromZBuffer, bool bIsIntensityFmt, int bScaleByHalf, const EFBRectangle& source); + PEControl::PixelFormat srcFormat, bool bIsIntensityFmt, int bScaleByHalf, const EFBRectangle& source); }