OpenGL ES 着色器

2021-01-17  本文已影响0人  lieon

获得链接后的着色器对象一般包括6个步骤

OpenGL ES 着色器语言

变量和变量类型

向量和矩阵的构造及选择

     float myfloat = 1.0
     float myfloat2 = 1; // Error: invalid type conversion
     bool myBool = true;
     int myInt = 0;
     int myInt2 = 0.0; // Error: invalid type conversion
 
     vec4 myVec4 = vec4(1.0); // myVec4 = {1.0, 1.0, 1.0, 1.0}
     vec3 myVec3 = vec3(1.0, 0.0, 0.5); // myVec3 = {1.0, 1.0, 1.0}
     vec3 tmp = vec3(myVec3);
     myVec4 = vec4(myVec2, tmp); // myVec4 = {myVec2.x, myVec2.y, tmp.x, tmp.y}
     mat3 myMat3 = mat3(1.0, 0.0, 0.0,
                         0.0, 1.0, 0.0,
                         1.0, 1.0, 1.0,
                         );
 

向量和矩阵分量

常量

  const float zero = 0.0;
  const float pi = 3.14159

结构体和数组

运算符,控制流和函数

输入/输出变量、统一变量、统一变量块和布局限定符

统一变量

统一变量块

  #version 300 es
  
  uniform TrnasformBlock {
      mat4 matViewProj;
      mat3 matNormal;
      mat3 matTexGen;
  }

  layout(location = 0) in vec4 a_position;

  void main() {
      gl_position = matViewProj * a_position;
  }

布局限定符

顶点和片段着色器输入/输出

插值限定符

预处理和指令

统一变量和插值器打包

精度限定符

不变性

   #version 300 es
   uniform mat4 u_viewProMat;
   layout(location = 0) in vec4 a_vertext;
   invariant gl_position
   void main() {
       gl_position = u_viewProMat * a_vertext;
   }
上一篇 下一篇

猜你喜欢

热点阅读