// IMEFont.cpp: implementation of the CIMEFont class. // ////////////////////////////////////////////////////////////////////// #include "IMEFont.h" #include "SceneStateMgr.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CIMEFont::CIMEFont() { for(int i=0;i<10;i++) { strcpy(m_strPrint[i],""); strcpy(m_strPrinted[i],""); } m_RenderX=0; m_RenderY=0; } CIMEFont::~CIMEFont() { if(m_pTexture) m_pTexture->Release(); } void CIMEFont::Render(LPDIRECT3DDEVICE8 pd3dDevice) { if(isRewirte()) MakeTexture(); m_pVertex[0].v.x=0.0f+m_RenderX; m_pVertex[1].v.x=0.0f+m_RenderX; m_pVertex[2].v.x=(float)m_SizeX+m_RenderX; m_pVertex[3].v.x=(float)m_SizeX+m_RenderX; m_pVertex[1].v.y=0.0f+m_RenderY; m_pVertex[3].v.y=0.0f+m_RenderY; m_pVertex[0].v.y=(float)m_SizeY+m_RenderY; m_pVertex[2].v.y=(float)m_SizeY+m_RenderY; m_pVertex[0].tu=0.0f; m_pVertex[1].tu=0.0f; m_pVertex[3].tu=1.0f; m_pVertex[2].tu=1.0f; m_pVertex[1].tv=0.0f; m_pVertex[3].tv=0.0f; m_pVertex[0].tv=1.0f; m_pVertex[2].tv=1.0f; for(int i=0;i<4;i++) { m_pVertex[i].w=0.1f; m_pVertex[i].v.z=0.1f; m_pVertex[i].Diffuse.c=0xffffffff; m_pVertex[i].Specular.c=0xffffffff; } CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); pd3dDevice->SetTexture(0,m_pTexture); //3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); //3dDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); //m_CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); //m_CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_POINT ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_POINT ); //m_CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MIPFILTER, D3DTEXF_NONE ); pd3dDevice->SetVertexShader(TLVERTEXFVF); pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,m_pVertex,sizeof(TLVertex)); CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,FALSE); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); } void CIMEFont::Create(LPDIRECT3DDEVICE8 pd3dDevice,long sizeX,long sizeY) { m_SizeX=sizeX; m_SizeY=sizeY; // Chatting Message Font 512,64; m_cLine=m_SizeY/16; pd3dDevice->CreateTexture(sizeX,sizeY,1,0,D3DFMT_A4R4G4B4,D3DPOOL_MANAGED,&m_pTexture); } void CIMEFont::PrintToTexture(char *str, long line) { if( line >=0 && lineLockRect( 0, &d3dlr, 0, 0 ); WORD* pDst16 = (WORD*)d3dlr.pBits; BYTE bAlpha; int x,y; for( y=0;y> 4); if (bAlpha > 0) { *pDst16++ = (bAlpha << 12) | 0x0fff; } else { *pDst16++=0x0000; } } } m_pTexture->UnlockRect(0); DeleteObject( hbmBitmap ); DeleteDC( hDC ); DeleteObject( hFont ); } void CIMEFont::Render(LPDIRECT3DDEVICE8 pd3dDevice, DWORD dwColor) { if(isRewirte()) MakeTexture(); m_pVertex[0].v.x=0.0f+m_RenderX; m_pVertex[1].v.x=0.0f+m_RenderX; m_pVertex[2].v.x=(float)m_SizeX+m_RenderX; m_pVertex[3].v.x=(float)m_SizeX+m_RenderX; m_pVertex[1].v.y=0.0f+m_RenderY; m_pVertex[3].v.y=0.0f+m_RenderY; m_pVertex[0].v.y=(float)m_SizeY+m_RenderY; m_pVertex[2].v.y=(float)m_SizeY+m_RenderY; m_pVertex[0].tu=0.0f; m_pVertex[1].tu=0.0f; m_pVertex[3].tu=1.0f; m_pVertex[2].tu=1.0f; m_pVertex[1].tv=0.0f; m_pVertex[3].tv=0.0f; m_pVertex[0].tv=1.0f; m_pVertex[2].tv=1.0f; for(int i=0;i<4;i++) { m_pVertex[i].w=0.1f; m_pVertex[i].v.z=0.1f; m_pVertex[i].Diffuse.c=dwColor; m_pVertex[i].Specular.c=dwColor; } CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); CSceneStateMgr::_SetD3DRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); CSceneStateMgr::_SetD3DRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); pd3dDevice->SetTexture(0,m_pTexture); //3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); //3dDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); //m_CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); //m_CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_POINT ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_POINT ); //m_CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MIPFILTER, D3DTEXF_NONE ); pd3dDevice->SetVertexShader(TLVERTEXFVF); pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,m_pVertex,sizeof(TLVertex)); CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,FALSE); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); CSceneStateMgr::_SetD3DTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE); CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); }