这个glsl代码有什么问题?
Whats wrong with this glsl code?
我正在尝试从 .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("[=10=]");
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);
见here。
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*
,而是在变量中显式获取指针并将指针传递给该变量。
我正在尝试从 .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("[=10=]");
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);
见here。
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*
,而是在变量中显式获取指针并将指针传递给该变量。