2016-08-15 6 views
0

En GLM, nous avons un opérateur surchargé '*' pour multiplier les matrices.Lequel est le meilleur dans la multiplication matricielle? L'opérateur surchargé * de GLM ou utilisant directement les shaders

Nous pouvons faire la multiplication de matrices comme celui-ci avec l'aide de cet opérateur dans GLM:

glm::mat4 MVP = Projection * View * Model; 
//after that pass MVP to uniform 'MVP' 

Mais d'une autre manière, nous pouvons passer la projection, vue et le modèle à trois uniformes différents et faire la multiplication dans le programme de shaders.

GLM s'exécute sur le processeur mais les programmes de shaders s'exécutent sur le GPU. En raison de l'architecture de GPU, nous pouvons effectuer des opérations matricielles plus rapidement que CPU dans les programmes shader.

Mais je ne peux pas en être sûr. Quel chemin est plus rapide?

+2

mesure toujours. Cela dépend beaucoup de votre code. – Rakete1111

+0

Merci, vous illuminez les côtés sombres de mon cerveau. –

Répondre

1

Idéalement on les passerait séparément si vous en avez besoin séparément dans votre shader à d'autres fins. Si tout ce dont vous avez besoin est MVP, il vaut mieux multiplier et transmettre un MVP en tant que matrice unique à votre shader. Ce qui est meilleur, dépend beaucoup du nombre de sommets que vous affichez, et si votre rendu a plusieurs appels draw avec peu de sommets ou peu d'appels avec beaucoup de sommets.

Toujours la multiplication sur CPU serait meilleure depuis son appel une fois par tirage au lieu d'une fois par sommet. Si les valeurs doivent varier entre les shaders, alors il faut effectuer la multiplication dans le shader.

Je pense que j'étais trop rapide pour répondre, mais cela pourrait être très similaire à la question Should I calculate matrices on the GPU or on the CPU?

+0

La plupart des cas? Quelles sont les exceptions? –

+0

Si vous avez beaucoup de multiplications matricielles et que vous ne faites que des points avec des matrices différentes pour chaque point et que chaque point est un appel nul, la multiplication dans la méthode GPU peut être plus rapide si le processeur effectue déjà d'autres calculs physiques. rendre chaque image. – Harish

+0

Comme les effets de particules? –