Мои шейдеры GLSL (OpenGL ES 2.0, «#version 100») не могут компилироваться на графическом процессоре Vivante GC800. Шейдеры компилируются на многих других графических процессорах.Является ли «#line 0» действительным в GLSL?
Ошибки я получаю:
(2:0) : error : Expect positive integer-line-number after #line.
Я использую
#line 0
сбросить номер строки после включения кучи преамбулы коды (например, #version
и некоторые точные описатели) перед «реальным "шейдер. Кто-нибудь знает, является ли это случай, когда компилятор шейдера Vivante разбивается, или компилятор компилятора любого другого слишком мягкий?
Мое обходное решение заключается в том, чтобы включать эту директиву только при отладке моих шейдеров локально.
Ах, поэтому я должен использовать «#line 1». Я думал, что это отличается от C, но, похоже, «#line 0» недопустимо в препроцессоре C: http://stackoverflow.com/a/9152887/960524. –
Wow ... Разница между GLSL и GLSL ES? Я смотрю на [Спецификация GLSL 1.20.8] (http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf), и он говорит: «После обработки этой директивы (включая его новая строка), реализация будет вести себя так, как если бы она компилировалась в строке номера строки + 1 "_. Не имея плюса 1 имеет больше смысла, и я думаю, что так препроцессор C делает это. – falstro