编译

C
// 创建着色器对象
GLuint id = glCreateShader(GL_VERTEX_SHADER);
// 传入着色器源码
glShaderSource(id, 1, &source_chars, NULL);
// 编译着色器
glCompileShader(id);
// 获取编译状态
GLint success_flag;
glGetShaderiv(id, GL_COMPILE_STATUS, &success_flag);
if (success_flag == GL_FALSE) {
	char info_log[512];
	// 获取编译日志
	glGetShaderInfoLog(id, 512, NULL, info_log);
	printf("着色器编译错误: %s", info_log);
}
点击展开查看更多

glCreateShader

创建一个着色器对象

C
GLuint glCreateShader(GLenum shader_type)
点击展开查看更多

glShaderSource

传入着色器源码

C
void glShaderSource(
	GLuint shader,
	GLsizei count,
	const GLchar* const *string,
	const GLint *length,
)
点击展开查看更多
C
// 共用的Uniforms
const char* CommonUniforms = "xxx\n";
// 代码主体
const char* MainCode = "xxx\n";

// 组合字符串片段
const char* sources[] = { "#version 460\n", CommonUniforms MainCode };

// 调用glShaderSource
glShaderSource(id, 3, sources, NULL);
点击展开查看更多

当然将字符串合并之后再传入也是可以的,但要注意传入的参数stringlength类型均为指针。

glCompileShader

执行编译着色器源码

C
void glCompileShader(GLuint shader)
点击展开查看更多

glGetShaderiv

查询有关特定着色器状态的信息,比如编译状态、信息日志长度等

C
void glGetShaderiv(
	GLuint shader,
	GLenum pname,
	GLint *param,
);
点击展开查看更多

glGetShaderInfoLog

获取与指定着色器相关的日志内容

C
void glGetShaderInfoLog(
	GLuint shader,
	GLsizei bufSize,
	GLsizei *length,
	GLchar *infoLog,
)
点击展开查看更多

链接

C
GLuint id = glCreateProgram();
glAttachShader(id, vertex_shader_id);
glAttachShader(id, fragment_shader_id);
glLinkProgram(id);
GLint success_flag;
glGetProgramiv(id, GL_LINK_STATUS, &success_flag);
if(!success) {
	char info_log[512];
    glGetProgramInfoLog(id, 512, NULL, info_log);
}
点击展开查看更多

glCreateProgram

创建一个着色器程序

C
GLuint glCreateProgram()
点击展开查看更多

glAttachShader

已编译的着色器附加到着色器程序

C
void glAttachShader(GLuint program, GLuint shader)
点击展开查看更多

glGetProgramiv

查询有关特定程序对象状态的信息,比如链接状态、验证状态、附加的着色器数量等

C
void glGetProgramiv(
	GLuint program,
	GLenum pname,
	GLint *params,
);  
点击展开查看更多

glGetProgramInfoLog

参考glGetShaderInfoLog

版权声明

作者: Chaim

链接: https://chaim.eu.org/posts/%E7%9D%80%E8%89%B2%E5%99%A8%E7%A8%8B%E5%BA%8F%E7%BC%96%E8%AF%91%E4%B8%8E%E9%93%BE%E6%8E%A5/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键