CCamoMaterialProxy::~CCamoMaterialProxy() { #if 0 InstanceData_t *curr = m_InstanceDataListHead; while( curr ) { InstanceData_t *next; next = curr->next; delete curr; curr = next; } m_InstanceDataListHead = NULL; #endif // Disconnect the texture regenerator... if (m_pCamoTextureVar) { ITexture *pCamoTexture = m_pCamoTextureVar->GetTextureValue(); if (pCamoTexture) pCamoTexture->SetTextureRegenerator( NULL ); } delete m_pCamoPatternImage; delete m_pointsInNormalizedBox; }
//----------------------------------------------------------------------------- // initialization, shutdown //----------------------------------------------------------------------------- bool CProceduralTexturePanel::Init( int nWidth, int nHeight, bool bAllocateImageBuffer ) { m_nWidth = nWidth; m_nHeight = nHeight; if ( bAllocateImageBuffer ) { m_pImageBuffer = new BGRA8888_t[nWidth * nHeight]; } m_TextureSubRect.x = m_TextureSubRect.y = 0; m_TextureSubRect.width = nWidth; m_TextureSubRect.height = nHeight; char pTemp[512]; Q_snprintf( pTemp, 512, "__%s", GetName() ); ITexture *pTex = MaterialSystem()->CreateProceduralTexture( pTemp, TEXTURE_GROUP_VGUI, m_nWidth, m_nHeight, IMAGE_FORMAT_BGRX8888, TEXTUREFLAGS_CLAMPS | TEXTUREFLAGS_CLAMPT | TEXTUREFLAGS_NOMIP | TEXTUREFLAGS_NOLOD | TEXTUREFLAGS_PROCEDURAL | TEXTUREFLAGS_SINGLECOPY ); pTex->SetTextureRegenerator( this ); m_ProceduralTexture.Init( pTex ); KeyValues *pVMTKeyValues = new KeyValues( "UnlitGeneric" ); pVMTKeyValues->SetString( "$basetexture", pTemp ); pVMTKeyValues->SetInt( "$nocull", 1 ); pVMTKeyValues->SetInt( "$nodebug", 1 ); m_ProceduralMaterial.Init( MaterialSystem()->CreateMaterial( pTemp, pVMTKeyValues )); m_nTextureID = MatSystemSurface()->CreateNewTextureID( false ); MatSystemSurface()->DrawSetTextureMaterial( m_nTextureID, m_ProceduralMaterial ); return true; }
bool CCamoMaterialProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues ) { return false; // hack! Need to make sure that the TGA loader has a valid filesystem before trying // to load the camo pattern. #if 0 // set how big our instance data is. SetInstanceDataSize( sizeof( CamoInstanceData_t ) ); #endif // remember what material we belong to. m_pMaterial = pMaterial; // get pointers to material vars. bool found; m_pCamoTextureVar = m_pMaterial->FindVar( "$baseTexture", &found ); if( !found ) { m_pCamoTextureVar = NULL; return false; } ITexture *pCamoTexture = m_pCamoTextureVar->GetTextureValue(); if (pCamoTexture) pCamoTexture->SetTextureRegenerator( &m_TextureRegen ); // Need to get the palettized texture to create the procedural texture from // somewhere. m_pCamoPatternTextureVar = m_pMaterial->FindVar( "$camoPatternTexture", &found ); if( !found ) { m_pCamoTextureVar = NULL; return false; } IMaterialVar *subBoundingBoxMinVar, *subBoundingBoxMaxVar; subBoundingBoxMinVar = m_pMaterial->FindVar( "$camoBoundingBoxMin", &found, false ); if( !found ) { m_SubBoundingBoxMin = Vector( 0.0f, 0.0f, 0.0f ); } else { subBoundingBoxMinVar->GetVecValue( m_SubBoundingBoxMin.Base(), 3 ); } subBoundingBoxMaxVar = m_pMaterial->FindVar( "$camoBoundingBoxMax", &found, false ); if( !found ) { m_SubBoundingBoxMax = Vector( 1.0f, 1.0f, 1.0f ); } else { subBoundingBoxMaxVar->GetVecValue( m_SubBoundingBoxMax.Base(), 3 ); } LoadCamoPattern(); GenerateRandomPointsInNormalizedCube(); return true; }
void CZZMaterialProxy::Release() { // Disconnect the texture regenerator... if (m_pTexture) { //ITexture *pTexture = m_pTextureVar->GetTextureValue(); <- powoduje access violation if (m_pTexture) m_pTexture->SetTextureRegenerator(NULL); } }
CDensityMaterialProxy::~CDensityMaterialProxy() { // Disconnect the texture regenerator... if (m_pFOWTextureVar) { ITexture *pFOWTexture = m_pFOWTextureVar->GetTextureValue(); if (pFOWTexture) pFOWTexture->SetTextureRegenerator( NULL ); } }
bool CZZMaterialProxy::Init( IMaterial *pMaterial, KeyValues *pKeyValues ) { // ZZ return false; // hack! Need to make sure that the TGA loader has a valid filesystem before trying // to load the camo pattern. m_pMaterial = pMaterial; // get pointers to material vars. bool found; m_pTextureVar = pMaterial->FindVar( "$baseTexture", &found ); if( !found ) { m_pTextureVar = NULL; return false; } m_pTexture = m_pTextureVar->GetTextureValue(); if (m_pTexture) m_pTexture->SetTextureRegenerator( &m_TextureRegen ); return true; }
void CPlayerTextureProxy::OnBind( C_BaseEntity *pEnt ) { // Bail if no base variable if ( !m_pBaseTextureVar ) return; CTeamKitInfo *pKitInfo; const char *teamFolder; const char *kitFolder; int skinIndex; int shirtNumber; const char *shirtName; bool isKeeper; ITexture *pDetailTexture; CProceduralRegenerator **pProcReg; if (dynamic_cast<C_SDKPlayer *>(pEnt)) { C_SDKPlayer *pPl = dynamic_cast<C_SDKPlayer *>(pEnt); C_Team *pTeam = GetGlobalTeam(g_PR->GetTeam(pPl->index)); teamFolder = pTeam->GetFolderName(); kitFolder = pTeam->GetKitFolderName(); pKitInfo = pTeam->GetKitInfo(); skinIndex = g_PR->GetSkinIndex(pPl->index); shirtNumber = g_PR->GetShirtNumber(pPl->index); shirtName = g_PR->GetShirtName(pPl->index); isKeeper = g_PR->GetTeamPosType(pPl->index) == POS_GK; int teamIndex = pTeam->GetTeamNumber() - TEAM_A; int posIndex = g_PR->GetTeamPosIndex(pPl->index); pDetailTexture = materials->FindTexture(VarArgs("models/player/default/detail_%d_%d", teamIndex, posIndex), NULL, true); pProcReg = &m_pTextureRegen[teamIndex][posIndex]; } else if (dynamic_cast<C_ReplayPlayer *>(pEnt)) { C_ReplayPlayer *pReplayPl = dynamic_cast<C_ReplayPlayer *>(pEnt); C_Team *pTeam = GetGlobalTeam(pReplayPl->m_nTeamNumber); teamFolder = pTeam->GetFolderName(); kitFolder = pTeam->GetKitFolderName(); pKitInfo = pTeam->GetKitInfo(); skinIndex = pReplayPl->m_nSkinIndex; shirtNumber = pReplayPl->m_nShirtNumber; shirtName = pReplayPl->m_szShirtName; isKeeper = pReplayPl->m_bIsKeeper; int teamIndex = pReplayPl->m_nTeamNumber - TEAM_A; int posIndex = pReplayPl->m_nTeamPosIndex; pDetailTexture = materials->FindTexture(VarArgs("models/player/default/detail_%d_%d", teamIndex, posIndex), NULL, true); pProcReg = &m_pTextureRegen[teamIndex][posIndex]; } else if (dynamic_cast<C_BaseAnimatingOverlay *>(pEnt)) { C_BaseAnimatingOverlay *pPlayerModelPreview = dynamic_cast<C_BaseAnimatingOverlay *>(pEnt); CAppearanceSettingPanel *pPanel = (CAppearanceSettingPanel *)iosOptionsMenu->GetPanel()->GetSettingPanel(SETTING_PANEL_APPEARANCE); pPanel->GetPlayerTeamInfo(&teamFolder, &kitFolder); pKitInfo = CTeamInfo::FindTeamByKitName(VarArgs("%s/%s", teamFolder, kitFolder)); skinIndex = pPanel->GetPlayerSkinIndex(); shirtNumber = pPanel->GetPlayerOutfieldShirtNumber(); shirtName = pPanel->GetPlayerShirtName(); isKeeper = false; pDetailTexture = materials->FindTexture("models/player/default/detail_preview", NULL, true); pProcReg = &m_pPreviewTextureRegen; } else { return; } if (!Q_strcmp(m_szTextureType, "shirt") || !Q_strcmp(m_szTextureType, "keepershirt")) { if (!(*pProcReg)) *pProcReg = new CProceduralRegenerator(); pDetailTexture->SetTextureRegenerator(*pProcReg); m_pDetailTextureVar->SetTextureValue(pDetailTexture); bool needsUpdate; if (isKeeper) needsUpdate = (*pProcReg)->SetPlayerInfo(shirtName, shirtNumber, pKitInfo->m_KeeperShirtNameColor, pKitInfo->m_nKeeperShirtNameOffset, pKitInfo->m_KeeperShirtNumberColor, pKitInfo->m_nKeeperShirtNumberOffset, true, pKitInfo->m_pFontAtlas); else needsUpdate = (*pProcReg)->SetPlayerInfo(shirtName, shirtNumber, pKitInfo->m_OutfieldShirtNameColor, pKitInfo->m_nOutfieldShirtNameOffset, pKitInfo->m_OutfieldShirtNumberColor, pKitInfo->m_nOutfieldShirtNumberOffset, false, pKitInfo->m_pFontAtlas); if (needsUpdate) pDetailTexture->Download(); } char texture[128]; if (Q_stricmp(m_szTextureType, "shirt") == 0) Q_snprintf(texture, sizeof(texture), "%s/%s/%s/outfield", TEAMKITS_PATH, teamFolder, kitFolder); else if (Q_stricmp(m_szTextureType, "keepershirt") == 0) Q_snprintf(texture, sizeof(texture), "%s/%s/%s/keeper", TEAMKITS_PATH, teamFolder, kitFolder); else if (Q_stricmp(m_szTextureType, "socks") == 0) Q_snprintf(texture, sizeof(texture), "%s/%s/%s/socks", TEAMKITS_PATH, teamFolder, kitFolder); else if (Q_stricmp(m_szTextureType, "gksocks") == 0) Q_snprintf(texture, sizeof(texture), "%s/%s/%s/gksocks", TEAMKITS_PATH, teamFolder, kitFolder); else if (Q_stricmp(m_szTextureType, "skin") == 0) Q_snprintf(texture, sizeof(texture), "models/player/skins/skin%d", skinIndex + 1); else Q_snprintf(texture, sizeof(texture), "%s", m_pTexture->GetName()); ITexture *pNewTex = materials->FindTexture(texture, NULL, false); if (!pNewTex->IsError()) m_pTexture = pNewTex; m_pBaseTextureVar->SetTextureValue(m_pTexture); GetMaterial()->RecomputeStateSnapshots(); }