c++ - D3D10 常量缓冲区不工作

标签 c++ directx buffer hlsl direct3d11

我正在使用常量缓冲区将数据传输到我的像素着色器

问题是在运行时,对于 float4 成员的 x、y、z 和 w,缓冲区在着色器中包含 0,无论什么数据更新到缓冲区

结构定义如下:

// (C++)
struct Buffer
{
    XMMATRIX mvp_;
    XMFLOAT4 rgba_;
    int usemvp_;
};


// HLSL
cbuffer Buffer : register( b0 )
{
    matrix mvp_;
    float4 rgba_;
    int usemvp_;
};

非常感谢任何帮助

最佳答案

您需要填充结构以使其 16 字节对齐。

// (C++)
struct Buffer
{
    XMMATRIX mvp_;
    XMFLOAT4 rgba_;
    int usemvp_;
    float padding[3];
};

此外,您还必须确保将常量缓冲区设置到正确的着色器阶段,即 VSSetConstantBuffers 与 PSSetConstantBuffers。

关于c++ - D3D10 常量缓冲区不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782061/

相关文章:

c++ - 在 C++ 中寻找 strtok() 的替代方案

c# - SlimDX Device.Reset 崩溃并出现 "D3DERR_INVALIDCALL: Invalid call (-2005530516)"错误

c++ - 如何存储 LPD3DXSPRITE 对象的 vector ?

c++ - 从 float 组创建缓冲区

Emacs:如何默认切换 Buffer-menu-files-only

c++ - 在 C++ 中模仿类似 Golang 的接口(interface)

c++ - c++ 中内置数据类型的大小是否在源代码级别进行管理?

c++ - 在 gcc 5.1.0 中注册一个 GIMPLE pass

visual-studio - 如何在没有 Visual Studio 的情况下对 DirectX 进行编程

c++ - 如何从 char [] 创建指向缓冲区的指针