在Mac上使用OpenGL,不支持版本“ 150”错误

时间:2019-04-17 09:28:44

标签: c++ opengl shader

我正在尝试设置学校的作业,但是唯一的指导是针对Windows的。我们将Qt用于着色器,我正在通过Visual Studio代码并通过终端进行编译。问题在于,我尝试使用的任何版本的openGL最终都会出现相同的错误:

*QOpenGLShader::compile(Vertex): ERROR: 0:1: '' :  version '150' is not supported* 

我正在使用12月中旬的Macbook,似乎我正在使用openGL的4.1版本,我尝试了3.3、2.1 4.1等多个版本。似乎没有办法解决问题。我也尝试覆盖该版本,但这不起作用。我以错误的方式看问题吗?

这是导致错误的源代码:

#version 150 core <----

// input from application
uniform vec3 vecLight;
uniform sampler2D samTexture;

// input from geometry shader
smooth in vec3 normal;
smooth in vec3 vertex;
smooth in vec3 cartescoord;

// material constants
float ka = 0.1;
float kd = 0.6;
float ks = 0.3;
float spec_exp = 50.0;

// useful constants
float PI = 3.14159265;

// output color
        out vec4 outFragColor;

        vec2 cartesian2normspherical(vec3 cart)
{
    float fPhi = 0.0;
    float fTheta = 0.0;

    float fRadius = length(cart);
    fTheta = acos (cart.z / fRadius) / (PI);
    fPhi = atan(cart.y, cart.x)/ (PI);

    //transform phi from [-1,1] to [0,1]
    fPhi = (fPhi+1.0)/2.0;

    return vec2(fPhi, fTheta);
}

float calcPhongBlinn(vec3 vecV, vec3 vecN, vec3 vecL)
{
    float fLightingIntesity = 1.0;

    float fDiffuseIntensity = clamp(dot(normal, vecLight), 0, 1);

    vec3 vecHalfway = normalize(vecL + vecV);
    float fSpecularIntensity = pow(clamp(dot(vecHalfway, vecN), 0, 1), spec_exp);

    fLightingIntesity = ka + kd*fDiffuseIntensity + ks*fSpecularIntensity;

    return fLightingIntesity;
}

void main(void)
{

    vec2 sphCoord = cartesian2normspherical(cartescoord);
    vec2 texcoord = sphCoord.xy;

    // this vector is constant since we assume that we look orthogonally at the computer screen
    vec3 vecView = vec3(0.0, 0.0, 1.0);
    float fI = calcPhongBlinn(vecView, normal, vecLight);

    vec4 vecColor =  texture2D(samTexture, texcoord.xy);

    outFragColor = vec4(vecColor.rgb*fI, 1.0);
}

这是广泛的错误:

QOpenGLShader::compile(Vertex): ERROR: 0:1: '' :  version '150' is not supported

*** Problematic Vertex shader source code ***

QOpenGLShader: could not create shader
QOpenGLShader::link: ERROR: One or more attached shaders not successfully compiled

运行我的脚本文件: make && ./myMain.app/Contents/MacOS/myMain

EDIT1:将我的窗口文件添加到问题中

Window::Window()
{
    QGridLayout *mainLayout = new QGridLayout;


    QGLFormat glFormat;
    glFormat.setVersion(3, 3);
    glFormat.setProfile(QGLFormat::CoreProfile); 
    glFormat.setSampleBuffers(true);

    GLWidget *glWidget = new GLWidget(/*glFormat,0*/);
    mainLayout->addWidget(glWidget, 0, 0);

    setLayout(mainLayout);

    setWindowTitle(tr("Rendering with OpenGL"));
}

EDIT2:

经过大量研究,我得出的结论是,首先,我必须使用openGL v:3.3才能使着色器正常工作。我的“ OpenGl扩展查看器”说我的Mac不支持,我仍然想知道是否存在可以利用的漏洞。因此,有关如何执行或是否可行的任何信息都将有所帮助。

最后编辑:

我找到了解决方案,您必须将QGLFormat作为构造函数参数传递给QGLWidget。在这里找到了一些解决方案:

Qt5 OpenGL GLSL version error

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

从以上问题复制:

  

经过大量研究,我得出的结论是,首先,我   必须使用openGL v:3.3才能使着色器正常工作。我的“ OpenGl   Extensions Viewer”说我的Mac不支持,我仍然想知道   如果有漏洞,我可以利用。因此,有关如何或   如果可能的话,会有所帮助。

因此,最初的问题已得到回答,关于“漏洞”的第二部分应作为一个单独的问题(与该问题有关)提出。

更新

  

最后编辑:

     

我找到了解决方案,您必须将QGLFormat作为   构造函数参数。在这里找到了一些解决方案:

     

Qt5 OpenGL GLSL版本错误

     

谢谢您的帮助!