在尝试编译我的顶点着色器时出现“0:1(1)错误:意外的NEW_IDENTIFIER”

时间:2015-12-11 21:13:11

标签: c++ glsl

我正在尝试重写我正在使用的着色器加载器,当我尝试编译程序时,我不断收到标题错误。我对相关问题的搜索出现了these two个主题,这些主题表明问题可能与我使用字符串有关,所以我尝试将加载的着色器从字符串对象复制到数组,并且它仍然在发生。这是我的Initialize函数的相关部分:

// 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;
    }

“verify.txt”文件以我期望的三个着色器代码副本结束:

attributevec3v_position;attributevec3v_color;varyingvec3color;uniformmat4mvpMatrix;voidmain(){gl_Position=mvpMatrix*vec4(v_position,1.0);color=v_color;}
attributevec3v_position;attributevec3v_color;varyingvec3color;uniformmat4mvpMatrix;voidmain(){gl_Position=mvpMatrix*vec4(v_position,1.0);color=v_color;}
attributevec3v_position;attributevec3v_color;varyingvec3color;uniformmat4mvpMatrix;voidmain(){gl_Position=mvpMatrix*vec4(v_position,1.0);color=v_color;}

我知道我的程序的其余部分也可以正常工作,因为如果我只是将着色器硬编码到我的应用程序中,它就能很好地工作。

先谢谢,这太烦人了。

编辑:这是我的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)

0 个答案:

没有答案