OpenGL ステート変数の値を64ビット整数で取得: Qt GUI における QOpenGLExtraFunctions::glGetInteger64v() 関数の詳細解説と代替方法
QOpenGLExtraFunctions::glGetInteger64v()
関数は、OpenGL ステート変数の値を 64 ビット整数として取得するために使用されます。この関数は、OpenGL 4.3 以降でのみ使用可能であり、従来の glGetIntegerv()
関数の拡張版として機能します。
関数詳細
void QOpenGLExtraFunctions::glGetInteger64v(GLenum pname, GLint64 *params);
引数
params
: 取得したステート変数の値を格納するGLint64
型の配列ポインタです。pname
: 取得したいステート変数の名前を指定するGLenum
型の値です。
戻り値
なし
エラー処理
glGetInteger64v()
関数は、エラーが発生した場合に GLenum
型のエラーコードを返します。エラーが発生した場合は、glGetError()
関数を使用して詳細なエラー情報を取得する必要があります。
例
GLint64 bufferSize;
QOpenGLExtraFunctions::glGetInteger64v(GL_ARRAY_BUFFER_BINDING, &bufferSize);
この例では、GL_ARRAY_BUFFER_BINDING
ステート変数の値を取得し、bufferSize
変数に格納しています。GL_ARRAY_BUFFER_BINDING
ステート変数は、現在バインドされている頂点バッファオブジェクトの ID を格納します。
QOpenGLExtraFunctions::glGetInteger64v()
関数は、64 ビット整数のみをサポートします。32 ビット整数を取得するには、glGetIntegerv()
関数を使用する必要があります。QOpenGLExtraFunctions::glGetInteger64v()
関数は、OpenGL 4.3 以降でのみ使用可能です。古いバージョンの OpenGL を使用している場合は、glGetIntegerv()
関数を使用する必要があります。
#include <QOpenGLFunctions>
int main() {
// QOpenGLFunctions インスタンスを作成
QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions();
// GL_ARRAY_BUFFER_BINDING ステート変数の値を取得
GLint64 bufferSize;
functions->glGetInteger64v(GL_ARRAY_BUFFER_BINDING, &bufferSize);
// 取得した値を出力
std::cout << "Current array buffer ID: " << bufferSize << std::endl;
return 0;
}
このコードは、以下の手順を実行します。
QOpenGLFunctions
インスタンスを作成します。glGetInteger64v()
関数を使用して、GL_ARRAY_BUFFER_BINDING
ステート変数の値を取得します。- 取得した値をコンソールに出力します。
// GL_MAX_VERTEX_ATTRIBS ステート変数の値を取得
GLint64 maxVertexAttribs;
functions->glGetInteger64v(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
std::cout << "Maximum number of vertex attributes: " << maxVertexAttribs << std::endl;
// GL_MAX_VIEWPORT_DIM ステート変数の値を取得
GLint64 maxViewportDim[2];
functions->glGetInteger64v(GL_MAX_VIEWPORT_DIM, maxViewportDim);
std::cout << "Maximum viewport dimensions: " << maxViewportDim[0] << " x " << maxViewportDim[1] << std::endl;
代替方法
- glGetTexParameteriv() 関数: テクスチャパラメータの値を取得するには、
glGetTexParameteriv()
関数を使用できます。 - glGetMaterialfv() 関数: マテリアルプロパティの値を取得するには、
glGetMaterialfv()
関数を使用できます。 - glGetFloatv() 関数: 浮動小数点数のステート変数の値を取得するには、
glGetFloatv()
関数を使用できます。 - glGetBooleanv() 関数: ブール値のステート変数の値を取得するには、
glGetBooleanv()
関数を使用できます。 - glGetIntegerv() 関数:
QOpenGLExtraFunctions::glGetInteger64v()
関数の代わりにglGetIntegerv()
関数を使用することもできます。ただし、glGetIntegerv()
関数は 32 ビット整数しか取得できないため、64 ビット整数が必要な場合は使用できません。
どの方法を選択するべきか
どの方法を選択するべきかは、取得したいステート変数の型と、必要な精度によって異なります。
- テクスチャパラメータの値を取得したい場合は、
glGetTexParameteriv()
関数を使用します。 - マテリアルプロパティの値を取得したい場合は、
glGetMaterialfv()
関数を使用します。 - 浮動小数点数のステート変数の値を取得したい場合は、
glGetFloatv()
関数を使用します。 - ブール値のステート変数の値を取得したい場合は、
glGetBooleanv()
関数を使用します。 - 32 ビット整数で十分な場合は、
glGetIntegerv()
関数を使用できます。 - 64 ビット整数が必要な場合は、
QOpenGLExtraFunctions::glGetInteger64v()
関数を使用する必要があります。
例
以下のコードは、glGetIntegerv()
関数を使用して GL_ARRAY_BUFFER_BINDING
ステート変数の値を取得する方法を示しています。
GLint bufferSize;
glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &bufferSize);
このコードは、QOpenGLExtraFunctions::glGetInteger64v()
関数を使用するよりも簡潔ですが、32 ビット整数しか取得できません。