Quelle est la meilleure pratique pour rendre les sprites en DirectX 11?

Je suis en train d'essayer de s'habituer à l'API DirectX et je me demande qu'est-ce que l'approche habituelle pour afficher un sprite en DirectX 11 (par exemple, pour un clone de tetris).

Est-il un simmilar interface ID3DX10Sprite, et si non, quel serait la méthode habituelle pour dessiner des sprites en DirectX 11?

Edit: Voici le code HLSL qui a fonctionné pour moi (le calcul de la projection de coordonner pourrait faire mieux):

struct SpriteData
{
    float2 position;
    float2 size;
    float4 color;
};

struct VSOut
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
};

cbuffer ScreenSize : register(b0)
{
    float2 screenSize;
    float2 padding; //cbuffer must have at least 16 bytes
}

StructuredBuffer<SpriteData> spriteData : register(t0);

float2 GetVertexPosition(uint VID)
{
    [branch] switch(VID)
    {
        case 0:
            return float2(0, 0); 
        case 1:
            return float2(1, 0); 
        case 2:
            return float2(0, 1); 
        default:
            return float2(1, 1);
    }
}

float4 ComputePosition(float2 positionInScreenSpace, float2 size, float2 vertexPosition)
{
    float2 origin = float2(-1, 1);
    float2 vertexPositionInScreenSpace = positionInScreenSpace + (size * vertexPosition);

    return float4(origin.x + (vertexPositionInScreenSpace.x /(screenSize.x /2)), origin.y - (vertexPositionInScreenSpace.y /(screenSize.y /2)), 1, 1);
}

VSOut VShader(uint VID : SV_VertexID, uint SIID : SV_InstanceID)
{
    VSOut output;

    output.color = spriteData[SIID].color;
    output.position = ComputePosition(spriteData[SIID].position, spriteData[SIID].size, GetVertexPosition(VID));

    return output;
}

float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
    return color;
}

OriginalL'auteur Mario Pistrich | 2010-10-07