это связано с Настройка постоянного буфера с использованием SlimDX
У меня есть шейдер, который очень прост и выглядит так:
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);
}
контекст - это мое устройство. ImmediateContext и device - это мое устройство Direct3D.Однако, когда он работает, он рисует мои пиксели черным, несмотря на то, что он прошел через белый цвет, поэтому ясно, что значение не устанавливается.
У кого-нибудь есть идеи?