小技巧:
1.可以利用宏定义来控制着色器所使用的uniform块和C++中结构体定义的不同地方进行分离。
2.可以在应用程序中控制要定义和使用哪些宏定义来在编译着色器的时候动态设置开关。因为着色器的源码最后可以由多个字符串进行拼接而成。
3.在着色器中设置一个标识符,之后在程序中进行替换
例如 #UNIFORMS。
#UNIFORMS
//设置输出每个面片的控制点数目
layout (vertices = 4) out;
uniform.h
#ifndef __cplusplus
precision mediump float;
#define sdk_bool bool
#define SDK_BOOL bool
#define SDK_VEC2 vec2
#define SDK_VEC3 vec3
#define SDK_VEC4 vec4
#define SDK_MAT4 mat4
layout (std140, binding = 1) uniform
#else
struct
#endif
TessellationParams
{
float innerTessFactor[2];
float outerTessFactor[4];
SDK_MAT4 mvp;
#ifdef CPP //这个在应用程序端设置
TessellationParams()
{
for(int i = 0; i<4;i++)
{
if(i<2)
{
innerTessFactor[i]=1.0f;
outerTessFactor[i]=1.0f;
}else
{
outerTessFactor[i] = 1.0f;
}
}
}
#endif
};