//---------------------------------------------------------------------------- public void SetConstant(PKFxManager.ShaderConstant constant) { if (this.ShaderConstantExist(constant.m_Descriptor) == false) { Debug.LogError("[PKFX] CustomShader.SetConstant : " + constant.m_Descriptor.Name + " doesn't exist"); } else { for (int i = 0; i < m_ShaderConstantList.Count; i++) { if (m_ShaderConstantList[i].m_Descriptor.Name == constant.m_Descriptor.Name) { m_ShaderConstantList[i].m_Value0 = constant.m_Value0; m_ShaderConstantList[i].m_Value1 = constant.m_Value1; m_ShaderConstantList[i].m_Value2 = constant.m_Value2; m_ShaderConstantList[i].m_Value3 = constant.m_Value3; } } } }
//---------------------------------------------------------------------------- public void UpdateShaderConstants(bool forceUpdate) { int constCount = -1; if (m_ShaderConstantList.Count == 0) { return; } AllocAttributesCacheIFN(); for (int i = 0; i < m_ShaderConstantList.Count; i++) { PKFxManager.ShaderConstant srcAttr = m_ShaderConstantList[i]; bool wasChanged = m_ShaderConstantsCache[i].m_Value0 != srcAttr.m_Value0 || m_ShaderConstantsCache[i].m_Value1 != srcAttr.m_Value1 || m_ShaderConstantsCache[i].m_Value2 != srcAttr.m_Value2 || m_ShaderConstantsCache[i].m_Value3 != srcAttr.m_Value3; if (wasChanged || forceUpdate) { m_ShaderConstantsCache[i].m_Type = (int)(m_ShaderConstantList[i].m_Descriptor.Type); m_ShaderConstantsCache[i].m_Value0 = srcAttr.m_Value0; m_ShaderConstantsCache[i].m_Value1 = srcAttr.m_Value1; m_ShaderConstantsCache[i].m_Value2 = srcAttr.m_Value2; m_ShaderConstantsCache[i].m_Value3 = srcAttr.m_Value3; constCount = i; } } if (constCount >= 0) { if (!PKFxManager.ShaderSetConstant(m_LoadedShaderId, constCount + 1, m_ShaderConstantsHandler)) { Debug.LogError("[PKFX] Shader constant through pinned memory failed."); Debug.LogError("[PKFX] Did you try to change an FX without stopping it beforehand?"); } } }