c_cpp 加载GLSL着色器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 加载GLSL着色器相关的知识,希望对你有一定的参考价值。
#include <glad/glad.h>
#include <string>
GLuint compile(const GLchar *, const GLchar *, const GLchar *);
void checkCompileErrors(GLuint, std::string);
GLuint compile(const GLchar *vertexSource, const GLchar *fragmentSource, const GLchar *geometrySource)
{
// Vertex shader.
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexSource, nullptr);
glCompileShader(vertexShader);
// Fragment shader.
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentSource, nullptr);
glCompileShader(fragmentShader);
// Geometry shader.
GLuint geometryShader;
if (geometrySource)
{
geometryShader = glCreateShader(GL_GEOMETRY_SHADER);
glShaderSource(geometryShader, 1, &geometrySource, nullptr);
glCompileShader(geometryShader);
}
// Create shader program and attach shaders.
GLuint id = glCreateProgram();
glAttachShader(id, vertexShader);
glAttachShader(id, fragmentShader);
if (geometrySource)
glAttachShader(id, geometryShader);
glLinkProgram(id);
// Free shaders from memory.
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
if (geometrySource)
glDeleteShader(geometryShader);
return id;
}
void checkCompileErrors(GLuint object, std::string type)
{
GLint success;
GLchar infoLog[1024];
if (type != "PROGRAM")
{
glGetShaderiv(object, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(object, 1024, nullptr, infoLog);
// Handle error here.
}
}
else
{
glGetProgramiv(object, GL_LINK_STATUS, &success);
if (!success)
{
glGetProgramInfoLog(object, 1024, nullptr, infoLog);
// Handle error here.
}
}
}
以上是关于c_cpp 加载GLSL着色器的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅如何抽取着色器代码到assets目录下的GLSL文件,以及如何通过Java或者C++代码来加载着GLSL文件?
我的OpenGL学习进阶之旅如何抽取着色器代码到assets目录下的GLSL文件,以及如何通过Java或者C++代码来加载着GLSL文件?
NO.15 - OpenGL ES 使用GLSL加载图片
c_cpp 一个加载着色器文件,编译和链接到着色器程序的函数。
如何使用 OpenGL 和 GLSL 改变颜色(C++)?
第二篇: WebGL 着色器和GLSL