初识
简单shader
#version 430 core
#version 300 es
基本流程
接口
glew
变量
- glGetUniformLocation
vao vbo ebo fbo
- glEnableVertexAttribArray
- glVertexAttribPointer
- glDisableVertexAttribArray
- glGenVertexArrays
- glBindVertexArray
- glGenBuffers
- glBindBuffer
- glBufferData
- glGenFramebuffers
- glBindFramebuffer
// vao
GLuint vaoid;
glGenVertexArrays(1, &vaoid);
glBindVertexArray(vaoid);
glBindVertexArray(0);
glDeleteVertexArrays(1, &vaoid);
// vbo
GLuint vboid[2];
glGenBuffers(2, vboid);
glBindBuffer(GL_ARRAY_BUFFER, vboid[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vVertices), vVertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboid[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glDeleteBuffers(2, vboid);
// fbo
GLint defaultFramebufferid = 0;
glGetIntegerv ( GL_FRAMEBUFFER_BINDING, &defaultFramebufferid );
GLuint fboid;
glGenFramebuffers(1, &fboid);
glBindFramebuffer(GL_FRAMEBUFFER, fboid);
glFramebufferTexture2D();
glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebufferid);
glDeleteFramebuffers(1, &fboid);
纹理
- glGenTextures 生成多个纹理id
- glDeleteTextures 删除多个纹理id
- glBindTexture 设置当前纹理id
- glTexParameteri 当前纹理设置参数int
- glTexParameteriv 当前纹理设置参数int (多个)
- glTexParameterf 当前纹理设置参数float
- glTexParameterfv 当前纹理设置参数float(多个)
- glTexImage2D 将数据传到纹理
- glActiveTexture
- glBindTexture
- glUniform1i
- glUniform1iv
- glUniform1f
- glUniform1fv
绘制
- glDrawElements
- glReadPixels
shader
- glCreateShader 创建一个空的shader
- glCompileShader
- glAttachShader
- glDetachShader
- glDeleteShader
- glShaderSource
- glGetShaderiv
- glGetShaderInfoLog
Program
- glCreateProgram
- glLinkProgram
- glDeleteProgram
- glGetProgramiv
- glGetProgramInfoLog
- glGetUniformLocation
shader语法
变量类型
float double int uint bool 结构体
vec2 vec3 vec4 dvec2 ivec2 uvec2 bvec2 mat2 dmat2 float[3] 都有length方法
后缀u/U,f/F,LF,int(1.0)
xyzw,rgba,stpq
存储限制符
const\in\out\uniform\buffer\shared
精度
精度级别:highp
mediump
lowp
默认精度:precision mediump float;
注意
查询uniform地址不要求你之前使用过着色器程序,但是更新一个uniform之前你必须先使用程序(调用glUseProgram)
opengl版本大于等于3.1,顶点着色器和片元着色器必不可少,固定功能管线从核心模式中去除