| 1292 | |
| 1293 | |
| 1294 | bool Renderer::initTexter() |
| 1295 | { |
| 1296 | if(gFntData) |
| 1297 | return true; |
| 1298 | |
| 1299 | char filename[1024]; |
| 1300 | Ps::strlcpy(filename, sizeof(filename), getAssetDir()); |
| 1301 | Ps::strlcat(filename, sizeof(filename), "fonts/arial_black.bin"); |
| 1302 | |
| 1303 | gFntData = new FntData; |
| 1304 | if(!gFntData->Load(*this, filename)) |
| 1305 | { |
| 1306 | closeTexter(); |
| 1307 | return false; |
| 1308 | } |
| 1309 | |
| 1310 | { |
| 1311 | RendererMaterialDesc matDesc; |
| 1312 | matDesc.alphaTestFunc = RendererMaterial::ALPHA_TEST_ALWAYS; |
| 1313 | matDesc.alphaTestRef = 0.0f; |
| 1314 | matDesc.type = RendererMaterial::TYPE_UNLIT; |
| 1315 | matDesc.blending = true; |
| 1316 | matDesc.srcBlendFunc = RendererMaterial::BLEND_SRC_ALPHA; |
| 1317 | matDesc.dstBlendFunc = RendererMaterial::BLEND_ONE_MINUS_SRC_ALPHA; |
| 1318 | matDesc.geometryShaderPath = NULL; |
| 1319 | matDesc.vertexShaderPath = "vertex/text.cg"; |
| 1320 | matDesc.fragmentShaderPath = "fragment/text.cg"; |
| 1321 | PX_ASSERT(matDesc.isValid()); |
| 1322 | |
| 1323 | m_textMaterial = createMaterial(matDesc); |
| 1324 | if(!m_textMaterial) |
| 1325 | { |
| 1326 | closeTexter(); |
| 1327 | return false; |
| 1328 | } |
| 1329 | |
| 1330 | m_textMaterialInstance = new RendererMaterialInstance(*m_textMaterial); |
| 1331 | if(!m_textMaterialInstance) |
| 1332 | { |
| 1333 | closeTexter(); |
| 1334 | return false; |
| 1335 | } |
| 1336 | |
| 1337 | const RendererMaterial::Variable* var = m_textMaterial->findVariable("diffuseTexture", RendererMaterial::VARIABLE_SAMPLER2D); |
| 1338 | if(!var) |
| 1339 | { |
| 1340 | closeTexter(); |
| 1341 | return false; |
| 1342 | } |
| 1343 | m_textMaterialInstance->writeData(*var, &(gFntData->mTexture)); |
| 1344 | } |
| 1345 | |
| 1346 | return true; |
| 1347 | } |
| 1348 | |
| 1349 | void Renderer::closeTexter() |
| 1350 | { |