Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 11:17

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Array Deklaration
BeitragVerfasst: So Apr 05, 2015 17:27 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Wieso gibt dies keinen Fehler ?

Bei transforms ist keine Länge angegeben.

Code:
  1. ...
  2. uniform vec2 transforms[];
  3. ...
  4.  
  5. void main() {
  6.    DataOut.UV.x = transforms[12].x;
  7. ...


Oder kennt glsl etwa dynamische Arrays ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: So Apr 05, 2015 20:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Code:
  1. uniform vec2 transforms[];


Ist ein unitialsiertes Array, kein dynamisches. Syntaktisch ist das okay.

Der Zugriff sollte aber eigentlich keine echten Werte ausgeben, es sei denn du belegst das Array irgendwo mit Werten.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Mo Apr 06, 2015 17:22 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich will gerne einen ANSI-String an den Geometrie-Shader übergeben.

Code:
  1. glUniform1uiv(ShaderID.CharTransforms, Length(Text), @Text[1]);

Code:
  1. uniform uint Text[256];


Das Problem, GLSL kennt nur 32-Bit Integer.

So wie es aussieht, muss ich im Pascal-Code den String zuerst in eine Integer-Array konvertieren.
Oder gibt es eine elegantere Lösung ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Mo Apr 06, 2015 19:15 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Du kannst doch einfach Bit Operationen nutzen um die einzelnen 8 Bit Integer zu erhalten.

Ehrlich gesagt frage ich mich aber, was du genau erreichen willst. Erzeugen großer Mengen im Geometry Shader wird normalerweise nicht unbedingt empfohlen. Hast du schon mal überlegt, ob du die Integer nicht ganz einfach in ein VBO packen kannst und dann im Vertex Shader verarbeiten? Mit Instancing besteht auch die Möglichkeit, ein Quad sehr oft mit verschiedenen Zeichen zu rendern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Mo Apr 06, 2015 21:18 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Du kannst doch einfach Bit Operationen nutzen um die einzelnen 8 Bit Integer zu erhalten.

Meinst du die shl und shr Befehle ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Mo Apr 06, 2015 21:28 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ich weiß nicht, was shl und shr sein.
Ich meine <<, >>, &, |
Erst die ersten 8 Bit ausschneiden. Dann 8 Bits nach rechts schieben und die nächsten 8 Bit ausschneiden. Und so weiter.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Mo Apr 06, 2015 21:56 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Ich meine <<, >>, &, |
Erst die ersten 8 Bit ausschneiden. Dann 8 Bits nach rechts schieben und die nächsten 8 Bit ausschneiden. Und so weiter.

Genau das meine ich, in Pascal und in Assembler schiebt man Bits mir shr und shl hin und her.

Zitat:
Erzeugen großer Mengen im Geometry Shader wird normalerweise nicht unbedingt empfohlen.

Ich dachte, der Geometrie-Shader sei für diesen Zweck gedacht.


Meine Idee, ich wollte eine Text-Ausgabe mit dem Geo-Shader machen.
Dazu wollte ich soviele Rechtecke kopieren, wie es Buchstaben im Text hat.

Ausserhalb des Shader funktioniert es bis jetzt.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Mo Apr 06, 2015 22:41 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ne, eigentlich ist der Geometry Shader nicht dafür gedacht. Er ist für kleine Änderungen an der Geometrie gedacht, nicht um unbegrenzt neu Dreiecke zu erzeugen. Das ist auch offensichtlich langsam, schließlich arbeitet der Geometry Shader seriell und nicht parallel.

Ich würde die Buchstabendaten in ein VBO packen und damit rendern. Im Prinzip genauso, bloß kann dann jeder Buchstabe/Vertex parallel verarbeitet werden.

Ansonsten kannst du es im Compute Shader oder auf der CPU probieren. Um ehrlich zu sein, glaube nicht nicht, dass die Grafikkarte zum Generieren der Textrenderingdaten prinzipiell so gut geeignet ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Di Apr 07, 2015 17:03 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Das es keine Missverständnisse gibt, beschreibe ich meine Routine nochmals.

Bei InitScene:
Zuerst wird eine Bitmap erzeugt, auf der alle Buchstaben vorhanden sind, nachher wird das Ganze in der Textur-Speicher kopiert.
In einer Array werden dazu die Textur-Koordinaten der einzelnen Buchstaben gespeichert.

Beim Rendern:
Dort kann ich einen String angeben, welcher jedes mal anders sein darf.
Dazu habe ich ein Schleife, in der Rechtecke gerendert werden, je nach Anzahl Chars.
Bei jedem Rechteck werden dann die Textur-Koordinaten, je nach Char mitgegeben. Z.B. beim 'A' Koordinate 65, beim 'B' 66 etc. .

Dazu wollte ich die Schleife zum rendern in den Geo-Shader packen.
Aber so wie es aussieht, ist es besser, wen dies Aufgabe die CPU übernimmt.



Zitat:
Ne, eigentlich ist der Geometry Shader nicht dafür gedacht,

Wie machen es die Game-Hersteller bei komplexen Spielfiguren, werden dies alle von der CPU erzeugt ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Di Apr 07, 2015 17:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Zitat:
Ne, eigentlich ist der Geometry Shader nicht dafür gedacht,

Wie machen es die Game-Hersteller bei komplexen Spielfiguren, werden dies alle von der CPU erzeugt ?


Bei solchen Projekten wird die Geometrie ja von den Künstlern erzeugt, nicht von den Entwicklern. Die Modelle kommen also fertig als 3D-Modell, werden dann mit Physik versehen. Das Skinning und das LOD macht dann die GPU, aber die erzeugt da keine Daten via GS oder so, es sei denn man nutzt wirklich Tesselation, aber damit erzeugt man dann ja i.d.R. nur Details.

Ansonsten sind Geometrie Shader auch noch zu aktuell um sie breitflächig einzusetzen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Di Apr 07, 2015 18:36 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Tesselation "erzeugt" halt auch nicht wirklich die Daten, sondern wendet nur weitere Details an, die zum Beispiel in Texturen gespeichert wurden.

Außer Mathias hat ganz besonders ausgefallene Ideen mit Text, für die durchschnittliche Anwendung ist ein erzeugen von texturierten Rechtecken auf der CPU nicht verkehrt. Das erlaubt mehr komplexere Features und ist potentiell sogar effizienter. Schließlich kann man viele Texte einmal vorbereiten und dann oft wiederverwenden. Geometry Shader ist für normales Text Rendering jedenfalls ziemlich wenig geeignet, denke ich.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Di Apr 07, 2015 18:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
OpenglerF hat geschrieben:
Tesselation "erzeugt" halt auch nicht wirklich die Daten, sondern wendet nur weitere Details an, die zum Beispiel in Texturen gespeichert wurden.


Für die (nicht mehr vorhandene) fest verdrahtete Tesselation ja (z.B. ATIs Truform) ja, mit Geometry Shadern kann man da viel mehr machen, auch komplexe Geometrie erzeugen. Die existiert dann halt nur auf der GPU, aber damit ist viel mehr möglich als nur reine Tesselation ;)

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Di Apr 07, 2015 18:41 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Geometry Shader Tesselation wird halt eben zum Beispiel nicht empfholen. Die Performance soll extrem schlecht sein.
Deshalb hat man ja die ganzen Tesselation Shader eingeführt. Theoretisch würde das auch der Geometry Shader können, aber es ist nicht praktikabel.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Di Apr 07, 2015 19:09 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
So sieht das Eegebniss bis jetzt aus, siehe Anhang.


Zitat:
Deshalb hat man ja die ganzen Tesselation Shader eingeführt.

Ist das richtig, wen man einen Tesselations Shader verwendet, das dann auch ein Geo-Shader gebraucht wird ?
Mit Google habe ich gesehen, das immer beide Shader verwendet werden.


Dateianhänge:
Zwischenablage-3.png
Zwischenablage-3.png [ 235.48 KiB | 14141-mal betrachtet ]

_________________
OpenGL
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array Deklaration
BeitragVerfasst: Di Apr 07, 2015 21:18 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Nein, das ist nicht richtig.

Es gibt sogar einige Leute, die die Ansicht vertreten, dass der Geometry Shader möglicherweise entfernt werden könnte, weil er zwar alle Aufgaben theoretisch übernehmen kann, aber kein richtig.

EDIT: Satzbau :roll:


Zuletzt geändert von OpenglerF am Di Apr 07, 2015 23:20, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.202s | 19 Queries | GZIP : On ]