dann (ich weiß nicht wie) alle Texturen binden und dann mit einem einzigen Draw Call alles zeichnen?
Nein, momentan nicht mit dem OpenGL Core. Mit der von mir erwähnten Nvidea Extension ginge das, aber das ist ja keine allgemein gültige Lösung, wenn du überhaupt selber eine passende GraKa besitzt.
Zitat:
dann mit einem einzigen Draw Call alles zeichnen?
Dafür macht man eben Arrays und Atlase. Arrays sind eigentlich besser, weil es keine Problem mit MipMaps oder Kachelung geben kann. Jedoch funktioneren Arrays nur, wenn alle Texturen die gleiche Größe haben.
Zitat:
Ich wüsste nur nicht, wie man mehrere Texturen auf einmal binden kann.
Man kann mehrere Texturen binden. Allerdings nur eine sehr begrenzte Zahl und der große Switch im Fragmentshader sollte ziemlich viel kosten.
Zitat:
ist so etwas nicht möglich und man müsste alles in eine Texture mappen?
Wenn du nur OpenGL Core verwenden willst, ist das definitiv bis Dato (OpenGL 4.4) nicht möglich.
Zitat:
Da müsstest du dir dann einen komplexen Shader zusammenbasteln
Naja, viel Aufwand wäre es nicht. Man definiert halt mehrere Samplerobjekte und macht ein "if" oder "switch" in den Shader zum Auswählen.
Zitat:
auf vielen Grakas kann man bisher nur maximal 4 Textures gleichzeitig binden
Damit bist du nicht auf den neusten Stand. Ich habe gerade nachgeschaut, die OpenGL 3.2 und 4.4 Spezifikation ("GL_MAX_TEXTURE_IMAGE_UNITS") schreiben jeweils bereits mindestens 16 Textureunits im Fragmentshader vor. Meine mindestens 5 Jahre alte Nividea Karte Geforce G210 unterstützt bereits 32 Textureunits im Fragmentshader. Die Hardwaredatenbank sagt aus, dass praktisch jede Grafikkarte 16 Units unterstützt.
Ich bin mir im Moment nicht mehr sicher ob du überhaupt schon Shader verwendest? Wenn nicht, solltest du dich mal mit aktuellen Shadern auseinander setzen. Wenn es um Performance geht, kommt man da heute nicht mehr darum rum, weil die Fixed Pipeline veraltet, einfach viel zu eingeschränkend ist und im Prinzip von Treiber mit Shadern emuliert wird. Es gibt ja ein gutes Tutorial im Wiki, das allerdings nicht mehr ganz auf dem Stand der Dinge ist. Deshalb würde ich noch dieses Tutorial empfehlen: http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/
Registriert: Di Dez 13, 2011 19:14 Beiträge: 166 Wohnort: Hamburg / Mölln
Programmiersprache: D
Ja momentan nutze ich noch keine Shadern. Ich poliere gerade meine veralteten Kenntnisse auf und gewöhne mich an OpenGL 3 (war vorher wegen Uni ein reiner 1er und 2er Versions Nutzer). Mein nächstes Ziel wären dann auch Shader.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
OpenglerF hat geschrieben:
Zitat:
auf vielen Grakas kann man bisher nur maximal 4 Textures gleichzeitig binden
Damit bist du nicht auf den neusten Stand. Ich habe gerade nachgeschaut, die OpenGL 3.2 und 4.4 Spezifikation ("GL_MAX_TEXTURE_IMAGE_UNITS") schreiben jeweils bereits mindestens 16 Textureunits im Fragmentshader vor.
Meines Wissens ist es üblich oder zumindest erlaubt, dass in der Fixed-Function-Pipeline weniger Texturschichten zur Verfügung stehen als per Shader.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Der Unterschied, ist das, was glAwesome schon angemerkt hat. Die Fixed Function Pipeline unterstützt wesentlich weniger Units als die Shader. Die Angabe für Fixed Function Pipeline Units ist aber veraltet und hier nicht von Interesse, weil sich die Sache nicht in ihr umsetzen ließe.
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.