Я занимаюсь разработкой игрового движка, и он будет работать только на современном оборудовании (модель Shader 4+). Я полагаю, что к тому времени, когда я закончу с этим, это не будет таким необоснованным требованием.
У меня вопрос: сколько текстур я могу связать одновременно на современной видеокарте? 16 будет достаточно. Можно ли ожидать, что большинство современных видеокарт будут поддерживать такое количество текстур?
Мой GTX 460 поддерживает 32, но я понятия не имею, является ли он представителем большинства современных видеокарт.
Ответы:
Количество текстур, которые можно привязать к OpenGL, не равно 32 или 16 . Это не то, что вы получаете
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
. Эта функция извлекает количество текстур, к которым может обращаться фрагментный шейдер .Видите, у каждого шейдера есть свой предел количества текстур, которые он может использовать . Тем не менее, есть также общее количество текстур, которые можно использовать, точка. Это определяется (в OpenGL)
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
.Таким образом, есть два ограничения: текстуры для каждой стадии и текстуры для общей привязки.
OpenGL 3.x определяет минимальное число для предельного уровня, равное 16, поэтому аппаратное обеспечение не может иметь менее 16 текстур на этап. У него может быть более высокий предел, но вы знаете, что вы получите не менее 16. 3.x определяет минимальное число для общего количества текстур как 48. AKA: 16 * 3 этапа. Аналогично, GL 4.x определяет числа, равные 16 текстурам на стадию и 96 текстурам с общей привязкой (то есть: 16 * 6 стадий, включая вычислительные шейдеры).
Опять же, это минимальные цифры. Аппаратное обеспечение может (и может) меняться.
Что касается конкретного оборудования, вы можете ожидать, что любое оборудование класса DX10 будет соответствовать этим цифрам. У оборудования класса DX11 есть некоторая разница; У чипов NVIDIA (GeForce 4xx +) и AMD более высокого уровня (иначе говоря, GCN-ядер) может быть больше, чем 16 на каждый этап.
источник
Я считаю, что 32 - это максимальное количество текстур, которые могут быть связаны в настоящее время. Насколько я могу судить, даже в серии 8800 было 32 текстурных блока.
Насколько я знаю, для поддержки OpenGL 4.x вам понадобится карта Fermi или более новая карта NVIDIA (или соответствующая карта AMD), все модели более высокого уровня, кажется, имеют 32 устройства, тогда как карты самого низкого уровня (например, GT 430) ) имеют 16. Однако, глядя на спецификации AMD, они перечисляют числа, подобные 80 или 128 единицам текстуры, но перечисляют 32 единицы цвета ROP, которые, кажется, оставались постоянными на протяжении поколений.
GTX 480, с другой стороны, указан с 60 текстурными блоками и 48 блоками ROP, в то время как младшие карты, такие как 430, как сообщается, имеют только 16 текстурных блоков и 4 ROP. Так что, в целом, я не совсем уверен, что то число, которое вы на самом деле ищете.
Однако вы можете проверить количество текстурных блоков, доступных для рендеринга конвейера с нефиксированными функциями
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
, поэтому, если у вас есть доступ к некоторому разнообразному оборудованию, вы можете проверить сами.РЕДАКТИРОВАТЬ: этот сайт позволяет сравнивать возможности openGL всех видов видеокарт, о которых сообщалось, с указанием нужных вам чисел: http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580
PS: AMD и nvidia недавно представили «текстуры без привязки» (у amd другое название), что позволяет использовать большое количество текстур без привязки их к элементам textutre, на данный момент это доступно только в openGL.
источник