这个 glsl 代码有什么问题



我正在尝试从.txt文件加载一个简单的GLSL程序。这是加载文件的函数:

string getShaderSource(char path[])
{
    string out;
    ifstream mFile;
    stringstream buf;
    mFile.open(path);
    if (mFile.is_open())
    { 
        buf << mFile.rdbuf();
        out = buf.str();
    }
    else
        printf("Cannot open shader source file.");      
    mFile.close();
    //out.append("");
    return out;
}

我使用这样的函数:

string vs = getShaderSource("C:/vs.txt");
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, (const GLchar**)&vs, NULL);

问题是着色器无论如何都不会编译,这是错误:

0(1) : error C0000: syntax error, unexpected $undefined at token "<undefined>"

非常简单的 GLSL 代码:

#version 410 
layout (location = 0) in vec3 vp;
layout (location = 1) in vec3 color;
smooth out vec4 theColor;
void main () {
    gl_Position = vec4 (vp, 1.0);
    theColor = vec4(color, 0.0);
}

我知道那里有类似的问题,我已经尝试了很多来解决问题,但没有进展。我做错了什么?

在以下行中:

glShaderSource(vertexShader, 1, (const GLchar**)&vs, NULL);

您正在将 std::string 转换为 GLchar**。那行不通。

将其更改为

const char *s = vs.c_str();
glShaderSource(vertexShader, 1, (const GLchar**)&s, NULL);

看这里。

string fs = getShaderSource("C:/vs.txt");
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, (const GLchar**)&vs, NULL);

这是可疑的。正确的代码是这样的:

string fs = getShaderSource("C:/vs.txt");
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
char* vs = fs.c_str();
glShaderSource(vertexShader, 1, (const GLchar**)&vs, NULL);

std::string的第一个成员不能保证是保存数据的char*,而是在变量中显式获取指针并将指针传递给该变量。

最新更新