А вспомнил, да😂
Это тот щегол, который газовал на парней, которые книгу по вулкану выпустили из-за того, что она на английском, а не на русском и ему не понятно 😂
AMM1AK, поздравляю, ты в очередной раз признал свою несостоятельность.
Как же ты жалок... Продолжай в том же духе!
Всем привет. Столкнулся с проблемкой компиляции шейдеров, и никак не вдупляю что не так.
есть такой шейдер (портянка из ApiTrace):
Компилируется нормально без ошибок. Но на экране ниче нету.
В ApiTrace пишет ошибка линковки:
Ну вроде мэйн там есть, че ему еще надо нипонятно.
burnaboyz
А зачем тебе дефайны такие? Видать они не сработали и main пустой вышел.
Не наглядней как обычно разделить шейдер на два файла?
upd: и ты по моему не так используешь glShaderSource
Посмотри тут хотя бы
https://learnopengl.com/Getting-started/Shaders
У тебя там вначале дефайны идут
#define VERTEX 1
#define FRAGMENT 0
Для фрагментного нужно наоборот. Но в любом случае они оба defined будут, а в коде ты проверяешь не
#if (VERTEX == 1)
Или
#if (FRAGMENT == 1)
А просто на defined.
Попробуй разнести вершинный и фрагментарный шейдер по разным строкам и скомпилировать и линковать по отдельности.
Попробуй разнести вершинный и фрагментарный шейдер по разным строкам и скомпилировать и линковать по отдельности.
Я сначала два разных делал, там все работало. Хочу сделать что-то наподобие убершейдера, все в один файл запихать, потом в glShaderSource затолкать массив строк с версией шейдера (GLES или GL), строку с define'нами и уже дальше тело с шейдером.
burnaboyz
Ну тогда надо подставлять разное объявление дефайна в этот убершейдер в начале, чтобы он понимал, вершинный или фрагментный сейчас. Извне это сделать не получится.
PS может сам glsl объявляет подобные дефайны для разных типов шейдеров и тебе объявлять ничего не надо. Погугли.
Заработало. Надо было в дефайнах указывать 1: #define VERTEX 1, я не знаю почему ему не нравится просто #define VERTEX.
И походу OGL не любит сишные строки с \0 на конце. Нужно указывать sizeof(str) - 1.
burnaboyz
> И походу OGL не любит сишные строки с \0 на конце. Нужно указывать sizeof(str) - 1.
Внезапно, в документации так и написано:
Each element in the length array may contain the length of the corresponding string (the null character is not counted as part of the string length) or a value less than 0 to indicate that the string is null terminated
Dimich
> Внезапно, в документации так и написано
Так не совсем так же. Написано, что null-terminated тоже может, но длину надо указать отрицательную, например, -1.
Тема в архиве.