Проблемы с начинающим проектом рендеринга треугольников openGL

Ответ так длинный, что я не могу подвести итог всему, но:

  • , например, макросы не обеспечивают безопасность типа, а функциональные шаблоны: нет возможности для проверки компилятором что макропараметры являются совместимыми типами - также в момент создания шаблона функции компилятор знает, определяют ли int или float шаблоны operator +
  • дверь для метапрограммирования (короче говоря, , оценивая вещи и принимая решение во время компиляции): во время компиляции можно узнать, является ли тип интегральным или с плавающей точкой; независимо от того, является ли это указателем или является ли он константным, и т. д. см. «черты типа» в следующих шаблонах c ++ 0x
  • имеют частичную специализацию
  • имеют явную полную специализацию, в вашем примере add(5, 3); может быть реализовано иначе, чем add(5, 3);, что невозможно с макросами
  • . Макрос не имеет области
  • #define min(i, j) (((i) < (j)) ? (i) : (j)) - параметры i и j оцениваются дважды. Например, если какой-либо параметр имеет постинкрементную переменную, инкремент выполняется два раза
  • , поскольку макросы расширяются препроцессором, сообщения об ошибках компилятора будут ссылаться на расширенный макрос, а не на само определение макроса. Кроме того, макрос будет отображаться в расширенной форме во время отладки
  • и т. Д. ...

Примечание. В некоторых редких случаях я предпочел полагаться на переменные макросы, потому что есть нет такой вещи, как вариативные шаблоны, пока c ++ 0x не станет основным. C ++ 11 является живым.

Ссылки:

0
задан Cole Bisaccia 2 March 2019 в 02:38
поделиться

1 ответ

Этот вызов:

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));

… переопределяет предыдущий вызов и привязывает атрибут 0 (атрибут позиции) к вашим данным цвета. У первого аргумента 1 должна быть правильная привязка.

0
ответ дан Nico Schertler 2 March 2019 в 02:38
поделиться
Другие вопросы по тегам:

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