Qt GUIプログラミング:OpenGL拡張機能情報取得の代替方法:QOpenGLExtraFunctions::glGetInteger64i_v()以外の方法


QOpenGLExtraFunctions::glGetInteger64i_v() 関数は、OpenGL拡張機能に関連する64ビット整数の情報を取得するために使用されます。主に、OpenGL 4.3以降で導入された拡張機能の情報取得に使用されます。

構文

void QOpenGLExtraFunctions::glGetInteger64i_v(GLenum pname, GLint64 *params);

パラメータ

  • params: 取得した情報を格納するGLint64型の配列ポインタ。
  • pname: 取得したい情報の種別を指定するGLenum型の値。

戻り値

なし

詳細

glGetInteger64i_v() 関数は、指定されたpname によって識別される OpenGL 拡張機能に関連する 64 ビット整数の情報を取得します。取得した情報は params 配列に格納されます。

pname が有効な値でない場合、または params が nullptr である場合、または params 配列が十分な大きさでない場合、エラーが発生します。

GLint64 params[4];

// OpenGL 4.3 以降で導入された拡張機能の情報取得
QOpenGLExtraFunctions::glGetInteger64i_v(GL_MAJOR_VERSION, params);
QOpenGLExtraFunctions::glGetInteger64i_v(GL_MINOR_VERSION, params + 1);

// 取得した情報の利用
qDebug() << "OpenGL major version:" << params[0];
qDebug() << "OpenGL minor version:" << params[1];

注意事項

  • 取得する情報の量に応じて、params 配列に十分な大きさのメモリを確保する必要があります。
  • 使用前に、対応する OpenGL 拡張機能が有効になっていることを確認する必要があります。
  • QOpenGLExtraFunctions::glGetInteger64i_v() 関数は、OpenGL 4.3以降でのみ使用できます。
  • 拡張機能によって提供される機能のオン/オフ状態取得
  • OpenGL 4.3以降で導入された拡張機能のバージョン情報取得


#include <QCoreApplication>
#include <QOpenGLFunctions>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    // QOpenGLContext を作成
    QOpenGLContext context;
    context.setFormat(QSurfaceFormat::defaultFormat());
    context.create();

    // QOpenGLFunctions を取得
    QOpenGLFunctions *functions = context.functions();

    // OpenGL major version と minor version を取得
    GLint64 params[2];
    functions->glGetInteger64i_v(GL_MAJOR_VERSION, params);
    functions->glGetInteger64i_v(GL_MINOR_VERSION, params + 1);

    // 取得した情報を表示
    qDebug() << "OpenGL major version:" << params[0];
    qDebug() << "OpenGL minor version:" << params[1];

    return 0;
}

コード解説

  1. QCoreApplication クラスを使用して Qt アプリケーションを作成します。
  2. QOpenGLContext クラスを使用して OpenGL コンテキストを作成します。
  3. QOpenGLFunctions クラスを取得します。
  4. glGetInteger64i_v() 関数を使用して、OpenGL major version と minor version の情報を取得します。
  5. 取得した情報をコンソールに出力します。
  • 実際に実行するには、Qt フレームワークと OpenGL ライブラリをインストールする必要があります。
  • このコードは、OpenGL 4.3以降で動作することを確認してください。


古いバージョンの OpenGL で同様の情報を取得するには、以下の代替方法を使用できます。

代替方法 1: glGetIntegerv() 関数を使用する

glGetIntegerv() 関数は、OpenGL 1.1 以降で利用可能な関数です。この関数は、32 ビット整数の情報を取得するために使用されます。

GLint params[2];

// OpenGL major version と minor version を取得
glGetIntegerv(GL_MAJOR_VERSION, params);
glGetIntegerv(GL_MINOR_VERSION, params + 1);

// 取得した情報を表示
qDebug() << "OpenGL major version:" << params[0];
qDebug() << "OpenGL minor version:" << params[1];

代替方法 2: 特定の拡張機能固有の関数を使用する

一部の OpenGL 拡張機能には、バージョン情報取得専用の関数を提供しています。例えば、GL_ARB_fragment_program 拡張機能には、glGetProgramivARB() 関数があります。

GLint params[2];

// OpenGL major version と minor version を取得
glGetProgramivARB(0, GL_ARB_PROGRAM_RESOURCE_LOCATION_INDEX, params);
glGetProgramivARB(0, GL_ARB_PROGRAM_RESOURCE_LOCATION_COUNT, params + 1);

// 取得した情報を表示
qDebug() << "OpenGL major version:" << params[0];
qDebug() << "OpenGL minor version:" << params[1];

注意事項

  • 特定の拡張機能固有の関数は、その拡張機能が有効になっている場合にのみ使用できます。
  • 上記の代替方法は、32 ビット整数の情報しか取得できないことに注意が必要です。

上記以外にも、OpenGL のバージョン情報取得には様々な方法があります。詳細は、OpenGL ドキュメントを参照してください。