2016-02-12 2 views
1

В течение примерно 4 недели, я был в состоянии успешно запустить вершинные/фрагмент шейдеры отмечен на вершине с:Почему мой шейдер #version 330 работает на более ранних версиях?

#version 330 core 

Однако, я просто понял, что, когда я называю:

cout << "OpenGL version: " << glGetString(GL_VERSION) << endl; 
cout << "GLSL version: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << endl; 

Я получаю :

OpenGL version: 3.2.0 
GLSL version: 1.50 NVIDIA via Cg compiler 

Почему/как я могу запускать эти шейдеры со старыми версиями GLSL и OpenGL? Должен ли я использовать более старую версию шейдера? Почему я не получаю никаких ошибок при запуске этого шейдера? Я пытаюсь поймать их следующим образом:

// Compile vertex shader 
glCompileShader(VS); 
glGetShaderiv(VS, GL_COMPILE_STATUS, &rc); 
if(!rc) { 
    if(isVerbose()) { 
     GLSL::printShaderInfoLog(VS); 
     cout << "Error compiling vertex shader " << vShaderName << endl; 
    } 
    return false; 
} 

Я получаю другие ошибки компиляции, когда делаю ошибки в своем шейдере. Должен ли я получать некоторую ошибку или предупреждение, потому что мой шейдерный язык слишком новый? Как я могу узнать, что поддерживает мое оборудование, если оно может обрабатывать нечто более новое, чем версия, которую он сообщает?

+0

Вы конкретно запрашиваете контекст GL 3.2, когда ваш драйвер может поддерживать более поздний? – MuertoExcobito

+0

Спасибо, это было. Я вызывал 'glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);' и 'glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);' Удаление, из-за чего мои версии отображают 4.30 для OpenGL и GLSL. Добавьте его в качестве ответа, и я соглашусь с ним. – xdhmoore

ответ

1

Возможно, и если вы запросите контекст OpenGL, который больше, чем поддерживает ваш драйвер, шейдеры GLSL с тегом #version выше, чем объявлено GL_SHADING_LANGUAGE_VERSION, все равно будут компилироваться. Спецификация напрямую не связана с GL_SHADING_LANGUAGE_VERSION для поддержки тега #version. Он говорит только «Любое число, представляющее версию языка, который не поддерживает компилятор, приведет к возникновению ошибки». (раздел 3.3).

Смежные вопросы