diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 21074093bd..91f5e0dad2 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -1051,7 +1051,32 @@ void GLGSRender::ExecCMD() void GLGSRender::Flip() { - if(m_fbo.IsCreated()) + if(m_read_buffer) + { + gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(m_gcm_buffers_addr); + u32 width = re(buffers[m_gcm_current_buffer].width); + u32 height = re(buffers[m_gcm_current_buffer].height); + u32 addr = GetAddress(re(buffers[m_gcm_current_buffer].offset), CELL_GCM_LOCATION_LOCAL); + + glRotated(90, 1, 0, 0); + + if(Memory.IsGoodAddr(addr)) + { + //TODO + //buffer rotating + static Array pixels; + pixels.SetCount(width * height * 4); + u8* src = (u8*)Memory.VirtualToRealAddr(addr); + + for(u32 y=0; y ctxt) { cellGcmSys.Warning("cellGcmSetWaitFlip(ctx=0x%x)", ctxt.GetAddr()); - //GSLockCurrent lock(GS_LOCK_WAIT_FLIP); + GSLockCurrent lock(GS_LOCK_WAIT_FLIP); return CELL_OK; }