All I am trying to do is creating a quad in world coordinate and put a 64*64 texture on. I disable the lighting and enable the alpha.
Here is part of the codes, really have no idea what the problem is.
float Rot = 0.0f;
struct QUAD
{
D3DXVECTOR4 Pos;
//D3DXVECTOR4 Nor;
D3DXVECTOR2 TexCoord;
static const DWORD FVF;
};
const DWORD QUAD::FVF = D3DFVF_XYZ | D3DFVF_TEX1;//RHW D3DFVF_NORMAL
IDirect3DVertexBuffer9* g_pVB;
IDirect3DIndexBuffer9* g_pIB;
void LoadTexture(IDirect3DDevice9* pd3dDevice)
{
hr = D3DXCreateTextureFromFile(pd3dDevice,L"LidTexTest.png",&WholeTex);
WholeTex->GetSurfaceLevel(0,&WholeTexSur);
}
void CreateQuad(IDirect3DDevice9* pd3dDevice)
{
hr = pd3dDevice->CreateVertexBuffer(
4 * sizeof(QUAD),
D3DUSAGE_WRITEONLY,
QUAD::FVF,
D3DPOOL_MANAGED,
&g_pVB,
0);
QUAD temp[4];
temp[0].Pos = D3DXVECTOR4(-0.5,0.5,0,1);
temp[1].Pos = D3DXVECTOR4( 0.5,0.5,0,1);
temp[2].Pos = D3DXVECTOR4(-0.5,-0.5,0,1);
temp[3].Pos = D3DXVECTOR4( 0.5,-0.5,0,1);
temp[0].TexCoord = D3DXVECTOR2(0.0f,0.0f);
temp[1].TexCoord = D3DXVECTOR2(1.0f,0.0f);
temp[2].TexCoord = D3DXVECTOR2(0.0f,1.0f);
temp[3].TexCoord = D3DXVECTOR2(1.0f,1.0f);
VOID* lpVertices;
g_pVB->Lock( 0, sizeof(temp), (void**)&lpVertices, 0 );
memcpy( lpVertices, temp, sizeof(temp) );
g_pVB->Unlock();
int iIQuantity = 6;
int Index[6];
Index[0] = 0;
Index[1] = 1;
Index[2] = 2;
Index[3] = 2;
Index[4] = 1;
Index[5] = 3;
unsigned int uiBufferLength = (unsigned int)(iIQuantity*sizeof(int));
pd3dDevice->CreateIndexBuffer(uiBufferLength,
0,D3DFMT_INDEX32,D3DPOOL_MANAGED,&g_pIB,0);
void* pbIndices;
g_pIB->Lock(0,uiBufferLength,&pbIndices,0);
memcpy( pbIndices, Index, iIQuantity*sizeof(int) );
g_pIB->Unlock();
}
HRESULT CALLBACK OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext )
{
SetupCamera(pd3dDevice);
LoadTexture(pd3dDevice);
CreateQuad(pd3dDevice);
return S_OK;
}
void CALLBACK OnD3D9FrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{
HRESULT hr;
// Clear the render target and the zbuffer
V( pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB( 0, 45, 50, 170 ), 1.0f, 0 ) );
pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );
pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
// Render the scene
if( SUCCEEDED( pd3dDevice->BeginScene() ) )
{
Rot = Rot + 0.00;
D3DXMATRIX matTemp;
D3DXMATRIX m_matWorld;
D3DXMatrixIdentity(&matTemp);
D3DXMatrixIdentity(&m_matWorld);
D3DXMatrixRotationY(&matTemp, Rot);
D3DXMatrixMultiply(&m_matWorld,&m_matWorld,&matTemp);
D3DXMatrixMultiply(&m_matWorld,&m_matWorld,&matTemp);
pd3dDevice->SetTransform( D3DTS_WORLD, &m_matWorld);
pd3dDevice->SetFVF(QUAD::FVF);
pd3dDevice->SetTexture(0,WholeTex);
pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(QUAD));
hr = pd3dDevice->SetIndices(g_pIB);
hr = pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,0,2);
pd3dDevice->SetTexture(0,NULL);
V( pd3dDevice->EndScene() );
}
}
Many thanks