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