aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/compressedtexture
Commit message (Collapse)AuthorAgeFilesLines
* Adjust QSGTexture comparisonKey typeLaszlo Agocs2020-05-272-4/+4
| | | | | | | | | | | | | | | | | | | | | The original choice was int, simply following textureId(). This was later deemed insufficient: instead of a GLuint, the value is now often a 64-bit value (on 64 bit systems), based on a pointer, since the identity of a texture in the RHI world is the QRhiTexture* itself. In a custom texture implementation it is likely that the value here is the value of a native object handle, either a pointer or some 32 or 64 bit integer. Inspired by the recent QSGTexture::NativeTexture struct change (void* -> quint64), switch to a qint64 which is big enough to hold all these without truncation. We choose a signed value here, in order to allow for the following pattern that is widespread in material compare() implementations: if (qint64 diff = m_texture->comparisonKey() - other->texture()->comparisonKey()) return diff; Fixes: QTBUG-83769 Change-Id: I8bdae8cd835282358ded53b3703142b8f26e4400 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* RHI implementation of compressed texture atlasingEirik Aavitsland2020-05-264-66/+69
| | | | | | | | | | | | | Automatic atlasing (which is enabled by default for normal textures) was added as an experimental, opt-in feature in 5.11. This commit redoes that implementation for RHI, and enables it by default. [ChangeLog] Enable automatic atlasing of compressed textures (can be disabled with QSG_DISABLE_COMPRESSED_ATLAS=1) Fixes: QTBUG-78582 Change-Id: Ia8344fffdc8dd8fb476bf6a77057c359e4816487 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Move updateRhiTexture and co. to QSGTextureLaszlo Agocs2020-04-282-32/+21
| | | | | | | | | | | | | | | | | | | Use a more descriptive name, commitTextureOperations() in order to avoid confusion with QSGDynamicTexture::updateTexture() which has nothing to do with this. With this the QSGTexture interface has all 5.14 pending changes done (changes that were plumbed via ugly hacks due to having had to deal with binary compatibility). The awful enforcing of subclassing QSGTexturePrivate for each and every QSGTexture subclass is now eliminated. Purging the direct OpenGL code path will involve removing QSGTexture functions like textureId(), bind(), updateBindOptions(). With this patch we now we have all the equivalents (or, in some cases, spiritual successors) in place. Task-number: QTBUG-82997 Change-Id: I7a831f982070c52abc7a36604130a1110d14ff9c Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Add argument to QSGTexture::removedFromAtlas()Laszlo Agocs2020-04-162-2/+2
| | | | | | | | | | | ...as requested by the Qt 6 TODO. To preserve binary (and source) compatibility in 5.14, the argument was changed into a variable in QSGTexturePrivate, with a public setter. This can now go away and the signature of removedFromAtlas() can get updated. Task-number: QTBUG-82997 Change-Id: I930c0014712c78e140b778b6e9a4d8b92c5bdc8c Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Make comparisonKey() a pure virtual in QSGTextureLaszlo Agocs2020-04-162-8/+7
| | | | | | | | | | In Qt 5.14 this was a virtual in QSGTexturePrivate due to having had to maintain binary compatibility. In 6.0 it becomes a pure virtual in QSGTexture. Task-number: QTBUG-82997 Change-Id: I26a42169b071fe8d413f5c89ef45850fa7222006 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Introduce new mechanism to manage palette functionality in QMLVitaly Fanaskov2020-03-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Main goals of these changes: 1) Add an ability to work with disabled and inactive palettes from QML 2) Eliminate massive code duplication in qtquickcontrols2 module 3) Provide easily extensible architecture for this piece of functionality Architectural part. Palette It was decided to not change existing QPalette, but add thin wrappers around it to provide all required functionality. These wrappers are highly coupled with QPalette class because of using some enum values from it. There are two new classes QQuickPalette and QQuickColorGroup. QQuickPalette class inherits QQuickColorGroup class and represents Active/All color group. QQuickPalette also provides an access to three color groups: Active, Inactive, and Disabled. In order to access colors the special class QQuickPaletteColorProvider is used. This is a wrapper around QPalette that provides some convenience functions. Interface The private property "palette" should be exposed. Implementation All private parts of classes that implement QQuickAbstractPaletteProvider have to inherit QQuickPaletteProviderPrivateBase class. This template class implement all functionality: create palette, resolve dependencies, connect objects etc. This is important to mention that related data is lazily allocatable on demand only. Hence, there is no memory overhead for regular items. Change-Id: I911424b730451b1ad47f68fd8007953b66eddb28 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Merge remote-tracking branch 'origin/5.15' into devQt Forward Merge Bot2020-03-091-5/+5
|\ | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/compiler/qqmlirbuilder_p.h src/qml/qml/qqmlpropertycachecreator_p.h src/qmltyperegistrar/qmltypesclassdescription.cpp src/qmltyperegistrar/qmltypesclassdescription.h src/qmltyperegistrar/qmltypescreator.cpp src/quick/items/qquicktext_p.h src/quick/util/qquickvaluetypes_p.h Change-Id: Ic209741592e7b85820bf3845722023a190ebc1c5
| * Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2020-03-031-5/+5
| |\ | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qmlmodels/qqmltableinstancemodel.cpp src/qmlmodels/qqmltableinstancemodel_p.h Change-Id: I89339b1cb41ba27fe30c79530859a1c2bfbecc69
| | * Fix texture coords for the compressed texture atlasMichael Brasser2020-02-211-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | The texture coords should be based on the actual image size, and not on the padded size. Change-Id: I262b7ca93e26c48324ec892a988f2fc62132175e Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* | | Merge remote-tracking branch 'origin/5.15' into devQt Forward Merge Bot2020-02-211-1/+1
|\| | | | | | | | | | | | | | | | | | | | Conflicts: tests/auto/quick/qquickmousearea/BLACKLIST Change-Id: I3de2c6377d57f5f9204d2cfc688d50a7a0b4150c
| * | Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2020-02-201-1/+1
| |\| | | | | | | | | | Change-Id: I024445b3401a57040d7d67780ea32d2f8b02f41a
| | * Fix inverted logicMichael Brasser2020-02-171-1/+1
| | | | | | | | | | | | | | | | | | | | | A texture has an alpha channel if it is *not* opaque. Change-Id: Ie7fdeb6e622dbb01e19b42877b27f0e0fe8959e2 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* | | Quick: Don't qualify OpenGL includes (part two)Johan Klokkhammer Helsing2020-02-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 406f15ce0e only removed the "QtGui" prefix from some includes, but we are trying to move (almost) everything OpenGL related from QtGui. This removes prefixes for additional QOpenGL includes (QOpenGLShaderProgram, versioned opengl functions etc.). Task-number: QTBUG-74409 Change-Id: I91e1feac0676859f11de9b75301a0a4e81db50d9 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Quick: Don't qualify OpenGL includesUlf Hermann2020-01-271-3/+3
|/ / | | | | | | | | | | | | | | | | | | | | | | | | The headers are moving from QtGui to QtOpenGL. By avoiding the qualification we can keep them compiling either way. Also, add opengl-private to make the types available. Also removed the QGraphicsRotation hack to get access to the projected rotation function of QMatrix4x4. The function is public now. Task-number: QTBUG-74409 Change-Id: I216e8ca09f8e247f96627b081308e3a57c55c29c Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* / Avoid initializing QFlags with 0 or nullptr in further casesFriedemann Kleint2019-11-251-1/+1
|/ | | | | | | Amends 744e77b841878fb017c0f2d60607090008f28180. Change-Id: I16e37aaf503eb62f67fca0e48be4c92c4a72ae46 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Support DXT1/3/5 in compressed texture atlasv5.14.0-beta2Michael Brasser2019-10-171-1/+11
| | | | | Change-Id: I791adbfce96481aea71bb285e48b89cb5db08e1c Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* Add the graphics api independent scenegraph portLaszlo Agocs2019-07-044-11/+201
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Opt in via environment variables: QSG_RHI=1 -> enable using QRhi instead of GL QSG_RHI_BACKEND -> set to vulkan, metal, d3d11, gl to override the default (the default is d3d11 on Windows, metal on Mac, gl elsewhere) Or force a given rhi backend via the existing QQuickWindow::setSceneGraphBackend(). Otherwise the default behavior is the same as before, the rhi code path is never active by default. -no-opengl builds are supported in the sense that they work and default to the software backend. However, the rhi code path cannot currently be used in such builds, even though QRhi from qtbase is fully functional with Vulkan, D3D, or Metal even when qtbase was configured with -no-opengl. This cannot be utilized by Quick atm due to OpenGL usage being all over the place in the sources corresponding to the default backend, and those host the rhi code path as well. This will be cleaned up hopefully in Qt 6, with the removal all direct OpenGL usage. Other env.vars.: QSG_RHI_DEBUG_LAYER=1 -> enable D3D debug or Vulkan validation layer (assuming the system is set up for this) QSG_RHI_SHADEREFFECT_DEBUG=1 -> print stuff from ShaderEffect QSG_SAMPLES=1,2,4,... -> MSAA sample count (but QSurfaceFormat works too) QT_D3D_ADAPTER_INDEX=0,1,... -> D3D adapter index QT_VK_PHYSICAL_DEVICE_INDEX=0,1,... -> Vulkan physical device index QSG_RHI_UINT32_INDEX=1 -> always use uint index data (both merged/unmerged, convert when needed - with some rhi backends this is implicit) QSG_RENDER_LOOP -> to override the render loop as usual. The default with RHI is threaded for Metal, threaded for Vulkan on Windows, basic for Vulkan on Linux and Android (to be checked later), while the existing rules apply for OpenGL. Not supported when running with QRhi: - particles - compressed atlases (though this is transparent to the apps) - QSGRenderNode - QQuickRenderControl - QQuickFramebufferObject - certain QQuickWindow functionality that depends directly on OpenGL - anisotropic filtering for textures - native text may lack some gamma correction - QSGEngine applicability unclear - some QML profiler logs may be incorrect or irrelevant Change-Id: I7822e99ad79e342e4166275da6e9e66498d76521 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Compressed textures: Replace file decoding code with QtGui functionalityEirik Aavitsland2018-08-098-626/+33
| | | | | | | | | | The functionality for reading and decoding texture files (currently pkm and ktx formats) is now available in QtGui util API. Utilize that instead of keeping equivalent code here. Task-number: QTBUG-67026 Change-Id: Icb7c348eaa51cd15e41031508ef54164fc876c9e Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Fix: do data size check of pkm format compressed texture filesEirik Aavitsland2018-02-281-3/+2
| | | | | | | | | | Reintroduce reading - and sanity checking - the data size from the file header of pkm files. This was commented out during the refactoring, since it lacked the fix for ETC2_EAC format (ref. 16cd1f8 on 5.10 branch). This commit also includes that fix. Change-Id: Id85547fb6bee254d58e49ddff4593704f7ab83ed Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Fix memory leak in compressed texture file readingEirik Aavitsland2018-02-271-0/+1
| | | | | | | The format handler object would never be deleted. Change-Id: I44e0740f8ab0404ebb2951865bfedc5a4c8227f3 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* use nullptr consistently (clang-tidy)Shawn Rutledge2018-02-261-3/+3
| | | | | | | | | | | | | From now on we prefer nullptr instead of 0 to clarify cases where we are assigning or testing a pointer rather than a numeric zero. Also, replaced cases where 0 was passed as Qt::KeyboardModifiers with Qt::NoModifier (clang-tidy replaced them with nullptr, which waas wrong, so it was just as well to make the tests more readable rather than to revert those lines). Change-Id: I4735d35e4d9f42db5216862ce091429eadc6e65d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Add basic handler for ktx format texture filesEirik Aavitsland2018-02-012-0/+264
| | | | | | | | This adds basic support for reading compressed textures stored in .ktx files, the Khronos texture file format. Change-Id: Iafb86cff9607eedb26a73989f9b005455ddd316f Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* Basic working compressed texture atlasMichael Brasser2018-01-314-1/+306
| | | | | | | | | | | | | This adds experimental automatic atlasing of ETC-compressed textures (to be expanded to additional formats), similar to existing atlas support of QImages. It is off by default, and can be enabled with QSG_ENABLE_COMPRESSED_ATLAS=1. [ChangeLog] Add experimental automatic atlasing of ETC-compressed textures (can be enabled with QSG_ENABLE_COMPRESSED_ATLAS=1) Change-Id: Ia66971f51299d082a569bdfaadb662a3e522bd79 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Refactor compressed texture file readingEirik Aavitsland2018-01-275-159/+487
| | | | | | | | | | | | | | This commit expands on the basic support for compressed texture files that was added in 432e27a. It prepares for adding support for other file types than pkm by declaring a common QSGTextureFileHandler interface, and by factoring out reusable code parts in a new QSGCompressedTexture class. It also adds some more systematic logging and checking for error conditions. Change-Id: Ie5070d0a6df757fee0753f53adbe23a33d51a634 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Fix symbol clash in static builds in etc texture providerSimon Hausmann2017-08-252-10/+10
| | | | | | | | | All symbols must be prefixed with Q to avoid clashes with user code when linking statically. Task-number: QTBUG-62772 Change-Id: Ib4d44ad2db3053fc8dba3235ee2774774a38bf6c Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Add very basic compressed texture supportMichael Brasser2017-08-072-0/+303
Allow direct loading of pkm texture files into Image. This can be extended to additional texture types, and then eventually turned into a full plugin architexture. [ChangeLog][Qt Quick] Allow direct loading of pkm texture files into Image. For example: Image { source: "myImage.pkm" } Change-Id: I1baed6c3e85a15752da8adc675482d874c9355ab Task-number: QTBUG-59872 Task-number: QTBUG-29451 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>