You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.2 KiB

// glsl -> Cg
// many things can be covered here, but...
// not possible by typedef or #define are:
// (at least not with the limited preprocess abilities of Cg)
//
// array initializers
// glsl: type arr[n] = type[](a,b,c,...);
// Cg: type arr[n] = {a,b,c,...}
//
// vec initializers with 1 arg:
// glsl: vec4(x)
// Cg: vec4i(x) (see helpers below - or float4(x,x,x,x))
//
// matrix multiplications
// glsl: m*v
// Cg: mul(m,v)
//
// matrix initializers (column first in glsl)
// glsl: mat4(a,b,c,...)
// Cg: transpose(mat4(a,b,c,...))
//
// in mainGeom(...) vertAttrib[] not initialized
// so either inout as argument, or actually init them in mainGeom()
//
float4 vec4i(float x) { return float4(x,x,x,x); }
float4 vec4i(float x, float3 v) { return float4(x,v.x,v.y,v.z); }
float4 vec4i(float3 v, float x) { return float4(v.x,v.y,v.z,x); }
float4 vec4i(float2 v1, float2 v2) { return float4(v1.x,v1.y,v2.x,v2.y); }
float3 vec3i(float x) { return float3(x,x,x); }
float3 vec3i(float2 v, float x) { return float3(v.x,v.y,x); }
float3 vec3i(float x, float2 v) { return float3(x,v.x,v.y); }
float2 vec2i(float x) { return float2(x,x); }
typedef float2 vec2;
typedef float3 vec3;
typedef float4 vec4;
typedef int4 ivec4;
typedef int3 ivec3;
typedef int2 ivec2;
typedef float4x4 mat4;
typedef float3x3 mat3;
typedef float2x2 mat2;
#define atan(a,b) atan2(a,b)
#define texture(a,b) tex2D(a,b)
//#define texture(a,b,c) tex2Dbias(a,float4(b,0,c))
#define textureLod(a,b,c) tex2Dlod(a,float4(b,0,c))
//#define textureLod(a,b,c) tex2D(a,b)
//#define texelFetch(a,b,c) tex2Dfetch(a,int4(b,0,c))
#define texelFetch(a,b,c) tex2Dlod(a,float4((float2(b)+.5)/float2(textureSize(a,0)),0,c))
//#define GET_VARARG_MACRO(_1,_2,_3,_4,NAME,...) NAME
//#define vec4(...) GET_VARARG_MACRO(__VA_ARGS__, vec4i, vec4i, vec4i, vec4i, vec4)(__VA_ARGS__)
//#define vec4 float4
//#define vec3 float3
//#define vec2 float2
//#define ivec4 int4
//#define ivec3 int3
//#define ivec2 int2
//#define mat4 float4x4
//#define mat3 float3x3
//#define mat2 float2x2
#define mix(a,b,c) lerp(a,b,c)
#define fract(a) frac(a)
#define mod(a,b) fmod(a,b)
#define textureSize(a,b) a##_TexelSize.zw
//#define smoothstep(a,b,c) step(.5*(a+b),c)