2016-12-02 6 views
-3

Ранее у меня была проблема с OpenGL на Ubuntu с использованием GLFW, но мне удалось решить это с помощью метода glfwWindowHints(). Link для справки.GLFW - Невозможно скомпилировать фрагментарный шейдер

Теперь я наткнулся на еще одну ошибку, на этот раз связанную с фрагментарным шейдером.

Failed to compile fragment shader! 
0:60(12): error: `gl_FragColor' undeclared 
0:60(2): error: no matching function for call to `mainImage(error, vec2)'; candidates are: 
0:60(2): error: void mainImage(vec4, vec2) 

Вот вывод команды glxinfo | grep OpenGL:

OpenGL vendor string: Intel Open Source Technology Center 
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel - padoka PPA 
OpenGL core profile shading language version string: 4.50 
OpenGL core profile context flags: (none) 
OpenGL core profile profile mask: core profile 
OpenGL core profile extensions: 
OpenGL version string: 3.0 Mesa 13.1.0-devel - padoka PPA 
OpenGL shading language version string: 1.30 
OpenGL context flags: (none) 
OpenGL extensions: 
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.1.0-devel - padoka PPA 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 
OpenGL ES profile extensions: 

В моих шейдерных файлах я определил, как версия #version 450 core.

Я читал на форуме в другом месте, что (12) в 0:60(12): error: 'gl_FragColor' undeclared представлен версии 1.2, но я не уверен, правильно это или нет.

shader.frag - PasteBin

shader.vert - PasteBin

ответ

3

gl_FragColor была удалена, так как OpenGL 3.3 основного профиля. Современный способ - определить собственные выходные переменные в шейдере фрагментов. Вы можете указать сопоставление между выходными переменными шейдера и вложениями framebuffer либо с помощью метода glBindFragDataLocation​, либо с помощью спецификаторов макета.

-1

Я нашел возможное решение проблемы.

  1. Установка glewExperimental = GL_TRUE; перед инициализацией GLEW
  2. Заменены gl_FragColor с новой переменной из out vec4 color; в пиксельный шейдер.

Мой друг, однако, не нуждался в этом, используя графический процессор NVIDIA.

Возможно, это проблема только для текущих драйверов для Intel Integrated Graphics для Skylake?