CODE
#include
#include "d3d.h"
D3DXIMAGE_INFO imageInfo;
void __cdecl main()
{
CDirect3D::InitD3D();
D3DXCreateTextureFromFileEx(CDirect3D::m_pD3DDevice,
"Sprite.bmp",
0,0,1,0,
D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT,
NULL , &imageInfo, NULL, &CDirect3D::m_pSprite);
while(true)
{
CDirect3D::m_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);
CDirect3D::m_pD3DDevice->BeginScene();
CDirect3D::DrawSprite( CDirect3D::m_pD3DDevice,
CDirect3D::m_pSprite,
50,
50,
256,
256,
0);
CDirect3D::m_pD3DDevice->EndScene();
CDirect3D::m_pD3DDevice->Present(NULL,NULL,NULL,NULL);
}
CDirect3D::ExitD3D();
}
D3D.CPP
CODE
#include "D3D.h"
LPDIRECT3D8 CDirect3D::m_pD3D = NULL;
LPDIRECT3DDEVICE8 CDirect3D::m_pD3DDevice = NULL;
LPDIRECT3DTEXTURE8 CDirect3D::m_pSprite = NULL;
void CDirect3D::InitD3D()
{
CDirect3D::m_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.BackBufferWidth = 640;
d3dpp.BackBufferHeight = 480;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
CDirect3D::m_pD3D->CreateDevice(0,D3DDEVTYPE_HAL,NULL,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&CDirect3D::m_pD3DDevice);
}
void CDirect3D::DrawSprite(IDirect3DDevice8* pDevice, IDirect3DBaseTexture8 * pTexture, int iPosX, int iPosY, int iSizeX, int iSizeY, BOOL bTransparency)
{
IDirect3DVertexBuffer8* pVB;
struct VERTEX_SPRITE
{
float x, y, z, rhw; // z always 0.0, rhw always 1.0
float u, v; // texture coords
};
VERTEX_SPRITE sprite[4] =
{ // x y z w tu tv
{ (FLOAT)iPosX, (FLOAT)iPosY, 0, 1, 0.0, 0.0 },
{ (FLOAT)(iPosX+iSizeX), (FLOAT)iPosY, 0, 1, 1.0, 0.0 },
{ (FLOAT)(iPosX+iSizeX), (FLOAT)(iPosY+iSizeY), 0, 1, 1.0, 1.0 },
{ (FLOAT)iPosX, (FLOAT)(iPosY+iSizeY), 0, 1, 0.0, 1.0 }
};
// create vertex buffer
pDevice->CreateVertexBuffer( 4 * sizeof( VERTEX_SPRITE ), D3DUSAGE_WRITEONLY, FVF_SPRITE, D3DPOOL_DEFAULT, &pVB );
// lock vertex buffer
VERTEX_SPRITE* pVerts;
pVB->Lock( 0, 0, (BYTE**)&pVerts, 0 );
// fill vertex buffer
memcpy( pVerts, sprite, sizeof( sprite ));
// unlock vertex buffer
pVB->Unlock();
pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
if ( bTransparency )
{
pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
}
else
{
pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
}
pDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR );
pDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR );
// now draw sprite
// render objects
pDevice->SetTexture( 0, pTexture );
pDevice->SetVertexShader( FVF_SPRITE );
pDevice->SetStreamSource( 0, pVB, sizeof( VERTEX_SPRITE ));
pDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 2 );
// clean up
pDevice->SetTexture( 0, NULL );
pVB->Release();
}
void CDirect3D::ExitD3D()
{
CDirect3D::m_pD3D->Release();
CDirect3D::m_pD3DDevice->Release();
}
D3D.H
CODE
#include
#define FVF_SPRITE (D3DFVF_XYZRHW | D3DFVF_TEX0)
class CDirect3D
{
public:
static LPDIRECT3D8 m_pD3D;
static LPDIRECT3DDEVICE8 m_pD3DDevice;
static LPDIRECT3DTEXTURE8 m_pSprite;
static void InitD3D();
static void DrawSprite(IDirect3DDevice8* pDevice, IDirect3DBaseTexture8 * pTexture, int iPosX, int iPosY, int iSizeX, int iSizeY, BOOL bTransparency);
static void ExitD3D();
};
The texture isn't shown! I'm using EvoX to start the xbe and cxbe and xbedump to make it ready for my xbox! Then I use an FTP prog to upload it to drive e:\ but the texture isn't loaded! I also tried to burn it on a DVD+RW but the texture is still not visible!
hope you can help me now!
cu