Лазарус, OpenGL и шейдеры

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Лазарус, OpenGL и шейдеры

Сообщение shyub » 11.12.2017 13:35:58

Для работы с OpenGL использую OpenGLControl. А можно ли каким-то образом использовать шейдеры в Лазарусе?
Вызывает сомнение то, что шейдеры пишутся на C-подобном языке (разумеется скорее всего Лазарус его не поймёт), однако для чего тогда в модуле GLext (в функции function Load_GL_EXT_vertex_array: Boolean;) определены куча шейдерных констант и шейдерных функций.
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Лазарус, OpenGL и шейдеры

Сообщение Лекс Айрин » 11.12.2017 14:01:01

shyub писал(а):разумеется скорее всего Лазарус его не поймёт


ЯВУ содан только для удобства программирования. И лазарус, при желании, вполне может реализовать его поддержку.

shyub писал(а):однако для чего тогда в модуле GLext (в функции function Load_GL_EXT_vertex_array: Boolean;) определены куча шейдерных констант и шейдерных функций.


Потому что это реализация (драйвер) для OpenGl. Подключиться к нему можно из любого языка.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Лазарус, OpenGL и шейдеры

Сообщение wadman » 11.12.2017 15:08:00

shyub писал(а):Вызывает сомнение то, что шейдеры пишутся на C-подобном языке

Шейдеры передаются напрямую в гпу в "исходном" тексте, так что придется смириться с тем, что этот язык похож на С: https://ru.wikipedia.org/wiki/Шейдер
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: Лазарус, OpenGL и шейдеры

Сообщение Cheb » 11.12.2017 17:28:42

Вызывает сомнение то, что шейдеры пишутся на C-подобном языке

И?..
Одним паскалем жив не будешь. Тут есть только один вариант действий: Git gud.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Лазарус, OpenGL и шейдеры

Сообщение shyub » 11.12.2017 20:59:13

Одним паскалем жив не будешь.
Согласен на все 100.
Однако, например мне удалось загрузить шейдер, но как им можно управлять из Лазаруса?
В моём понимании шейдер - это код, описывающий вид и поведение графического объекта, который загружается напрямую в GPU. Но как с ним взаимодействовать через Лазарус (мне надо, чтобы он изменял какие-то координаты вершин, цвет и т.п по командам программы, написанной на Лазарусе). Это я не могу понять.
На тему Лазарус-шейдер нашёл только это http://michellcomputing.co.uk/blog/2016/09/modern-opengl-with-lazarus/, чего явно недостаточно...

Добавлено спустя 3 минуты 6 секунд:
И лазарус, при желании, вполне может реализовать его поддержку.

Как? Какими механизмами?
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Лазарус, OpenGL и шейдеры

Сообщение Снег Север » 11.12.2017 22:19:48

Взаимодействие идет через вызовы функций OpenGl. Про работу этих функций вам надо искать в книжках по OpenGl, лазарь тут служит только как интерфейс к ним.

Или вам надо поставить библиотеку более высокого уровня, например
https://castle-engine.sourceforge.io/index.php
или
http://glscene.sourceforge.net/wikka/
или еще что-либо.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Лазарус, OpenGL и шейдеры

Сообщение olegy123 » 12.12.2017 09:34:02

shyub писал(а):В моём понимании шейдер - это код, описывающий вид и поведение графического объекта

не совсем так, GPU это процессор, точнее очень много параллельных процессоров которые из первоначальных 2D/3D данных(точек, линий, треугольников.. цвета, текстур) рисуют 2D картинку экрана монитора.
Шейдеры помогают вмешаться в процесс.. заставить их по другому рисовать. перепрограммируют их.

shyub писал(а):Но как с ним взаимодействовать через Лазарус

Делаешь шейдер, объявляешь переменные в тексте программы, компилируешь, Opengl движок дает ID шейдера.. и когда приходит черед рисовать объект - применяешь ID шейдера.. записываешь данные в нужные для тебя переменные для шейдера, рисуешь объект.. все.. Так продолжается постоянно с новым циклом рисования и для всех объектов.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Лазарус, OpenGL и шейдеры

Сообщение Mikhail » 12.12.2017 12:05:15

shyub писал(а):В моём понимании шейдер - это код, описывающий вид и поведение графического объекта, который загружается напрямую в GPU.


Это не совсем так. Рекомендую книгу "OpenGL суперкнига" авторы Ричард Райт-мл., Липчак 3-е издание там есть и классический и немного современный OpenGL, до OpenGL 3.3, если правильно помню. OpenGL 4 рассматривается в более поздних редакциях. 3-я версия точно есть в интернете как на английском, так и на русском языках.
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Лазарус, OpenGL и шейдеры

Сообщение MylnikovDm » 12.12.2017 18:21:09

Шейдер это программа для графического процессора, которая должна быть откомпилирована с помощью специального отдельного компилятора. С помощью функций, которые есть в OpenGL, вы только загружаете уже скомпилированный двоичный модуль в графический процессор и в нужный момент даёте команду его выполнить. Этот двоичный модуль может быть записан в виде отдельного файла на диске рядом с основной программой, либо прилинкован к исполняемому файлу программы как бинарный ресурс.
MylnikovDm
постоялец
 
Сообщения: 103
Зарегистрирован: 15.02.2007 21:26:10
Откуда: Челябинск

Re: Лазарус, OpenGL и шейдеры

Сообщение vitaly_l » 12.12.2017 18:47:22

MylnikovDm писал(а):Шейдер это программа для графического процессора, которая должна быть откомпилирована с помощью специального отдельного компилятора. С помощью функций, которые есть в OpenGL, вы только загружаете уже скомпилированный двоичный модуль в графический процессор и в нужный момент даёте команду его выполнить. Этот двоичный модуль может быть записан в виде отдельного файла на диске рядом с основной программой, либо прилинкован к исполняемому файлу программы как бинарный ресурс.

Я давно подозревал, что С-подобные двоичные языки - мало отличны от бинарного кода. И эти, примитивные бинарные и :roll: двоичные С-пообные языки, достойны лишь прилинковываться к исполнимому файлу, либо лежать рядом с программой написанной на настоящем Паскале, которая хранится в памяти, как реальная паскалевская программа, а не как какой-то там ничтожный С-подобный бинарный и двоичный код.

Добавлено спустя 33 часа 333 минуты 333 секунды:
shyub писал(а):Вызывает сомнение то, что шейдеры пишутся на C-подобном языке (разумеется скорее всего Лазарус его не поймёт)

Если бы только Лазарус не понимал эти ужасные С-подобные двоичные языки, то это было бы только половиной беды. Настоящая проблема в том что, даже программисты, с многолетним стажем - не могут понять эти чёртовы: двоичные С-подобные и бинарные С-подобные - языки.
shyub писал(а):А можно ли каким-то образом использовать шейдеры в Лазарусе?

Нет, шейдеры и Лазарус - несовместимы. Однако OpenGL как-то умеет отправлять эти примитивные С-подобные :roll: "бинарно-двоичные" коды шейдерам.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Лазарус, OpenGL и шейдеры

Сообщение MysticCoder » 12.12.2017 22:06:49

vitaly_l писал(а):Нет, шейдеры и Лазарус - несовместимы.

Зачем путаешь...

TC явно не хватает теории, сходи например в https://habrahabr.ru/post/313380/, и делай тот же самый пример только не на си, а на паскале. В модуле gl или glext есть функции типа LoadOpenGL2_3 и подобные, которые выполнят за тебя всю необходимую работу по созданию нужного контекста OpenGL.
Всё там довольно просто. Пишешь текст шейдера, сохраняешь в файл или прямо в виде констант в программе. Загружаешь, компилируешь, когда надо использовать - подключаешь, задаешь входные данные через всякие glUniform функции или текстуры, рисуешь. Ну а шейдер уже на основании переданных входных данных рисует или так или эдак.
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: Лазарус, OpenGL и шейдеры

Сообщение shyub » 12.12.2017 23:44:06

Всем спасибо. Начинаю потихоньку "въезжать" в тему.

Добавлено спустя 1 минуту 47 секунд:
А где можно найти каки-нибудь простые примеры по этой теме?
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Лазарус, OpenGL и шейдеры

Сообщение vitaly_l » 12.12.2017 23:45:57

MysticCoder писал(а):Зачем путаешь...

Лазарус не использует шейдеры, они ему просто ненужны, т.к. ему достаточно системных средств, для отрисовки интерфейса. Соответственно я-то как раз никого не путаю, а наоборот объясняю что: OpenGL, FPC, Pascal и Лазарус - это не одно и тоже.
MysticCoder писал(а):TC явно не хватает теории, сходи например в https://habrahabr.ru/post/313380/, и делай тот же самый пример только не на си, а на паскале.

Лучше поищите на этом форуме, полно готовых примеров на паскале. В частности, Скалогрыз делал 100% работающий пример.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Лазарус, OpenGL и шейдеры

Сообщение Mirage » 14.12.2017 02:45:22

shyub: Тут важно понимать, что шейдеры работают с данными, загруженными в GPU программой (сами шейдеры это тоже такие данные). Непосредственно со структурами данных программы, которая эти шейдеры использует, они не работают и не имеют к ним доступа. Поэтому шейдерам все равно на чем написана программа. И тем более в каком IDE.

MylnikovDm писал(а):Шейдер это программа для графического процессора, которая должна быть откомпилирована с помощью специального отдельного компилятора. С помощью функций, которые есть в OpenGL, вы только загружаете уже скомпилированный двоичный модуль в графический процессор и в нужный момент даёте команду его выполнить.


А я вот компилирую шейдеры с помощью вполне себе опенжеэлевской функции glCompileShader. Я что-то не так делаю?
А отдельный это в директиксе был и то вроде бы уже не.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Лазарус, OpenGL и шейдеры

Сообщение MylnikovDm » 14.12.2017 11:42:31

А я вот компилирую шейдеры с помощью вполне себе опенжеэлевской функции glCompileShader. Я что-то не так делаю?

Вы правы, я не совсем точно выразился в своём комментарии. Компиляция шейдеров происходит непосредственно в процессе выполнения программы, поскольку компилятор шейдеров встроен в драйвер видеокарты. Иначе было бы невозможно обеспечить совместимость программ со всем множеством видеокарт, которые сегодня используются.

Я имел в виду сам исходный текст шейдера, который можно либо хранить в виде отдельных файлов, либо прилинковать непосредственно к исполняемому модулю и потом его грузить как ресурс. Многие игровые движки используют именно первый способ, за счёт чего программы шейдеров у них можно изменять без изменения бинарных файлов самой программы, чем часто пользуются при создании различных модов к играм.

Но, в любом случае, ни компилятор паскаля, ни компилятор С/С++ не обрабатывают программу шейдера. Для них она всего лишь набор текстовых строк, который необходимо скормить специальному компилятору.
MylnikovDm
постоялец
 
Сообщения: 103
Зарегистрирован: 15.02.2007 21:26:10
Откуда: Челябинск

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 23

Рейтинг@Mail.ru