DrawPrimitive



  • sollte man dieses Funk benutzen oder nich ?



  • auf jeden fall! die ist geil! genaugenommen ist das DIE funktion überhaupt, die man verwenden sollte! die lässt die elektronen in deinem rechner so richtig tanzen! ich kann mir mein leben ohne diese funktion gar nicht mehr vorstellen! 😮



  • Hi,

    diese Methode sollte man meiden wie die Pest. Wenn es möglich ist verwendet man statische Vertex-Buffer, da man sich so den Traffic zur GRafikkarte über den Bus spart.

    Ciao,
    Stefan



  • @stefan zerbst

    und wie zeichnet man solche statischen vertexbuffer ohne drawprimitive oder drawindexedprimitive?



  • soweit ich weiss haben statische vertexbuffer oder dynamische vertextbuffer mit drawprimitive nicht viele abhängigkeiten. anders gesagt, es ist egal ob sie statisch sind oder dynamisch, man muss sie mit drawprimitive zeichenen.
    (bezieht sich alles auf dx9)



  • Hi,

    ich sollte nicht mehr so oft übermüdet Posting lesen. Ich hab an DrawPrimitiveUP gedacht 😃

    Aber bei DrawPrimitive sollte man wie gesagt auch statische Buffer preferieren. Also keine Reads auf den Buffer zulassen, betanken nur einmal initial usw. 🙂

    Ciao,
    Stefan



  • Original erstellt von Stefan Zerbst:
    Aber bei DrawPrimitive sollte man wie gesagt auch statische Buffer preferieren. Also keine Reads auf den Buffer zulassen, betanken nur einmal initial usw. 🙂

    du meinst wohl keine WRITES zulassen? 😕



  • Hi,

    na Writes sowieso nicht. Aber wenn man zusätzlich in seiner Kapselung auch noch die Reads statischer Buffer durch den Anwender untersagt so zwingt dies zu performanterer Programmierung 😃

    Ciao,
    Stefan



  • ich würde sagen, das hängt ganz von der aufgabe ab. man sollte prinzipiell so wenig zugriffe wie möglich machen. wenn man nun mal jeden frame auf einen puffer zugreifen muss, dann muss man das halt, und wenn nicht dann halt nicht! es gibt keine regeln; die aufgabe regelt die zugriffe.

    oder habe ich da was übersehen?



  • Hi,

    das ist so weit korrekt, aber wenn man z.B. größere Reads regelmäßig durchführen muss, dann empfiehlt sich ein statischer Buffer und zusätzliche eine Kopie der Vertexdaten (evtl. ohne Textur-Koords usw.) im System RAM für das Lesen der Daten.

    Wenn man größere Writes regelmäßig durchführen muss, dann ist ein dynamischer Buffer oftmals besser geeignet. So weit kann man das pauschalisieren 😃

    Ciao,
    Stefan



  • Original erstellt von Stefan Zerbst:
    **Hi,

    ich sollte nicht mehr so oft übermüdet Posting lesen. Ich hab an DrawPrimitiveUP gedacht :D**

    Weil der Faker sich "UP" nennt?



  • Für TGGC ist jeder der eine Frage hat ein Faker. Geh doch bitte in ein Forum in dem keine Fragen gestellt werden.

    PS: ich bin nicht "up"



  • Original erstellt von <gast>:
    **Für TGGC ist jeder der eine Frage hat ein Faker. Geh doch bitte in ein Forum in dem keine Fragen gestellt werden.

    PS: ich bin nicht "up"**

    Nicht jeder, nur du und die anderen Faker.



  • Original erstellt von TGGC:
    Nicht jeder, nur du und die anderen Faker.

    Muhahaha... 😃



  • Ich finde das es eine berechtigte Frage ist. Ein Anfänger hat halt solche Fragen. Es kommt sogar vor das ein Anfänger nicht weiss warum das Colorkey bei ihn nicht funktioniert. Woher soll er wissen das er erst das Pixelformat ermitteln muss ect...
    Genauso bei Fragen wie ob man DrawPrimitive benutzen soll.

    @up
    DrawPrimitive benutzt man innerhalb einer 3D Szene. Effizienter ist das benutzen von indizierten Vertices.

    @Stefan Z.
    In deinem ersten Band benutzt du auch DrawPrimitive. Was sagst du heute zu deiner damaligen Wahl?



  • Hi,

    ich benutze dort DrawPrimitiveUP 😃

    Für den Anfang ist das die beste Wahl, da man keinen Initialisierungsoverhead für Vertex-Buffer hat, das macht Direct3D dort automatisch. Und die Verwendung von Vertex- und Index-Buffern setzt auch voraus, dass man sich dort mit den Flags auskennt und diese richtig verwendet.

    Für intermediate Anwendungen würde ich die UP Methoden aber nicht nutzen.

    Ciao,
    Stefan



  • Hallo Stefan, was heißt "intermediate Anwendungen".



  • um vertexbuffer verwenden zu können muss nicht viele flags kennen!

    wenn man ständige schreibzugriffe auf den buffer hat, dann empfielt sich SYSTEMMEM, da MANAGED beim locken extrem viel zeit benötigt.

    CreateVertexBuffer(x*sizeof(MyVertex),D3DUSAGE_WRITEONLY,MYVERTEXSHADER,D3DPOOL_SYSTEMMEM,&m_MyVertexBuffer,NULL)

    ansonsten wenn de puffer vollkommen statisch sind, dann ist MANAGED die beste wahl

    CreateVertexBuffer(x*sizeof(MyVertex),D3DUSAGE_WRITEONLY,MYVERTEXSHADER,D3DPOOL_MANAGED,&m_MyVertexBuffer,NULL)

    D3DUSAGE_DYNAMIC soll zwar bei vielen ständigen zugriffen einen geschwindigkeitszuwachs bringen (laut sdk-doku) bei meinen programmen konnte ich da aber keinen messbaren unterschied festellen. ich habe bei meiner fontklasse, wenn ich den kompletten bildschirm bei 1280x1024 mit 8-punkt-bifmap schrift zuschreibe, ca. 300 fps und bei D3DUSAGE_DYNAMIC auch!

    "locken" geht ohne falgs auch am besten:

    m_MyVertexBuffer->Lock(0,0,(void**)&Vertex,0);
    m_MyVertexBUffer->Unlock();

    @stefan zerbst

    wenn man kein waschechter NOOB ist, dann ist die verwendung von vertexbuffern nicht anspruchsvoll und leicht zu handhaben!



  • Hi,

    wie performant die jeweilige Variante ist hängt aber auch von der Hardware und den Treibern ab. Und nicht zuletzt von der Gesamtlast die auf der Grafikkarte lastet 😉

    Ciao,
    Stefan


Anmelden zum Antworten