显然,着色器语言(如HLSL、Cg和GLSL)具有本地支持此类功能的能力,但是,我正在寻找的是至少可以编译为SSE而不是使用自动矢量化,但具有内置矢量操作支持的语言。是否存在这样的编程语言?
以下是一个 Cg 着色器的示例,它执行聚光灯操作,在语法方面,这可能是最接近我所需要的内容。
float4 pixelfunction(
output_vs IN,
uniform sampler2D texture : TEX0,
uniform sampler2D normals : TEX1,
uniform float3 light,
uniform float3 eye ) : COLOR
{
float4 color = tex2D( texture, IN.uv );
float4 normal = tex2D( normals, IN.uv ) * 2 - 1;
float3 T = normalize(IN.T);
float3 B = normalize(IN.B);
float3 N =
normal.b * normalize(IN.normal) +
normal.r * T +
normal.g * B;
float3 V = normalize(eye - IN.pos.xyz);
float3 L = normalize(light - IN.pos);
float3 H = normalize(L + V);
float4 diffuse = color * saturate( dot(N, L) );
float4 specular = color * pow(saturate(dot(N, H)), 15);
float falloff = dot(L, normalize(light));
return pow(falloff, 5) * (diffuse + specular);
}
这种语言中必不可少的东西包括:
- 内置的 swizzle 操作符
- 向量运算(点乘,叉乘,归一化,饱和,反射等)
- 支持自定义数据类型(结构体)
- 动态分支会很好用(for 循环,if 语句)