1
這是關係到Setting up the constant buffer using SlimDX在SlimDX傳遞參數給定緩衝區的Direct3D 11
我有個着色器,這是非常簡單的,看起來像這樣:
cbuffer ConstantBuffer : register(b0)
{
float4 color;
}
float4 VShader(float4 position : POSITION) : SV_POSITION
{
return position;
}
float4 PShader(float4 position : SV_POSITION) : SV_Target
{
return color;
}
它所做的就是應用的顏色通過常量緩衝區傳遞給每個繪製的像素,非常簡單。
在我的代碼,我定義我的常量緩衝區如下:
[StructLayout(LayoutKind.Explicit)]
struct ConstantBuffer
{
[FieldOffset(0)]
public Color4 Color;
}
在這裏設置它,在我的渲染循環。
ConstantBuffer cb = new ConstantBuffer();
cb.Color = new Color4(Color.White);
using (DataStream data = new DataStream(Marshal.SizeOf(typeof(ConstantBuffer)), true, true))
{
data.Write(cb);
data.Position = 0;
D3D.Buffer buffer = new D3D.Buffer(device,data, new BufferDescription
{
Usage = ResourceUsage.Default,
SizeInBytes = Marshal.SizeOf(typeof(ConstantBuffer)),
BindFlags = BindFlags.ConstantBuffer
});
context.UpdateSubresource(new DataBox(0, 0, data), buffer, 0);
}
上下文是我的device.ImmediateContext和設備是我的Direct3D設備。然而,當它運行時,它將我的像素繪製爲黑色,儘管已經通過了白色的顏色,所以顯然沒有設置值。
有人有什麼想法嗎?
完美,非常感謝! – 2011-02-16 15:40:14