Table of Contents

GLSL

适用于OpenGLVulkan


变量

  1. bool/int/float/(b/i/[])vec(2/3/4)/mat(2/3/4)
  2. 结构体定义和C一样
  3. 数组只能声明1维

语法

  1. 没有隐式转换,赋值左右类型必须一致
  2. 强制类型转换和C不太一样:int x=int(1.0);
  3. 主函数为main函数,名称可改,返回值需要是void
  4. 不支持递归

操作

  1. 向量和矩阵可以直接运算,维度符合规范即可

精度

  1. lowp:低精度
  2. mediump:中间精度
  3. highp:高精度
  4. 所以浮点数只有float,没有double
  5. 在最开始可以设定全局的精度:precision mediump float;
  6. 精度描述符在变量限制符之后

内置变量

  1. gl_Position
  2. gl_FragColor

变量限制符号

  1. none:本地变量,一般不写
  2. const:常量类型
  3. attribute:只能用于顶点着色器中,一般表示顶点数据
  4. uniform:全局变量,对于Shader只读,一般用于传递数据
  5. varying:从顶点着色器传递到片段着色器的变量
  6. 只能使用一个

函数参数限定

  1. in:按值传递,不修改原值
  2. out:不可读只可写,修改原值
  3. inout

关闭优化

  1. 关闭所有变量的优化:#pragma STDGL invariant(all)(预处理)
  2. 关闭某个变量的优化:invariant varying texCoord;(限定符)

描述符的顺序

  1. eg1:invariant varying lowp float color;(变量)
  2. eg2:void doubleSize(const in lowp float s){}(参数)

预处理

  1. C语言中的宏还可以一样地使用
  2. 指定编译的版本(写在最前):#version 100
  3. 行号:__LINE__
  4. 版本:__VERSION__

Odt笔记(20221007)