Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.11.2005, 22:39 Titel: GDI-Text unter Direct3D |
|
|
Also, unter DirectDraw konnte ich ja recht einfach ein Handle vom Backbuffer holen und dann mit GDI Text drauf malen.
Geht das in D3D auch? Kann ich vielleicht auch mit GDI auf Texturen malen? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 05.11.2005, 22:53 Titel: |
|
|
Sicher geht alles. Musst nur den Backbuffer einer Surface zuweisen und von dieser dann den Device Context holen.
CPP: | IDirect3DSurface9 Members
GetContainer Provides access to the parent cube texture or texture (mipmap) object, if this surface is a child level of a cube texture or a mipmap. This method can also provide access to the parent swap chain if the surface is a back-buffer child.
GetDC Retrieves a device context.
GetDesc Retrieves a description of the surface.
LockRect Locks a rectangle on a surface.
ReleaseDC Release a device context handle.
UnlockRect Unlocks a rectangle on a surface.
|
_________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.11.2005, 23:56 Titel: |
|
|
ok, also mit Direct3DSurfaces geht das im Prinzip genau wie in DirectDraw. Nur was ist mit Texturen? Muss ich da jetzt GetSurfaceLevel() die ein D3DSurface holen und das dann drauf anwenden? Steht der Parameter für die Mip-Mapebene? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Dr. Best Senior JLI'ler

Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 06.11.2005, 00:38 Titel: |
|
|
Jo. So weit ich weiß läuft das genau so.
Einfach per GetSurfaceLevel(MipMapLevel) einen surface pointer aus der textur holen und das surface hinterher wieder releasen (ist ja bloß ne referenz auf die Textur). _________________
Ich bin da, wer noch? |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.11.2005, 11:55 Titel: |
|
|
CPP: | HRESULT GetBackBuffer( UINT iSwapChain,
UINT BackBuffer,
D3DBACKBUFFER_TYPE Type,
IDirect3DSurface9 **ppBackBuffer
);
|
Was muss ich bei Swap Chain angeben? Und wenn ich für den zweiten Parameter 0 angebe, bekomme ich meinen Backbuffer, ne?
Und muss ich die Surface wieder mit Release freigeben? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Dr. Best Senior JLI'ler

Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 06.11.2005, 14:11 Titel: |
|
|
Da du ja wohl nicht mehrere swap chains verwendest musst du für das erste Argument wohl 0 übergeben (bei DX 8.1 mit dem ich immernoch arbeite gibt's sowas net ).
Und da du ja wohl auch nur einen BackBuffer benutzt brauchst du wohl auch für den zweiten Parameter nur 0 zu übergeben.
Und ja, auf jeden Aufruf von GetSurfaceLevel(...) GetBackBuffer(...) oder was auch immer muss ein Release() Aufruf kommen. _________________
Ich bin da, wer noch? |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.11.2005, 15:44 Titel: |
|
|
CPP: | LPDIRECT3DSURFACE9 BackBuffer;
m_lpDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &BackBuffer);
BackBuffer->GetDC(&hDC);
std::stringstream Text;
Text << "Mausposition: " << m_DirectInput->GetCursorXPos() << ", " << m_DirectInput->GetCursorYPos();
TextOut(hDC, 0, 16, Text.str().c_str(), static_cast<int>(Text.str().size()));
BackBuffer->ReleaseDC(hDC);
BackBuffer->Release();
|
Also, als ich ncoh DirectDraw benutzt habe hat das wunderbar funktioniert, aber jetzt wird gar nix mehr angezeigt. Warum? Könnte es Probleme mit dem Z-Buffer geben? Eigentlich wird der Text als letzes angezgit, damit er über allen anderen ist. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 07.11.2005, 16:40 Titel: |
|
|
Wieso arbeitest du überhaupt mit GDI?
Ansonsten könnte es am Present liegen, allerdings dürfte dann dein Bild flackern. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 07.11.2005, 17:07 Titel: |
|
|
Fallen hat Folgendes geschrieben: | Wieso arbeitest du überhaupt mit GDI? | Weil das auch unter D3D noch die einzige Möglichkeit ist, vernünftig Text anzuzeigen... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.11.2005, 17:34 Titel: |
|
|
ich könnte auch bitmap Fonts oder so machen, aber ich wills esrtmal einfach machen. An dem Present sollte es doch nciht liegen wenn alles andere korrekt angezgit wird, oder? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.11.2005, 21:47 Titel: |
|
|
Es geht immer noch nicht, Affe (äh AFE-GmdG (immer so komsiche abkürzungen) ) hatte die Idee zwischen End-Scene und Present den Text zu rendern, was auch nciht ging, ich hab auch DrawText versucht geht alles net. Hat noch jemande ne Idee? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 09.11.2005, 09:31 Titel: |
|
|
Jonathan_Klein
Hast Du es schonmal unter DirectDraw probiert? Dort lernt man das Handling etwas besser als direkt in Direct3D für die GDI mit den DirectX Grafik APIs.
Außerdem vermisse ich ein Font-Objekt. (Kann mich irren, TextOut benutze ich nicht mehr da es keine Umbrüche erlaubt).
Zum erstellen des Font-Objekts: www.germangamedev.de << Tutorials << Funny Break.
Dazu würde ich noch die Rückgabewerte der einzelnen Funktionen Testen.
Ich sehe grade BackBuffer: Hast Du den Backbuffer in den Presentparameters darauf eingestellt das er verriegelt werden kann? Gibt dafür ein Extra-Flag. Ohne das gehts nicht.
Dazu musst Du beachten das der gesamte Text am Ende eines Frames geblittet wird, da sonst z.B. andere Objekte wie z.B. ein Raumschiff den Text übermalen können.
AFE-GmdG
Korrekt! Direct3D selbst kann keinen Text, keine Texturen/Surfaces usw laden. Extensionlib ist halt pfui  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 09.11.2005, 14:32 Titel: |
|
|
Patrick hat Folgendes geschrieben: |
Hast Du es schonmal unter DirectDraw probiert? Dort lernt man das Handling etwas besser als direkt in Direct3D für die GDI mit den DirectX Grafik APIs.
|
Ich hat Folgendes geschrieben: |
Also, unter DirectDraw konnte ich ja recht einfach ein Handle vom Backbuffer holen und dann mit GDI Text drauf malen.
Geht das in D3D auch? Kann ich vielleicht auch mit GDI auf Texturen malen?
|
Patrick hat Folgendes geschrieben: |
Dazu musst Du beachten das der gesamte Text am Ende eines Frames geblittet wird, da sonst z.B. andere Objekte wie z.B. ein Raumschiff den Text übermalen können.
|
Ich hat Folgendes geschrieben: |
Könnte es Probleme mit dem Z-Buffer geben? Eigentlich wird der Text als letzes angezgit, damit er über allen anderen ist.
|
Patrick hat Folgendes geschrieben: |
Ich sehe grade BackBuffer: Hast Du den Backbuffer in den Presentparameters darauf eingestellt das er verriegelt werden kann? Gibt dafür ein Extra-Flag. Ohne das gehts nicht.
|
Kann sehr gut sein, das sollte ich umbedingt austesten, danke für den Tip. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
 |
|