I am having a very confusing issue with my glsl shaders. The loading code looks like this:
std::string vertCodeStr;
std::string fragCodeStr;
std::ifstream vertFile;
std::ifstream fragFile;
vertFile.open(vertName);
fragFile.open(fragName);
if(!vertFile.good() || !fragFile.good()) exit(1);
std::stringstream vertStream;
std::stringstream fragStream;
vertStream << vertFile.rdbuf();
fragStream << fragFile.rdbuf();
vertFile.close();
fragFile.close();
vertCodeStr = vertStream.str();
fragCodeStr = fragStream.str();
const char* vertCodeChar = vertCodeStr.c_str();
const char* fragCodeChar = fragCodeStr.c_str();
unsigned int vertsh;
unsigned int fragsh;
int success;
char log[512];
// Compile the shaders
vertsh = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertsh, 1, &vertCodeChar, NULL);
glCompileShader(vertsh);
glGetShaderiv(vertsh, GL_COMPILE_STATUS, &success);
if(!success) {
glGetShaderInfoLog(vertsh, 512, NULL, log);
std::cout << "Vertex shader didn't compile properly. GL Log: \n" << log << std::endl;
};
fragsh = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragsh, 1, &fragCodeChar, NULL);
glCompileShader(fragsh);
glGetShaderiv(fragsh, GL_COMPILE_STATUS, &success);
if(!success) {
glGetShaderInfoLog(fragsh, 512, NULL, log);
std::cout << "Fragment shader didn't compile properly. GL Log: \n" << log << std::endl;
};
program = glCreateProgram();
glAttachShader(program, vertsh);
glAttachShader(program, fragsh);
glLinkProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &success);
if(!success) {
glGetProgramInfoLog(program, 512, NULL, log);
std::cout << "Linking didn't work. GL Log:\n" << log << std::endl;
}
glDeleteShader(vertsh);
glDeleteShader(fragsh);
Shaders look like:
#version 100 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
layout (location = 2) in vec2 aTexCoord;
out vec3 ourColor;
out vec2 TexCoord;
void main()
{
gl_Position = vec4(aPos, 1.0);
ourColor = aColor;
TexCoord = aTexCoord;
}
And:
#version 100 core
out vec4 FragColor;
in vec3 ourColor;
in vec2 TexCoord;
uniform sampler2D ourTexture;
void main()
{
FragColor = texture(ourTexture, TexCoord);
}
Finally, the output is:
GL Version (glGetString(GL_VERSION): 2.1 Metal - 83.1
Vertex shader didn't compile properly. GL Log:
ERROR: 0:1: '' : version '100' is not supported
ERROR: 0:1: '' : syntax error: #version
ERROR: 0:2: 'layout' : syntax error: syntax error
Fragment shader didn't compile properly. GL Log:
ERROR: 0:1: '' : version '100' is not supported
ERROR: 0:1: '' : syntax error: #version
Linking didn't work. GL Log:
ERROR: One or more attached shaders not successfully compiled
I am very confused why the version is Metal instead of GL 4.1. I have also tried versions 410 and 330 but they do not work either. Help needed!
EDIT: Version 120 works. However, the syntax errors remain.