我正在使用xcode与OpenGL制作游戏。我用GLUT初始化了一个窗口。我有希望实现的着色器,但是当我尝试编译它们时,我在信息日志中得到两个编译错误。我的着色器看起来像这样:
//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);
}
我正在阅读该文件并使用以下代码进行编译:
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;
}
我收到这些错误:
ERROR: 0:1: '' : version '150' is not supported
ERROR: 0:1: '' : syntax error #version
我的OpenGL版本是2.1,而我的glsl版本是1.20。有谁知道如何解决这个问题?
答案 0 :(得分:1)
通过在创建上下文时以像素格式设置,可以告诉OSX使用较新版本的OpenGL。 Here is an example如何设置它。
或者,如果您使用过剩,我认为您希望glutInitContextVersion(x, y);
x
和y
是主要和次要版本号。我认为OpenGL 3.2支持GLSL 1.5。 (我想你也可能想要glutInitContextProfile(GLUT_CORE_PROFILE);
。)
答案 1 :(得分:1)
我重新编写了着色器,它们实际上可以在GLSL 1.20中使用。
in
必须在GLSL 1.20顶点着色器中替换为attribute
out
无效,请改用gl_FragColor
或gl_FragData [n]
vec3
然后执行类似vec4 (vtx, 1.0)
的操作完全是多余的
vec4
并使用少于4个组件为其提供数据,GLSL将自动以这种方式填写属性缺失的组件:vec4 (0.0, 0.0, 0.0, 1.0)
。#version 120
attribute vec4 position;
void main()
{
gl_Position = position;
}
#version 120
void main()
{
gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
}
当然这并没有真正解决您的问题,因为如果您有OS X 10.7或更新版本,它支持OpenGL 3.2,因此支持GLSL 1.50核心。您需要请求核心配置文件上下文才能使用 - 否则您将获得OpenGL 2.1和GLSL 1.20。