【发布时间】:2014-06-18 19:34:45
【问题描述】:
我是 DirectX11 的新手,很抱歉提出一个无聊的问题。 我有一个像素着色器:
struct PixelShaderInput
{
float4 pos : SV_POSITION;
float2 texCoord : TEXCOORD0;
};
Texture2D s_texture : register(t0);
SamplerState s_sampleParams
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
};
float4 main(PixelShaderInput input) : SV_TARGET
{
float4 t = s_texture.Sample(s_sampleParams, input.texCoord);
return t;
}
现在我想为我的着色器添加一种颜色:
struct PixelShaderInput
{
float4 pos : SV_POSITION;
float2 texCoord : TEXCOORD0;
};
Texture2D s_texture : register(t0);
float4 s_color;
SamplerState s_sampleParams
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
};
float4 main(PixelShaderInput input) : SV_TARGET
{
float4 t = s_texture.Sample(s_sampleParams, input.texCoord);
return t * s_color;
}
如何在 C++ 代码中设置s_color?我必须使用m_d3dContext->PSSetConstantBuffers 吗?在这种情况下我应该改变
`float4 s_color;`
到
cbuffer ColorOnlyConstantBuffer : register(b0)
{
float4 m_color;
};
,对吧?
或者我可以保留简单的定义 float4 s_color; 并以其他方式从 C++ 设置它?
【问题讨论】:
-
使用常量缓冲区确实是可行的方法,msdn.microsoft.com/en-us/library/windows/desktop/… 解释了如何设置它(请注意,在您的情况下,它当然需要如您所说的那样绑定到您的像素着色器)。
标签: c++ hlsl directx-11