bool CFont::InitModel() { static CStrAny sPlain(ST_CONST, "Plain"); static CStrAny sg_mWorld(ST_CONST, "g_mWorld"); static CStrAny sg_mView(ST_CONST, "g_mView"); static CStrAny sg_mProj(ST_CONST, "g_mProj"); static CStrAny sg_mTexTransform(ST_CONST, "g_mTexTransform"); static CStrAny sg_cMaterialDiffuse(ST_CONST, "g_cMaterialDiffuse"); static CStrAny sg_txDiffuse(ST_CONST, "g_txDiffuse"); static CStrAny sg_sDiffuse(ST_CONST, "g_sDiffuse"); ASSERT(!m_pTextModel); bool bRes; CTechnique *pTech = CGraphics::Get()->GetTechnique(sPlain); if (!pTech) return false; CSmartPtr<CGeometry> pGeom(new CGeometry()); bRes = pGeom->Init(pTech->m_pInputDesc, CGeometry::PT_TRIANGLELIST, INIT_BUFFER_CHARS * 4, INIT_BUFFER_CHARS * 6, 0, 0, CResource::RF_DYNAMIC | CResource::RF_KEEPSYSTEMCOPY, CResource::RF_DYNAMIC | CResource::RF_KEEPSYSTEMCOPY); if (!bRes) return false; CSmartPtr<CMaterial> pMaterial(new CMaterial()); bRes = pMaterial->Init(pTech, true, 0); if (!bRes) return false; CSmartPtr<CModel> pModel(new CModel()); bRes = pModel->Init(pGeom, pMaterial, 0, false); if (!bRes) return false; m_pTextModel = pModel; CMatrix<4, 4> mIdentity; mIdentity.SetDiagonal(); CMatrixVar vMat(4, 4, CMatrixVar::MVF_OWNVALUES, &mIdentity(0, 0)); m_pTextModel->SetVar(sg_mProj, vMat); m_pTextModel->SetVar(sg_mView, vMat); m_pTextModel->SetVar(sg_mWorld, vMat); CMatrix<3, 2> mTexIdentity; mTexIdentity.SetDiagonal(); CMatrixVar vTexMat(3, 2, CMatrixVar::MVF_OWNVALUES, &mTexIdentity(0, 0)); m_pTextModel->SetVar(sg_mTexTransform, vTexMat); CVar<CVector<4> > vVec4; vVec4.Val().Set(1, 1, 1, 1); m_pTextModel->SetVar(sg_cMaterialDiffuse, vVec4); CVar<CTexture *> vTexVar; vTexVar.Val() = m_pTexture; m_pTextModel->SetVar(sg_txDiffuse, vTexVar); CVar<CSampler *> vSampVar; vSampVar.Val() = CGraphics::Get()->GetSampler(CSampler::TDesc()); m_pTextModel->SetVar(sg_sDiffuse, vSampVar); ResetModel(); return true; }