OpenGL着色器 - 构建类似类型的数据块

时间:2014-01-31 15:31:42

标签: opengl glsl shader fragment-shader

我的着色器有点结构性问题。基本上我希望能够处理多种潜在不同类型的灯,但我不确定实现它的最佳方法是什么。到目前为止,我一直在使用统一块:

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),不能用于统一的块。

我正在做的方式有效,但肯定有更好的方法来处理这样的事情?这通常是怎么做的?

0 个答案:

没有答案