我正在使用C++和Direct3D11开发游戏引擎,现在想向场景中添加可变数量的灯光。到目前为止,我已经成功添加并渲染了一些简单的灯光,但它们的数量是预先知道并编码在着色器程序中的。
在shader.fx文件中:
这个可以正常运行。但如果我尝试:
使灯光数量根据游戏中发生的情况而变化,这种方法行不通。我知道我可以在应用程序一开始就给
有人知道如何解决这个问题吗?提前感谢您。
在shader.fx文件中:
static const int LightsCount= 4;
struct NF3D_LIGHT
{
// Members...
};
cbuffer Light : register(b5)
{
NF3D_LIGHT light[LightsCount];
};
...
// And the pixel shader function:
float4 PS(PS_INPUT input) : SV_Target
{
for(int i = 0; i < LightsCount; i++)
{
// Process each light and return the final pixel colour
}
}
这个可以正常运行。但如果我尝试:
cbuffer LIGHTS_COUNT : register(b13)
{
int LightsCount;
}
使灯光数量根据游戏中发生的情况而变化,这种方法行不通。我知道我可以在应用程序一开始就给
LightsCount
赋一个大值,并将灯光添加到数组中,但我认为这种方法很复杂,固定且效率低下。有人知道如何解决这个问题吗?提前感谢您。