Ошибка компиляции фрагментного шейдера в Open GLES 3.0

Я получаю следующую ошибку в моем фрагментном шейдере:

Журнал компиляции: ОШИБКА: 0:7: «текстура»: синтаксическая ошибка: синтаксическая ошибка

Шейдер пишется так:

#version 300 es

in mediump vec2 texCoord;

out mediump vec4 fColor;

uniform sampler texture;

void main(void) {

    fColor = texture(texture, texCoord);
}

Почему я получаю сообщение об ошибке?


person Alex Bollbach    schedule 07.05.2017    source источник
comment
Вы имеете в виду: fColor = texture2D(texture, texCoord)?   -  person Argb32    schedule 08.05.2017
comment
видимо, texture2d был изменен в gsll 3.0   -  person Alex Bollbach    schedule 08.05.2017


Ответы (2)


У вас было две ошибки. Во-первых, texture — это ключевое слово, поэтому вы не можете использовать его в качестве имени переменной. Во-вторых, sampler не существует как тип данных в OpenGL ES; вам нужен определенный подтип, например. sampler2D.

Рабочий шейдер:

#version 300 es

in mediump vec2 texCoord;
out mediump vec4 fColor;
uniform sampler2D myTexture;

void main(void) {
    fColor = texture(myTexture, texCoord);
}
person solidpixel    schedule 08.05.2017

texture теперь является зарезервированным словом в GLSL 3.00, вам нужно изменить имя.

Подробнее

person Hugues M.    schedule 07.05.2017
comment
` 'myTexture' : синтаксическая ошибка: синтаксическая ошибка` любое имя переменной приводит к той же ошибке. Я получил этот код из видеоролика SIGGRAPH 2014 года, который вышел после изменений для GLSL3.0 и после прочтения о зарезервированных рабочих материалах текстур. - person Alex Bollbach; 08.05.2017
comment
Хорошо, может быть, это не единственное изменение, которое нужно сделать, я просто случайно заметил это, может быть, есть еще - person Hugues M.; 08.05.2017
comment
но это тривиальный шейдер. вы можете увидеть что-нибудь еще? Можно ли с уверенностью сказать, что все, что неверно, ограничено этим кодом? - person Alex Bollbach; 08.05.2017