Estou desenvolvendo um mecanismo de jogo e ele só funciona em hardware moderno (Shader model 4+). Eu acho que, quando eu terminar, isso não será um requisito tão irracional.
Minha pergunta é: quantas texturas posso vincular de uma vez em uma placa gráfica moderna? 16 seria suficiente. Posso esperar que a maioria das placas gráficas modernas suporte esse número de texturas?
Minha GTX 460 parece suportar 32, mas não faço ideia se isso é representativo da maioria das placas de vídeo modernas.
Respostas:
O número de texturas que podem ser vinculadas ao OpenGL não é 32 ou 16 . Não é o que você recebe
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
. Essa função recupera o número de texturas que podem ser acessadas pelo shader de fragmento .Veja, cada sombreador tem seu próprio limite do número de texturas que pode usar . No entanto, há também um número total de texturas que podem ser usadas, ponto final. Isso é definido (no OpenGL) por
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
.Portanto, existem dois limites: as texturas por estágio e as texturas-total-bound.
O OpenGL 3.x define o número mínimo para o limite por estágio ser 16, portanto o hardware não pode ter menos de 16 texturas por estágio. Pode ter um limite mais alto, mas você sabe que obtém pelo menos 16. 3.x define o número mínimo para o limite total de texturas como 48. AKA: 16 * 3 estágios. Da mesma forma, o GL 4.x define os números como 16 texturas por estágio e 96 texturas com limite total (ou seja: 16 * 6 estágios, incluindo sombreadores de computação).
Novamente, esses são os números mínimos . O hardware pode (e faz) variar.
Quanto ao hardware específico, você pode esperar que qualquer hardware da classe DX10 corresponda a esses números. O hardware da classe DX11 tem alguma variação; Os chips NVIDIA (GeForce 4xx +) e AMD de ponta (também conhecidos como núcleos GCN) podem ter mais do que os 16 por estágio.
fonte
Acredito que 32 é o número máximo de texturas que podem ser vinculadas atualmente. Até onde eu sei, até a série 8800 tinha 32 unidades de textura.
Até onde eu sei, para suporte ao openGL 4.x, você precisará de uma placa nvidia Fermi ou mais recente (ou placa amd correspondente), todos os modelos de ponta parecem ter 32 unidades, enquanto as placas finais mais baixas (GT 430, por exemplo ) têm 16. No entanto, olhando as folhas de especificações da AMD, listam números como 80 ou 128 unidades de textura, mas listam 32 unidades ROP coloridas que parecem ter permanecido constantes por gerações.
O GTX 480, por outro lado, está listado com 60 unidades de textura e 48 unidades de ROP, enquanto placas de extremidade inferior como a 430 supostamente têm apenas 16 unidades de textura e 4 in ROP. Então, no geral, não estou realmente convencido de que nenhum desses seja o número que você está procurando.
Você pode verificar o número de unidades de textura disponíveis para renderização de pipeline de função não fixa com
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
, no entanto, se você tiver acesso a algum hardware diverso, poderá verificar a si mesmo.EDIT: este site permite comparar os recursos reportados do openGL de todos os tipos de placas de vídeo, que devem fornecer os números necessários: http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580
PS: A AMD e a nvidia introduziram recentemente "texturas sem vinculação", (amd tem um nome diferente), que permite usar um grande número de texturas sem vinculá-las a unidades de texto, no momento, isso está disponível apenas no openGL.
fonte