合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## [基本类型](https://ihavenolimitations.xyz/qihangkong/glslang-spec/1704656) > 定义:基本类型是由语言的某些关键字定义的类型 > OpenGl 着色语言中支持如下的基本类型: **透明类型** |  类型   |               含义               | | :---: | :---: | |  void   |        用于函数没有返回值        | |  bool   | 条件类型,取值为 true 或者 false | |   int   |           有符号的整型           | |  uint   |            无符号整型            | |  float  |        单精度浮点类型标量        | | double  |        双精度浮点类型标量        | |  vec2   |        二维单精度浮点向量        | |  vec3   |        三维单精度浮点向量        | |  vec4   |        四维单精度浮点向量        | |  dvec2  |        二维双精度浮点向量        | |  dvec3  |        三维双精度浮点向量        | |  dvec4  |        四维双精度浮点向量        | |  bvec2  |           二维布尔向量           | |  bvec3  |           三维布尔向量           | |  bvec4  |           四维布尔向量           | |  ivec2  |        二维有符号整型向量        | |  ivec3  |        三维有符号整型向量        | |  ivec4  |        四维有符号整型向量        | |  uvec2  |        二维无符号整型向量        | |  uvec3  |        三维无符号整型向量        | |  uvec4  |        四维无符号整型向量        | |  mat2   |       2x2 的单精度浮点矩阵       | |  mat3   |       3x3 的单精度浮点矩阵       | |  mat4   |       4x4 的单精度浮点矩阵       | | mat2x2  |       2x2 的单精度浮点矩阵       | | mat2x3  |       2x3 的单精度浮点矩阵       | | mat2x4  |       2x4 的单精度浮点矩阵       | | mat3x2  |       3x2 的单精度浮点矩阵       | | mat3x3  |       3x3 的单精度浮点矩阵       | | mat3x4  |       3x4 的单精度浮点矩阵       | | mat4x2  |       4x2 的单精度浮点矩阵       | | mat4x3  |       4x3 的单精度浮点矩阵       | | mat4x4  |       4x4 的单精度浮点矩阵       | |  dmat2  |       2x2 的双精度浮点矩阵       | |  dmat3  |       3x3 的双精度浮点矩阵       | |  dmat4  |       4x4 的双精度浮点矩阵       | | dmat2x2 |       2x2 的双精度浮点矩阵       | | dmat2x3 |       2x3 的双精度浮点矩阵       | | dmat2x4 |       2x4 的双精度浮点矩阵       | | dmat3x2 |       3x2 的双精度浮点矩阵       | | dmat3x3 |       3x3 的双精度浮点矩阵       | | dmat3x4 |       3x4 的双精度浮点矩阵       | | dmat4x2 |       4x2 的双精度浮点矩阵       | | dmat4x3 |       4x3 的双精度浮点矩阵       | | dmat4x4 |       4x4 的双精度浮点矩阵       | > Note: 下表所说"访问纹理","sampler "不透明类型访问纹理,"image " 不透明类型访问图像,具有指定的类型。 ## 修饰符 > 变量的声明可以使用如下的修饰符。 |  类型   |               含义               | | :---: | :---: | | const | 常量值必须在声明是初始化。它是只读的不可修改的。 | | attribute | 表示只读的顶点数据,只用在顶点着色器中。数据来自当前的顶点状态或者顶点数组。它必须是全局范围声明的,不能再函数内部。一个attribute可以是浮点数类型的标量,向量,或者矩阵。不可以是数组或则结构体 | | uniform | 一致变量。在着色器执行期间一致变量的值是不变的。与const常量不同的是,这个值在编译时期是未知的是由着色器外部初始化的。一致变量在顶点着色器和片段着色器之间是共享的。它也只能在全局范围进行声明。 | | varying | 顶点着色器的输出。例如颜色或者纹理坐标,(插值后的数据)作为片段着色器的只读输入数据。必须是全局范围声明的全局变量。可以是浮点数类型的标量,向量,矩阵。不能是数组或者结构体。 | | centorid varying | 在没有多重采样的情况下,与varying是一样的意思。在多重采样时,centorid varying在光栅化的图形内部进行求值而不是在片段中心的固定位置求值。 | | invariant | (不变量)用于表示顶点着色器的输出和任何匹配片段着色器的输入,在不同的着色器中计算产生的值必须是一致的。所有的数据流和控制流,写入一个invariant变量的是一致的。编译器为了保证结果是完全一致的,需要放弃那些可能会导致不一致值的潜在的优化。除非必要,不要使用这个修饰符。在多通道渲染中避免z\-fighting可能会使用到。 | | in | 用在函数的参数中,表示这个参数是输入的,在函数中改变这个值,并不会影响对调用的函数产生副作用。(相当于C语言的传值),这个是函数参数默认的修饰符 | | out | 用在函数的参数中,表示该参数是输出参数,值是会改变的。 | | inout | 用在函数的参数,表示这个参数即是输入参数也是输出参数。 | ## 内置变量 > 内置变量可以与固定函数功能进行交互。在使用前不需要声明。顶点着色器可用的内置变量如下表: | 名称 | 类型 | 描述 | |-------------------------|-------|------------------------------------------------| | gl\_Color | vec4 | 输入属性\-表示顶点的主颜色 | | gl\_SecondaryColor | vec4 | 输入属性\-表示顶点的辅助颜色 | | gl\_Normal | vec3 | 输入属性\-表示顶点的法线值 | | gl\_Vertex | vec4 | 输入属性\-表示物体空间的顶点位置 | | gl\_MultiTexCoordn | vec4 | 输入属性\-表示顶点的第n个纹理的坐标 | | gl\_FogCoord | float | 输入属性\-表示顶点的雾坐标 | | gl\_Position | vec4 | 输出属性\-变换后的顶点的位置,用于后面的固定的裁剪等操作。所有的顶点着色器都必须写这个值。 | | gl\_ClipVertex | vec4 | 输出坐标,用于用户裁剪平面的裁剪 | | gl\_PointSize | float | 点的大小 | | gl\_FrontColor | vec4 | 正面的主颜色的varying输出 | | gl\_BackColor | vec4 | 背面主颜色的varying输出 | | gl\_FrontSecondaryColor | vec4 | 正面的辅助颜色的varying输出 | | gl\_BackSecondaryColor | vec4 | 背面的辅助颜色的varying输出 | | gl\_TexCoord\[\] | vec4 | 纹理坐标的数组varying输出 | | gl\_FogFragCoord | float | 雾坐标的varying输出 | > 片段着色器的内置变量如下表: | 名称 | 类型 | 描述 | |--------------------|-------|----------------------------------------------------------------| | gl\_Color | vec4 | 包含主颜色的插值只读输入 | | gl\_SecondaryColor | vec4 | 包含辅助颜色的插值只读输入 | | gl\_TexCoord\[\] | vec4 | 包含纹理坐标数组的插值只读输入 | | gl\_FogFragCoord | float | 包含雾坐标的插值只读输入 | | gl\_FragCoord | vec4 | 只读输入,窗口的x,y,z和1/w | | gl\_FrontFacing | bool | 只读输入,如果是窗口正面图元的一部分,则这个值为true | | gl\_PointCoord | vec2 | 点精灵的二维空间坐标范围在\(0\.0, 0\.0\)到\(1\.0, 1\.0\)之间,仅用于点图元和点精灵开启的情况下。 | | gl\_FragData\[\] | vec4 | 使用glDrawBuffers输出的数据数组。不能与gl\_FragColor结合使用。 | | gl\_FragColor | vec4 | 输出的颜色用于随后的像素操作 | | gl\_FragDepth | float | 输出的深度用于随后的像素操作,如果这个值没有被写,则使用固定功能管线的深度值代替 |