public AssetFetcher(OMV.GridClient grid) { m_client = grid; // m_client.Assets.OnAssetReceived += new OMV.AssetManager.AssetReceivedCallback(Assets_OnAssetReceived); m_requests = new Dictionary<string, TRequest>(); m_outstandingRequests = new List<TRequest>(); m_stats = new StatisticManager("AssetFetcher"); m_totalRequests = m_stats.GetCounter("TotalRequests"); m_duplicateRequests = m_stats.GetCounter("DuplicateRequests"); m_requestsForExisting = m_stats.GetCounter("RequestsForExistingAsset"); }
public override void OnLoad(string name, LookingGlassBase lgbase) { base.OnLoad(name, lgbase); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.InputSystem.Name", "OgreUI", "Module to handle user IO on the rendering screen"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Name", "LookingGlass", "Name of the Ogre resources to load"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.SkyboxName", "LookingGlass/CloudyNoonSkyBox", "Name of the skybox resource to use"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.ShadowTechnique", "none", "Shadow technique: none, texture-additive, texture-modulative, stencil-modulative, stencil-additive"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.ShadowFarDistance", "400", "Integer units of distance within which to do shadows (mul by magnification)"); // cp.AddParameter(m_moduleName + ".Ogre.Renderer", "Direct3D9 Rendering Subsystem", // "Name of the rendering subsystem to use"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Renderer", "OpenGL Rendering Subsystem", "Name of the rendering subsystem to use"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.VideoMode", "800 x 600@ 32-bit colour", "Initial window size"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.FramePerSecMax", "30", "Maximum number of frames to display per second"); ModuleParams.AddDefaultParameter(m_moduleName + ".ShouldRenderOnMainThread", "false", "True if ogre rendering otherwise someone has to call RenderOneFrame"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.PluginFilename", "plugins.cfg", "File that lists Ogre plugins to load"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.ResourcesFilename", "resources.cfg", "File that lists the Ogre resources to load"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.DefaultNumMipmaps", "2", "Default number of mip maps created for a texture (usually 6)"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.CacheDir", Utilities.GetDefaultApplicationStorageDir(null), "Directory to store cached meshs, textures, etc"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.PreLoadedDir", System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "./LookingGlassResources/Preloaded/"), "Directory to for preloaded textures, etc"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.DefaultTerrainMaterial", "LookingGlass/DefaultTerrainMaterial", "Material applied to terrain"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Ocean.Processor", "none", "The processing routine to create the ocean. Either 'none' or 'hydrax'"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.OceanMaterialName", "LookingGlass/Ocean", "The ogre name of the ocean texture"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.DefaultMeshFilename", System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "./LookingGlassResources/LoadingShape.mesh"), "Filename of the default shape found in the cache dir"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.DefaultTextureFilename", System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "./LookingGlassResources/LoadingTexture.png"), "Filename of the default texture found in the cache dir"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.DefaultTextureResourceName", "LoadingTexture.png", "Resource name of the default texture"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.WhiteTextureResourceName", "Preload/" + OMV.Primitive.TextureEntry.WHITE_TEXTURE.ToString().Substring(0,1) + "/" + OMV.Primitive.TextureEntry.WHITE_TEXTURE.ToString(), "Resource name of a white texture used as default base color"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.LL.SceneMagnification", "1", "Magnification of LL coordinates into Ogre space"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.LL.RenderInfoMaterialCreate", "true", "Create materials while gathering mesh generation info (earlier than mesh creation)"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.LL.EarlyMaterialCreate", "false", "Create materials while creating mesh rather than waiting"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.LL.DefaultAvatarMesh", // "Preload/00000000-0000-2222-3333-112200000003", "", // read definition from LAD file "Entity name of mesh to use for avatars"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.BetweenFrame.WorkMilliSecondsMax", "300", "Cost of queued C++ work items to do between each frame"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.BetweenFrame.Costs.Total", "200", "The total cost of C# operations to do between each frame"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.SerializeMaterials", "false", "Write out materials to files (replace with DB someday)"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.SerializeMeshes", "true", "Write out meshes to files"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.ForceMeshRebuild", "false", "True if to force the generation a mesh when first rendered (don't rely on cache)"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.PrebuildMesh", "true", "True if to make sure the mesh exists before creating the scene node"); ModuleParams.AddDefaultParameter(m_moduleName + ".ShouldShareMeshes", "false", "True if to share meshes with similar characteristics"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.UseShaders", "true", "Whether to use the new technique of using GPU shaders"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.CollectOgreStats", "true", "Whether to collect detailed Ogre stats and make available to web"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.ShouldQueueMeshOperations", "true", "True if to try and use threads and delayed mesh load and unload operations"); ModuleParams.AddDefaultParameter(m_moduleName + ".Avatar.Mesh.InfoDir", "./LookingGlassResources/openmetaverse_data", "Directory containing avatar description information"); ModuleParams.AddDefaultParameter(m_moduleName + ".Avatar.Mesh.Description", "avatar_lad.xml", "File containing detailed avatar mesh description"); ModuleParams.AddDefaultParameter(m_moduleName + ".Avatar.Mesh.DescriptionDir", "./LookingGlassResources/character", "Directory with detailed avatar mesh description info"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Sky", "Default", "Name of the key system to use"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.SkyX.LightingHDR", "true", "Use high resolution lighting shaders"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Camera.NearClip", "2.0", "Initial camera near clip distance"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Camera.FarClip", "30000.0", "Initial camera far clip distance"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Ambient.Scene", "<0.4,0.4,0.4>", "color value for scene initial ambient lighting"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Ambient.Material", "<0.4,0.4,0.4>", "color value for material ambient lighting"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Sun.Color", "<1.0,1.0,1.0>", "Color of light from the sun at noon"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Moon.Color", "<0.6,0.6,0.8>", "Color of light from the moon"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.Processor", "FrustrumDistance", "Name of the culling plugin to use ('FrustrumDistance', 'VariableFrustDist', 'none')"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.Cull.Frustrum", "false", "whether to cull (unload) objects if not visible in camera frustrum"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.Cull.Distance", "false", "whether to cull (unload) objects depending on distance from camera"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.Cull.Meshes", "true", "unload culled object meshes"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.Cull.Textures", "true", "unload culled textures"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.MaxDistance", "200", "the maximum distance to see any entites (far clip)"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.MinDistance", "30", "below this distance, everything is visible"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.OnlyLargeAfter", "120", "After this distance, only large things are visible"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.Large", "8", "How big is considered 'large' for 'OnlyLargeAfter' calculation"); ModuleParams.AddDefaultParameter(m_moduleName + ".Ogre.Visibility.MeshesReloadedPerFrame", "80", "When reloading newly visible meshes, how many to load per frame"); // some counters and intervals to see how long things take m_stats = new StatisticManager(m_moduleName); m_statMaterialsRequested = m_stats.GetCounter("MaterialsRequested"); m_statMeshesRequested = m_stats.GetCounter("MeshesRequested"); m_statTexturesRequested = m_stats.GetCounter("TexturesRequested"); m_statSharableTotal = m_stats.GetCounterValue("TotalMeshes", delegate() { return (long)prebuiltMeshes.Count; }); m_statRequestedMeshes = m_stats.GetCounterValue("RequestedMeshes", delegate() { return (long)m_requestedMeshes.Count; }); m_statRequestedMeshes = m_stats.GetCounterValue("PrebuiltMeshes", delegate() { return (long)RenderPrim.prebuiltMeshes.Count; }); m_statShareInstances = m_stats.GetCounter("TotalSharedInstances"); // renderer keeps rendering specific data in an entity's addition/subsystem slots AddSceneNodeName = EntityBase.AddAdditionSubsystem(RendererOgre.AddSceneNodeNameName); AddRegionSceneNode = EntityBase.AddAdditionSubsystem(RendererOgre.AddRegionSceneNodeName); }