《OpenGL超级宝典》(第5版)第6章 跳出盒子 非存储着色器

GLSL数据类型

  • 基础类型:
类型
基础类型 bool、int、uint、float
向量类型 {b\i\u}vec{2\3\4}
矩阵类型 mat{2\3\4}、mat{2\3\4}x{2\3\4}
  • 储存限定符:
类型 说明
const 常量
in 从前一个阶段传递过来的输入
out 传递到下一个阶段
inout
uniform 从c++代码传过来的值
flat 不插值,例如:flat out vec4 color;
centroid 质心插值,例如:{in\out} centroid vec4 color;
noperspective 非透视插值,例如:noperspective out float value;
smooth 透视插值(默认),例如:smooth out vec4 color;
  • 着色器例子:
#version 330

in vec4 position;

void main(void){
	gl_Position = position;
}

创建着色器

  • glCreateShader(shaderType)
参数
shaderType GL_VERTEX_SHADER 顶点着色器
GL_FRAGMENT_SHADER 片段着色器
GL_GEOMETRY_SHADER 几何着色器
GL_TESS_CONTROL_SHADER 细分控制着色器
GL_TESS_EVALUATION_SHADER 细分计算着色器
GL_COMPUTE_SHADER 计算着色器
  • glShaderSource(shader,count,string,length)
参数 说明
shader
count 字符串数目
string 字符串数组
length 字符串长度数组
  • glCompileShader(shader);

  • glGetShaderiv(shader, pname, params)

参数 pname params 说明
shader
pname GL_SHADER_TYPE 返回着色器类型
GL_DELETE_STATUS FALSE\TRUE 当前着色器是否被标记为删除
GL_COMPILE_STATUS FALSE\TRUE 着色器编译是否成功
GL_INFO_LOG_LENGTH
GL_SHADER_SOURCE_LENGTH
  • glDeleteShader(shader);

创建着色器程序

  • glCreateProgram();

  • glAttachShader(program, shader);

  • glBindAttribLocation(program, num, name);绑定属性

  • glLinkProgram(program);

  • glUseProgram(program);

  • glDeleteProgram(program);

操作Uniform

  • glGetUniformLocation(program, name);编译链接之后。

  • glUniform{1\2\3\4}{i\f\iv\fv}(location);

  • glUniformMatrix{2\3\4}{fv}(location, count, transpose, value);矩阵

发布了41 篇原创文章 · 获赞 4 · 访问量 3907

猜你喜欢

转载自blog.csdn.net/weixin_42487874/article/details/102981313