Frage zu Shadern in GLES20

V

Vaio

Neues Mitglied
0
Hi,
viele werden bestimmt dieses Tutorial hier kennen: Spieleentwicklung 101 - Android Wiki - AndroidPIT
Der Autor stellt darin eine selbstentwickelte Klasse für Meshs vor: Mesh.java - android-gamedev - Android Game Development Tutorial Code - Google Project Hosting
Dabei kann man aussuchen, ob das Mesh Color/Textur/Normalen -Daten enthalten soll (und diese später auch "mitgerendert" werden sollen).
In diesem Tutorial zu OpenGL ES 2.0 wird beschrieben wie man einfache, farbige Dreicke zeichnen kann: Android Lesson One: Getting Started | Learn OpenGL ES
Der größte Unterschied zwischen den beiden benutzen GL Versionen ist der Gebrauch von Shadern zum Zeichnen. Für mich stellt sich da ein Problem:
In der "alten Meshklasse" (GL10) wird das Dreieck auch gezeichnet, wenn keine weiteren Daten wie Color oder Textur, etc. angegeben werden,nur halt in weiß. Bei GLES20 funktioniert das nicht mehr. Lässt man hier die Farbdaten weg, wird gar nichts gezeichnet. Denn offenbar sind die Farbwerte im Vertex- und Fragment-Shader zwingend erforderlich.
Muss ich dann je nach Konfiguration(je zusatzdaten) für jedes Mesh einen passenden Shader laden um etwas zu zeichnen ?! Kann man das nicht irgendwie besser machen?
 
Mal direkter gefragt. Wenn man zwei Dreiecke zeichnen möchte, eins mit und das andere ohne Farbdaten(soll dan weiß sein). Ist es performanter nur ein Shaderprogramm zu benutzen, das im Code entscheidet welche Farbe gezeichnet werden soll (über if Bedingung und "impotierte" Variable) oder zwischen zwei verschiedenen Shaderprogrammen, je nach Bedarf, hin und her zuschalten.?
Wie sieht es aus wenn noch die Kriterien Normalen und Texturkoordinaten hinzukommen?
 
Wenn du zwei verschieden farbige Dreiecke zeichnen möchtest, dann gibst du dem shader eine variable, die angibt, welche Farbe dein Dreieck haben soll.

Wozu brauchst du da 2 Shaderprogramme? (Wir erinnern uns, EIN SHADERPROGRAMM besteht aus Vertexshader und Fragmentshader)

Ich glaube nicht das ein wechsel des Shaders sehr performant ist, aber sichtbar sollte das eigentlich nicht sein. Der sollte ja sowieso beim laden erstellt werden.

Textur und Normalen musst du deinem Shader auch als Variable geben. Das kann man dort auch ganz gut in eine variable zusammenpacken.(Stichwort Strides)
 
Zuletzt bearbeitet:

Ähnliche Themen

A
Antworten
1
Aufrufe
570
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.387
jogimuc
J
M
Antworten
2
Aufrufe
611
Mozart40
M
Zurück
Oben Unten