Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
ogl: reset api state for blitting
glBlitFramebuffer depends on scissior test and color mask. It isn't documented well,
but it does. So we have to reset the apistate before using it.
In this way, there isn't any benefit of glBlitFramebuffer, glDrawArray would be better :-(
  • Loading branch information
degasus committed Aug 26, 2013
1 parent 15df7b3 commit 93f9f23
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Source/Plugins/Plugin_VideoOGL/Src/FramebufferManager.cpp
Expand Up @@ -435,6 +435,8 @@ void XFBSource::DecodeToTexture(u32 xfbAddr, u32 fbWidth, u32 fbHeight)

void XFBSource::CopyEFB(float Gamma)
{
g_renderer->ResetAPIState();

// Copy EFB data to XFB and restore render target again
glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetEFBFramebuffer());
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferManager::GetXFBFramebuffer());
Expand All @@ -451,6 +453,8 @@ void XFBSource::CopyEFB(float Gamma)

// Return to EFB.
FramebufferManager::SetFramebuffer(0);

g_renderer->RestoreAPIState();

}

Expand Down
8 changes: 8 additions & 0 deletions Source/Plugins/Plugin_VideoOGL/Src/Render.cpp
Expand Up @@ -958,9 +958,13 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
{
if (s_MSAASamples > 1)
{
g_renderer->ResetAPIState();

// Resolve our rectangle.
FramebufferManager::GetEFBDepthTexture(efbPixelRc);
glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetResolvedFramebuffer());

g_renderer->RestoreAPIState();
}

u32* depthMap = new u32[targetPixelRcWidth * targetPixelRcHeight];
Expand Down Expand Up @@ -1007,9 +1011,13 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
{
if (s_MSAASamples > 1)
{
g_renderer->ResetAPIState();

// Resolve our rectangle.
FramebufferManager::GetEFBColorTexture(efbPixelRc);
glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferManager::GetResolvedFramebuffer());

g_renderer->RestoreAPIState();
}

u32* colorMap = new u32[targetPixelRcWidth * targetPixelRcHeight];
Expand Down

0 comments on commit 93f9f23

Please sign in to comment.