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;
}
コード解説
QCoreApplication
クラスを使用して Qt アプリケーションを作成します。QOpenGLContext
クラスを使用して OpenGL コンテキストを作成します。QOpenGLFunctions
クラスを取得します。glGetInteger64i_v()
関数を使用して、OpenGL major version と minor version の情報を取得します。- 取得した情報をコンソールに出力します。
- 実際に実行するには、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 ドキュメントを参照してください。