| 506 | } |
| 507 | |
| 508 | void Renderer::DrawSpriteSorted(RendererSortableObject* objectInfo, RendererObjectType lastObjectType, RenderView& view) |
| 509 | { |
| 510 | if (lastObjectType != objectInfo->ObjectType) |
| 511 | { |
| 512 | unsigned int stride = sizeof(Vertex); |
| 513 | unsigned int offset = 0; |
| 514 | |
| 515 | _shaders.Bind(Shader::InstancedSprites); |
| 516 | |
| 517 | _context->IASetVertexBuffers(0, 1, _sortedPolygonsVertexBuffer.Buffer.GetAddressOf(), &stride, &offset); |
| 518 | _context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); |
| 519 | _context->IASetInputLayout(_inputLayout.Get()); |
| 520 | } |
| 521 | |
| 522 | _sortedPolygonsVertexBuffer.Update(_context.Get(), _sortedPolygonsVertices.data(), 0, (int)_sortedPolygonsVertices.size()); |
| 523 | |
| 524 | _stInstancedSpriteBuffer.Sprites[0].World = Matrix::Identity; |
| 525 | _stInstancedSpriteBuffer.Sprites[0].PerVertexColor = 1; |
| 526 | _stInstancedSpriteBuffer.Sprites[0].IsSoftParticle = objectInfo->Sprite->SoftParticle ? 1 : 0; |
| 527 | _stInstancedSpriteBuffer.Sprites[0].RenderType = (int)objectInfo->Sprite->renderType; |
| 528 | |
| 529 | PackSpriteTextureCoordinates(0, objectInfo->Sprite->Sprite); |
| 530 | |
| 531 | UpdateConstantBuffer(_stInstancedSpriteBuffer, _cbInstancedSpriteBuffer);; |
| 532 | |
| 533 | SetDepthState(DepthState::Read); |
| 534 | SetCullMode(CullMode::None); |
| 535 | SetBlendMode(objectInfo->Sprite->BlendMode); |
| 536 | SetAlphaTest(AlphaTestMode::None, ALPHA_TEST_THRESHOLD); |
| 537 | |
| 538 | BindTexture(TextureRegister::ColorMap, objectInfo->Sprite->Sprite->Texture, SamplerStateRegister::LinearClamp); |
| 539 | BindRenderTargetAsTexture(TextureRegister::GBufferDepthMap, &_depthRenderTarget, SamplerStateRegister::PointWrap); |
| 540 | |
| 541 | DrawInstancedTriangles((int)_sortedPolygonsVertices.size(), 1, 0); |
| 542 | |
| 543 | _numSortedSpritesDrawCalls++; |
| 544 | _numSortedTriangles += (int)_sortedPolygonsVertices.size() / 3; |
| 545 | } |
| 546 | |
| 547 | void Renderer::PackSpriteTextureCoordinates(int instanceId, RendererSprite* sprite) |
| 548 | { |