我的着色器有点结构性问题。基本上我希望能够处理多种潜在不同类型的灯,但我不确定实现它的最佳方法是什么。到目前为止,我一直在使用统一块:
layout (std140) uniform LightSourceBlock
{
int type;
vec3 position;
vec4 color;
// Spotlights / Point Lights
float dist;
// Spotlights
vec3 direction;
float cutoffOuter;
float cutoffInner;
float attenuation;
} LightSources[12];
它有效,但有几个问题:
灯光可以是3种类型之一(聚光灯,点光源,定向灯),它们需要不同的属性(并非所有类型都不需要)
每盏灯都需要一个sampler2DShadow(点灯的samplerCubeShadow),不能用于统一的块。
我正在做的方式有效,但肯定有更好的方法来处理这样的事情?这通常是怎么做的?