void SpriteShape::Draw(IGraphicsDevice *device, RenderState &state) { IGraphicsContext *context = device->GetContext(); Effect *effect = context->GetEffect("Sprite"); if(mHasBackgroundImage) { effect->SetActiveTechnique("SpriteTexture"); } else { effect->SetActiveTechnique("SpriteColor"); } glm::mat4 wvp = state.GetWorldViewProjection(); state.SetShaderData(mWVPIndex, &wvp); state.SetShaderData(mFrameIndex, &mFrame); state.SetShaderData(mTextureFrameIndex, &mTexFrame); state.SetShaderData(mBackgroundColorIndex, &mBackgroundColor); if(mBackgroundImage) { state.SetShaderData(mBackgroundImageIndex, mBackgroundImage); } state.SetShaderData(mBorderWidthIndex, &mBorderWidth); state.SetShaderData(mBorderColorIndex, &mBorderColor); if(sSpriteVertexBuffer) { Technique *technique = effect->GetActiveTechnique(); technique->Begin(); while(technique->HasNextPass()) { sSpriteVertexBuffer->Activate(); technique->ProcessNextPass(device, state); device->Draw(PrimitiveTypeTriangleStrip, 4, 0); } } }