Fragen zu DisplayListen und anderen Performancesteigernden Maßnahmen.



  • Jup das dachte ich mir auchschon....ich befasse mich erst seit einer Woche mit Cpp und Klassen sind mir immer noch ein Mysterium. Aber danke für den Ratschlag!
    Da ich aber jetzt noch keine Ahnung habe wie ich das hinkriege muss ich mich da erst schlaumachen sonst würde ich den Code direkt ändern.



  • ...und wenns um geschwindigkeit geht, würde ich niemals über strings gehen, sondern über integer, du vergleichst dich da ja dumm und dämlich!



  • Korbinian schrieb:

    ...und wenns um geschwindigkeit geht, würde ich niemals über strings gehen, sondern über integer, du vergleichst dich da ja dumm und dämlich!

    yoar das habe ich mir auch schon überlegt weil ich eigentlich nen switch benutzen wollte.



  • rapso schrieb:

    grundsätzlich könntest du dir überlegen, ob du für so große datenmengen statt textdateien, eher vielleicht bitmaps verwendest, das dürfte einfacher zu editieren sein denk ich mir, und auch schneller einzulesen.

    das tool ist ja für civ4 und dient eben dazu scenarien auszulesen und darzustellen, da kann ich leider nichts drehen.



  • Jester schrieb:

    Hi!

    Das ist ja mal voll viel Tipperei. Wie wär's mit einer map<string,Texture>?
    ...

    edit: Mist, zu langsam!

    FETT DANKE, habs begriffen.

    und zu deinem edit!!
    Deine Antwort war viel hilfreicher als die andere, auch wenn die Essenz wohl die gleiche ist, zumindest einmal für mich als newb, so hatte ich gültigen syntax als ausgangspunkt, danke

    GLuint	texture[50];
    typedef map<string,GLuint> TextureMap;
    TextureMap TerrainTexture;
    
    ...
    
    glGenTextures(50, texture);
    LoadTexture("Textures\\ocean.tga", texture[0]);
    TerrainTexture["TERRAIN_OCEAN"]=texture[0];
    
    ...
    
    glBindTexture(GL_TEXTURE_2D, TerrainTexture[ttype]);  //ttype natürlich in dem beispiel ein string "TERRAIN_OCEAN"
    


  • hmmm,
    ich habe jetzt für BONUS und TERRAIN maps laufen aber habe keine merkliche Änderung bemerkt. lägt noch genauso vie vorher. Schneint Performancetechnisch wenig auszumachen. Allerdings steckt der bind command nicht mit in den texture listen. ob das ob der dynamische texture bin überhaupt möglich ist habe ich noch nicht probiert.

    seh ich das richtig dass ich mit displaylisten dafür dorge das daten im grafikram hocken? wenn ich jetzt (auch wenn anfangs aufwendig) den bind jeder textur in eine displayliste knalle einen extremen sprung machen kann? oder wie mach ich es dass der bind nicht jdesmal den kompletten bus auslastet? den ich glaube das dies wohl das hauptproblem ist.


  • Mod

    eine texture die da an eine ID gebunden ist, liegt bereits im grakaram.

    btw. die essens seiner aussage war nicht gleich meiner ;), ich hab dir geraten die strings beim initialisieren zu verarbeiten und dann die fertigen Indices aus einer klasse auszulesen. in performancekritischen bereichen sollte man möglichst nie mit strings arbeiten, ne map+strings ist wie eine ferrarikarosse+trabbimotor ;), aber natürlich ist jesters vorschlag "log n"-mal besser als das bisherige *hehe*.

    displaylists machen intern sehr viel mehr als dinge ins vram zu stecken, theoretisch kannst du alles Zeichnen, dass du machst in eine displaylist stecken und der treiber optimiert das. das läuft meistens besser als es jemand mit sagen wir mal 6monaten opengl-erfahrung hinbekommen würde.

    rapso->greets();



  • Ja, ich wollte nicht zu viel auf einmal verlangen. 😉
    Selbstverständlich isses noch besser, die Textur-Pointer in nem Array abzulegen und dann mit der ID als index da reinzugreifen. Ich wollte aber zunächst mal Codekürze ohne exzessives Umschreiben des umliegenden Codes erreichen.


  • Mod

    quick&dirty 😃
    dat kenn ich

    rapso->greets();



  • muss man verstehen, warum du das mit OpenGL machst und nicht einfach ne Bitmap nimmst, dein zeugs reinmalst und als TImage anzeigst? kann mir echt nicht vorstellen, dass hier OpenGL auch nur ansatzweisse einen Vorteil bringt...



  • ne das is ja auf jeden Fall schon viel besser so, von 200 Zeilen sind jetzt gerade einmal 30 übriggeblieben. thx

    hm wieso opengl und net bitmap..hmm weiss net...hab angefangen und es lief gut... 😉 ausserdem find ich es interessanter



  • Sunday schrieb:

    muss man verstehen, warum du das mit OpenGL machst und nicht einfach ne Bitmap nimmst, dein zeugs reinmalst und als TImage anzeigst? kann mir echt nicht vorstellen, dass hier OpenGL auch nur ansatzweisse einen Vorteil bringt...

    ... einen Vorteil gegenüber was? Gegenüber dem Windows-API? Plattformunabhängigkeit, zum Beispiel. Außerdem ist es schnell und es spricht nichts dagegen. OpenGL ist auch für 2D-Grafik ideal. 🙂



  • Optimizer schrieb:

    Plattformunabhängigkeit

    er programmiert mit borland c++ builder unter windows. nix mit plattformunabhängigkeit! und in ein bild ein paar sachen zeichnen und anzeigen ist kein grosser akt. auch ein scroller nach rechts/links oder ein zoom.

    es spricht nichts dagegen

    und ausser dem übungszweck auch nichts dafür...



  • Mit Zoom fängt's doch schon an. Richtig schön flüssiges zoomen kannst du mit dem Windows GDI vergessen. Das Argument der Geschwindigkeit hast du also nicht widerlegt. Und da du anscheinend auch nicht der Meinung bist, dass etwas gegen OpenGL spricht (denn du hast nur entgegnet, es spräche nichts dafür), worauf willst du dann eigentlich hinaus?



  • dann nochmal für dich zum mitmeiseln:

    um ein einzelnes bild anzuzeigen, ist es nicht unbedingt notwendig opengl zu verwenden. ich hab nie gesagt (geschrieben), dass ich etwas dagegen habe, sondern das die notwendigkeit in meinen augen nicht begründe ist (auch nicht für nen zoom). wenn er das gerne benutzen will, bitte, ich hindere ihn doch nicht daran. wenn er etwas davon lernt, okay, klasse, toll, nur zu empfehlen. 👍



  • nur mal so: is bei civ4 nicht so nen worldbuilder dabei? (habs erst seit 2 tagen ;))



  • na transparenz, blending und den ganzen kram, na das wirds schon bringen. na is ja auch egal.

    @ sunday,
    na klar, und mit dem prog kannste eben die file ohne civ anschaun und bald auch editieren. Besonders bei Maps mit Größen 100x100 oder so braucht der ladevorgang im Civ schon fast 5 minuten. Wenn ich das Prog mal soweit ausgereift habe das es die meisten Fehler erkennt und die Map authentisch darstellt kann ich anfangen an editing optionen zu denken was eher den kleineren Teil darstellt.


Anmelden zum Antworten