[D3D8] Multisampling und GDI calls
Verfasst: 21.05.2010, 02:37
Hi!
Ich möchte bei einem älteren Direct3D8-Spiel (Source nicht vorhanden) gerne multisampling (Anti-Aliasing) aktivieren. Dazu setze ich Hooks. Dies funktioniert auch in Levels (3D), doch leider nicht im Menü (2D) des Spiels. Ist multisampling im Menü aktiv, bleibt der Bildschirm schwarz bzw. in der Farbe von device->Clear()...
Workaround war, beim Laden eines Levels einen device reset zu erzwingen (durch return D3DERR_DEVICENOTRESET in TestCooperativeLevel()), und vor dem device->Reset() die presentation parameters noch entsprechend zu ändern. Und dann bei Rückkehr ins Menü dasselbe.
Gefällt mir jetzt aber nicht so gut (langsam, unsolide), und es gibt auch Probleme mit dem Cursor, der manchmal nach dem reset einfach nicht mehr erscheint.
Nun würde ich das multisampling gerne dauerhaft aktiviert lassen, doch wie gesagt wird das Menü dann nicht angezeigt/nicht aktualisiert.
Im Menü sehen die Aufrufe so aus:
Clear (D3DCLEAR_ZBUFFER)
GetBackBuffer
BeginScene
SetRenderState (D3DRS_FILLMODE / D3DFILL_SOLID)
EndScene
SetTransform (D3DTS_VIEW)
SetTransform (D3DTS_PROJECTION)
TestCooperativeLevel
Present
// Und wieder von vorn
Das Menü wird also mit ziemlicher Sicherheit mit GDI(+) gezeichnet (nur GetBackBuffer(), aber keinerlei DrawPrimitive...() Funktionen).
Warum tritt dieses Problem eigentlich auf? Gibt es denn eine Möglichkeit, multisampling zu unterstützen? Was könnte ich versuchen?
Danke euch!
MfG,
Fluke
Ich möchte bei einem älteren Direct3D8-Spiel (Source nicht vorhanden) gerne multisampling (Anti-Aliasing) aktivieren. Dazu setze ich Hooks. Dies funktioniert auch in Levels (3D), doch leider nicht im Menü (2D) des Spiels. Ist multisampling im Menü aktiv, bleibt der Bildschirm schwarz bzw. in der Farbe von device->Clear()...
Workaround war, beim Laden eines Levels einen device reset zu erzwingen (durch return D3DERR_DEVICENOTRESET in TestCooperativeLevel()), und vor dem device->Reset() die presentation parameters noch entsprechend zu ändern. Und dann bei Rückkehr ins Menü dasselbe.
Gefällt mir jetzt aber nicht so gut (langsam, unsolide), und es gibt auch Probleme mit dem Cursor, der manchmal nach dem reset einfach nicht mehr erscheint.
Nun würde ich das multisampling gerne dauerhaft aktiviert lassen, doch wie gesagt wird das Menü dann nicht angezeigt/nicht aktualisiert.
Im Menü sehen die Aufrufe so aus:
Clear (D3DCLEAR_ZBUFFER)
GetBackBuffer
BeginScene
SetRenderState (D3DRS_FILLMODE / D3DFILL_SOLID)
EndScene
SetTransform (D3DTS_VIEW)
SetTransform (D3DTS_PROJECTION)
TestCooperativeLevel
Present
// Und wieder von vorn
Das Menü wird also mit ziemlicher Sicherheit mit GDI(+) gezeichnet (nur GetBackBuffer(), aber keinerlei DrawPrimitive...() Funktionen).
Warum tritt dieses Problem eigentlich auf? Gibt es denn eine Möglichkeit, multisampling zu unterstützen? Was könnte ich versuchen?
Danke euch!
MfG,
Fluke