Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenGL Shader ERROR: 0:1: '' : syntax error #version

I'm using xcode to make a game with OpenGL. I have used GLUT to initialise a window. I have shaders that I wish to implement but when I try to compile them, I get two compile errors in the info log. My shaders look like this:

//FirstShader.vsh
#version 150 core

in vec3 position;

void main()
{
    gl_Position = vec4(position, 1.0);
}

//FirstShader.fsh
#version 150 core

out vec4 fragData;

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

I'm reading the file and compiling it with this code:

GLuint createShaderFromFile(const GLchar *path, GLenum shaderType){
GLuint shaderID = glCreateShader(shaderType);
std::ifstream fin;
fin.open(path);
if(!fin.is_open()){
    fin.close();
    std::cout << "Shader Not Found" << std:: endl;
    return 0;
}
std::string source((std::istreambuf_iterator<GLchar>(fin)),std::istreambuf_iterator<GLchar> ());

fin.close();

const GLchar* shaderSource = source.c_str();


glShaderSource(shaderID, 1, &shaderSource, NULL);

glCompileShader(shaderID);
GLint compileStatus;
glGetShaderiv(shaderID, GL_COMPILE_STATUS, &compileStatus);

if (compileStatus != GL_TRUE) {
    std::cout << "Shader failed to compile" << std::endl;
    GLint infoLoglength;
    glGetShaderiv(shaderID, GL_INFO_LOG_LENGTH, &infoLoglength);
    GLchar* infoLog = new GLchar[infoLoglength + 1];
    glGetShaderInfoLog(shaderID, infoLoglength, NULL, infoLog);
    std::cout << infoLog << std::endl;
    delete infoLog;
    return 0;
}


return shaderID;
}

Im getting these errors:

ERROR: 0:1: '' :  version '150' is not supported
ERROR: 0:1: '' : syntax error #version

My OpenGL version is 2.1 and my glsl version is 1.20. Does anybody know how I can fix this?

like image 547
David Graovac Avatar asked Aug 08 '26 03:08

David Graovac


1 Answers

You can tell OSX to use a newer version of OpenGL by setting it in your pixel format when you create the context. Here is an example of how to set it up.

Or if you're using glut, I think you want glutInitContextVersion(x, y); where x and y are the major and minor version numbers. GLSL 1.5 is supported in OpenGL 3.2, I think. (And you might also want glutInitContextProfile(GLUT_CORE_PROFILE);, I think.)

like image 200
user1118321 Avatar answered Aug 11 '26 10:08

user1118321



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!