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

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

21

14.03.2014, 12:01

Ich sehe schon wo das hinführen wird.
Also, alles ist gut. Anscheinend bin ich der Einzige, der hier graue Haare bekommt.
Da der Fragesteller offensichtlich ein Anfänger ist, dachte ich halt, man würde ihm außer
der eigentlichen Frage auch ein paar Tipps mit auf den Weg geben.
Findet es keiner seltsam, wenn man map und dann noch string als Key verwendet? Ehrlich?
Wenn dem so ist, dann wollen wir das Thema hier schließen.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

22

14.03.2014, 12:09

Wie oft wird denn die Suche durchgeführt? 100 mal pro Sekunde wäre schon sehr häufig. Ich sehe darin kein Problem. Der Speicherverbrauch ist auch Minimal, weil der Grafikkartenspeicher vollgeschrieben wäre, bevor man genug Texturen geladen hätte um als User überhaupt was davon zu merken. Ausserdem ist RAM günstig.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Nimelrian

Alter Hase

  • »Nimelrian« ist der Autor dieses Themas

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

23

14.03.2014, 12:14

Theoretisch (z.B.) pro spawnenden Particle ein Mal, aber das ganze läuft auch noch performant, wenn 10k+ Particle gleichzeitig auf dem Bildschirm zu sehen sind. Kann ich allerdings noch umschreiben, damit die Textur vom ParticleEmitter an die Particle weitergereicht wird, dann gäbe es nur noch einen Suchvorgang beim Erstellen des Emitters.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

24

14.03.2014, 12:17

Kann ich allerdings noch umschreiben, damit die Textur vom ParticleEmitter an die Particle weitergereicht wird, dann gäbe es nur noch einen Suchvorgang beim Erstellen des Emitters.

:thumbsup:

Also ich meine, ob jetzt der String oder die Textur übergeben wird ist ja egal ^^
Edit: Nein, es ist nicht egal. Wenn du die Textur übergibst müssen die Partikel nichts vom Ressourcenmanager wissen. Das senkt deine Abhängigkeiten und du dürftest sogar einen Parameter sparen? :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Nimelrian

Alter Hase

  • »Nimelrian« ist der Autor dieses Themas

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

25

14.03.2014, 12:31

In der Tat, bin damit einiges an Membern/Includes losgeworden. Danke für den Hinweis.

Weshalb buggypixels immer noch rummeckert ist mir ein Rätsel, besonders wenn er nur meckert ohne Vorschläge zu machen, wie man es denn nun besser machen könnte...
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

26

14.03.2014, 12:39

Ohne buggypixels wäre es wohl nicht zu dem Hinweis gekommen. Kannst ihm also auch danken. ;)
Wobei ein Verbesserungsvorschlag seinerseits angebracht wäre.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

27

14.03.2014, 12:59

buggy will mal wieder auf Data Orientated Design raus.

Was er wohl sagen will: Wenn schon std::map, dann doch mit was leichtgewichtigerem als einem String als Key. Aber std::map ist wohl auch generell ganz schrecklich schlecht dafür.

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

28

14.03.2014, 13:29

Na aber gerne

C-/C++-Quelltext

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
typedef unsigned int IdString;

struct ResourceEntry {
    IdString hash;
    sf::Texture* tex;
}

IdString murmur_hash(const char* text) {
....
}

class ResourceManager {

public:
    ResourceManager() : m_Index(0) {}
    ~ResourceManager() {
        for ( int i = 0; i < m_Index; ++i ) {
            ResourceEntry* entry = &m_Entries[i];
            // some cleanup here I guess
        }
    }
    sf::Texture* getTexture(const char* fileName);
private:
    int m_Index;
    sf::Texture* find(const char* fileName);
    ResourceEntry m_Entries[32];
}

sf::Texture* ResourceManager::getTexture(const char* fileNmae) {
    sf::Texture* tex = find(fileName);
    if ( tex == 0 ) {
        ResourceEntry* re = &m_Entries[m_Index];
        re->hash = murmur_hash(fileName);
        re->tex = .... load texture ....
        ++m_Index;
        return re->tex;
    }
    return tex;
}

sf::Texture* ResourceManager::find(const char* fileName) {
    IdString hash = murmur_hash(fileName);
    for ( int i = 0; i < 32; ++i ) {
        if ( m_Entries[i].hash == hash ) {
            return m_Entries[i].tex;
        }
    }
    return 0;
}


Das habe ich mal schnell runtergeschrieben, also vielleicht compiliert es gar nicht.
Murmur_hash habe ich weggelassen, findet man aber bei Google und ich habe den Code gerade nicht zur Hand.

Soll ja keiner sagen, ich würde nur meckern.

Das ist meine persönliche Sichtweise. Man mag das hier für oversized halten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

29

14.03.2014, 13:39

Ja, das ist bestimmt schneller...
i < 32, O(n) und Hash jedes Mal über die gesamte Key-Länge berechnen.
Geniale Lösung gegenüber einer Map.
Hier ist Dein Fisch:
><)))°>
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]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

30

14.03.2014, 13:50

Also wenn so, dann kannst du das Array doch gleich sortieren und eine Intervallschachtelung für die Suche verwenden. Wenn man sich so viel Arbeit macht, dann richtig. Aber lohnt sich dieser Aufwand für 32 Einträge und so seltene Suchvorgänge? ^^

Ausserdem: const char* als Parameter?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige