5 Stimmen

GLSL - Prüfen auf gesetzte Attribute

Ich habe einen Vertex-Shader mit Attributen, die in einem bestimmten Frame gesetzt sein können oder nicht. Wie kann ich überprüfen, ob diese Attribute gesetzt wurden oder nicht?

Was ich gerne tun würde:

attribute vec3 position;
attribute vec3 normal;
attribute vec4 color;
attribute vec2 textureCoord;

uniform mat4 perspective;
uniform mat4 modelview;
uniform mat4 camera;
uniform sampler2D textureSampler;

varying lowp vec4 vColor;

void main() {
    gl_Position = perspective * camera * modelview * vec4(position, 1.0);
 if ((bool)textureCoord) { // syntax error
     vColor = texture2D(textureSampler, textureCoord);
 } else {
     vColor = (bool)color ? color : vec4((normal.xyz + 1.0)/2.0 , 1.0); 
 }
}

11voto

Kos Punkte 67505

Ich habe einen Vertex-Shader mit Attributen, die in einem bestimmten Frame gesetzt sein können oder nicht.

Nein, musst du nicht. :)

Bei Attributen ist es unmöglich, dass ein Attribut nicht "gesetzt" ist. Jede Vertex-Shader-Instanz erhält gültige Werte von jedem deklarierten Attribut.

Wenn das Attribut Array nicht durch glEnableVertexArray wird das Standardattribut (wie durch glVertexAttrib und seine Standardwerte) übergeben werden.


In Ihrem Fall können Sie entweder:

  • Kompilieren Sie Ihren Shader in verschiedenen Versionen mit oder ohne Texturierung (bedingte Kompilierung ist Ihr Freund; googeln Sie nach UberShader),
  • eine einheitliche Variable wie "useTexturing" verwenden, um Shader-Schalter zu sparen.

Wählen Sie einen aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X