Estoy desarrollando un motor de juego, y solo funcionará en hardware moderno (modelo Shader 4+). Supongo que, para cuando termine, no será un requisito tan irracional.
Mi pregunta es: ¿cuántas texturas puedo unir a la vez en una tarjeta gráfica moderna? 16 serían suficientes. ¿Puedo esperar que la mayoría de las tarjetas gráficas modernas admitan esa cantidad de texturas?
Parece que mi GTX 460 admite 32, pero no tengo idea si es representativa de la mayoría de las tarjetas de video modernas.
Respuestas:
El número de texturas que se pueden vincular a OpenGL no es 32 o 16 . No es con lo que obtienes
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
. Esa función recupera la cantidad de texturas a las que puede acceder el sombreador de fragmentos .Mira, cada sombreador tiene su propio límite de la cantidad de texturas que puede usar . Sin embargo, también hay un número total de texturas que se pueden usar, punto. Esto se define (en OpenGL) por
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
.Así que hay dos límites: las texturas por etapa y las texturas-total-unido.
OpenGL 3.x define el número mínimo para que el límite por etapa sea 16, por lo que el hardware no puede tener menos de 16 texturas por etapa. Puede tener un límite más alto, pero sabes que obtienes al menos 16. 3.x define el número mínimo para el límite total de texturas como 48. AKA: 16 * 3 etapas. Del mismo modo, GL 4.x define que los números son 16 texturas por etapa y 96 texturas con límite total (es decir: 16 * 6 etapas, incluidos los sombreadores de cálculo).
De nuevo, estos son los números mínimos . El hardware puede (y varía).
En cuanto a hardware específico, puede esperar que cualquier hardware de clase DX10 coincida con estos números. El hardware de clase DX11 tiene alguna variación; NVIDIA (GeForce 4xx +) y los chips AMD de gama alta (también conocidos como núcleos GCN) pueden tener más de 16 por etapa.
fuente
Creo que 32 es el número máximo de texturas que se pueden vincular actualmente. Por lo que puedo decir, incluso la serie 8800 tenía 32 unidades de textura.
Hasta donde sé, para el soporte de openGL 4.x necesitará una tarjeta Fermi o una tarjeta nvidia más nueva (o la tarjeta amd correspondiente), los modelos de gama alta parecen tener 32 unidades, mientras que las tarjetas de gama más baja (GT 430, por ejemplo ) tienen 16. Sin embargo, mirando las hojas de especificaciones de AMD, enumeran números como 80 o 128 unidades de textura, pero enumeran 32 unidades ROP de color que parecen haber permanecido constantes a través de las generaciones.
La GTX 480, por otro lado, está listada con 60 unidades de textura y 48 unidades de ROP, mientras que las tarjetas de gama baja como la 430 solo tienen 16 unidades de textura y 4 inicios de ROP. Entonces, en general, no estoy realmente convencido de que ninguno de esos sea el número que realmente está buscando.
Sin
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
embargo, puede verificar el número de unidades de textura disponibles para la representación de canalizaciones de funciones no fijas , por lo que si tiene acceso a algún hardware diverso, puede verificarlo usted mismo.EDITAR: este sitio le permite comparar las capacidades de OpenGL reportadas de todo tipo de tarjetas de video, que deberían darle los números que necesita: http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580
PD: AMD y nvidia han introducido recientemente "texturas sin enlace" (amd tiene un nombre diferente) que le permite usar grandes cantidades de texturas sin vincularlas a unidades de texturas, por el momento esto solo está disponible en openGL.
fuente