MCPcopy Create free account
hub / github.com/deathkiller/jazz2-native / Draw

Method Draw

Sources/nCine/Graphics/RenderQueue.cpp:121–202  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

119 }
120
121 void RenderQueue::Draw()
122 {
123#if defined(DEATH_DEBUG) && defined(NCINE_PROFILING)
124 static char debugString[128];
125#endif
126 const bool batchingEnabled = theApplication().GetRenderingSettings().batchingEnabled;
127 SmallVectorImpl<RenderCommand*>* opaques = batchingEnabled ? &opaqueBatchedQueue_ : &opaqueQueue_;
128 SmallVectorImpl<RenderCommand*>* transparents = batchingEnabled ? &transparentBatchedQueue_ : &transparentQueue_;
129
130#if defined(DEATH_DEBUG) && defined(NCINE_PROFILING)
131 std::uint32_t commandIndex = 0;
132#endif
133 // Rendering opaque nodes front to back
134 for (RenderCommand* opaqueRenderCommand : *opaques) {
135 TracyGpuZone("Opaque");
136#if defined(DEATH_DEBUG) && defined(NCINE_PROFILING)
137 const std::int32_t numInstances = opaqueRenderCommand->GetInstanceCount();
138 const std::int32_t batchSize = opaqueRenderCommand->GetBatchSize();
139 const std::uint16_t layer = opaqueRenderCommand->GetLayer();
140 const std::uint16_t visitOrder = opaqueRenderCommand->GetVisitOrder();
141
142 std::size_t length;
143 if (numInstances > 0) {
144 length = formatInto(debugString, "Opaque {} ({} {} on layer {}, visit order {}, sort key 0x{:x})",
145 commandIndex, numInstances, commandTypeString(*opaqueRenderCommand), layer, visitOrder, opaqueRenderCommand->GetMaterialSortKey());
146 } else if (batchSize > 0) {
147 length = formatInto(debugString, "Opaque {} ({} {} on layer {}, visit order {}, sort key 0x{:x})",
148 commandIndex, batchSize, commandTypeString(*opaqueRenderCommand), layer, visitOrder, opaqueRenderCommand->GetMaterialSortKey());
149 } else {
150 length = formatInto(debugString, "Opaque {} ({} {} layer {}, visit order {}, sort key 0x{:x})",
151 commandIndex, commandTypeString(*opaqueRenderCommand), layer, visitOrder, opaqueRenderCommand->GetMaterialSortKey());
152 }
153 GLDebug::ScopedGroup scoped({ debugString, length });
154 commandIndex++;
155#endif
156
157#if defined(NCINE_PROFILING)
158 RenderStatistics::GatherStatistics(*opaqueRenderCommand);
159#endif
160 opaqueRenderCommand->CommitCameraTransformation();
161 opaqueRenderCommand->Issue();
162 }
163
164 GLBlending::Enable();
165 GLDepthTest::DisableDepthMask();
166 // Rendering transparent nodes back to front
167 for (RenderCommand* transparentRenderCommand : *transparents) {
168 TracyGpuZone("Transparent");
169#if defined(DEATH_DEBUG) && defined(NCINE_PROFILING)
170 const std::int32_t numInstances = transparentRenderCommand->GetInstanceCount();
171 const std::int32_t batchSize = transparentRenderCommand->GetBatchSize();
172 const std::uint16_t layer = transparentRenderCommand->GetLayer();
173 const std::uint16_t visitOrder = transparentRenderCommand->GetVisitOrder();
174
175 std::size_t length;
176 if (numInstances > 0) {
177 length = formatInto(debugString, "Transparent {} ({} {} on layer {}, visit order {}, sort key 0x{:x})",
178 commandIndex, numInstances, commandTypeString(*transparentRenderCommand), layer, visitOrder, transparentRenderCommand->GetMaterialSortKey());

Callers

nothing calls this directly

Calls 11

formatIntoFunction · 0.85
commandTypeStringFunction · 0.85
GetInstanceCountMethod · 0.80
GetLayerMethod · 0.80
GetVisitOrderMethod · 0.80
GetMaterialSortKeyMethod · 0.80
IssueMethod · 0.80
GetSrcBlendingFactorMethod · 0.80
GetDestBlendingFactorMethod · 0.80
GetBatchSizeMethod · 0.45

Tested by

no test coverage detected