My frame rate went from 8 to 64 (windowed) and 20 to 60 (full screen) by replacing the Zen code shown above with the following custom code:
Is this as good as it gets, or is there a faster way?
ICESPRITE_VERTEX cvIceSpriteVertices[] ={ { 0.0f, 767.0f, 1000.0f, 1.0f, 0.0f, 1.0f,}, // x, y, z, a, tu, tv {v1} { 0.0f, 0.0f, 1000.0f, 1.0f, 0.0f, 0.0f,}, // x, y, z, a, tu, tv {v2} { 1023.0f, 767.0f, 1000.0f, 1.0f, 1.0f, 1.0f,}, // x, y, z, a, tu, tv {v3} { 1023.0f, 0.0f, 1000.0f, 1.0f, 1.0f, 0.0f} // x, y, z, a, tu, tv {v4}};// --------------------------------------------------------------------------------------// IceSprite Constructor// --------------------------------------------------------------------------------------CIceSprite::CIceSprite(){ ;}// --------------------------------------------------------------------------------------// IceSprite Destructor// --------------------------------------------------------------------------------------CIceSprite::~CIceSprite(){;}// --------------------------------------------------------------------------------------// InitDeviceObject// --------------------------------------------------------------------------------------HRESULT CIceSprite::InitDeviceObject(LPDIRECT3DDEVICE8 pd3dDevice){ // Load the texture for the background image if( FAILED( D3DUtil_CreateTexture( pd3dDevice, _T("ex1Background.bmp"), &m_pIceSpriteTexture) ) ){ return D3DAPPERR_MEDIANOTFOUND; } return D3D_OK;}// --------------------------------------------------------------------------------------// InvalidateDeviceObject// --------------------------------------------------------------------------------------HRESULT CIceSprite::InvalidateDeviceObject(){ SAFE_RELEASE( m_pVB ); return D3D_OK;}// --------------------------------------------------------------------------------------// DeleteDeviceObjects// --------------------------------------------------------------------------------------HRESULT CIceSprite::DeleteDeviceObjects(){ SAFE_RELEASE( m_pIceSpriteTexture ); return D3D_OK;}// --------------------------------------------------------------------------------------// Render// --------------------------------------------------------------------------------------HRESULT CIceSprite::Render(LPDIRECT3DDEVICE8 pd3dDevice){ pd3dDevice->SetTexture( 0, m_pIceSpriteTexture ); pd3dDevice->SetStreamSource( 0, m_pVB, sizeof(ICESPRITE_VERTEX) ); pd3dDevice->SetVertexShader( D3DFVF_ICESPRITE_VERTEX ); pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); return D3D_OK;}// --------------------------------------------------------------------------------------// RestoreDeviceObjects// --------------------------------------------------------------------------------------HRESULT CIceSprite::RestoreDeviceObject(LPDIRECT3DDEVICE8 pd3dDevice){ m_dwSizeofVertices = sizeof(cvIceSpriteVertices); // Create the vertex buffer if( FAILED( pd3dDevice->CreateVertexBuffer( m_dwSizeofVertices, 0, D3DFVF_ICESPRITE_VERTEX, D3DPOOL_SYSTEMMEM, &m_pVB ) ) ) return E_FAIL; VOID* pVertices; if( FAILED( m_pVB->Lock( 0, m_dwSizeofVertices, (BYTE**)&pVertices, 0 ) ) ){ return E_FAIL; } memcpy( pVertices, cvIceSpriteVertices, m_dwSizeofVertices); m_pVB->Unlock(); return D3D_OK;}