我一直在使用旧的Qt OpenGl方法,但现在是时候切换到新的方法。
位图 FIBITMAP *已正确初始化
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,宽度,高度,0, GL_BGRA,GL_UNSIGNED_BYTE,(void *)FreeImage_GetBits(pImage));
对我来说就像一个魅力。
但现在在较新的方法中,最好使用 QOpenGLTexture
不幸的是,我的尝试没有成功,即
QOpenGLTexture * qtexture = new QOpenGLTexture(QOpenGLTexture :: Target2D);
提升口感>使用setData(QOpenGLTexture ::的PixelFormat :: RGBA, QOpenGLTexture :: PixelType :: INT8,FreeImage_GetBits(位图));
该代码返回1x1纹理,但如果我强制使用
这样的大小qtexture->的setSize(宽度,高度,4);
qtexture有适当的大小,但它完全是黑色的,我也尝试在Qt / Freeimage论坛等搜索,但不幸的是,每个人都使用QImage来提供QOpenGLTexture,但不幸的是我需要支持一些"奇怪"文件格式如.hdr或.exr,Qt本身不支持。
提前感谢您的时间!
答案 0 :(得分:0)
qtexture-> allocateStorage();
是关键!
答案 1 :(得分:0)
对于QOpenGLTexture
,您必须在Size
之前设置Format
,allocateStorage
。最后一步是setData
。
QOpenGLTexture *text = new QOpenGLTexture(QOpenGLTexture::Target2D);
text->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear);
text->create();
// given some `width`, `height` and `data_ptr`
text->setSize(width, height, 1);
text->setFormat(QOpenGLTexture::RGBA8_UNorm);
text->allocateStorage();
text->setData(QOpenGLTexture::Red, QOpenGLTexture::UInt8, data_ptr);