C++ 获得;0:1(1)错误:意外的新“U标识符”;尝试编译顶点着色器时
我正试图重写我正在使用的着色器加载程序,当我试图编译我的程序时,我不断得到标题错误。我在搜索相关问题时发现了一些主题,这些主题表明问题可能与我使用字符串有关,因此我尝试将加载的着色器从字符串对象复制到数组,但这种情况仍在发生。以下是初始化函数的相关部分:C++ 获得;0:1(1)错误:意外的新“U标识符”;尝试编译顶点着色器时,c++,glsl,C++,Glsl,我正试图重写我正在使用的着色器加载程序,当我试图编译我的程序时,我不断得到标题错误。我在搜索相关问题时发现了一些主题,这些主题表明问题可能与我使用字符串有关,因此我尝试将加载的着色器从字符串对象复制到数组,但这种情况仍在发生。以下是初始化函数的相关部分: // Begin shader loading vertShader = glCreateShader(GL_VERTEX_SHADER); fragShader = glCreateShader(GL_FRAGMENT_SHADER); /
// Begin shader loading
vertShader = glCreateShader(GL_VERTEX_SHADER);
fragShader = glCreateShader(GL_FRAGMENT_SHADER);
// Vertex shader first
vertShaderCode = loader.read("vs.txt");
char codeHolder[vertShaderCode.size() + 1];
std::size_t length = vertShaderCode.copy(codeHolder, vertShaderCode.size(), 0);
codeHolder[length] = '\0';
const char* tmp1 = codeHolder;
// Compile the vertex shader
glShaderSource(vertShader, 1, &tmp1, NULL);
glCompileShader(vertShader);
这比可能需要的要详细一点,但我试图非常明确,所以我没有遗漏任何东西
我知道我的着色器加载程序类工作正常,因为在我检查编译状态和打印错误消息的部分中,我添加了一些代码来检查以确保所有内容都正确传递:
//check the compile status
glGetShaderiv(vertShader, GL_COMPILE_STATUS, &shader_status);
if (!shader_status)
{
ofstream fout;
fout.open("verification.txt");
fout << vertShaderCode << endl;
int index = 0;
while(tmp1[index] != '\0' && index < 1000)
{
fout << tmp1[index];
index++;
}
fout << endl;
index = 0;
while(codeHolder[index] != '\0' && index < 1000)
{
fout << codeHolder[index];
index++;
}
fout.close();
GLchar InfoLog[1024];
glGetShaderInfoLog(vertShader, sizeof(InfoLog), NULL, InfoLog);
fprintf(stderr, "Vertex Shader %d: '%s'\n", vertShader, InfoLog);
return false;
}
我知道我的程序的其余部分也可以很好地工作,因为如果我只是将着色器硬编码到我的应用程序中,它就可以完美地工作
提前谢谢,这太烦人了
编辑:这是我的makefile
# Linux
CC=g++
LIBS= -lglut -lGLEW -lGL
# Compiler flags
CXXFLAGS= -g -Wall -std=c++0x
all: ../bin/Matrix
../bin/Matrix: ../src/main.cpp
$(CC) $(CXXFLAGS) ../src/main.cpp -o ../bin/Matrix $(LIBS)
char代码持有者[vertShaderCode.size()+1]代码>这不是合法的C++。那么你的代码是如何编译的呢?如果是这样的话,我不太确定。我正在使用VMware player运行Ubuntu发行版,我只是用g++编译它。程序正确地写入了“verification.txt”,所以它肯定在运行。@Nicolas我试着从char codeHolder[vertShaderCode.size()+1]更改它编码>至字符编码持有者[2048]代码>并且它没有改变编译,也没有改变我在终端遇到的错误。
# Linux
CC=g++
LIBS= -lglut -lGLEW -lGL
# Compiler flags
CXXFLAGS= -g -Wall -std=c++0x
all: ../bin/Matrix
../bin/Matrix: ../src/main.cpp
$(CC) $(CXXFLAGS) ../src/main.cpp -o ../bin/Matrix $(LIBS)