mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-26 07:35:41 +00:00
GPU/OpenGL: Use CopyImageSubData for VRAM copies
Not correct with regard to the mask bit handling, but better than blitting.
This commit is contained in:
parent
22e8b6b0a7
commit
771a151567
|
@ -712,11 +712,24 @@ void GPU_HW_OpenGL::CopyVRAM(u32 src_x, u32 src_y, u32 dst_x, u32 dst_y, u32 wid
|
||||||
src_y = m_vram_texture->GetHeight() - src_y - height;
|
src_y = m_vram_texture->GetHeight() - src_y - height;
|
||||||
dst_y = m_vram_texture->GetHeight() - dst_y - height;
|
dst_y = m_vram_texture->GetHeight() - dst_y - height;
|
||||||
|
|
||||||
glDisable(GL_SCISSOR_TEST);
|
if (GLAD_GL_VERSION_4_3)
|
||||||
m_vram_texture->BindFramebuffer(GL_READ_FRAMEBUFFER);
|
{
|
||||||
glBlitFramebuffer(src_x, src_y, src_x + width, src_y + height, dst_x, dst_y, dst_x + width, dst_y + height,
|
glCopyImageSubData(m_vram_texture->GetGLId(), GL_TEXTURE_2D, 0, src_x, src_y, 0, m_vram_texture->GetGLId(),
|
||||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
GL_TEXTURE_2D, 0, dst_x, dst_y, 0, width, height, 1);
|
||||||
glEnable(GL_SCISSOR_TEST);
|
}
|
||||||
|
else if (GLAD_GL_EXT_copy_image)
|
||||||
|
{
|
||||||
|
glCopyImageSubDataEXT(m_vram_texture->GetGLId(), GL_TEXTURE_2D, 0, src_x, src_y, 0, m_vram_texture->GetGLId(),
|
||||||
|
GL_TEXTURE_2D, 0, dst_x, dst_y, 0, width, height, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glDisable(GL_SCISSOR_TEST);
|
||||||
|
m_vram_texture->BindFramebuffer(GL_READ_FRAMEBUFFER);
|
||||||
|
glBlitFramebuffer(src_x, src_y, src_x + width, src_y + height, dst_x, dst_y, dst_x + width, dst_y + height,
|
||||||
|
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||||
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPU_HW_OpenGL::UpdateVRAMReadTexture()
|
void GPU_HW_OpenGL::UpdateVRAMReadTexture()
|
||||||
|
|
Loading…
Reference in a new issue