INT __stdcall CFontObject::DrawText(TCHAR* str,DWORD dwLen,RECT* pRect,DWORD dwColor,CHAR_CODE_TYPE type,DWORD dwFlag,void* sprite) { INT iResult = 0xffffffff; BOOL bHasCRLF = RemoveCRLF(str,dwLen); #ifdef _DEBUG char txt[2048]; DWORD dwAddr; if (bHasCRLF) { memset(txt,0,sizeof(txt)); wsprintf(txt,"Fail to RenderFont(), string has CR or LF or HT!! %s\n",str); GetEIP(&dwAddr); g_pErrorHandleFunc(ERROR_TYPE_PARAMETER_INVALID,1,(void*)dwAddr,txt); } if (0 == pRect->right - pRect->left) { memset(txt,0,sizeof(txt)); wsprintf(txt,"Fail to RenderFont(), rect's width zero!! %s\n",str); GetEIP(&dwAddr); g_pErrorHandleFunc(ERROR_TYPE_PARAMETER_INVALID,0,(void*)dwAddr,txt); } if (0 == pRect->bottom - pRect->top) { memset(txt,0,sizeof(txt)); wsprintf(txt,"Fail to RenderFont(), rect's height zero!! %s\n",str); GetEIP(&dwAddr); g_pErrorHandleFunc(ERROR_TYPE_PARAMETER_INVALID,0,(void*)dwAddr,txt); } if (pRect->right - pRect->left > m_pFontCache->GetMaxWidth()) { memset(txt,0,sizeof(txt)); wsprintf(txt,"Fail to RenderFont(), rect's width too large!! %s\n",str); GetEIP(&dwAddr); g_pErrorHandleFunc(ERROR_TYPE_PARAMETER_INVALID,0,(void*)dwAddr,txt); } if (pRect->bottom - pRect->top > m_pFontCache->GetMaxWidth()) { memset(txt,0,sizeof(txt)); wsprintf(txt,"Fail to RenderFont(), rect's height too large!! %s\n",str); GetEIP(&dwAddr); g_pErrorHandleFunc(ERROR_TYPE_PARAMETER_INVALID,0,(void*)dwAddr,txt); } #endif if (!dwLen) goto lb_return; LPDIRECT3DDEVICE9 pDevice; pDevice = m_pRenderer->GetDevice(); pDevice->SetRenderState(D3DRS_ZWRITEENABLE ,FALSE); pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE); pDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_POINT); pDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_POINT); VECTOR2 v2Pos; v2Pos.x = (float)pRect->left; v2Pos.y = (float)pRect->top; pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX,0); pDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU,D3DTADDRESS_WRAP ); pDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV,D3DTADDRESS_WRAP ); pDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,D3DTTFF_DISABLE); pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE ); CVertexBuffer* pVB; CIndexBuffer* pIB; LPDIRECT3DTEXTURE9 pTex; m_propertyDesc.pszString = str; m_propertyDesc.dwStrLen = dwLen; m_propertyDesc.dwColor = dwColor; m_pFontCache->GetResource(&pTex,&pVB,&pIB,pRect,&m_propertyDesc); /// LeHide Edit, Check - FVF형을 정확히 알아야 함 폰트는 빌보드로 돼 있을까/ 여튼 현재 잘 돌아간다 pDevice->SetVertexShader(NULL); pDevice->SetFVF(pVB->GetVertexShader()); //pDevice->SetFVF(D3DFVF_D3DTLVERTEX); pDevice->SetStreamSource( 0, pVB->GetVertexBuffer(), 0, pVB->GetVertexSize()); pDevice->SetTexture(0,pTex); DWORD dwAlpha; dwAlpha = (dwColor & 0xff000000)>>24; //trustpak EnableAlphaSetting(pDevice, 0, dwAlpha); //BeginAlphaMeshObject(pDevice,0,255,dwAlpha); //pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE ); //pDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); //pDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); //trustpak // pDevice->SetRenderState(D3DRS_FILLMODE,RENDER_MODE_WIREFRAME); pDevice->SetIndices(pIB->GetIndexBuffer()); HRESULT l_RetValue = pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, pVB->GetStartIndex(), 0, 4, pIB->GetStartIndex(), 2); if(D3D_OK != l_RetValue) { goto lb_return; } EndAlphaMeshObject(pDevice); // pDevice->SetRenderState(D3DRS_FILLMODE,RENDER_MODE_SOLID); pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE ); pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE); pDevice->SetRenderState(D3DRS_ZWRITEENABLE ,TRUE); pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE ); pDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR); pDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR); // __asm // { // rdtsc // pop ecx // pop ebx // sub edx,ecx // sub eax,ebx // nop // } lb_return: return iResult; }