GLSL

367
2
22
У меня Opengl 4.6.0 и GLSL 4.6.0. Смотрю старый туториал по Opengl/GLSL, где у человека Opengl 3.2.0 и GLSL 1.5.0. В туторе был код для объявления цвета каждому пикселю на выходе:
Shader:
#version 460 core
//в туториале было 150, но у меня OpenGL 4.6.0, а ему соответствует GLSL версия 4.6.0

void main()
{
gl_fragcolor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
Так вот, мне компилятор пишет, что глобальная переменная gl_fragcolor устарела. Какая альтернатива этой переменной в новой версии OpenGL?
P. S Я гуглил на что её заменить, но не нашёл ничего, кроме какого-то layout.
 

tox1cozZ

aka Agravaine
Модератор
7,130
455
2,152
Не стоит ставить такую высокую версию, ибо далеко не у всех видюхи будут поддерживать. Если не юзаешь фичи из новых версий, то ставь #120 и все.
 

Icosider

iMixin
Администратор
3,286
85
490
Фига разошёлся, у людей ещё до сих пор вёдра с гайками, с 2гб рам и с интегрированными видяхами, а он на 4.6... На счёт цвета, ну ёлы палы, как ты там учишь то? Создай поле, аля "out vec4 out_color;" Затем в main пропиши out_color = vec4(1f, 0f, 0f, 1f); и вуаля! Magic! И ещё, на хабре была серия уроков по opengl

Upd: На вот
 

tox1cozZ

aka Agravaine
Модератор
7,130
455
2,152
Чел, #120 заведется у всех, а #460 хорошо если у половины. Я понимаю если там сложнейший шейдер, который юзает дофига новых фич, то да. У тебя же самый простой шейдер и ты указываешь #460... Это неверно.
 
367
2
22
Фига разошёлся, у людей ещё до сих пор вёдра с гайками, с 2гб рам и с интегрированными видяхами, а он на 4.6... На счёт цвета, ну ёлы палы, как ты там учишь то? Создай поле, аля "out vec4 out_color;" Затем в main пропиши out_color = vec4(1f, 0f, 0f, 1f); и вуаля! Magic! И ещё, на хабре была серия уроков по opengl

Upd: На вот
Кстати, можешь сказать что значит "core" после версии? Автор туториала не объяснил.
 
367
2
22
Чел, #120 заведется у всех, а #460 хорошо если у половины. Я понимаю если там сложнейший шейдер, который юзает дофига новых фич, то да. У тебя же самый простой шейдер и ты указываешь #460... Это неверно.
Да. Но тут такой вопрос. После #120 глобальная переменная gl_fragcolor устарела. То есть в #460 она работать не будет. Получается #120 заведётся не у всех, или тут что то не так?

Может, если у кого-нибудь стоит #460, то у него есть и все предыдущие версии тоже? Тогда справедливо то, что если стоит самая новая версия, тогда и все предыдущие поддерживаются.
 

Icosider

iMixin
Администратор
3,286
85
490
Я понимаю если там сложнейший шейдер
Ща погоди, до геометрического шейдера дойдёт, ещё тему создаст))

Да. Но тут такой вопрос. После #120 глобальная переменная gl_fragcolor устарела. То есть в #460 она работать не будет. Получается #120 заведётся не у всех, или тут что то не так?
Да заведётся она у всех, просто надо указать 120 или 460. Если ты используешь новые фичи, то ставишь 460, если нет, то 120 и не паришься. За тебя уже всё сделано и париться на счёт: "а запустится ли 120 на 460 или нет?" Не надо...

Может, если у кого-нибудь стоит #460, то у него есть и все предыдущие версии тоже? Тогда справедливо то, что если стоит самая новая версия, тогда и все предыдущие поддерживаются.
Браво 👏
 

tox1cozZ

aka Agravaine
Модератор
7,130
455
2,152
То есть в #460 она работать не будет. Получается #120 заведётся не у всех, или тут что то не так?
Ну ты же для это и указываешь версию, чтобы шейдер компилировался "нужной версией".

Может, если у кого-нибудь стоит #460, то у него есть и все предыдущие версии тоже? Тогда справедливо то, что если стоит самая новая версия, тогда и все предыдущие поддерживаются.
Если видюха старая и не поддерживает #460 - крашнется. Если видюха новая, а шейдер #120 - все заведется.
 
29
4
Используй переменные in и out в вершинном и фрагментном шейдерах. Где in во фрагментном выходные позиции вертексов из вершинного (то есть out из вершинного) и out в твоем фрагментном всегда будет попиксельный цвет, который рассчитывается на основе смешивания данных. то есть где ты пишешь vec4(r, g, b, a) где первые три аргумента - цвет и а - альфа канал. Так что если твоя out переменная из фрагментного шейдера всегда выдает цвет то можешь использовать её вместо gl_fragcolor; И называй её как хочешь. Примерно так может быть
Objective-C:
#version 420

in position;
out color;

void main() {
    color = vec4(position.x, position.y, position.z, 1); // Или же vec4(position, 1); одинаково
}
Используя этот шейдер у себя в програме получишь градиентную заливку на своем говно-треугольнике.


Надеюсь ярассказал не как дебил и вроде доходчиво.
 
29
4
И вообще я не понимаю зачем юзать версии опенгл выше 3 если майн (адекватная версия то есть до 1.8) все равно юзает lwjgl 2.9.x который поддерживает функционал лишь вплоть до опенгл 3.1 чего между прочим с головой достаточно для кодинга в майне (и вообще достаточно если хочешь научиться работать с графикой для начала)
 

CumingSoon

Лекс
1,589
12
235
Ну ты же для это и указываешь версию, чтобы шейдер компилировался "нужной версией".


Если видюха старая и не поддерживает #460 - крашнется. Если видюха новая, а шейдер #120 - все заведется.
Не знаю, как ты вообще далеко зайдешь, если не научишься гуглить в самом начале.
 
Сверху