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;
	 }
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值