MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / DrawSingleSprite

Method DrawSingleSprite

TombEngine/Renderer/RendererSprites.cpp:428–506  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

426 }
427
428 void Renderer::DrawSingleSprite(RendererSortableObject* object, RendererObjectType lastObjectType, RenderView& view)
429 {
430 _context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
431
432 BindRenderTargetAsTexture(TextureRegister::GBufferDepthMap, &_depthRenderTarget, SamplerStateRegister::LinearClamp);
433
434 SetDepthState(DepthState::Read);
435 SetCullMode(CullMode::None);
436 SetBlendMode(object->Sprite->BlendMode);
437 SetAlphaTest(AlphaTestMode::GreatherThan, ALPHA_TEST_THRESHOLD);
438
439 _shaders.Bind(Shader::InstancedSprites);
440
441 _stInstancedSpriteBuffer.Sprites[0].World = object->Sprite->Type != SpriteType::ThreeD ?
442 GetWorldMatrixForSprite(*object->Sprite, view) :
443 Matrix::Identity;
444 _stInstancedSpriteBuffer.Sprites[0].PerVertexColor = 1;
445 _stInstancedSpriteBuffer.Sprites[0].IsSoftParticle = object->Sprite->SoftParticle ? 1 : 0;
446 _stInstancedSpriteBuffer.Sprites[0].RenderType = (int)object->Sprite->renderType;
447
448 PackSpriteTextureCoordinates(0, object->Sprite->Sprite);
449
450 UpdateConstantBuffer(_stInstancedSpriteBuffer, _cbInstancedSpriteBuffer);;
451
452 BindTexture(TextureRegister::ColorMap, object->Sprite->Sprite->Texture, SamplerStateRegister::LinearClamp);
453
454 // Set up vertex buffer and parameters.
455 unsigned int stride = sizeof(Vertex);
456 unsigned int offset = 0;
457
458 if (object->Sprite->Type != SpriteType::ThreeD)
459 {
460 _context->IASetVertexBuffers(0, 1, _quadVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
461 }
462 else
463 {
464 auto vertex0 = Vertex{};
465 vertex0.Position = object->Sprite->vtx1;
466 vertex0.UV = object->Sprite->Sprite->UV[0];
467 vertex0.Color = VectorColorToRGBA_TempToVector4(object->Sprite->c1);
468 vertex0.Effects = 0 << INDEX_IN_POLY_VERTEX_SHIFT;
469
470 auto vertex1 = Vertex{};
471 vertex1.Position = object->Sprite->vtx2;
472 vertex1.UV = object->Sprite->Sprite->UV[1];
473 vertex1.Color = VectorColorToRGBA_TempToVector4(object->Sprite->c2);
474 vertex1.Effects = 1 << INDEX_IN_POLY_VERTEX_SHIFT;
475
476 auto vertex2 = Vertex{};
477 vertex2.Position = object->Sprite->vtx3;
478 vertex2.UV = object->Sprite->Sprite->UV[2];
479 vertex2.Color = VectorColorToRGBA_TempToVector4(object->Sprite->c3);
480 vertex2.Effects = 2 << INDEX_IN_POLY_VERTEX_SHIFT;
481
482 auto vertex3 = Vertex{};
483 vertex3.Position = object->Sprite->vtx4;
484 vertex3.UV = object->Sprite->Sprite->UV[3];
485 vertex3.Color = VectorColorToRGBA_TempToVector4(object->Sprite->c4);

Callers

nothing calls this directly

Calls 8

BindMethod · 0.80
GetAddressOfMethod · 0.80
clearMethod · 0.45
push_backMethod · 0.45
UpdateMethod · 0.45
GetMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected