Using ID3DXSprite to set z order for ID3DXFont

Started by
0 comments, last by Sol Blue 16 years, 1 month ago
Hi all, I'm trying to get sprites and some text to draw in a correct z order. I've found two posts in the archives, here and here, suggesting using SetTransform on the ID3DXSprite to set the z, then passing it to ID3DXFont. I can't get this to work. Here's the code. mSprite and mFont are the ID3DXSprite and ID3DXFont pointers. Top level rendering function

void HumanGameView::render()
{
	// Clear the back and depth buffers, and send the start signals.
	gDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255, 0, 255), 1.0f, 0);
	gDevice->BeginScene();
	mSprite->Begin(D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_DEPTH_BACKTOFRONT);
	gDevice->SetRenderState(D3DRS_ALPHATESTENABLE, true);

	// The DevConsole, because of its backdoor nature, is always drawn.
	mDevConsole->draw();

	// End the scene.
	gDevice->SetRenderState(D3DRS_ALPHATESTENABLE, false);
	mSprite->End();
	gDevice->EndScene();

	// Present the back buffer.
	gDevice->Present(0, 0, 0, 0);
}

Then, in the dev console, this code draws a texture, at a z-order of 0.5:

void Animation::draw(D3DXVECTOR3 position, int xOffset, int yOffset)
{
	position.x += xOffset; // This is plus-equals, doesn't show up on forum
	position.y += yOffset;

	mFrameCenter.z = position.z;

	mSprite->Draw(mTex, &mFrameRect, &mFrameCenter, &position, mColor);

	mLastPosition = position;
}

And here's where the text is drawn:

void Label::drawText()
{
	D3DXMATRIX original;
	mSprite->GetTransform(&original);

	D3DXMATRIX translation;

	// What Z should go here?
	D3DXMatrixTranslation(&translation, 0.0f, 0.0f, 0.0f);

	mSprite->SetTransform(&translation);

	// Draw the text.
	mFont->DrawText(mSprite, mContent.c_str(), -1, &mArea, DT_VCENTER | DT_LEFT | DT_NOCLIP, mColor);

	mSprite->SetTransform(&original);
}

In drawText(), am I using the D3DXMatrixTranslation() method correctly? What should I put in its z parameter so that the text draws above the sprite at 0.5? No matter what I put there, the text either draws behind the transparent sprite, or is completely blocked by it (the portion of the text not covered by the sprite appears, but the part under even a transparent sprite is not drawn at all).
Advertisement
(Bump.) Surely others have had this problem?

This topic is closed to new replies.

Advertisement