У меня работает. Разобраться, конечно надо, что не так. Но то что не работает у вас - не повод выкидывать из релиза.
Вы как то потеряли моё сообщение при переносе (или оно не отправилось…):
У вас, почему то, более строгий компилятор шейдеров. Вместо предупреждений даёт ошибки. Ну, исправляется это легко:
Rot Triangle 1.vertex.glsl (268 Байты)
Это я понимаю. От 1МБ никуда не уйти.
Инициализации нужны из за архитектуры библиотеки OpenGL
. Дело в том, что при инициализации контекста (в нём хранятся данные о том - на чём и как рисовать) - OpenGL выбирает на каком устройстве он инициализируется.
Если в пк стоят 2 совершенно разные видеокарты и каждая из них подключена к отдельному монитору - получается ситуация, где в зависимости от выбора экрана контекст будет иметь разную версию OpenGL и разный набор расширений.
Более того, OpenGL это только спецификация. Каждый производитель видеокарт по своему её реализует. А значит реализация подпрограмм 2 разных контекстов - будет находится в 2 разных участках памяти.
Поэтому, адреса подпрограмм нужно получать уже после инициализации контекста. Именно это и происходит на строчке gl := new OpenGL.gl;
.
P.S. Вообще у меня есть 1 идея:
Можно добавить в PABCSystem
атрибут, который можно будет применить к полям. Если этот атрибут применён - поле не добавляется в готовый .exe, пока оно не будет использовано кодом, использующим .pcu . Так же как сейчас с типами и методами. По названию - предлагаю UnnecessaryFieldAttribute
.
Обычно поля нельзя выкидывать, потому что это сломает представление типа в памяти. Но если разрешать это атрибутом - можно будет избежать того мегабайта.