代码之家  ›  专栏  ›  技术社区  ›  zackery.fix

数组对可编程图形管线的顶点元素数据有效吗?

  •  2
  • zackery.fix  · 技术社区  · 16 年前

    为了回应我之前在这里发布的Qeustion:

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

    如果我说的是具有浮点值数组的顶点结构,例如:

    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;
        }
    }
    

    顶点结构是否可以发送到顶点缓冲区(使用OpenGL或DirectX)?数组是否包含任何其他字节数据,或者只包含浮点值的数据?就像如果我(在DirectX中)使用声明中转换的顶点一样,我可以将顶点发送到缓冲区,并且所有将发送的都是浮点值,或者数组是否包含可能破坏我的着色程序的其他信息?

    2 回复  |  直到 16 年前
        1
  •  0
  •   Kornel Kisielewicz    16 年前

    我不是C程序员,但这里看起来您在Vertex结构中存储了一个数组引用(指针),因此Vertex数组就是一个指针数组。图形API需要连续的浮点序列。

    尝试:

    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;
        }
    }
    
        2
  •  1
  •   feal87    16 年前

    不,别这样。结构可能没有正确对齐或有额外的数据……考虑到.NET框架可能会发生变化,而且这些功能不能得到保证,因此通常不安全。

    最好的办法是将数据准备到float数组[]中,并使用fixed关键字获取指针。这样我就可以保证(我自己做的)一切都很好。 无论如何,不要试图做额外的事情来优化这些琐碎的事情。它们永远不会成为你的应用程序/游戏的瓶颈。(甚至不重要)

    做一些使代码更易于阅读和维护的事情。

    记住,结构和数组的速度是不同的,这取决于您在做什么。一般来说,结构在随机访问上更快,数组在线性访问上更快,因此,如果您有一些应用程序非常密集的部分(如软件Skinner),请尝试根据您的需要选择正确的部分。

    推荐文章