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

1

22.07.2010, 18:28

Tipps für Framework

Ein schönen Abend an alle,

da ich dabei bin mir ein kleines Framework zu schreiben, soll meine ganzen Mathe Klassen, eine Klasse für Vertex- und Indexbuffer haben und eine Klasse zum Initalisieren von Direct3D... So zu meiner Frage, sollte ich die Klasse zum Initalisieren von Direct3D als Singleton Klasse realisieren, also z.b. so

C-/C++-Quelltext

1
2
3
4
5
inline &InitD3D9 GetD3D()
{
     static InitD3D9 Init;
     return Init;
}


oder eher als eine "Normale" Klasse wo ein einfacher Aufruf reicht?

Vielen Dank im voraus
Mfg Male

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Male« (22.07.2010, 19:07)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

22.07.2010, 19:11

Finger weg von Singleton und static Attributen. Mach es als normale Klasse. Sonst kann man ja z.B. nicht in mehreren Fenstern unabhängig rendern.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

22.07.2010, 20:08

Jap das Singleton-Pattern ist das wohl meinst missbrauchte Pattern, das es gibt. Grundsätzlich solltest du dieses Pattern nur dann nutzen, wenn du es in einem großem Projekt nahezu überall brauchst, wie zum Beispiel einen Logger.
Nur, weil man an drei stellen zu faul ist, einen Parameter anzugeben sollte man nicht gleich zum Singleton greifen...ich hab dem Fehler auch gemacht ;)

4

22.07.2010, 20:12

Gut dann implentiere ich es als nicht Singleton ^^ Es ist aber doch auch unschön, wenn man ständig an einer Funktion das Device übergeben muss, um z.b. ein Vertexbuffer zu erstellen?

Vielen Dank
Mfg Male

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

22.07.2010, 21:05

Nein, ist es nicht. Das ist korrekt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

23.07.2010, 14:51

Welche der 2 Möglichkeiten wäre die bessere?
Einmal die Device Klasse im Konstruktur von z.b. der Vertexbuffer Klasse übergeben

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class Vertexbuffer
{
private:
    Device* D3D;
public:
    Vertexbuffer(Device* D3);
    // etc.
};


oder ist diese Möglichkeit besser

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Vertexbuffer
{
private:
   static Device* D3D; // Wäre da static ne gute Möglichkeit? ^^
public:
    Vertexbuffer();
    static void SetDevice(Device* D3);
    // etc.
};

Device* Vertexbuffer::D3D = NULL;

// In der Device Klasse dann einfach die Methode aufrufen

Vertexbuffer::SetDevice(this);


Welche Variante würde ihr bevorzugen?

Vielen Dank im voraus
Mfg Male

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

23.07.2010, 15:18

Ich würde die zweite bevorzugen. Static ist da keine gute Möglichkeit, weil dann genau das wieder kaputt gemacht wird, was eigentlich mit der Übergabe bezweckt werden sollte:
Bedenke dass jede static-Variable eines Devices dir automatisch verbietet mehrere Render-Fenster zu haben. Das ist ganz übel schlecht, wenn man einen Editor auf deinem Framework basierend bauen will, wo man viele Preview- oder Render-Windows benötigt. Static ist da also weder sinnvoll, noch irgendwie notwendig.

Du kannst natürlich auch beide Lösungen kombinieren, das wäre vermutlich die beste Lösung. Einen leeren Konstruktor, einen mit Device-Parameter und eine Set-Methode. Da kann man sich prima raussuchen, was man braucht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

26.07.2010, 13:52

Vielen Dank, also ich hab mich für die erste Variante entschieden, mit der Übergabe im Konstruktor... Dann noch eine Frage ^^ Ich hab mir überlegt, die Device Klasse von einer Interface Klasse abzuleiten, falls ich später mal auf eine Höhere Version von DirectX umsteige oder OgenGl nutze... Wäre es dann sinnvoll für Vertex- Indexbuffer auch eine Interface Klasse zu machen?

Vielen Dank im voraus
Mfg Male

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

26.07.2010, 14:07

Oder abstrakte Oberklasse, ja. Macht ja auch wenig Sinn ein paar Teile austauschbar zu gestalten und andere nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

10

26.07.2010, 16:26

In dem Fall würde ich nciht Singletons verwenden.
Wie schon bemerkt wurde.
Man kann nicht unabhängig in mehreren Fenstern rendern.

MfG Stazer

Werbeanzeige