OpenGL Shader Compile Error

Posted by Tomas Cokis on Stack Overflow See other posts from Stack Overflow or by Tomas Cokis
Published on 2010-05-27T17:18:48Z Indexed on 2010/05/27 17:31 UTC
Read the original article Hit count: 248

Filed under:
|
|

I'm having a bit of a problem with my code for compiling shaders, namely they both register as failed compiles and no log is received.

This is the shader compiling code:

/* Make the shader */

Uint size;
GLchar* file;

loadFileRaw(filePath, file, &size);

const char * pFile = file;
const GLint pSize = size;


newCashe.shader = glCreateShader(shaderType);
glShaderSource(newCashe.shader, 1, &pFile, &pSize); 
glCompileShader(newCashe.shader);

GLint shaderCompiled;

glGetShaderiv(newCashe.shader, GL_COMPILE_STATUS, &shaderCompiled);

if(shaderCompiled == GL_FALSE)
{
    ReportFiler->makeReport("ShaderCasher.cpp", "loadShader()", "Shader did not compile", "The shader " + filePath + " failed to compile, reporting the error - " + OpenGLServices::getShaderLog(newCashe.shader));

}

And these are the support functions:

 bool loadFileRaw(string fileName, char* data, Uint* size)
{    
    if (fileName != "") 
    {
        FILE *file = fopen(fileName.c_str(), "rt");

        if (file != NULL) 
        {
            fseek(file, 0, SEEK_END);
            *size = ftell(file);
            rewind(file);

            if (*size > 0) 
            {
                data = (char*)malloc(sizeof(char) * (*size + 1));
                *size = fread(data, sizeof(char), *size, file);
                data[*size] = '\0';
            }

            fclose(file);
        }
    }

    return data;
}

string OpenGLServices::getShaderLog(GLuint obj)
{
int infologLength = 0;

int charsWritten  = 0;
char *infoLog;

glGetShaderiv(obj, GL_INFO_LOG_LENGTH,&infologLength);

if (infologLength > 0)
{
    infoLog = (char *)malloc(infologLength);
    glGetShaderInfoLog(obj, infologLength, &charsWritten, infoLog);

    string log = infoLog;

    free(infoLog);

    return log;
}

return "<Blank Log>";

}

and the shaders I'm loading:

   void main(void)
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

void main(void)
{
    gl_Position = ftransform();
}

In short I get

From: ShaderCasher.cpp, In: loadShader(), Subject: Shader did not compile
Message: The shader Data/Shaders/Standard/standard.vs failed to compile, reporting the error - <Blank Log>

for every shader I compile

I've tried replacing the file reading with just a hard coded string but I get the same error so there must be something wrong with how I'm compiling them. I have run and compiled example programs with shaders, so I doubt my drivers are the issue, but in any case I'm on a Nvidia 8600m GT.

Can anyone help?

© Stack Overflow or respective owner

Related posts about c++

Related posts about opengl