私はOpenGL 4.4でQt 5.7.0を使用していますが、Qtを使用するために古いコードを移植しようとしています。Qt5 - glTexStorage2D/glBindImageTextureは未定義ですか?
float* data = new float[IMAGE_WIDTH * IMAGE_HEIGHT];
for (int i = 0; i < IMAGE_WIDTH * IMAGE_HEIGHT; ++i)
data[i] = 0.f;
GLuint tex[1];
glGenTextures(1, tex);
glBindTexture(GL_TEXTURE_2D, tex[0]);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_R32F, IMAGE_WIDTH, IMAGE_HEIGHT);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, GL_RED, GL_FLOAT, data);
glBindImageTexture(0, tex[0], 0, GL_FALSE, 0, GL_READ_WRITE, GL_R32F);
delete[] data;
しかし、明らかglTexStorage2D
とglBindImageTexture
:私は私のGLEW、非Qtのプロジェクトでは正常に動作し、次のコードを使用していますので、私の知る限り理解し、Qtはシェーダーテクスチャを処理する独自の方法を持っていません。は未定義です。私はドキュメンテーションを見て、彼らは存在する必要があります。私は#include
をQOpenGLFunctions_4_4_Core
、QOpenGLFunctions_4_2_Core
、QOpenGLTexture
、QOpenGLFunctions
にしようとしましたが、問題は解決していません。例外がスローされた「と
QOpenGLFunctions_4_4_Core gl;
gl.glTexStorage2D((GL_TEXTURE_2D, 1, GL_R32F, IMAGE_WIDTH, IMAGE_HEIGHT);
クラッシュ::でも、インスタンスを作成することは私にエラーを与える
inline void QOpenGLFunctions_4_4_Core::glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
d_4_2_Core->f.TexStorage2D(target, levels, internalformat, width, height);
}
:私もQOpenGLFunctions_4_4_Core
のソースに見てきました。アクセス違反を読んthis-> d_4_2_Coreはnullptrました。 "
a)この問題を解決する方法はありますか。またはそれより良いb)イメージのロード/ストアを行うQtの方法?
Qtのラッパーを経由するのではなく、通常のOpenGL呼び出しを使用できない理由はありますか? –
@NicolBolas私は、はるかに整理され扱いやすいQtの方法を見つけました。私はむしろQtの半分ではなく、普通のOpenGLの半分ですべてをやりたいと思います。 – otah007