/// <inheritdoc/> protected override void PrepareContext() { base.PrepareContext(); // Init assets if (Context.InitializeDatabase) { databaseFileProvider = InitializeAssetDatabase(); ((DatabaseFileProviderService)Services.GetService <IDatabaseFileProviderService>()).FileProvider = databaseFileProvider; var renderingSettings = new RenderingSettings(); if (Content.Exists(GameSettings.AssetUrl)) { Settings = Content.Load <GameSettings>(GameSettings.AssetUrl); renderingSettings = Settings.Configurations.Get <RenderingSettings>(); // Set ShaderProfile even if AutoLoadDefaultSettings is false (because that is what shaders in effect logs are compiled against, even if actual instantiated profile is different) if (renderingSettings.DefaultGraphicsProfile > 0) { var deviceManager = (GraphicsDeviceManager)graphicsDeviceManager; if (!deviceManager.ShaderProfile.HasValue) { deviceManager.ShaderProfile = renderingSettings.DefaultGraphicsProfile; } } } // Load several default settings if (AutoLoadDefaultSettings) { var deviceManager = (GraphicsDeviceManager)graphicsDeviceManager; if (renderingSettings.DefaultGraphicsProfile > 0) { deviceManager.PreferredGraphicsProfile = new[] { renderingSettings.DefaultGraphicsProfile }; } if (renderingSettings.DefaultBackBufferWidth > 0) { deviceManager.PreferredBackBufferWidth = renderingSettings.DefaultBackBufferWidth; } if (renderingSettings.DefaultBackBufferHeight > 0) { deviceManager.PreferredBackBufferHeight = renderingSettings.DefaultBackBufferHeight; } deviceManager.PreferredColorSpace = renderingSettings.ColorSpace; SceneSystem.InitialSceneUrl = Settings?.DefaultSceneUrl; SceneSystem.InitialGraphicsCompositorUrl = Settings?.DefaultGraphicsCompositorUrl; SceneSystem.SplashScreenUrl = Settings?.SplashScreenUrl; SceneSystem.SplashScreenColor = Settings?.SplashScreenColor ?? Color4.Black; SceneSystem.DoubleViewSplashScreen = Settings?.DoubleViewSplashScreen ?? false; } } }
/// <summary> /// Loads chunk data from the storage container. /// </summary> /// <param name="fileProvider">Database file provider.</param> public unsafe IntPtr GetData(DatabaseFileProvider fileProvider) { if (IsLoaded) { return(data); } if (fileProvider == null) { throw new ContentStreamingException("Missing file provider.", Storage); } using (var stream = fileProvider.OpenStream(Storage.Url, VirtualFileMode.Open, VirtualFileAccess.Read, VirtualFileShare.Read, StreamFlags.Seekable)) { stream.Position = Location; #if USE_UNMANAGED var chunkBytes = Utilities.AllocateMemory(Size); int bufferCapacity = Math.Min(8192, Size); var buffer = new byte[bufferCapacity]; int count = Size; fixed(byte *bufferFixed = buffer) { var chunkBytesPtr = chunkBytes; var bufferPtr = new IntPtr(bufferFixed); do { int read = stream.Read(buffer, 0, Math.Min(count, bufferCapacity)); if (read <= 0) { break; } Utilities.CopyMemory(chunkBytesPtr, bufferPtr, read); chunkBytesPtr += read; count -= read; } while (count > 0); } #else var bytes = new byte[Size]; stream.Read(bytes, 0, Size); handle = GCHandle.Alloc(bytes, GCHandleType.Pinned); var chunkBytes = handle.AddrOfPinnedObject(); #endif data = chunkBytes; } RegisterUsage(); return(data); }
public void Init() { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); var databaseFileProvider = new DatabaseFileProvider(objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; shaderMixinParser = new ShaderMixinParser(AssetManager.FileProvider); shaderMixinParser.SourceManager.LookupDirectoryList.Add("/shaders"); }
private static void Main5() { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); var assetIndexMap = ContentIndexMap.Load(VirtualFileSystem.ApplicationDatabaseIndexPath); var databaseFileProvider = new DatabaseFileProvider(assetIndexMap, objDatabase); var test = new TestGenericClass(); test.Run(); }
private void Init() { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); var databaseFileProvider = new DatabaseFileProvider(objDatabase); manager = new ShaderSourceManager(databaseFileProvider); manager.LookupDirectoryList.Add("shaders"); logger = new Stride.Core.Shaders.Utility.LoggerResult(); loader = new ShaderLoader(manager); }
internal static DatabaseFileProvider InitializeAssetDatabase() { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); // Only set a mount path if not mounted already var mountPath = VirtualFileSystem.ResolveProviderUnsafe("/asset", true).Provider == null ? "/asset" : null; var result = new DatabaseFileProvider(objDatabase, mountPath); return(result); }
public void Init() { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db", "index", "/local/db"); var databaseFileProvider = new DatabaseFileProvider(objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; shaderMixinParser = new ShaderMixinParser(); shaderMixinParser.SourceManager.LookupDirectoryList.Add("/shaders"); }
/// <summary> /// Initializes the asset database. Similar to <see cref="Game.InitializeAssetDatabase"/>, but accessible without using internals. /// </summary> private static void InitializeAssetDatabase() { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db", "index", "/local/db"); // Only set a mount path if not mounted already var mountPath = VirtualFileSystem.ResolveProviderUnsafe("/asset", true).Provider == null ? "/asset" : null; var databaseFileProvider = new DatabaseFileProvider(objDatabase, mountPath); AssetManager.GetFileProvider = () => databaseFileProvider; }
private void DestroyAssetDatabase() { if (databaseFileProvider != null) { if (Services.GetService <IDatabaseFileProviderService>() is DatabaseFileProviderService dbfp) { dbfp.FileProvider = null; } databaseFileProvider.Dispose(); databaseFileProvider = null; } }
private void CopyStream(DatabaseFileProvider database, string fromFilePath) { var shaderFilename = string.Format("shaders/{0}", Path.GetFileName(fromFilePath)); using (var outStream = database.OpenStream(shaderFilename, VirtualFileMode.Create, VirtualFileAccess.Write, VirtualFileShare.Write)) { using (var inStream = new FileStream(fromFilePath, FileMode.Open, FileAccess.Read)) { inStream.CopyTo(outStream); } } }
public void Init() { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); var databaseFileProvider = new DatabaseFileProvider(objDatabase); ContentManager.GetFileProvider = () => databaseFileProvider; sourceManager = new ShaderSourceManager(); sourceManager.LookupDirectoryList.Add(@"shaders"); shaderLoader = new ShaderLoader(sourceManager); }
/// <summary> /// Create a new thumbnail request from entity. /// </summary> /// <param name="thumbnailUrl">The Url of the thumbnail</param> /// <param name="scene">The scene describing the thumbnail to draw</param> /// <param name="provider">The provider to use for the request.</param> /// <param name="thumbnailSize">The desired size of the thumbnail</param> /// <param name="colorSpace">The color space.</param> /// <param name="renderingMode">the rendering mode (hdr or ldr).</param> /// <param name="logger">The logger</param> /// <param name="logLevel">The dependency build status log level</param> public ThumbnailBuildRequest(string thumbnailUrl, Scene scene, GraphicsCompositor graphicsCompositor, DatabaseFileProvider provider, Int2 thumbnailSize, ColorSpace colorSpace, RenderingMode renderingMode, ILogger logger, LogMessageType logLevel) { Logger = logger; Url = thumbnailUrl; Size = thumbnailSize; Scene = scene; GraphicsCompositor = graphicsCompositor; FileProvider = provider; DependencyBuildStatus = logLevel; ColorSpace = colorSpace; RenderingMode = renderingMode; }
public void Init() { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); var databaseFileProvider = new DatabaseFileProvider(objDatabase); ContentManager.GetFileProvider = () => databaseFileProvider; manager = new ShaderSourceManager(); manager.LookupDirectoryList.Add("shaders"); logger = new SiliconStudio.Shaders.Utility.LoggerResult(); loader = new ShaderLoader(manager); }
private void Init() { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); var databaseFileProvider = new DatabaseFileProvider(objDatabase); Compiler = new EffectCompiler(databaseFileProvider); Compiler.SourceDirectories.Add("shaders"); MixinParameters = new CompilerParameters(); MixinParameters.EffectParameters.Platform = GraphicsPlatform.Direct3D11; MixinParameters.EffectParameters.Profile = GraphicsProfile.Level_11_0; ResultLogger = new LoggerResult(); }
public static void Main5() { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db"); var assetIndexMap = AssetIndexMap.Load(); var databaseFileProvider = new DatabaseFileProvider(assetIndexMap, objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; var test = new TestGenericClass(); test.Run(); }
public void Init() { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db", "index", "/local/db"); var databaseFileProvider = new DatabaseFileProvider(objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; manager = new ShaderSourceManager(); manager.LookupDirectoryList.Add("shaders"); logger = new SiliconStudio.Shaders.Utility.LoggerResult(); loader = new ShaderLoader(manager); }
internal static void InitializeAssetDatabase() { using (Profiler.Begin(GameProfilingKeys.ObjectDatabaseInitialize)) { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); // Only set a mount path if not mounted already var mountPath = VirtualFileSystem.ResolveProviderUnsafe("/asset", true).Provider == null ? "/asset" : null; var databaseFileProvider = new DatabaseFileProvider(objDatabase, mountPath); ContentManager.GetFileProvider = () => databaseFileProvider; } }
public void Init() { using (var profile = Profiler.Begin(GameProfilingKeys.ObjectDatabaseInitialize)) { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db", "index", "/local/db"); var databaseFileProvider = new DatabaseFileProvider(objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; } sourceManager = new ShaderSourceManager(); sourceManager.LookupDirectoryList.Add(@"shaders"); shaderLoader = new ShaderLoader(sourceManager); }
public void Init() { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db", "index", "/local/db"); var databaseFileProvider = new DatabaseFileProvider(objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; Compiler = new EffectCompiler(); Compiler.SourceDirectories.Add("shaders"); MixinParameters = new ShaderMixinParameters(); MixinParameters.Add(CompilerParameters.GraphicsPlatformKey, GraphicsPlatform.Direct3D11); MixinParameters.Add(CompilerParameters.GraphicsProfileKey, GraphicsProfile.Level_11_0); ResultLogger = new LoggerResult(); }
public static void Main() { using (var profile = Profiler.Begin(GameProfilingKeys.ObjectDatabaseInitialize)) { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db"); var assetIndexMap = AssetIndexMap.Load(); var databaseFileProvider = new DatabaseFileProvider(assetIndexMap, objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; } var test = new TestGenericClass(); test.Run(); }
private void PrepareContext() { // Content manager (this will be shared to all the EngineCores) Content = new ContentManager(_services); _services.AddService <IContentManager>(Content); _services.AddService(Content); // Initialize assets if (_initializeDatabase) { _databaseFileProvider = InitializeAssetDatabase(); ((DatabaseFileProviderService)_services.GetService <IDatabaseFileProviderService>()).FileProvider = _databaseFileProvider; if (Content.Exists(GameSettings.AssetUrl)) // TODO: maybe server needs its own GameSettings asset url? { Settings = Content.Load <GameSettings>(GameSettings.AssetUrl); } else { Settings = new GameSettings { Configurations = new PlatformConfigurations(), }; //var navSettings = Settings.Configurations.Get<NavigationSettings>(); //if (navSettings == null) //{ // var navConfigSettings = new ConfigurationOverride // { // Configuration = navSettings // }; // Settings.Configurations.Configurations.Add(navConfigSettings); //} } _services.AddService <IGameSettingsService>(this); } // HACK (kind of): Server must run at a fixed rate, which we'll manually control with _physicGameTime var physicsSettings = Settings.Configurations.Get <PhysicsSettings>() ?? new PhysicsSettings(); physicsSettings.Flags = PhysicsEngineFlags.ContinuousCollisionDetection; physicsSettings.MaxSubSteps = 0; // Important to keep this at 0 since this makes BulletPhysics simulate exactly one step per update physicsSettings.FixedTimeStep = (float)GameConfig.PhysicsFixedTimeStep.TotalSeconds; var physicsConfigSettings = new ConfigurationOverride { Configuration = physicsSettings }; Settings.Configurations.Configurations.Add(physicsConfigSettings); }
public static void Main() { using (var profile = Profiler.Begin(GameProfilingKeys.ObjectDatabaseInitialize)) { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db"); var assetIndexMap = AssetIndexMap.Load(); var databaseFileProvider = new DatabaseFileProvider(assetIndexMap, objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; } compiler = new EffectCompiler(); compiler.SourceDirectories.Add("shaders"); var shaderMixinSource = new ShaderMixinSource(); shaderMixinSource.Mixins.Add(new ShaderClassSource("ShaderBase")); shaderMixinSource.Mixins.Add(new ShaderClassSource("TransformationWVP")); shaderMixinSource.Mixins.Add(new ShaderClassSource("ShadingBase")); var shaderMixinSource2 = new ShaderMixinSource(); shaderMixinSource2.Mixins.Add(new ShaderClassSource("ShaderBase")); shaderMixinSource2.Mixins.Add(new ShaderClassSource("TransformationWVP")); shaderMixinSource2.Mixins.Add(new ShaderClassSource("ShadingBase")); shaderMixinSource2.Mixins.Add(new ShaderClassSource("ShadingOverlay")); var allThreads = new List <Thread>(); for (int i = 0; i < NumThreads; ++i) { CompilerThread compilerThread; if (i % 2 == 0) { compilerThread = new CompilerThread(compiler, shaderMixinSource); } else { compilerThread = new CompilerThread(compiler, shaderMixinSource2); } allThreads.Add(new Thread(compilerThread.Compile)); } foreach (var thread in allThreads) { thread.Start(); } }
public void Init() { using (var profile = Profiler.Begin(GameProfilingKeys.ObjectDatabaseInitialize)) { // Create and mount database file system var objDatabase = new ObjectDatabase("/data/db", "index", "/local/db"); var databaseFileProvider = new DatabaseFileProvider(objDatabase); AssetManager.GetFileProvider = () => databaseFileProvider; } shaderMixinParser = new ShaderMixinParser(); var sources = new List <string> { "shaders" }; shaderMixinParser.SourceManager.LookupDirectoryList = sources; }
public static void Main3() { // Create and mount database file system var objDatabase = ObjectDatabase.CreateDefaultDatabase(); var assetIndexMap = ContentIndexMap.Load(VirtualFileSystem.ApplicationDatabaseIndexPath); var databaseFileProvider = new DatabaseFileProvider(assetIndexMap, objDatabase); ContentManager.GetFileProvider = () => databaseFileProvider; compiler = new EffectCompiler(); compiler.SourceDirectories.Add("shaders"); var shaderMixinSource = new ShaderMixinSource(); shaderMixinSource.Mixins.Add(new ShaderClassSource("ShaderBase")); shaderMixinSource.Mixins.Add(new ShaderClassSource("TransformationWVP")); shaderMixinSource.Mixins.Add(new ShaderClassSource("ShadingBase")); var shaderMixinSource2 = new ShaderMixinSource(); shaderMixinSource2.Mixins.Add(new ShaderClassSource("ShaderBase")); shaderMixinSource2.Mixins.Add(new ShaderClassSource("TransformationWVP")); shaderMixinSource2.Mixins.Add(new ShaderClassSource("ShadingBase")); shaderMixinSource2.Mixins.Add(new ShaderClassSource("ShadingOverlay")); var allThreads = new List <Thread>(); for (int i = 0; i < NumThreads; ++i) { CompilerThread compilerThread; if (i % 2 == 0) { compilerThread = new CompilerThread(compiler, shaderMixinSource); } else { compilerThread = new CompilerThread(compiler, shaderMixinSource2); } allThreads.Add(new Thread(compilerThread.Compile)); } foreach (var thread in allThreads) { thread.Start(); } }
private void CollectReferences(DatabaseFileProvider databaseFileProvider, Bundle bundle, HashSet <string> assets, string assetUrl) { // Already included? if (!assets.Add(assetUrl)) { return; } if (!databaseFileProvider.ContentIndexMap.TryGetValue(assetUrl, out ObjectId objectId)) { throw new InvalidOperationException($"Could not find Asset {assetUrl} for bundle {bundle.Name}."); } // Include references foreach (var reference in GetChunkReferences(databaseFileProvider, ref objectId)) { CollectReferences(databaseFileProvider, bundle, assets, reference); } }
/// <summary> /// Gets and cache the asset url referenced by the chunk with the given identifier. /// </summary> /// <param name="objectId">The object identifier.</param> /// <returns>The list of asset url referenced.</returns> private List <string> GetChunkReferences(DatabaseFileProvider databaseFileProvider, ref ObjectId objectId) { List <string> references; // Check the cache if (!referencesByObjectId.TryGetValue(objectId, out references)) { // First time, need to scan it referencesByObjectId[objectId] = references = new List <string>(); // Open stream to read list of chunk references using (var stream = databaseFileProvider.OpenStream(DatabaseFileProvider.ObjectIdUrl + objectId, VirtualFileMode.Open, VirtualFileAccess.Read)) { // Read chunk header var streamReader = new BinarySerializationReader(stream); var header = ChunkHeader.Read(streamReader); // Only process chunks if (header != null) { if (header.OffsetToReferences != -1) { // Seek to where references are stored and deserialize them streamReader.NativeStream.Seek(header.OffsetToReferences, SeekOrigin.Begin); List <ChunkReference> chunkReferences = null; streamReader.Serialize(ref chunkReferences, ArchiveMode.Deserialize); foreach (var chunkReference in chunkReferences) { references.Add(chunkReference.Location); } } } } } return(references); }
private static void Collect(HashSet <ObjectId> objectIds, ObjectId objectId, IAssetIndexMap assetIndexMap) { // Already added? if (!objectIds.Add(objectId)) { return; } using (var stream = AssetManager.FileProvider.OpenStream(DatabaseFileProvider.ObjectIdUrl + objectId, VirtualFileMode.Open, VirtualFileAccess.Read)) { // Read chunk header var streamReader = new BinarySerializationReader(stream); var header = ChunkHeader.Read(streamReader); // Only process chunks if (header != null) { if (header.OffsetToReferences != -1) { // Seek to where references are stored and deserialize them streamReader.NativeStream.Seek(header.OffsetToReferences, SeekOrigin.Begin); List <ChunkReference> references = null; streamReader.Serialize(ref references, ArchiveMode.Deserialize); foreach (var reference in references) { ObjectId refObjectId; var databaseFileProvider = DatabaseFileProvider.ResolveObjectId(reference.Location, out refObjectId); if (databaseFileProvider != null) { Collect(objectIds, refObjectId, databaseFileProvider.AssetIndexMap); } } } } } }
public DatabaseFileProviderService(DatabaseFileProvider fileProvider) { FileProvider = fileProvider; }
public RemoteEffectCompiler(IVirtualFileProvider fileProvider, DatabaseFileProvider database, RemoteEffectCompilerClient remoteEffectCompilerClient) { FileProvider = fileProvider; this.database = database; this.remoteEffectCompilerClient = remoteEffectCompilerClient; }
private KeyValuePair <EffectBytecode, EffectBytecodeCacheLoadSource> LoadEffectBytecode(DatabaseFileProvider database, ObjectId bytecodeId) { KeyValuePair <EffectBytecode, EffectBytecodeCacheLoadSource> bytecodePair; if (!bytecodes.TryGetValue(bytecodeId, out bytecodePair)) { if (!bytecodesByPassingStorage.Contains(bytecodeId) && database.ObjectDatabase.Exists(bytecodeId)) { using (var stream = database.ObjectDatabase.OpenStream(bytecodeId)) { var bytecode = EffectBytecode.FromStream(stream); // Try to read an integer that would specify what kind of cache it belongs to (if undefined because of old versions, mark it as dynamic cache) var cacheSource = EffectBytecodeCacheLoadSource.DynamicCache; if (stream.Position < stream.Length) { var binaryReader = new BinarySerializationReader(stream); cacheSource = (EffectBytecodeCacheLoadSource)binaryReader.ReadInt32(); } bytecodePair = new KeyValuePair <EffectBytecode, EffectBytecodeCacheLoadSource>(bytecode, cacheSource); } } if (bytecodePair.Key != null) { bytecodes.Add(bytecodeId, bytecodePair); } } // Always check that the bytecode is in sync with hash sources on all platforms if (bytecodePair.Key != null && IsBytecodeObsolete(bytecodePair.Key)) { bytecodes.Remove(bytecodeId); bytecodePair = new KeyValuePair <EffectBytecode, EffectBytecodeCacheLoadSource>(null, EffectBytecodeCacheLoadSource.JustCompiled); } return(bytecodePair); }