MCPcopy Create free account
hub / github.com/ddnet/ddnet / ForceRenderQuads

Method ForceRenderQuads

src/game/map/render_map.cpp:370–433  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

368}
369
370void CRenderMap::ForceRenderQuads(CQuad *pQuads, int NumQuads, int RenderFlags, IEnvelopeEval *pEnvEval, float Alpha)
371{
372 Graphics()->TrianglesBegin();
373 float Conv = 1 / 255.0f;
374 for(int i = 0; i < NumQuads; i++)
375 {
376 CQuad *pQuad = &pQuads[i];
377
378 ColorRGBA Color = ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f);
379 pEnvEval->EnvelopeEval(pQuad->m_ColorEnvOffset, pQuad->m_ColorEnv, Color, 4);
380
381 if(Color.a <= 0.0f)
382 continue;
383
384 bool Opaque = false;
385 /* TODO: Analyze quadtexture
386 if(a < 0.01f || (q->m_aColors[0].a < 0.01f && q->m_aColors[1].a < 0.01f && q->m_aColors[2].a < 0.01f && q->m_aColors[3].a < 0.01f))
387 Opaque = true;
388 */
389 if(Opaque && !(RenderFlags & LAYERRENDERFLAG_OPAQUE))
390 continue;
391 if(!Opaque && !(RenderFlags & LAYERRENDERFLAG_TRANSPARENT))
392 continue;
393
394 Graphics()->QuadsSetSubsetFree(
395 fx2f(pQuad->m_aTexcoords[0].x), fx2f(pQuad->m_aTexcoords[0].y),
396 fx2f(pQuad->m_aTexcoords[1].x), fx2f(pQuad->m_aTexcoords[1].y),
397 fx2f(pQuad->m_aTexcoords[2].x), fx2f(pQuad->m_aTexcoords[2].y),
398 fx2f(pQuad->m_aTexcoords[3].x), fx2f(pQuad->m_aTexcoords[3].y));
399
400 ColorRGBA Position = ColorRGBA(0.0f, 0.0f, 0.0f, 0.0f);
401 pEnvEval->EnvelopeEval(pQuad->m_PosEnvOffset, pQuad->m_PosEnv, Position, 3);
402 const vec2 Offset = vec2(Position.r, Position.g);
403 const float Rotation = Position.b / 180.0f * pi;
404
405 IGraphics::CColorVertex Array[4] = {
406 IGraphics::CColorVertex(0, pQuad->m_aColors[0].r * Conv * Color.r, pQuad->m_aColors[0].g * Conv * Color.g, pQuad->m_aColors[0].b * Conv * Color.b, pQuad->m_aColors[0].a * Conv * Color.a * Alpha),
407 IGraphics::CColorVertex(1, pQuad->m_aColors[1].r * Conv * Color.r, pQuad->m_aColors[1].g * Conv * Color.g, pQuad->m_aColors[1].b * Conv * Color.b, pQuad->m_aColors[1].a * Conv * Color.a * Alpha),
408 IGraphics::CColorVertex(2, pQuad->m_aColors[2].r * Conv * Color.r, pQuad->m_aColors[2].g * Conv * Color.g, pQuad->m_aColors[2].b * Conv * Color.b, pQuad->m_aColors[2].a * Conv * Color.a * Alpha),
409 IGraphics::CColorVertex(3, pQuad->m_aColors[3].r * Conv * Color.r, pQuad->m_aColors[3].g * Conv * Color.g, pQuad->m_aColors[3].b * Conv * Color.b, pQuad->m_aColors[3].a * Conv * Color.a * Alpha)};
410 Graphics()->SetColorVertex(Array, 4);
411
412 CPoint *pPoints = pQuad->m_aPoints;
413
414 CPoint aRotated[4];
415 if(Rotation != 0.0f)
416 {
417 for(size_t p = 0; p < std::size(aRotated); ++p)
418 {
419 aRotated[p] = pQuad->m_aPoints[p];
420 Rotate(&pQuad->m_aPoints[4], &aRotated[p], Rotation);
421 }
422 pPoints = aRotated;
423 }
424
425 IGraphics::CFreeformItem Freeform(
426 fx2f(pPoints[0].x) + Offset.x, fx2f(pPoints[0].y) + Offset.y,
427 fx2f(pPoints[1].x) + Offset.x, fx2f(pPoints[1].y) + Offset.y,

Callers 2

RenderMethod · 0.80
RenderMethod · 0.80

Calls 11

GraphicsFunction · 0.85
fx2fFunction · 0.85
CColorVertexClass · 0.85
TrianglesBeginMethod · 0.80
QuadsSetSubsetFreeMethod · 0.80
SetColorVertexMethod · 0.80
QuadsDrawFreeformMethod · 0.80
TrianglesEndMethod · 0.80
RotateFunction · 0.70
ColorRGBAClass · 0.50
EnvelopeEvalMethod · 0.45

Tested by

no test coverage detected