gpt4 book ai didi

c++ - 在 mac 上使用 openGL,不支持版本 '150' 错误

转载 作者:行者123 更新时间:2023-11-28 04:19:46 24 4
gpt4 key购买 nike

<分区>

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

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

我使用的是 macbook mid 12,看起来我使用的是 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

随着我的脚本文件的运行:制作 && ./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"));
}

编辑2:

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

最后编辑:

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

Qt5 OpenGL GLSL version error

感谢大家的帮助!

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com