【问题标题】:How to use compressed / encoded textures in QML?如何在 QML 中使用压缩/编码纹理?
【发布时间】:2016-03-16 11:40:35
【问题描述】:

是否可以直接在 qml 中从压缩纹理向 QImage 发送数据?

现在我有以下代码:

Image 
{
  anchors.fill: parent
  fillMode : Image.Stretch
  source : "Textures/BG_png.png"
}

然后,我创建具有各种格式来源的图像,更准确地说:

// uncompressed
source : "Textures/BG_RGB565.dds"
source : "Textures/BG_RGB888.dds"
source : "Textures/BG_RGBA8888.dds"

//compressed
source : "Textures/BG_ETC1.ktx"
source : "Textures/BG_ETC1.pkm"
source : "Textures/BG_ETC1.dds"
source : "Textures/BG_PVR.pvr"
source : "Textures/BG_ASTC.astc"

对于除 BG_RGB565.dds 之外的所有源类型(并且仅使用“.dds”扩展名),我都收到以下错误“QML Image : invalid image data”。

我有以下问题:

  1. 为什么 RGB565.dds 有效而 RGB888 或其他未压缩格式无效?

  2. QT QML 支持哪些 OpenGL 图像类型,以及如何提示 Image 类其源代码仅使用 QML 以某种方式编码/压缩?

【问题讨论】:

    标签: qt opengl textures


    【解决方案1】:

    您必须自己使用 QQuickImageProvider 来实现。

    将 QQuickImageProvider 的类型设置为:

    QQmlImageProviderBase::Texture
    

    然后从requestTexture(const QString &id, QSize *size, const QSize &requestedSize)返回一个QSGTextureProvider

    在此处查看更多详细信息: https://doc.qt.io/qt-5/qquickimageprovider.html

    目前 Image {} 支持的唯一支持格式是: https://doc.qt.io/qt-5/qtimageformats-index.html

    也许可以从 Qt3D 加载它,但我不确定这些格式是否受支持。

    【讨论】:

    • 如文档中所述,dds 不支持第 3 部分法典。这意味着不支持 ETC1 压缩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多