Пример #1
0
 internal void Init(int instanceIndex, IntPtr nativeInstance, IIndoorMapMaterial material, IndoorMapsApiInternal internalAPI)
 {
     InstanceIndex  = instanceIndex;
     NativeInstance = nativeInstance;
     Material       = material;
     m_internalAPI  = internalAPI;
     OnRenderStateUpdated();
 }
        public List <IIndoorMapMaterial> GetAllInstancesOfMaterial(IIndoorMapMaterial material)
        {
            if (m_instantiatedMaterials.ContainsKey(material))
            {
                return(m_instantiatedMaterials[material]);
            }

            return(new List <IIndoorMapMaterial>());
        }
        public void OnStreamedTextureReceived(IIndoorMapMaterial requestingMaterial, string textureKey, Texture texture)
        {
            var materialInstances = m_materialRepository.GetAllInstancesOfMaterial(requestingMaterial);

            foreach (var materialInstance in materialInstances)
            {
                if (materialInstance.OnStreamingTextureReceived != null)
                {
                    materialInstance.OnStreamingTextureReceived(textureKey, texture);
                }
            }
        }
        public IIndoorMapMaterial InstantiateMaterial(IIndoorMapMaterial templateMaterial)
        {
            var newMaterialInstance = templateMaterial.CreateCopy();

            // Each renderable should have its own copy of the material for per-renderable state (like colouring to work)
            // For per-material state, however, we need to share the material.

            // CreateMaterial is more like CreateMaterialTemplate
            Debug.Assert(m_instantiatedMaterials.ContainsKey(templateMaterial));
            m_instantiatedMaterials[templateMaterial].Add(newMaterialInstance);

            return(newMaterialInstance);
        }
        public void IssueTextureRequestsForMaterial(IIndoorMapMaterial material, IndoorMaterialDescriptor descriptor)
        {
            string texturePath;
            var    key = "DiffuseTexturePath";

            if (descriptor.Strings.TryGetValue(key, out texturePath))
            {
                m_textureStreamingService.RequestTextureForMaterial(material, descriptor.IndoorMapName, key, texturePath, false);
            }

            var    cubeMapKey = "CubeMapTexturePath";
            string cubeMapTexturePath;

            if (descriptor.Strings.TryGetValue(cubeMapKey, out cubeMapTexturePath))
            {
                if (!string.IsNullOrEmpty(cubeMapTexturePath))
                {
                    m_textureStreamingService.RequestTextureForMaterial(material, descriptor.IndoorMapName, cubeMapKey, cubeMapTexturePath, true);
                }
            }
        }
 public void IssueTextureRequestsForMaterial(IIndoorMapMaterial material, IndoorMaterialDescriptor descriptor)
 {
     // do nothing, we won't bother with a texture for these materials - see DefaultIndoorMaterialFactory for an example where textures do get loaded
 }
 public void DeleteMaterial(IIndoorMapMaterial material)
 {
     m_instantiatedMaterials.Remove(material);
 }