Перейти к содержимому


Свернуть чат Чат Открыть чат во всплывающем окне

Yandersen : (2 дней назад) Зависит от нас самих. От Скаев - надежды нет.
Гость : (2 дней назад) народ я тут хотел узнать есть шанс на меха 3 ?
Yakim (Watco... : (4 дней назад) точно? :huh: а если найду? :lol:
lz : (4 дней назад) да не, я не)
Yakim (Watco... : (5 дней назад) Егор, ты говоришь так. будто у тебя они есть, так вот, че по чем?))))
Гость : (5 дней назад) Вот бы сейчас, в 2018, читы на мехов гуглить...
lz : (6 дней назад) Ты просто без читов гоняешь.
Yandersen : (6 дней назад) Ниправда, этот сукасадист должен существовать, его не может не быть! Иначе на кого тяготы жизни сваливать?
Yakim (Watco... : (6 дней назад) Юморист от бога, которого нет)))
Гость : (6 дней назад) Бля, я думал это поиск
Гость : (6 дней назад) Читы
Yakim (Watco... : (неделю назад) Ну как-бы да, насколько я помню, Дуст и Сплайн основатели =) Кажется идея Дуста, реализация Сплайна.
lz : (неделю назад) Вон даже свалкер2 будет, а ты говоришь. И P4 будет)
Yandersen : (неделю назад) ессниошибаюсь. Якимка, подтверди?..
Yandersen : (неделю назад) Егор, кто такой Дуст надо знать. Он папа Мехов, основатель Скаев, автор оригинальной идеи и главный разраб.
lz : (неделю назад) Всё будет.
lz : (неделю назад) Я его знать не знаю, и, поэтому, как-то безразлично.
Yandersen : (неделю назад) Не, ну остается ещё пол процента вероятности что старческий маразм, который, судя по всему, уже не за горами, толкнет дедулю на кикстартер и жалкую попытку возродить легенду, но если это и случится, это будет жалкий высер и позор, тут гарантированно.
Yandersen : (неделю назад) Ну так, антипример мотивационный. Тип для подверждения утверждения о последнем Джедае в твоем лице.
Yandersen : (неделю назад) Нам? Да незачем канеш. Прост он Батя Мехов, и после многолетней череды ежегодных грез о М3 такое вот отмачивает.
lz : (неделю назад) Он нам зачем?
lz : (неделю назад) Ни тепло ни холодно.
Yandersen : (неделю назад) Так как тебе новостя, что Дуст из Партизанов в Fearea перешел? От же мотает старика из говна в навоз...
Yandersen : (неделю назад) Еще бы. У меня во времена креативные если проект десяток хидеров включал, так я с наскока в лучшем случае все с нуля тупо переписывал, чем разбирался что там где как было. В худшем - тупо закрывал и забывал нах. Ты-то молодец.
lz : (неделю назад) Я бывает открываю, но с наскока не берётся так пока.
lz : (неделю назад) Так там 3 года назад ещё всё почти готово было. Прогресса особо больше и не было. АИ надо и всё считай.
Yandersen : (неделю назад) Егор, ну позязя, там же на вид не так много осталось? Будет играбельно хоть чутка - получится мотивационно, больше шансов что кто-нить из народа подключится.
lz : (неделю назад) Занят пока просто, терпение)
Гость : (неделю назад) Лол, нет)
Yandersen : (неделю назад) Ну, вялотекущие дела - это по моей части. Ты-то как креативность растерял, а Егорка? На тебя ж одна надежда осталась. Дуст вон в Fearea влился уже. Это ж все, мехам хана, а последний из Джедаев стал вялотекущими делами заниматься, вместо того чтоб мир разумных машин от забвения спасать. Ну Егооооор... :(
lz : (4 недель назад) По гитхабу можно посмотреть.
lz : (4 недель назад) Вялотекущий режим. Время от времени чего-то смотрю.
Yandersen : (4 недель назад) Егорушка, ну а как же ремастеред?.. :(
Yakim (Watco... : (21 Апрель 2018 - 16:29) бугага
lz : (18 Апрель 2018 - 23:33) Вытаскивал из блока.
lz : (18 Апрель 2018 - 23:33) Блэт, мои серваки на амазоне под раздачу попали.
Yakim (Watco... : (05 Апрель 2018 - 20:54) :ph34r:
Гость : (22 Март 2018 - 09:37) Благодарю :) (предпочитаю постоянный стабильный заработок)
Yakim (Watco... : (21 Март 2018 - 19:56) пхахаха
lz : (21 Март 2018 - 16:46) Может быть, хочешь знать, как поднять бабла?
lz : (21 Март 2018 - 16:46) Кстати, а проблем с доступом к джойказино у тебя нет?
lz : (21 Март 2018 - 16:02) Активировал.
Гость : (21 Март 2018 - 15:32) Проблемы с активацией аккаунта на форуме... =)
Yakim (Watco... : (19 Март 2018 - 21:37) :ph34r:
Yakim (Watco... : (01 Февраль 2018 - 21:44) ?

Фотография
- - - - -

[FileGLSL.hpp] - поддержка шейдерных файлов "*.glsl"

OpenGL GLSL shaders load shader

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 08 Декабрь 2014 - 01:29

Обычно шейдеры хранят в отдельных файлах (*.frag, *.vert и пр.) - так несколько шейдерных программ можно составить из различных комбинаций шейдеров. Однако на практике все всё равно пишут отдельные шейдеры для каждой отдельной программы, даже если коды иногда дублируются - никому путаница не нужна. Проще хранить коды всех шейдеров программы в одном файле. Для этого я придумал формат файла "*.glsl" - на каждую шейдерную программу один файл с кодами всех её шейдеров. Он позволяет хранить коды вершинных, обоих тесселяционных, геометрических и фрагментных шейдеров в одном файле (разумеется, все типы шейдеров не обязательно пихать).

Для поддержки файлов формата .glsl включите в Ваш проект этот заголовочный файл:

 

FileGLSL.hpp

 

:!: Требует LoadGL.h.

 

В файлах формата .glsl коды для отдельных шейдеров разделяются с помощью "тэгов" - названий шейдеров в квадратных скобках:

[GL_VERTEX_SHADER]
[GL_FRAGMENT_SHADER]
[GL_GEOMETRY_SHADER]
[GL_TESS_CONTROL_SHADER]
[GL_TESS_EVALUATION_SHADER]

Строки кода, идущие от начала файла и ДО первого тэга (или после пустого тэга []) дублируются для всех шейдеров - это удобно для указания версии, общих констант, функций или униформ, а также для объявления интерфейсных переменных (в старых GLSL версиях). Строки кода после тэга относятся к тому шейдеру, чей идентификатор был указан в вышележащем тэге. Один и тот же тэг может быть использован несколько раз (хотя я хз зачем так делать, но всё же).

В строке с тэгом не должно быть никаких табов, пробелов и других символов.

 

Создаются ТОЛЬКО те шейдеры, для которых есть индивидуальный код. Т.е. если тэг присутствует, но после него лишь пустые строки да комменты (которые, кстати, вырезаются), то шейдер создан не будет (даже если присутствует общий для всех шейдеров код).

 

В файле FileGLSL.hpp всего две функции: CreateShader (загрузка кода указанного шейдера напрямую) и LoadGLSL (загрузка кодов шейдеров из *.glsl файла).

GLuint CreateShader(GLenum ShaderType, const char* ShaderCode);

Функция создаёт шейдер указанного типа, загружает его код, компиллирует шейдер (при ошибке выводится окно с проблемным кодом и руганью компиллятора), после чего возвращает идентификатор шейдерного объекта (или 0 в случае ошибки).

ShaderType - одна из OpenGL констант, идентифицирующая тип графического шейдера: GL_VERTEX_SHADER, GL_FRAGMENT_SHADER, GL_GEOMETRY_SHADER, GL_TESS_CONTROL_SHADER или GL_TESS_EVALUATION_SHADER.

ShaderCode - код шейдера в формате NULL-terminated string. Отдельные строчки кода в ней разделяются символами новой строки.

GLuint LoadGLSL(const char* FileName);

Создаёт шейдерную программу из исходников, находящихся в указанном файле (FileName), после чего возвращает идентификатор объекта шейдерной программы (или 0 в случае ошибки). Функция LoadGLSL использует CreateShader, поэтому в случае ошибки при компилляции вылезет окно с дебаговой информацией. Обнаружение ошибок при компилляции шейдеров или линковке программы вызовет попап-окно, предлагающее закрыть приложение, проигнорировать ошибку или исправить файл и попробовать скомпилировать всё снова.

 

Пример содержимого *.glsl файла:

//Common for all shaders:
varying vec4 Color;

[GL_VERTEX_SHADER]

//Vertex shader code:
void main()
{
    Color = gl_Color;
    gl_Position = ftransform();
}

[GL_GEOMETRY_SHADER]

//We do not use geometry shader

[GL_FRAGMENT_SHADER]

//This uniform is used only in fragment shader:
uniform sampler2D Texture;

//Fragment shader code:
void main()
{
    gl_FragColor = Color;
}

В результате будет создана программа, состоящая из вершинного и фрагментного шейдера (у шейдера геометрии нет строк своего кода):

загруженный код вершинного шейдера:

varying vec4 Color;
void main()
{
	Color = gl_Color;
	gl_Position = ftransform();
}

загруженный код фрагментного шейдера:

varying vec4 Color;
uniform sampler2D Texture;
void main()
{
	gl_FragColor = Color;
}


#2 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 08 Декабрь 2014 - 01:44

FileGLSL.hpp по сравнению с предыдущей версией больше не требует Strings.hpp - только стандартные библиотеки и LoadGL.h (функции загрузки шейдеров, ОпенГЛ константы).



#3 OFFLINE   PA3UJIb

PA3UJIb

    Серый

  • Создатель
  • 171 сообщений

Отправлено 24 Декабрь 2014 - 17:14

Доделал на основе этого файла свои функции загрузки шейдеров. Просто потому что мне так понятнее

Функция createProgram

Скрытый текст

использующая
функцию createShader
Скрытый текст


Прекрасно работает с файлами исходного кода шейдеров, описанных Шаманом.

Теперь можно приступать к непосредственному курению шейдеров от Шамана в комплекте с руководствами по GLSL


 


#4 OFFLINE   Yandersen

Yandersen

    Диванный теоретик

  • Админ
  • 454 сообщений
  • Откуда:Canada
  • Настоящее имя:Ян

Отправлено 25 Декабрь 2014 - 07:02

Малацца, всё правильно описано, смотрицца весьма убедительно! :)  Акромя попыток перевести на русский названия шейдеров. Ящитаю тех-термины лучше не переводить. У них там своя "игра слов" всегда, которая в русском переводе в люьбом варианте будет звучать нелепо.

 

Правда, юношеское мракобесие с классами всё же считаю непрактичным. Получается слишком тесное переплетение всех модулей программы - никакой независимости. Всё новое тебе приходится "адаптировать" и "интегрировать" в свою "атмосферу". Надеюсь, однажды ты к этому приостынешь и будешь стараться клепать независимые модули программы.

 

Шляпа с дебаг-логом хороша, но всё ж неэлегантна - любому новому коду приходится инъекции строк дебага проводить.







Темы с аналогичным тегами OpenGL, GLSL, shaders, load shader

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных