Advertisement
expired6978

UpdatePlayerTints

Mar 26th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1.                 BSFixedString nodeName(" (00000D67)[1]/ (00000D64) [100%]");
  2.                 NiAVObject * targetNode = thisObj->loadedState->node->GetObjectByName(&nodeName.data/*&targetPart->partName.data*/);
  3.                 if(targetNode) {
  4.                     NiTriBasedGeom * geometry = targetNode->GetAsNiTriBasedGeom();
  5.                     if(geometry) {
  6.                         BSLightingShaderProperty * shaderProperty = (BSLightingShaderProperty *)geometry->m_spEffectState;
  7.                         if(shaderProperty->GetRTTI() == NiRTTI_BSLightingShaderProperty) {
  8.                             BSMaskedShaderMaterial * material = (BSMaskedShaderMaterial *)shaderProperty->material;
  9.                             // Hack to swap shader type and hope it updates...Spoiler: It doesn't
  10.                             if(material->GetShaderType() != BSMaskedShaderMaterial::kShaderType_FaceTint) {
  11.                                 DumpClass(material, sizeof(BSMaskedShaderMaterial)/4);
  12.                                 BSMaskedShaderMaterial * newMaterial = BSMaskedShaderMaterial::CreateFromLightingShader(material);
  13.                                 shaderProperty->material = newMaterial;
  14.                                 material = newMaterial;
  15.                             }
  16.                             static NiRenderTarget * maskTarget = NULL;
  17.                             if(!maskTarget) {
  18.                                 NiRenderTarget * newTarget = CALL_MEMBER_FN(NiRenderManager::GetSingleton(), CreateRenderTarget)(NiDX9Renderer::GetSingleton(), 32, 0, 0);
  19.                                 if(maskTarget != newTarget) {
  20.                                     if(maskTarget) {
  21.                                         NiRenderTarget * targetMask = maskTarget;
  22.                                         if(!InterlockedDecrement(&maskTarget->m_uiRefCount))
  23.                                             targetMask->DeleteThis();
  24.                                     }
  25.  
  26.                                     maskTarget = newTarget;
  27.                                     if(newTarget)
  28.                                         InterlockedIncrement(&newTarget->m_uiRefCount);
  29.                                 }
  30.                             }
  31.                            
  32.                             tArray<TintMask*> * masks = CALL_MEMBER_FN(player, GetTintList)();
  33.                             if(masks && maskTarget) {
  34.                                 if(ApplyMasksToRenderTarget(masks, &maskTarget)) {
  35.                                     NiRenderedTexture * materialTexture = material->renderedTexture;
  36.                                     NiRenderedTexture * renderedTexture = maskTarget->renderedTexture;
  37.                                     if(materialTexture != renderedTexture) {
  38.                                         if(materialTexture) {
  39.                                             if(!InterlockedDecrement(&materialTexture->m_uiRefCount))
  40.                                                 materialTexture->DeleteThis();
  41.                                         }
  42.  
  43.                                         material->renderedTexture = renderedTexture;
  44.                                         if(renderedTexture)
  45.                                             InterlockedIncrement(&renderedTexture->m_uiRefCount);
  46.                                     }
  47.                                 }
  48.                             }
  49.  
  50.                             DumpClass(material, sizeof(BSMaskedShaderMaterial)/4);
  51.                             DumpClass(maskTarget, sizeof(NiRenderTarget)/4);
  52.                         }
  53.                     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement