Changeset View
Changeset View
Standalone View
Standalone View
src/lib/marble/LayerManager.cpp
Show First 20 Lines • Show All 120 Lines • ▼ Show 20 Line(s) | 115 | { | |||
---|---|---|---|---|---|
121 | return itemList; | 121 | return itemList; | ||
122 | } | 122 | } | ||
123 | 123 | | |||
124 | void LayerManager::renderLayers( GeoPainter *painter, ViewportParams *viewport ) | 124 | void LayerManager::renderLayers( GeoPainter *painter, ViewportParams *viewport ) | ||
125 | { | 125 | { | ||
126 | d->m_renderState = RenderState( "Marble" ); | 126 | d->m_renderState = RenderState( "Marble" ); | ||
127 | const QTime totalTime = QTime::currentTime(); | 127 | const QTime totalTime = QTime::currentTime(); | ||
128 | 128 | | |||
129 | QStringList renderPositions; | 129 | RenderPosition renderPosition = d->m_showBackground ? FirstBackgroundRenderPosition : FirstObjectRenderPosition; | ||
130 | | ||||
131 | if ( d->m_showBackground ) { | | |||
132 | renderPositions << "STARS" << "BEHIND_TARGET"; | | |||
133 | } | | |||
134 | | ||||
135 | renderPositions << "SURFACE" << "HOVERS_ABOVE_SURFACE" << "ATMOSPHERE" | | |||
136 | << "ORBIT" << "ALWAYS_ON_TOP" << "FLOAT_ITEM" << "USER_TOOLS"; | | |||
137 | 130 | | |||
138 | QStringList traceList; | 131 | QStringList traceList; | ||
139 | foreach( const auto& renderPosition, renderPositions ) { | 132 | while (renderPosition < EndRenderPosition) { | ||
140 | QList<LayerInterface*> layers; | 133 | QList<LayerInterface*> layers; | ||
141 | 134 | | |||
142 | // collect all RenderPlugins of current renderPosition | 135 | // collect all RenderPlugins of current renderPosition | ||
143 | foreach( auto *renderPlugin, d->m_renderPlugins ) { | 136 | foreach( auto *renderPlugin, d->m_renderPlugins ) { | ||
144 | if ( renderPlugin && renderPlugin->renderPosition().contains( renderPosition ) ) { | 137 | if (renderPlugin && renderPlugin->renderPositions().testFlag(renderPosition)) { | ||
145 | if ( renderPlugin->enabled() && renderPlugin->visible() ) { | 138 | if ( renderPlugin->enabled() && renderPlugin->visible() ) { | ||
146 | if ( !renderPlugin->isInitialized() ) { | 139 | if ( !renderPlugin->isInitialized() ) { | ||
147 | renderPlugin->initialize(); | 140 | renderPlugin->initialize(); | ||
148 | emit renderPluginInitialized( renderPlugin ); | 141 | emit renderPluginInitialized( renderPlugin ); | ||
149 | } | 142 | } | ||
150 | layers.push_back( renderPlugin ); | 143 | layers.push_back( renderPlugin ); | ||
151 | } | 144 | } | ||
152 | } | 145 | } | ||
153 | } | 146 | } | ||
154 | 147 | | |||
155 | // collect all internal LayerInterfaces of current renderPosition | 148 | // collect all internal LayerInterfaces of current renderPosition | ||
156 | foreach( auto *layer, d->m_internalLayers ) { | 149 | foreach( auto *layer, d->m_internalLayers ) { | ||
157 | if ( layer && layer->renderPosition().contains( renderPosition ) ) { | 150 | if (layer && layer->renderPositions().testFlag(renderPosition)) { | ||
158 | layers.push_back( layer ); | 151 | layers.push_back( layer ); | ||
159 | } | 152 | } | ||
160 | } | 153 | } | ||
161 | 154 | | |||
162 | // sort them according to their zValue()s | 155 | // sort them according to their zValue()s | ||
163 | qSort( layers.begin(), layers.end(), [] ( const LayerInterface * const one, const LayerInterface * const two ) -> bool { | 156 | qSort( layers.begin(), layers.end(), [] ( const LayerInterface * const one, const LayerInterface * const two ) -> bool { | ||
164 | Q_ASSERT( one && two ); | 157 | Q_ASSERT( one && two ); | ||
165 | return one->zValue() < two->zValue(); | 158 | return one->zValue() < two->zValue(); | ||
166 | } ); | 159 | } ); | ||
167 | 160 | | |||
168 | // render the layers of the current renderPosition | 161 | // render the layers of the current renderPosition | ||
169 | QTime timer; | 162 | QTime timer; | ||
170 | foreach( auto *layer, layers ) { | 163 | foreach( auto *layer, layers ) { | ||
171 | timer.start(); | 164 | timer.start(); | ||
172 | layer->render( painter, viewport, renderPosition, 0 ); | 165 | layer->render( painter, viewport, renderPosition, 0 ); | ||
173 | d->m_renderState.addChild( layer->renderState() ); | 166 | d->m_renderState.addChild( layer->renderState() ); | ||
174 | traceList.append( QString("%2 ms %3").arg( timer.elapsed(),3 ).arg( layer->runtimeTrace() ) ); | 167 | traceList.append( QString("%2 ms %3").arg( timer.elapsed(),3 ).arg( layer->runtimeTrace() ) ); | ||
175 | } | 168 | } | ||
169 | | ||||
170 | // next position | ||||
171 | renderPosition = static_cast<RenderPosition>(renderPosition << 1); | ||||
176 | } | 172 | } | ||
177 | 173 | | |||
178 | if ( d->m_showRuntimeTrace ) { | 174 | if ( d->m_showRuntimeTrace ) { | ||
179 | const int totalElapsed = totalTime.elapsed(); | 175 | const int totalElapsed = totalTime.elapsed(); | ||
180 | const int fps = 1000.0/totalElapsed; | 176 | const int fps = 1000.0/totalElapsed; | ||
181 | traceList.append( QString( "Total: %1 ms (%2 fps)" ).arg( totalElapsed, 3 ).arg( fps ) ); | 177 | traceList.append( QString( "Total: %1 ms (%2 fps)" ).arg( totalElapsed, 3 ).arg( fps ) ); | ||
182 | 178 | | |||
183 | painter->save(); | 179 | painter->save(); | ||
▲ Show 20 Lines • Show All 53 Lines • Show Last 20 Lines |