Как я получаю текущий размер матричного стека в OpenGL?

Язык C оставляет компилятору некоторую свободу в отношении расположения структурных элементов в памяти:

  • могут появляться отверстия памяти между любыми двумя компонентами и после последнего компонента. Это было связано с тем, что определенные типы объектов на целевом компьютере могут быть ограничены границами адресации
  • «отверстий в памяти», включенными в результат оператора sizeof. Размер sizeof не включает в себя размер гибкого массива, который доступен в C / C ++
  • . Некоторые реализации языка позволяют вам управлять компоновкой памяти структур через параметры прагмы и компилятора

Язык C предоставляет некоторую уверенность программисту в компоновке элементов в структуре:

  • компиляторы должны назначать последовательность компонентов, увеличивая адреса памяти
  • Адрес первого компонента совпадает с начальным адресом структуры
  • неназванные битовые поля могут быть включены в структуру в требуемые выравнивания адресов соседних элементов

Проблемы, связанные с выравниванием элементов:

  • Различные компьютеры строят ребра объектов по-разному
  • Различные ограничения ширины битового поля
  • Компьютеры отличаются тем, как хранить байты в слове (Intel 80x86 и Motorola 68000)

Как работает выравнивание:

  • T объем, занимаемый структурой, вычисляется как размер выровненного одиночного элемента массива таких структур. Структура должна заканчиваться так, чтобы первый элемент следующей ниже структуры не нарушал требования выравнивания

ps. Более подробную информацию можно найти здесь: «Сэмюэл П. Харбисон, Гай Л. Стейле CA Reference, (5.6.2 - 5.6.7) "

10
задан Ashley Davis 22 September 2008 в 09:43
поделиться

1 ответ

Попытка:

  GLint depth;
  glGetIntegerv (GL_MODELVIEW_STACK_DEPTH, &depth);

Перечисления для других стеков:

  GL_MODELVIEW_STACK_DEPTH       
  GL_PROJECTION_STACK_DEPTH      
  GL_TEXTURE_STACK_DEPTH         

При использовании мультитекстурирования у Вас есть больше чем одна стопка матрицы структуры для запросов. Для этого установите текущую единицу структуры через glActiveTexture();.

14
ответ дан 3 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: