4

Qt とシェーダーで OpenGL を使い始めています (OpenGL の経験はありますが、シェーダーはまだ使用していません)。

私はこのチュートリアルに従っています: http://releases.qt-project.org/learning/developerguides/qtopengltutorial/OpenGLTutorial.pdf (公式の Qt5 OpenGL チュートリアル)。

問題は、プログラムを実行しようとすると、黒い画面と次のエラー メッセージが表示されることです。

QGLShader::compile(Vertex): ERROR: 0:1: '' :  version '130' is not supported

QGLShader::compile(Fragment): ERROR: 0:1: '' :  version '130' is not supported

私のプログラムは QGLWidget に基づいています

インターウェブをブラウジングすると、OpenGL 3.2 コンテキストを使用する必要があることがわかりましたが、Qt は OpenGL 2.x を使用するのが好きです。

私のコンピューター:

  • MacBook Pro Retina '15、2012 年後半
  • インテル HD 4000
  • NVIDIA GeForce 650M

では、どうすればこれを機能させることができますか?

編集:

私のバージョンは 3.2 (QGLFormat で設定) で、フォーマットが指定されていない場合は 2.0 を使用します

fragmentShader.frag:

#version 130

uniform vec4 color;

out vec4 fragColor;

void main(void)
{
    fragColor = color;
}

vertexShader.vert:

#version 130

uniform mat4 mvpMatrix;

in vec4 vertex;

void main(void)
{
    gl_Position = mvpMatrix * vertex;
}

エラー (形式、OpenGL 3.2):

QGLShaderProgram: shader programs are not supported 
QGLShaderProgram::uniformLocation( mvpMatrix ): shader program is not linked 
The program has unexpectedly finished.

エラー (フォーマットなし、OpenGL 2.0):

QGLShader::compile(Vertex): ERROR: 0:1: '' :  version '130' is not supported

QGLShader::compile(Fragment): ERROR: 0:1: '' :  version '130' is not supported
4

3 に答える 3

5

NewerQOpenGLWidgetは、QGLFormat. 代わりに、すべてのデフォルトを次main.cppのように指定します。QSurfaceFormatQOpenGLWidgetQOpenGLContext

// main.cpp
QSurfaceFormat glFormat;
glFormat.setVersion(3, 3);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(glFormat);

#version 330 coreこれで、シェーダーのようなものを使用できるはずです。

于 2015-11-02T16:30:55.110 に答える
2

オブジェクトを作成し、QGLFormatそれをコンストラクタ パラメータとして QGLWidget に渡す必要があります。以下のQGLFormatコードに示すように、オブジェクトを作成する必要があります。

QGLFormat glFormat;
glFormat.setVersion( 3, 2 );
glFormat.setProfile( QGLFormat::CoreProfile );
于 2013-06-30T14:56:52.217 に答える
0

Macbook (2011 年初頭) で同じエラーが発生しました。この回答が役に立ちます。基本的に、バージョン 120 を非推奨にします。

于 2014-10-06T13:26:44.727 に答える