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