Ответ 1
В OpenGL нет шейдеров по умолчанию. Похоже, что вам нужен очень простой пример шейдера, который преобразует вершины в пространство клипа и дает им цвет, поэтому здесь вы идете:
Vertex shader:
#version 330
layout(location = 0)in vec4 vert;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
void main()
{
gl_Position = projection * view * model * vert;
}
Фрагментный шейдер:
#version 330
out vec4 fragColor;
void main()
{
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
Основной профиль OpenGL 3.3 снижает поддержку множества старых функций фиксированной функции, таких как стек матриц. Вы должны обрабатывать свои собственные матрицы и отправлять их в свои шейдеры. Нет ftransform, и gl_Position - это в значительной степени единственная действительная переменная gl_ *.
В то время как glBindAttribLocation не устарел, предпочтительным методом определения местоположения атрибутов вершин является "layout (location = x)" в GLSL.
В вершинном шейдере "атрибут" теперь "находится" и "переменный" теперь "вышел". В шейдере фрагмента "переменная" теперь "находится" и "gl_FragColor" определяется переменной "out". Я считаю, что gl_FragColor все еще действует, но теперь можно использовать переменную out для определения цвета.
Этот учебник очень хорош и учит основным OpenGL и GLSL 3.30, я бы рекомендовал вам использовать его, чтобы помочь вам узнать больше о GLSL. Также помните, что Справочные страницы GLSL - ваш друг.