2013-09-07 10 views
6

Ja eksperymentuje z OpenGL ES 3.0 i znaleźć następujące oświadczenie w Szybkim arkusza referencyjnego:Jak zadeklarować wersję OpenGL w modułach cieniowania na systemie Android?

„#version 300 es” musi pojawić się w pierwszej linii programu shaderów GLSL napisany w wersji 3.00 ES . Jeśli zostanie pominięty, moduł cieniujący będzie traktowany jako wersja kierowania 1.00.

Więc starałem się dodać to na początku moich shaderów, ale to tylko spowodowało błędu

link powiodła się z powodu nieprawidłowej vertex shader.

zgłoszona przez .glGetProgramInfoLog. Jeśli usuniemy pierwszą linię za pomocą instrukcji "#version 300 gl", moduł cieniujący będzie kompilował i działał.

Jest to kod mojego vertex shader

private final String vertexShaderCode = 
     "#version 300 es \n" + 
     "uniform mat4 uMVPMatrix; \n" + 
     "attribute vec2 a_TexCoordinate; \n" + 
     "attribute vec4 vPosition; \n" + 
     "varying vec2 v_TexCoordinate; \n" + 
     "void main() { \n" + 
     " v_TexCoordinate = a_TexCoordinate; \n" + 
     " gl_Position = uMVPMatrix * vPosition; \n" + 
     "} \n"; 

Dodałem też oświadczenie wersji do vertex shader oraz fragmentu, i wciąż ten sam błąd.

Zadzwoniłem pod numer setEGLContextClientVersion(3) w moim interfejsie GLSurfaceView i dodałem <uses-feature android:glEsVersion="0x00030000" android:required="true" /> do mojego manifestu, aby wskazać, że aplikacja wymaga OpenGL ES 3.0.

Czy czytam dokumentację OpenGL ES i nie muszę dodawać tej instrukcji wersji? Jeśli muszę go dodać, co robię źle, zawsze powoduje błąd?

+1

Przydatna wskazówka: użyj narzędzia glGetShaderInfoLog, aby uzyskać bardziej szczegółowe błędy kompilacji modułów cieniujących. –

Odpowiedz

6

Czytanie GLSL ES3.0 spec zawiera listę "atrybutów" i "zmieniających się" jako zarezerwowane słowa kluczowe, które spowodują błąd.

W GLES3 należy zakwalifikować zmienne wejściowe ze zmiennymi "in" i wyjściowymi za pomocą "out".

Więc w vertex shader,

attribute -> in 
varying -> out 

A w cieniującego fragmentu

varying -> in 

sekcją 4.3 w kwalifikacjach spec (przechowywanie) posiada wszystkie szczegóły.

Powiązane problemy