Я использую 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);
}
Я всегда знал, что драйверы 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-й шейдер, загруженный вашим программным обеспечением.
Вы уверены, что это шейдеры, вызывающие проблему?
Других решений пока нет …