OpenGLES3.0创建和编译着色器相关语法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGLES3.0创建和编译着色器相关语法相关的知识,希望对你有一定的参考价值。

// 创建着色器,返回句柄

GLuint glCreateShader(GLenum type)

type:

GL_VERTEX_SHADER

GL_FRAGMENT_SHADER

// 删除着色器

void glDeleteShader(GLuint shader)

如果一个着色器已经连接到程序对象,那么不会立刻删除,而是先标记,等到没有任何连接时,再释放内存。


// 设置着色器源码

void glShaderSource(GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length)

count 着色器源字符串的数量,着色器可以由多个源字符串组成,但是每个着色器只能有一个main函数

string 指向保存数量为count的着色器源字符串的数组指针

length 指向保存每个着色器字符串大小且元素数量为count的整数数组指针,可以为NULL


// 编译着色器

void glCompileShader(GLuint shader)


// 查询着色器信息

void glGetShaderiv(GLuint shader, GLenum pname, GLint *params)

pname:

GL_COMPILE_STATUS// 编译状态 返回GL_TRUE或GL_FALSE

GL_DELETE_STATUS// 删除状态 返回是否用glDeleteShader标记

GL_INFO_LOG_LENGTH// 日志长度

GL_SHADER_SOURCE_LENGTH// 源码长度

GL_SHADER_TYPE// 着色器类型,返回GL_VERTEX_SHADER或GL_FRAGMENT_SHADER

params 整数指针,用于返回结果


// 获取日志信息

void glGetShaderInfoLog(Gluint shader, Glsizei maxLength, Glsizei *length, Glchar *infoLog)

maxLength:需要获取的信息日志缓冲区长度

length:写入的信息日志长度 如果不知道长度,可以填NULL

infoLog 用于返回信息日志的缓冲区


以上是关于OpenGLES3.0创建和编译着色器相关语法的主要内容,如果未能解决你的问题,请参考以下文章

OpenGLES3.0创建和链接程序相关语法

我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线

我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线

IOS:OpenGL ES 2.0 与 3.0 中动态分支着色器的性能

Phong 着色器不起作用

顶点纹理获取(在顶点着色器中读取纹理)