首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DX11最小缓冲区大小

DX11最小缓冲区大小
EN

Stack Overflow用户
提问于 2013-05-08 14:01:26
回答 1查看 1.3K关注 0票数 1

在创建了几个常量缓冲区之后,其中一些缓冲区开始无法正确初始化。

常量缓冲区是使用名为MiscStream的结构创建的,该结构的定义如下:

代码语言:javascript
复制
struct MiscStream {
    int rw,rh;
    float shine_factor;
    float dist_factor;
    int random_number;
};

并通过以下方式进行初始化:

代码语言:javascript
复制
D3D11_BUFFER_DESC dx_misc_buffer_desc;
ID3D11Buffer* dx_misc_buffer;

ZeroMemory(&dx_misc_buffer_desc,sizeof dx_misc_buffer_desc);

    dx_misc_buffer_desc.BindFlags=D3D11_BIND_CONSTANT_BUFFER;
    dx_misc_buffer_desc.Usage=D3D11_USAGE_DYNAMIC;
    dx_misc_buffer_desc.ByteWidth=sizeof(MiscStream);
    dx_misc_buffer_desc.StructureByteStride=0;
    dx_misc_buffer_desc.CPUAccessFlags=D3D11_CPU_ACCESS_WRITE;
    dx_misc_buffer_desc.MiscFlags=0;

hr=dx_device->CreateBuffer(&dx_misc_buffer_desc,NULL,&dx_misc_buffer);

hr将作为E_INVALIDARG返回,程序将失败。

许多其他常量缓冲区都是以这种方式设置的,但它们的结构中都有向量和矩阵。

我将MiscStruct更改为

代码语言:javascript
复制
struct MiscStream {
    D3DXVECTOR3 __r;
    int rw,rh;
    float shine_factor;
    float dist_factor;
    int random_number;
};

而且它工作正常,没有错误。

是否有最小结构尺寸?这是怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-08 14:15:59

来自MSDN

对于常量缓冲区( BindFlags of D3D11_BUFFER_DESC设置为D3D11_BIND_CONSTANT_BUFFER),必须将D3D11_BUFFER_DESC的ByteWidth值设置为16的倍数,并且小于或等于D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT。

所以你可能没有通过“16的倍数”的限制。根据您的打包设置,这可能与将单个元素的大小相加有所不同,因此请检查sizeof()以了解实际的结构大小。

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

https://stackoverflow.com/questions/16433685

复制
相关文章

相似问题

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