Как по умолчанию выглядят шейдеры GLSL вершин, фрагментов и геометрии для версии №330?
Я буду использовать #version 330
GLSL Version 3.30 NVIDIA через компилятор Cg, потому что это то, что поддерживает моя видеокарта.
Под шейдерами по умолчанию я имею в виду те шейдеры, которые делают то же самое, что и графическая карта, когда программа шейдеров выключена.
Я не могу найти хороший пример для #version 330
. Гуглил весь день. Не уверен, что термин шейдер по умолчанию называется чем-то еще, например, тривиальным или базовым, и если поэтому я не могу его найти.
Любые рекомендации для книги с версией 330 или ссылка на простой учебник для начинающих с версией 330 также будут хороши.
пример тривиального вершинного шейдера в # версии 110, выполняет преобразование вершин по умолчанию
#version 110
void main()
{
gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}
пример тривиального фрагментного шейдера в # версии 110, превращает цвет в красный
#version 110
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
В OpenGL нет шейдеров «по умолчанию». Похоже на то, что вам нужен очень простой пример шейдера, который преобразует вершины в пространство клипа и дает им цвет, поэтому вы идете:
Вершинный шейдер:
#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.
В вершинном шейдере «attribute» теперь «in», а «varing» теперь «out». В фрагментном шейдере «varing» теперь «in», а «gl_FragColor» определяется переменной «out». Я считаю, что gl_FragColor все еще действует, но теперь можно использовать переменную out для определения цвета.
Это учебное пособие очень хорошо и учит базовым OpenGL и GLSL 3.30, я бы порекомендовал вам использовать его, чтобы помочь вам узнать больше о GLSL. Также помните, что Справочные страницы GLSL - ваш друг.