JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

GDI-Text unter Direct3D
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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

BeitragVerfasst am: 05.11.2005, 22:39    Titel: GDI-Text unter Direct3D Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 05.11.2005, 22:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 05.11.2005, 23:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.11.2005, 00:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 06.11.2005, 11:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.11.2005, 14:11    Titel: Antworten mit Zitat

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 Wink ).
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 07.11.2005, 15:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 07.11.2005, 16:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 07.11.2005, 17:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 07.11.2005, 17:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 08.11.2005, 21:47    Titel: Antworten mit Zitat

Es geht immer noch nicht, Affe (äh AFE-GmdG (immer so komsiche abkürzungen) Wink) 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.11.2005, 09:31    Titel: Antworten mit Zitat

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 Smile
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 09.11.2005, 14:32    Titel: Antworten mit Zitat

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?

Wink

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.

Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.11.2005, 15:48    Titel: Antworten mit Zitat

Jonathan_Klein
Klappts nun mit dem Flag?
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 09.11.2005, 16:32    Titel: Antworten mit Zitat

nö.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum