首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >顶点缓冲区描述如何读取DirectX 11中的输入数据?

顶点缓冲区描述如何读取DirectX 11中的输入数据?
EN

Stack Overflow用户
提问于 2022-01-22 20:25:06
回答 1查看 89关注 0票数 0

我创建了一个Math,它保存着顶点坐标的位置,我想知道DirectX如何能够在不知道成员值的名称的情况下读取结构的成员,或者能够使用它们作为输入,尽管它们是私有的。

示例:

代码语言:javascript
复制
//The values can be used for input despite being private
class Math3
{
public:
    Math3() {}
    Math3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
private:
    float x;
    float y;
    float z;
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 20:31:06

private vs public只适用于C++代码,并由编译器强制执行。Math3实例只是内存中12个字节的块,没有特殊的硬件保护。

换句话说,从“内存中”的角度来看,如果Math3是:

代码语言:javascript
复制
class Math3
{
public:
    float x;
    float y;
    float z;
};

// this is the same as
struct Math3
{
    float x;
    float y;
    float z;
}

如果在类上执行sizeof,则相同。

顶点缓冲区只是一个内存块。GPU在创建输入布局时,从输入布局描述中了解数据类型、大小、填充等信息。

代码语言:javascript
复制
const D3D11_INPUT_ELEMENT_DESC InputElements[] =
{
    { "SV_Position", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};

如果向您的Math3类添加了一个virtual方法,那么内存的布局将发生变化,它将不再“仅起作用”。

输入汇编程序获取主动输入布局,并使用它解析一个或多个顶点缓冲区中的顶点信息。因此,它能够理解各种复杂的布局,甚至能够在运行时从多个缓冲区合并。

最后,重要的是,对于输入布局所描述的顶点数据,代码使用相同的“内存中”组织,并且顶点缓冲区本身也尊重该组织.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70816850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档