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

Aktuelle Zeit: Fr Jun 07, 2024 11:02

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: GLSL: (unsigned) char Datentyp?
BeitragVerfasst: So Nov 28, 2010 15:29 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Hallo und einen schönen ersten Advent!
Ich bin gerade dabei, mein Terrain zu shaderisieren (aber ohne Heightmap). Weil man dabei ja so ein schönes Gitter hat, dachte ich mir, dass ich statt zwei floats für x- und z-Koordinate einfach zwei unsigned char Werte als Vertexattribut übergebe. Per uniform float könnte ich dann angeben, wie groß der Abstand zwischen den Vertices ist. Hier mal das ganze als Code:
Code:
  1. attribute unsigned char a_x;
  2. attribute unsigned char a_z;
  3.  
  4. uniform vec2 u_vOffset;
  5. uniform float u_fStepsize;
  6.  
  7. void main(void)
  8. {
  9.   vec3 vPos;
  10.   vPos.x = u_vOffset.x + float(a_x) * u_fStepsize;
  11.   vPos.z = u_vOffset.y + float(a_z) * u_fStepsize;
  12.  
  13.   // ...
  14. }

Das Problem ist, das es offenbar kein unsigned char gibt (laut dieser Liste). Weiß jemand eine Alternative, oder gibt es sowas wirklich nicht in GLSL?

edit: In der offiziellen Doku zu GLSL 4.0, wird auch nichts in der Richtung erwähnt, schade.

Danke schonmal im Voraus!


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:13, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL: (unsigned) char Datentyp?
BeitragVerfasst: So Nov 28, 2010 16:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Weiß jemand eine Alternative, oder gibt es sowas wirklich nicht in GLSL?

Es besteht ein Unterschied zwischen dem was zu Berechnung benutzt wird und dem was du als Input/Output benutzen kannst.

Du kannst in deinen VBO ein unsigned char packen und das dann so laden:
Code:
glVertexAttribPointer(index, 2, GL_UNSIGNED_BYTE, GL_FALSE, 0, 0);

Im Shader verarbeitest du das dann aber als Float bzw. vec2.

Die Grafikkarte kann sowieso nur Float verarbeiten, also das ist eher von Nachteil, wenn du da mit simulierten Integern (ivec2, usw.) arbeitest. Bei diesen simulierten Integern sind sowieso nur 16bit garantiert, daher sind die recht nutzlos. Eignen sich nur als Schleifenindex o.ä. Eine Ausnahme ist natürlich, wenn deine Grafikkarte echte 32bit Integer-Arithmetik anbietet. Das erfordert mindestens GLSL 1.30 oder die GL_EXT_gpu_shader4 Extension. In dem Fall ist die Verwendung von Integern durchaus sinnvoll.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL: (unsigned) char Datentyp?
BeitragVerfasst: So Nov 28, 2010 16:35 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Okay, wieder was gelernt. :) Wenn ich die Werte im VBO als unsigned char bzw. GL_UNSIGNED_BYTE habe und dann aber ein float als Attribute nehme: Haben die float-Variablen dann den "gleichen" Wert wie im VBO (also 16 -> 16.0) oder wird daraus ein Wert zwischen 0.0 und 1.0 (16 -> 16.0 / 255.0)?


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:13, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL: (unsigned) char Datentyp?
BeitragVerfasst: So Nov 28, 2010 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Haben die float-Variablen dann den "gleichen" Wert wie im VBO (also 16 -> 16.0) oder wird daraus ein Wert zwischen 0.0 und 1.0 (16 -> 16.0 / 255.0)?

Das kannst du einstellen über den "normalized" Parameter von glVertexAttribPointer. Also im obigen Fall bedeutet das GL_FALSE eben das 16 in 16.0 konvertiert wird.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL: (unsigned) char Datentyp?
BeitragVerfasst: So Nov 28, 2010 16:49 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Ach dafür ist der Parameter. Danke für deine Hilfe! :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.033s | 15 Queries | GZIP : On ]