1

最新のパイプライン実装の方法で、OS X 10.9 で Qt (v5.1.1) を使用して OpenGL プロジェクトをコーディングしようとしています。ただし、http: //qt-project.org/wiki/How_to_use_OpenGL_Core_Profile_with_Qtなど、チュートリアルからプログラムを再構築する際にいくつかの問題が発生します。

単純な三角形は表示されませんが、警告はなく、プログラム自体が表示されます。私の Mac は GLSL をサポートしていないのではないかと疑っていました。そこで、情報を印刷する方法を探しました。同様の問題を抱えていて、このようにした人を見つけました。

#include <QApplication>
#include <QGLFormat>
#include "glwidget.h"

int main(int argc, char* argv[])
{
    QApplication mApplication(argc, argv);

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

    qDebug() << "OpenGL context QFlags " << mGlFormat.openGLVersionFlags();
    qDebug() << "OpenGL context " << mGlFormat;

    GLWidget mWidget(mGlFormat);
    mWidget.show();

    qDebug() << "OpenGL context" << mWidget.format();
    qDebug() << "Driver Version String:" << glGetString(GL_VERSION);

    return mApplication.exec();
}

そして、私はその結果を得ました。

OpenGL コンテキスト QFlags QFlags(0x1|0x2|0x4|0x8|0x10|0x20|0x40|0x1000|0x2000|0x4000|0x8000)

OpenGL コンテキスト QGLFormat(options QFlags(0x1|0x2|0x4|0x20|0x80|0x200|0x400) , plane 0 , depthBufferSize -1 , accumBufferSize -1 , stencilBufferSize -1 , redBufferSize -1 , greenBufferSize -1 , blueBufferSize -1 , alphaBufferSize -1 、サンプル -1 、swapInterval -1 、メジャーバージョン 3 、マイナーバージョン 3 、プロファイル 1 )

OpenGL コンテキスト QGLFormat(options QFlags(0x1|0x2|0x4|0x20|0x80|0x200|0x400) , plane 0 , depthBufferSize 1 , accumBufferSize -1 , stencilBufferSize 1 , redBufferSize -1 , greenBufferSize -1 , blueBufferSize -1 , alphaBufferSize -1 、サンプル 4 、swapInterval -1 、majorVersion 3 、minorVersion 3 、プロファイル 1 )

ドライバー バージョン文字列: 0x10800e6be

このアイデアのソースで書かれたものから派生したこの正確な意味についてはわかりませんが、0x8000 は OpenGL 3.3 が最初にサポートされていることを意味しているようですが、後のフラグは 0x400 のみであるため、バージョンのサポートは何らかの形で失われています。途中。

私のグラフィック カードは、OpenGL 3.3 をサポートする NVIDIA GeForce 9400M 256 MB です。 https://developer.apple.com/graphicsimaging/opengl/capabilities/

  • これらの構成では GLSL を使用できないということですか?
  • その場合、一部のライブラリまたはグラフィックス ドライバをアップグレードできますか?
  • コア プロファイルをサポートしていないコンピューターで起動すると、コア プロファイルを使用するアプリケーションはどうなりますか?

同様の投稿 QGLWidget で必要な OpenGL バージョンを設定できません

4

1 に答える 1

3

このチュートリアルに苦労していたのは私だけではないようで、ここで解決策を見つけました。言及されていますが、VAO をバインドするためのチュートリアルのソース コードがありません。

これを m_shader.setAttributeBuffer の前に initializeGL に追加します。

uint vao;

typedef void (APIENTRY *_glGenVertexArrays) (GLsizei, GLuint*);
typedef void (APIENTRY *_glBindVertexArray) (GLuint);

_glGenVertexArrays glGenVertexArrays;
_glBindVertexArray glBindVertexArray;

glGenVertexArrays = (_glGenVertexArrays) QGLWidget::context()->getProcAddress("glGenVertexArrays");
glBindVertexArray = (_glBindVertexArray) QGLWidget::context()->getProcAddress("glBindVertexArray");

glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
于 2013-11-15T15:33:06.647 に答える