2014-02-07 3 views
3

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

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

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

OpenGL Debug Output: Source (Shader Comiler), типом (Другое), Приоритет (средний), предупреждение GLSL о компиляции для шейдера 3, "": ПРЕДУПРЕЖДЕНИЕ: -1: 65535: #version: номер версии, устаревший в совместимом контекстном драйвере OGL 3.0

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

Vertex Shader Код:

#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 код

#version 330 core 

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

out vec4 color; 

void main() { 
    color= IN.colour; 

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

Какая версия находится в вашем шейдере? in #version – darkgaze

+0

Я пробовал разные, от 330, 400 и т. д. – kev3kev3

+0

Не могли бы вы опубликовать шейдерный код? Кроме того, [это] (https://stackoverflow.com/questions/19841602/assimp-demo-loading-3d-model) может быть связано. –

ответ

1

Я всегда знал, что драйверы Intel были плохими, но это смешно. Директива #version: NOT устарел в 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-й шейдер, загруженный вашим программным обеспечением.

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