2010-02-03 5 views
2

En réponse à ma précédente qeustion posté ici:Un tableau est-il valide pour les données d'élément de sommet pour un pipline graphique programmable?

What is a good code structure for api-independant vertex processing?

Si je dire une structure de sommet avec un tableau de valeurs à virgule flottante telles que:

public struct Vertex 
{ 
    float[] array = new float[4]; 

    public Vertex(float x, float, y, float z, float w) 
    { 
     array[0] = x; array[1] = y; array[2] = z; array[3] = w; 
    } 
} 

pourrait que la structure de sommet soit envoyé à un tampon de vertex (utilisant OpenGL ou DirectX)? Un tableau contient-il d'autres données d'octets ou contient-il uniquement les données des valeurs à virgule flottante? Comme si j'étais (dans DirectX) utiliser ce verte comme Transformed dans une déclaration, puis-je envoyer le vertex à un tampon et tout ce qui sera envoyé est les valeurs à virgule flottante, ou le tableau contiendra-t-il d'autres informations qui pourraient casser mon programme shader?

Répondre

0

Je ne suis pas un programmeur C#, mais il semble que vous stockez une référence de tableau (pointeur) dans la structure Vertex, donc un tableau de Vertex serait un tableau de pointeurs. Une API graphique nécessite une séquence continue de flottants.

Essayez:

public struct Vertex 
{ 
    public fixed float array[4]; 

    public Vertex(float x, float, y, float z, float w) 
    { 
     array[0] = x; array[1] = y; array[2] = z; array[3] = w; 
    } 
} 
+0

Je suppose que votre droit: /, mais que se passe-t-il si le contenu du tableau sont tous struct, ie. Type de valeur ? –

+0

@qc - Honnêtement, je ne suis pas un programmeur C#:> –

+0

Goch'ya;), désolé .. vraiment très désireux de le comprendre :( –

1

Non, ne le faites pas. la structure peut ne pas être correctement alignée ou avoir des données supplémentaires ... ce n'est généralement pas une chose sûre à faire étant donné que le framework .net peut changer et que ces fonctionnalités ne sont pas garanties.

Votre meilleur pari est de préparer les données dans float array [] et de ramasser le pointeur en utilisant le mot-clé fixe. de cette façon, je peux ASSURE (je le fais par moi-même) qui fonctionne bien. De toute façon, n'essayez pas de faire des choses supplémentaires pour optimiser ces petites choses. Ils ne seront jamais le goulot d'étranglement dans votre application/jeu. (pas même vraiment important)

Faites ce qui rend votre code plus lisible-maintanable. Rappelez-vous quand même que la vitesse de struct vs array est différente en fonction de ce que vous faites. Généralement les structures sont plus rapides sur un accès aléatoire, les tableaux sont plus rapides sur un accès linéaire, donc si vous avez une partie d'application vraiment intensive (comme un skinner logiciel) essayez de choisir le bon pour votre besoin.

+0

Eh bien, ce n'est pas une question de vitesse, mais plutôt si c'est possible, j'essaie de trouver la meilleure façon de structurer les éléments d'une structure vertex, mais d'une manière qui permette à mes utilisateurs de créer des sommets personnalisés sans que je sache comment les données sont arrangées (c'est-à-dire le traitement de vertex abstrait) .Cette question ne fait que faire partie de ce que j'ai à dire sur la meilleure approche à adopter, quelle que soit l'approche que j'utilise. n performance (par tous les moyens necc.). –