Direct3D9 - fertige Scene mit hqx vergrößern
Verfasst: 20.01.2015, 03:26
Hallo.
Ich möchte eine gerenderte Scene mit dem hqx-Filter vergrößern.
Der Filter wird oft auch von Emulatoren genutzt: http://en.wikipedia.org/wiki/Hqx
In meiner aktuellen Version funktioniert das auch schon, aber nur irre langsam,
da LockRect viel Zeit frisst, bis zu 10ms, und ich weiß nicht warum.
Die Scene wird in ein zuvor erstelltes RenderTarget gemalt.
Da ich da aber nicht direkt dran komme, kopier ich es erst in ein extra Surface:
Das geht alles sehr schnell, jeder Aufruf in der Regel unter 100 Mikrosekunden, bis auf das LockReckt, das braucht bis zu 10 Millisekunden.
Jemand eine Idee wie ich das Ganze schneller bekomme?
Ich möchte eine gerenderte Scene mit dem hqx-Filter vergrößern.
Der Filter wird oft auch von Emulatoren genutzt: http://en.wikipedia.org/wiki/Hqx
In meiner aktuellen Version funktioniert das auch schon, aber nur irre langsam,
da LockRect viel Zeit frisst, bis zu 10ms, und ich weiß nicht warum.
Die Scene wird in ein zuvor erstelltes RenderTarget gemalt.
Da ich da aber nicht direkt dran komme, kopier ich es erst in ein extra Surface:
Code: Alles auswählen
// Ich habe Direct3D9 komplett gekapselt und nutze sowas wie SmartPointer, daher sieht es etwas komisch aus
m_Direct3DDevice9->CreateOffscreenPlainSurface(m_RealWidth, m_RealHeight, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &m_TempSurface, Null);
m_Direct3DDevice9->GetRenderTargetData(m_RenderTargetSurface, m_TempSurface);
Direct3D9::StructD3DLOCKED_RECT D3DLockedRect;
m_TempSurface->LockRect(&D3DLockedRect, pRect, D3DLOCK_NO_DIRTY_UPDATE | D3DLOCK_NOSYSLOCK | D3DLOCK_DONOTWAIT);
// jetzt wende ich den hqx-Filter an
m_TempSurface->UnlockRect();
m_Direct3DDevice9->UpdateSurface(m_TempSurface, Null, m_RenderTargetSurface, Null);
Jemand eine Idee wie ich das Ganze schneller bekomme?