2017-07-01 4 views
0

Actuellement, WebGL sur mon navigateur ne supporte que 1024 * 4 octets uniformes. Cependant, je peux mettre les données dans une texture à la place. Quelle est la différence entre stocker des données dans un tableau uniforme et dans une texture? Quelle est la taille de uniform sampler2D?Pourquoi WebGL met-il des limites sur la taille uniforme?

Répondre

1

Les textures sont échantillonnées, les uniformes ne le sont pas. Lorsque vous appelez texture2D(someSampler, someUV), le GPU peut calculer une valeur en choisissant parmi 2 N mips, puis en lisant jusqu'à 8 pixels, 4 à partir de chaque mip, et en interpolant linéairement entre eux. (jusqu'à 16 pixels s'il s'agit d'une texture 3D dans WebGL2). Pour cette raison, il est plus lent à lire à partir d'une texture que d'un uniforme. On pourrait dire "bien j'ai désactivé l'interpolation linéaire" mais la texture est toujours lue avec un sampler et il y a un nombre limité d'échantillonneurs (comme même les GPU haut de gamme n'ont que 32 samplers)