summaryrefslogtreecommitdiffstats
path: root/src/render/geometry/geometryrenderer.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Introduce QGeometryViewMike Krus2020-02-271-40/+49
| | | | | | | | | | Like QGeometryRenderer but not for rendering. A renderer can now be given a view to render. Further down the line, picking and bounding volume will be able to be given a view (could use a simplified non-renderered proxy to calculate the bounding volume). Change-Id: Ibe18b6e1d7c973e572bb3f2199c0776a4fc6c0e7 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Geometry refactoringMike Krus2020-02-271-3/+3
| | | | | | | Move QBuffer, QAttribute, QGeometry to Qt3DCore. Change-Id: I59dfd091eefadcada93350b3aba955f40b304385 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Hide deprecated functor APIMike Krus2020-02-121-1/+3
| | | | | | | | | | Now private for QTextureGenerator and QGeometryFactory updates. QTextureImageDataGenerator remains for now as it was not previously deprecated and, mainly, it's the only API to get data into an image. Consequently, QAbstractFunctor has been un-deprecated. Change-Id: Ie6691bc402ad603d63abcf1ec9fc3513091f5740 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Remove deprecated classes and functionsPaul Lemire2020-02-111-4/+2
| | | | | | | Mostly old messaging API Change-Id: I17eb2206b2ede56d2f7d36375d5e711d6149019f Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Set Loading status on QMesh when functor changesMike Krus2019-10-301-1/+9
| | | | | | | Will then be set to Ready or Error once the job runs Change-Id: I542fdce9aea08e6e49fdaec645216132a56e7474 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Convert LoadGeometryJob to use direct syncPaul Lemire2019-10-101-14/+6
| | | | | Change-Id: Id744de2f10e7744ad5a9d4f425ae534153ed7446 Reviewed-by: Mike Krus <mike.krus@kdab.com>
* Clean up includesMike Krus2019-10-011-2/+0
| | | | | | | | | Remove include statements for classes that are no longer used. Makes it easier to find remaining use cases that need addressed before complete removal in Qt 6. Change-Id: I60529ba1929ad64b162d3847d5df47cde2a60dad Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Update QGeometryRenderer to use direct sync modeMike Krus2019-09-181-85/+37
| | | | | Change-Id: Ie7bf8f248d38a98860fb84d7053d75f3383a5bbd Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Revert "Keep rendering in sync with aspect jobs by adding barriers"Paul Lemire2018-02-281-2/+0
| | | | | | | | | | | | | | | | | | | | | | | This reverts commit 46319648436814afb5a77755dde6681e304befaf. We want to be able to render one set of RenderViews for frame n while concurrently building RenderViews for frame n + 1. The reverted commit removed that behavior which reduced the CPU time available to prepare a frame. This would cause on some scenes a failure to meet the ~10ms budget we have to prepare a frame. This is therefore a regression. The root cause behind this regression is that a job cannot be executed until all the jobs which have been previously launched have completed. The proposed solution would be to instead add an OpenGL command thread that can be used to load graphics resources required for the RenderViews directly when required. This would in turn allow to cache RenderViews and keep the concurrent behavior of RenderView submission and creation. With that goal in mind, the following patches will be rebased and updated https://codereview.qt-project.org/#/c/189309/ https://codereview.qt-project.org/#/c/189310/ Change-Id: I4879047c45986a0e615e3aef7b7352f82a04a9da Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Merge remote-tracking branch 'origin/5.10' into 5.11Sean Harmer2018-02-151-0/+2
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/animation/doc/src/qt3danimation-module.qdoc src/render/backend/abstractrenderer_p.h src/render/backend/buffervisitor_p.h src/render/backend/renderer.cpp src/render/backend/renderer_p.h src/render/backend/triangleboundingvolume_p.h src/render/backend/trianglesextractor_p.h src/render/frontend/sphere_p.h src/render/jobs/calcboundingvolumejob.cpp src/render/jobs/job_common_p.h src/render/jobs/pickboundingvolumejob.cpp src/render/jobs/pickboundingvolumejob_p.h src/render/jobs/pickboundingvolumeutils.cpp src/render/jobs/renderviewjobutils_p.h tests/auto/render/boundingsphere/tst_boundingsphere.cpp tests/auto/render/commons/testrenderer.h tests/auto/render/raycasting/tst_raycasting.cpp tests/auto/render/render.pro tests/auto/render/renderer/tst_renderer.cpp Change-Id: I76633bc5a5a065e5f9ea62cc16563377e5c693a3
| * Keep rendering in sync with aspect jobs by adding barriersSvenn-Arne Dragly2018-02-021-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes sure that jobs that depend on a specific state of the renderer (such as context being initialized) never run before this is the case. This reduces the number of possible race conditions and checks we need to do to ensure the jobs and the renderer are in the correct state. This way we no longer swap buffers when nothing has been rendered, which in turn makes sure that we only draw one frame when the render policy is OnDemand and there are no changes. This change also adds a number of assertions on pointers to resources to make it easier to detect missing job dependencies. Finally, this change overhauls the job dependencies in Renderer and RenderViewBuilder. Task-number: QTBUG-66024 Change-Id: I3e4e9dd0dd53b5c88f5c1b17d68df42f28eae794 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
| * QMesh: do not rely on QAspectEngine to create QGeometryFactoryPaul Lemire2018-01-221-0/+23
| | | | | | | | | | | | | | | | | | | | | | - This would prevent QMesh created without parent/scene to have a proper geometry factory. - This avoid passing the engine around Change-Id: I5091970f96e87ab8b129475a1113ef84ce170388 Task-number: QTBUG-65506 Reviewed-by: Mike Krus <mike.krus@kdab.com>
* | Mesh loading: send status updatePaul Lemire2018-01-221-13/+21
| | | | | | | | | | | | Change-Id: Id4b73655ee30c3c225ee804f1e9244cc2b16aebf Task-number: QTBUG-60927 Reviewed-by: Mike Krus <mike.krus@kdab.com>
* | QMesh: do not rely on QAspectEngine to create QGeometryFactoryPaul Lemire2018-01-221-0/+23
|/ | | | | | | | | | | - This would prevent QMesh created without parent/scene to have a proper geometry factory. - This avoid passing the engine around Change-Id: I5091970f96e87ab8b129475a1113ef84ce170388 Task-number: QTBUG-65506 Reviewed-by: Mike Krus <mike.krus@kdab.com>
* Properly check that the functor has actually changedSean Harmer2017-07-281-4/+9
| | | | | | | | Otherwise we if we blindly set the same functor we are repeating the work it does for absolutely no reason. Change-Id: Icc05a82bcb893f83c9ddcf09c1c3d1e8a2c34708 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Fix: set renderer dirty flag on initializationPaul Lemire2017-07-281-0/+1
| | | | | Change-Id: I9c164409e3ced5d78182542ae060692e0f65d3ac Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* QGeometryRenderer: add index buffer byte-offset propertyMauro Persano2017-06-281-0/+6
| | | | | | | | | | Add property to QGeometryRender to set a byte-offset into the index buffer. The property will only be valid when the geometry has an index buffer attribute. Task-number: QTBUG-60027 Change-Id: I87409b89766e622fd9a4ab8233f0bc0578f15852 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Renderer: add more dirty flags and launch jobs based on thatPaul Lemire2017-06-011-1/+1
| | | | | | | | | This allows to launch the boundings volumes and transform related jobs only when transforms or geometry have changed. This will be extended in the following commits to Materials, FrameGraph... Change-Id: I71bc61471639ead32de71c9e78952fb0741ef185 Reviewed-by: Mike Krus <mike.krus@kdab.com>
* Use non-template version of QVariant::value (clazy reports)Mike Krus2017-05-021-1/+1
| | | | | Change-Id: I998507edff792cfbdcdf2e36e29792fab3c734cf Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Namespace ray casting classesMike Krus2017-01-201-2/+2
| | | | | | | | | | Main usage to namespace QBoundingVolume, QBoundingSphere for future use. Renamed QBoundingSphere to BoundingSphere to avoid clashes in file names. Change-Id: I0adcb3c3a5f1b8134653773a8e21490ecf61bae4 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* GeometryRendererFunctor: remove useless returnPaul Lemire2016-11-231-1/+1
| | | | | Change-Id: Idf1430fbbe4fc71ae1f3946aa5d6ffc44bda5a9a Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
* QGeometryRenderer: fix notification of geometry changingPaul Lemire2016-07-041-18/+3
| | | | | Change-Id: Ic0fc25a9aacf47863d0ac058d3be687415b2cbdd Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Remove QBackendNodePropertyChangeSean Harmer2016-05-131-1/+2
| | | | | | | | Not needed as we can just use delivery flags on QPropertyUpdatedChange. Task-number: QTBUG-51494 Change-Id: I53b52ac7a1b226dd30756bcebcdd62bffd3a6fd5 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Rename QNodeRemovedPropertyChange -> QPropertyNodeRemovedChangeSean Harmer2016-05-101-1/+1
| | | | | | Task-number: QTBUG-51494 Change-Id: I1c7f1c680bc18c6201b790e96dc4023564837122 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Rename QNodeAddedPropertyChange -> QPropertyNodeAddedChangeSean Harmer2016-05-101-3/+3
| | | | | | Task-number: QTBUG-51494 Change-Id: I7f59bad66eb086e2249c580be2fd9f4bad159eb3 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* QNodePropertyChange -> QPropertyUpdatedChangeSean Harmer2016-05-101-2/+2
| | | | | | Task-number: QTBUG-51494 Change-Id: Ic326499f80b5a91b2d19c09770de926f220cc805 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Rename NodeAdded/NodeRemoved ChangeFlagsSean Harmer2016-05-101-2/+2
| | | | | | | | | | | | | | | | These are not just for adding/removing QNodes. They are more general in purpose and are used for adding/removing values to/from collection based properties e.g. QVector<MyValue>. The addition/removal of QNode pointers (which we translate to QNodeIds) is just the most common case. If Q_PROPERTY/QObject gains support for properties of collections and the typical operations on them, then we will be able to catch and handle most uses of these change types in QNodePrivate just like we do for setting a Q_PROPERTY. Task-number: QTBUG-51494 Change-Id: I707de1647554a61accf81dc79bfe58b289dbff7b Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Rename NodeUpdated ChangeFlag to PropertyUpdatedSean Harmer2016-05-101-1/+1
| | | | | | | | This more correctly reflects the semantic meaning. Task-number: QTBUG-51494 Change-Id: I3a230e959ea007f1d19808eae73b5d95b6f06514 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Add firstVertex to QGeometryRenderer APIMike Krus2016-05-041-0/+6
| | | | | | | | To support glDrawArraysInstancedBaseInstance Task-number: QTBUG-51515 Change-Id: I0c95b351ff7a3668f17256d0d875c3c36537fd01 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Fix for loading using a MeshSean Harmer2016-05-031-6/+15
| | | | | | | | | | | | Added code path avoiding cloning for setting the geometry on the QMesh which is a QGeopmetryRenderer. This is actually much easier without cloning. We simply create the QGeometry on the backend, move it to the main thread, then send it over in a change. In the frontend QGeometryRenderer, we just extract the pointer to the QGeometry and set it on the geometry property. Change-Id: I06db5cba52d783323141a7b1d72b326e319b4960 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Remove setTargetNode()/targetNode() from backend property changesSean Harmer2016-05-031-1/+0
| | | | | | | Now uses subjectId() instead. Change-Id: Ib307e2a008559bfa5ea7c93a1e5806cbe1b1cb5c Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Remove QBackendNode::updateFromPeer()Sean Harmer2016-05-031-21/+1
| | | | | | | | | | Implemented a few missing initializeFromPeer() implementations along with the corresponding frontend node creation change creation functions. Adapted unit tests. Change-Id: I571e53a7b68a5544bd0e308df0baf7e52533306e Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Remove virtual QBackendNode *create(QNode *frontend) constSean Harmer2016-05-011-9/+0
| | | | | | | | from QBackendNodeMapper and subclasses. No longer needed now we have disabled cloning. Change-Id: I261fa7bccfa9a4019d479079e2ff7c19154e5e72 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Q_NULLPTR -> nullptrSean Harmer2016-05-011-4/+4
| | | | | | Task-number: QTBUG-52736 Change-Id: I58f9cbcdf018e7b672d33dd865067485412b79fe Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* GeometryRenderer use new added/removed change typesSean Harmer2016-04-271-12/+10
| | | | | | | | | I think it may be possible to avoid this for single value QNode* properties and just rely upon the automatic notifications done by QNodePrivate. Needs investigating and testing. Change-Id: Id978e8501dc229ba4eb73a5be3b3480b967562b0 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Rename QBackendScenePropertyChange -> QBackendNodePropertyChangeSean Harmer2016-04-221-2/+2
| | | | | Change-Id: I875537e511b93d9bfd002fa9fa2a368999f7e75a Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* QBackendScenePropertyChange cleanupsSean Harmer2016-04-221-1/+1
| | | | | | | | Now inherits from QNodePropertyChangeBase and sets change flag so user's don't have to. Change-Id: I47892d73b63627664c6fa57c8b0c7ef5c4bdd3c8 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Rename QScenePropertyChange -> QNodePropertyChangeSean Harmer2016-04-211-4/+4
| | | | | | | Trying to unify naming of change types. Change-Id: I0bfca0b7ba5adeaaa6145f75ddb41731f76adc09 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* GeometryRenderer: use m_enabled member from base classPaul Lemire2016-04-151-6/+2
| | | | | | | Unit test updated accordingly Change-Id: I3a0e01250f0b4d56f13f0a5038b5699ee369cce0 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Only case to QScenePropertyChange if that's actually what it isSean Harmer2016-04-121-4/+9
| | | | | | | | | | | | | Now that we also have QNodeCreatedChange/QNodeDestroyedChange we need to protect against casting to incorrect types. It may well make sense to have a helper on QBackendNode that calls a specific virtual for the different change types. This would be analogous to QObject::event() calling e.g. resizeEvent() with an argument properly cast to the right type. Change-Id: I5313ba43c39b6e47f3fdf1f8f26f3e6d57a5677c Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* GeometryRenderer handles creationSean Harmer2016-04-051-0/+24
| | | | | Change-Id: Ifc9f1fa29d2bd8b6092b7795ea896b2eb3b886c0 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* GeometryRendererFunctor handles creationSean Harmer2016-03-311-0/+8
| | | | | Change-Id: Id30c16104f8121506755482327e9c732566f23f6 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* QGeometryRenderer API changesMike Krus2016-03-131-25/+25
| | | | | | | | | | | | - primitiveCount -> vertexCount - baseInstance -> firstInstance - restartIndex -> restartIndexValue - primitiveRestart -> primitiveRestartEnabled - baseVertex -> indexOffset Task-number: QTBUG-51515 Change-Id: I95e1e04e08b6441fcf8721db382f8f0c457f6faa Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Class QGeometryFunctor renamed to QGeometryFactoryFranck Arrecot2016-03-091-10/+10
| | | | | | Task-number: QTBUG-51475 Change-Id: I4d679b1001df2e8a4d57f0aa5511b3c49812cfa0 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* QGeometry: move verticesPerPath to QGeometryRendererPaul Lemire2016-03-051-0/+6
| | | | | Change-Id: I6f86164eff9f0709f400c4404cf1d104e7632be5 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* QBackendNode::peerUuid() renamed to peerId()Paul Lemire2016-03-051-4/+4
| | | | | Change-Id: I72471d0b22d16bbbee33610e30a06daadffedbd9 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
* Remove ParameterMappingPaul Lemire2016-02-261-1/+1
| | | | | | | | | | | | | | * Bindings are now entirely deduced from shader introspection * Modified the BackendNodeDirtyFlags to remove the class at this prevents the operator~() to be called * Make the Renderer loop check for the ComputeDirty flag and don't unset it if set Note: uses a hack to reset m_changeSet in performCompute as right know we are sometimes missing the markDirty(ComputeDirty) set by the ComputeJob nodes. Will be sorted out later. Change-Id: Ic4fa71ecf01b625e885a58a66278387bf5b36339 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Propagate backend node changes to Renderer; render-on-demandWieland Hagen2016-02-241-0/+2
| | | | | | | | | | | | Each sceneChangeEvent marks a dirty bit in the AbstractRenderer. If no changes were accumulated during one frame, the renderer decides not to render the frame, by returning false from shouldRender(). We still need to go through each backend node and see what flags to set exactly, and to make sure we also react on backend-initiated changes. Change-Id: I80588bc5c4ebeb5d57b45ddfbd4d79ec268968b1 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Added AbstractRenderer pointer to RenderBackendNodeWieland Hagen2016-02-241-1/+3
| | | | | | | | Modified all node functors to pass QRenderAspect's renderer instance to all newly created backend nodes Change-Id: Iffa4941bff53f6acf87f46789219c7ae2f123615 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Dedicated QRenderBackendNodeWieland Hagen2016-02-241-1/+1
| | | | | | | | | Render aspect Backend nodes now subclass from QRenderBackendNode, which is a subclass of QBackendNode. We may want to store aspect- related data in each backend node Change-Id: I4f00de09c8cc31d2347d919151d359ad44cf03a9 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>