Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

25.10.2003, 13:33

ähhhhhhh ???

ich kapier erstma nix von dem Beitrag wo du den link reingeposted hast...
außerdem funzt der link nich!!!!!

ich hab dich ma per ICQ angeposted!!!!

aber meine frage war:
wenn ich schreibe(natürlich vereinfacht):

class CDirect3D
{
public:
LPDIRECT3DDEVICE9 ReturnD3DDevice();

private:
LPDIRECT3DDEVICE9 lpd3dDevice;
};


LPDIRECT3DDEVICE9 CDirect3D::ReturnD3DDevice()
{
return lpd3dDevice;
}



....
is das für die Performance ok?????

12

25.10.2003, 18:09

Der Performancverlust ist nicht wircklich spührbar. Aber du kannst es auch geschickter angehen

Quellcode

1
2
3
4
5
6
7
8
9
class Device
{
  static IDirect3DDevice9* m_pD3DDev;

public
  static IDirect3DDevice9* GetD3DDev() { return m_pD3DDev; }
};

inline IDirect3DDevice9* D3DDev() { return Device::GetD3DDev() }
Damit haste das Device erfolgreich gekapselt und es ist OOP Komform. Der Performanceverlust dürfte hier gegen NULL streben. Da alles Inline ist und static Methoden keinen this - Zeiger haben.

Ein weiterer Vorteil ist, das man das Device neu erstellen kann ohne das alle anderen Klasse den Pointer auf das Device neu hollen müssen, weil sie immer nur die inline Funktion D3DDev() benutzen, die immer den Aktuellen Zeiger liefert.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

13

25.10.2003, 23:17

hmmm ok....

aba sry...

ich bin ein totaler newbie!!!!

kannst du mir ma denn unterschied zwischem meinem und deinem code erklären????

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

14

26.10.2003, 00:19

@DragonMaster
Bäh schäm dich! Static-Klassen! Benutz wenn schon SingleTon aber net sowas bäääääh ;D

15

26.10.2003, 02:25

Der Unterschied ist, das dein Funktionsaufruf ein setzen des this-Zeigers mit sich zieht. Eine Statische Funktion hat dies nicht. Es wurde ja gefragt ob es nicht Performanceverluste geben könnte. So gibt es sie auf jeden fall nicht.

@Patrick:
Ich weis, ich weis, aber wenn es nur eine Funktion ist kann man auch schon mal ein Auge zu drücken. Der Performance zu liebe.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

16

26.10.2003, 10:32

@DragonMaster
Performance verluste gäbe es, wenn du keine haben willst sollteste das alles in einen NameSpace packen ;) DANN haste keine verluste :)

17

26.10.2003, 15:24

hmmm......
ok

aber wie setzt man das ein wenn ich ein lpd3ddevice in einer funktion brauche?

18

26.10.2003, 15:27

Egal ob nun als Static oder nicht, einfach ganz Normal, wie man immer Membervariablen in Klassen verwendet. Für alle die von außen das Device benutzen wollen gehen über die passende Get-Methode.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

19

26.10.2003, 15:29

???

mach biiiiiiiiiitttttttttttte ein beispiel!!!!!

ich bin zu dumm!!!

20

26.10.2003, 15:37

Sorry...kommt sofort :rolleyes:

Ich nehm da deine Klasse die du hier gepostet hast.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class CDirect3D 
{ 
public: 
LPDIRECT3DDEVICE9 ReturnD3DDevice(); 

void Render();  // Benutzen des Devices (intern)

private: 
LPDIRECT3DDEVICE9 lpd3dDevice; 
}; 

LPDIRECT3DDEVICE9 CDirect3D::ReturnD3DDevice() 
{ 
return lpd3dDevice; 
}

void CDirect3D::Render()
{
  lpd3dDevice->BeginScene();

  // Render irgendwas

  lpd3dDevice->EndScene();
  lpd3dDevice->Present(0, 0, 0, 0);
}

// Benutztung von außen
void ExternRender(CDirect3D& d3d)
{
  // Hier wird dein D3D Device von außen Benutzt.
  d3d.ReturnD3DDevice()->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xFF000000, 1.0f, 0);

  d3d.Render();
}
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige