//----------------------------------------------------------------------------

    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?");
            }
        }
    }