コード例 #1
0
        public static int GetTextureArrayIndex(
            ShapeDescriptor shapeDescriptor,
            short transferMode,
            bool isOpaqueSurface,
            SurfaceTypes surfaceType)
        {
            if (shapeDescriptor.IsEmpty())
            {
                return(0);
            }

            var landscapeTransferMode = transferMode == 9 || shapeDescriptor.UsesLandscapeCollection();

            var collectionKey =
                GetTexture2DArrayKeyDictionary(
                    shapeDescriptor,
                    landscapeTransferMode: landscapeTransferMode,
                    isOpaqueSurface: isOpaqueSurface,
                    surfaceType)
                [shapeDescriptor];

            var collection = Texture2DArrays[collectionKey];

            return(collection.GetBitmapIndex(shapeDescriptor));
        }
コード例 #2
0
        public static Material GetMaterial(
            ShapeDescriptor shapeDescriptor,
            short transferMode,
            bool isOpaqueSurface,
            SurfaceTypes surfaceType,
            bool incrementUsageCounter)
        {
            if (!shapeDescriptor.IsEmpty())
            {
                if (TextureUsageCounter.ContainsKey(shapeDescriptor))
                {
                    if (incrementUsageCounter)
                    {
                        TextureUsageCounter[shapeDescriptor]++;
                    }
                }
                else
                {
                    TextureUsageCounter[shapeDescriptor] = 1;
                }

                var landscapeTransferMode = transferMode == 9 || shapeDescriptor.UsesLandscapeCollection();

                return(GetTrackedMaterial(shapeDescriptor,
                                          landscapeTransferMode,
                                          isOpaqueSurface,
                                          surfaceType));
            }
            else
            {
                return(UnassignedMaterial);
            }
        }
コード例 #3
0
        public void SetShapeDescriptor(DataSources surfaceType, ShapeDescriptor shapeDescriptor)
        {
            short transferMode;

            switch (surfaceType)
            {
            case DataSources.Ceiling:
                if (shapeDescriptor.Equals(NativeObject.CeilingTexture))
                {
                    // Texture is not different, so exit
                    return;
                }

                NativeObject.CeilingTexture = shapeDescriptor;
                transferMode = NativeObject.CeilingTransferMode;

                break;

            case DataSources.Floor:
                if (shapeDescriptor.Equals(NativeObject.FloorTexture))
                {
                    // Texture is not different, so exit
                    return;
                }

                NativeObject.FloorTexture = shapeDescriptor;
                transferMode = NativeObject.FloorTransferMode;

                break;

            default:
                return;
            }

            short newTransferMode = 0;

            if (shapeDescriptor.UsesLandscapeCollection())
            {
                newTransferMode = 9;
            }
            else if (transferMode != 9)
            {
                newTransferMode = transferMode;
            }

            switch (surfaceType)
            {
            case DataSources.Ceiling:
                NativeObject.CeilingTransferMode = newTransferMode;
                CeilingSurface.ApplyTexture();
                break;

            case DataSources.Floor:
                NativeObject.FloorTransferMode = newTransferMode;
                FloorSurface.ApplyTexture();
                break;
            }
        }
コード例 #4
0
            public Texture2DArrayCollectionKey(ShapeDescriptor shapeDescriptor, bool usedForMedia)
            {
                var texture = GetTexture(shapeDescriptor, returnPlaceholderIfNotFound: true);

                // TODO: should unload this texture when done adding it to the array, if NO_EDITING

                Width      = texture.width;
                Height     = texture.height;
                Format     = texture.format;
                HasMipMaps = texture.mipmapCount > 1;

                // Treat all landscapes as part of the same collection,
                // since it's not common to have over 255 landscape bitmaps total
                ShapeCollection = shapeDescriptor.UsesLandscapeCollection() ? (uint)27 : shapeDescriptor.Collection;

                // Treat all medias as part of the same collection,
                // since it's not common to have over 255 media bitmaps total,
                // and the "tint" effect for the shader is controlled by vertex color (TODO: actually set this up)
                UsedForMedia = usedForMedia;
                if (usedForMedia)
                {
                    ShapeCollection = byte.MaxValue + 1;
                }
            }
コード例 #5
0
        public void SetShapeDescriptor(DataSources dataSource, ShapeDescriptor shapeDescriptor)
        {
            short transferMode;

            switch (dataSource)
            {
            case DataSources.Primary:
                if (shapeDescriptor.Equals(NativeObject.Primary.Texture))
                {
                    // Texture is not different, so exit
                    return;
                }

                NativeObject.Primary.Texture = shapeDescriptor;
                transferMode = NativeObject.PrimaryTransferMode;

                break;

            case DataSources.Secondary:
                if (shapeDescriptor.Equals(NativeObject.Secondary.Texture))
                {
                    // Texture is not different, so exit
                    return;
                }

                NativeObject.Secondary.Texture = shapeDescriptor;
                transferMode = NativeObject.SecondaryTransferMode;

                break;

            case DataSources.Transparent:
                if (shapeDescriptor.Equals(NativeObject.Transparent.Texture))
                {
                    // Texture is not different, so exit
                    return;
                }

                NativeObject.Transparent.Texture = shapeDescriptor;
                transferMode = NativeObject.TransparentTransferMode;

                break;

            default:
                return;
            }

            short newTransferMode = 0;

            if (shapeDescriptor.UsesLandscapeCollection())
            {
                newTransferMode = 9;
            }
            else if (transferMode != 9)
            {
                newTransferMode = transferMode;
            }

            switch (dataSource)
            {
            case LevelEntity_Side.DataSources.Primary:
                NativeObject.PrimaryTransferMode = newTransferMode;
                PrimarySurface.ApplyTexture();
                break;

            case LevelEntity_Side.DataSources.Secondary:
                NativeObject.SecondaryTransferMode = newTransferMode;
                SecondarySurface.ApplyTexture();
                break;

            case LevelEntity_Side.DataSources.Transparent:
                NativeObject.TransparentTransferMode = newTransferMode;
                TransparentSurface.ApplyTexture(innerLayer: !NativeObject.HasLayeredTransparentSide(ParentLevel.Level));
                break;
            }
        }