Ошибка версии шейдера OpenGL

Я использую Visual Studio 2013, но работаю под компилятором Visual Studio 2010.

Я запускаю Windows 8 в bootcamp на Macbook Pro с графикой Intel iris Pro 5200.

У меня есть очень простой вершинный и фрагментный шейдер, я просто отображаю простые примитивы в окне, но получаю предупреждения в консоли:

Вывод отладочной информации OpenGL: Source (Shader Comiler), тип (Other), Priority (Medium), предупреждение (я) о компиляции GLSL для shader 3, «»: WARNING: -1: 65535: #version: номер версии устарел в OGL 3.0 forward совместимый контекстный драйвер

У кого-нибудь есть идеи, как избавиться от этих надоедливых ошибок ..?

Код вершинного шейдера:

#version 330 core

uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projMatrix;

in  vec3 position;
in  vec2 texCoord;
in  vec4 colour;

out Vertex  {
vec2 texCoord;
vec4 colour;
} OUT;void main(void) {
gl_Position     = (projMatrix * viewMatrix * modelMatrix) * vec4(position, 1.0);

OUT.texCoord    = texCoord;
OUT.colour      = colour;
}

Frag Shader code

#version 330 core

in Vertex   {
vec2 texCoord;
vec4 colour;
} IN;

out vec4 color;

void main() {
color= IN.colour;

//color= vec4(1,1,1,1);
}

3

Решение

Я всегда знал, что драйверы Intel были плохими, но это смешно. #version директива НЕ устарел в GL 3.0. На самом деле это важнее, чем когда-либо, начиная с GL 3.2, потому что помимо номера вы также можете указать core (по умолчанию) или compatibility,

Тем не менее, это не настоящая ошибка. Это недопустимое предупреждение, и наличие настройки вывода отладки OpenGL — вот почему вы продолжаете его видеть. Вы можете игнорировать это. Похоже, что AMD — единственный поставщик, который использует отладочный вывод полезным способом. NV почти никогда ничего не выводит, вместо этого выбирая сбой … и Intel, кажется, извергает чепуху.

Возможно, что драйвер действительно пытается сказать вам, что у вас есть контекст OpenGL 3.0 и вы используете шейдер GLSL 3.30. Если это так, то это самый глупый способ, который я когда-либо видел.

Ты пытался #version 130 вместо? Если вы сделаете это, интерфейсные блоки (например, in Vertex { ...) должен генерировать ошибки разбора, но это, по крайней мере, исключает единственную интерпретацию этого предупреждения, которая имеет какой-либо смысл.


Есть еще одна возможность, которая в конце концов имеет больше смысла. Выходные данные отладки упоминают, что это связано с шейдерным объектом № 3. Хотя нет гарантии, что имена шейдеров назначаются последовательно, начиная с 0, обычно это так. Вы только показали в общей сложности 2 шейдера, # 3 подразумевал бы 4-й шейдер, загруженный вашим программным обеспечением.

Вы уверены, что это шейдеры, вызывающие проблему?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]