glGetShaderiv()函数有什么用?
部分内容转载自
https://blog.csdn.net/flycatdeng/article/details/82667207
今天学LearnOpenGL的时候看到了这个函数,因为最终的图像有误,但是不知道具体哪里出错,发现glGetShaderiv()函数可以用来检测着色器编译是否成功。
名称
glGetShaderiv - 从着色器对象返回一个参数
规范
void glGetShaderiv(GLuint shader,GLenum pname,GLint *params);
参数
shader
指定要查询的着色器对象,直接放入需要检查的着色器即可。
pname
指定着色器对象的参数。 可接受的符号名称为
(1)GL_SHADER_TYPE:
shader_type:着色器类型
用来判断并返回着色器类型,若是顶点着色器返回GL_VERTEX_SHADER,若为片元着色器返回GL_FRAGMENT_SHADER.
(2)GL_DELETE_STATUS:
detele status:删除状态
判断着色器是否被删除,是返回GL_TRUE,否则返回GL_FALSE,
(3)GL_COMPILE_STATUS:
compile_status:编译状态
用于检测编译是否成功,成功为GL_TRUE,否则为GL_FALSE.
(4)GL_INFO_LOG_LENGTH:
information log length: log是日志的意思,所以是返回着色器的信息日志的长度
用于返回着色器的信息日志的长度,包括空终止字符(即存储信息日志所需的字符缓冲区的大小)。 如果着色器没有信息日志,则返回值0。
(5)GL_SHADER_SOURCE_LENGTH:
SHADER_SOURCE_LENGTH:着色器源码长度
返回着色器源码长度,不存在则返回0;
params
函数将返回的结果存储在输入的第三个参数中,因为这个函数得到的结果有很多种,所以要单独放在第三个参数当中,所以是void glGetShaderiv而不是GLuint。
错误
GL_INVALID_ENUM: pname不是一个可接受的值。
GL_INVALID_VALUE: shader不是OpenGL生成的值。
GL_INVALID_OPERATION: 不支持着色器编译器的情况下查询pname为GL_COMPILE_STATUS,GL_INFO_LOG_LENGTH或GL_SHADER_SOURCE_LENGTH(GL_SHADER_TYPE,GL_DELETE_STATUS不会报这个错)。
GL_INVALID_OPERATION: shader没有关联着色器对象。
用法示例如下:
GLint result = GL_FALSE;
glGetShaderiv(vertexShader,GL_COMPILE_STATUS,&result);
if (result==GL_FALSE)
{
cout << "Compilation of vertexShader Failed!" << endl;
glfwTerminate();
return -1;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本