public void Initialize(RenderControl window, GxContext context) { mGlobalBuffer = new ConstantBuffer(context); mGlobalParamsBuffer = new ConstantBuffer(context); mGlobalParamsBufferStore = new GlobalParamsBuffer { mapAmbient = new Vector4(0.5f, 0.5f, 0.5f, 1.0f), mapDiffuse = new Vector4(0.25f, 0.5f, 1.0f, 1.0f), fogColor = new Vector4(0.25f, 0.5f, 1.0f, 1.0f), fogParams = new Vector4(500.0f, 900.0f, mMainCamera.FarClip, 0.0f), brushParameters = new Vector4(45.0f, 55.0f, 0.0f, 0.0f), mousePosition = new Vector4(float.MaxValue), eyePosition = Vector4.Zero, brushSettings = new Vector4(0, 1, 0, 0) }; mGlobalParamsBuffer.UpdateData(mGlobalParamsBufferStore); mGlobalBufferStore = new GlobalBuffer { eyePosition = Vector4.Zero, matProj = Matrix.Identity, matView = Matrix.Identity }; mGlobalBuffer.UpdateData(mGlobalBufferStore); Dispatcher = new GraphicsDispatcher(); MapChunkRender.Initialize(context); MapAreaLowRender.Initialize(context); WmoGroupRender.Initialize(context); M2BatchRenderer.Initialize(context); M2ModelRenderer.Initialize(context); StaticAnimationThread.Instance.Initialize(); WmoManager.Initialize(); M2Manager.Initialize(); GraphicsContext = context; SetActiveCamera(mMainCamera); TextureManager.Instance.Initialize(context); MapManager.Initialize(); mMainCamera.ViewChanged += ViewChanged; mMainCamera.ProjectionChanged += ProjectionChanged; ViewChanged(mMainCamera, mMainCamera.View); ProjectionChanged(mMainCamera, mMainCamera.Projection); CamControl = new CameraControl(window); CamControl.PositionChanged += MapManager.UpdatePosition; if (!LeftHandedCamera) { CamControl.InvertY = true; } }
private void UnloadProc() { while (mIsRunning) { M2BatchRenderer element = null; lock (mUnloadList) { if (mUnloadList.Count > 0) { element = mUnloadList[0]; mUnloadList.RemoveAt(0); } } if (element != null) { element.Dispose(); } if (element == null) { Thread.Sleep(200); } } }
public void OnFrame(Camera camera) { if (WorldFrame.Instance.HighlightModelsInBrush) { var brushPosition = Editing.EditManager.Instance.MousePosition; var highlightRadius = Editing.EditManager.Instance.OuterRadius; UpdateBrushHighlighting(brushPosition, highlightRadius); } lock (mAddLock) { M2BatchRenderer.BeginDraw(); // First draw all the instance batches foreach (var renderer in mRenderer.Values) { renderer.RenderBatch(); } M2SingleRenderer.BeginDraw(); // Now draw those objects that need per instance animation foreach (var instance in mNonBatchedInstances.Values) { instance.Renderer.RenderSingleInstance(instance); } // Then draw those that have alpha blending and need ordering foreach (var instance in mSortedInstances.Values) { instance.Renderer.RenderSingleInstance(instance); } } IsViewDirty = false; }
public M2RenderInstance AddInstance(string model, int uuid, Vector3 position, Vector3 rotation, Vector3 scaling) { var hash = model.ToUpperInvariant().GetHashCode(); lock (mRenderer) { if (mRenderer.ContainsKey(hash)) { var renderer = mRenderer[hash]; return(renderer.AddInstance(uuid, position, rotation, scaling)); } var file = LoadModel(model); if (file == null) { return(null); } var batch = new M2BatchRenderer(file); lock (mAddLock) mRenderer.Add(hash, batch); return(batch.AddInstance(uuid, position, rotation, scaling)); } }
public void Initialize(RenderControl window, GxContext context) { GraphicsContext = context; mWindow = window; context.Resize += (w, h) => OnResize((int)w, (int)h); mGlobalBuffer = new ConstantBuffer(context); mGlobalBuffer = new ConstantBuffer(context); mGlobalBufferStore = new GlobalParamsBuffer { matView = Matrix.Identity, matProj = Matrix.Identity, viewport = Vector4.Zero, ambientLight = new Color4(0.5f, 0.5f, 0.5f, 1.0f), diffuseLight = new Color4(0.25f, 0.5f, 1.0f, 1.0f), fogColor = new Color4(0.25f, 0.5f, 1.0f, 1.0f), fogParams = new Vector4(500.0f, 900.0f, mMainCamera.FarClip, 0.0f), mousePosition = new Vector4(float.MaxValue), eyePosition = Vector4.Zero, brushParams = new Vector4(45.0f, 55.0f, 0.0f, 0.0f) }; mGlobalBuffer.UpdateData(mGlobalBufferStore); Dispatcher = new GraphicsDispatcher(); Dispatcher.AssignToThread(); MapChunkRender.Initialize(context); MapAreaLowRender.Initialize(context); WmoGroupRender.Initialize(context); M2BatchRenderer.Initialize(context); M2SingleRenderer.Initialize(context); M2PortraitRenderer.Initialize(context); WorldText.Initialize(context); BoundingBoxDrawManager.Initialize(); ChunkEditManager.Instance.Initialize(); StaticAnimationThread.Instance.Initialize(); WmoManager.Initialize(); M2Manager.Initialize(); WorldTextManager.Initialize(); SetActiveCamera(mMainCamera); TextureManager.Instance.Initialize(context); MapManager.Initialize(); mMainCamera.ViewChanged += ViewChanged; mMainCamera.ProjectionChanged += ProjectionChanged; OnResize(mWindow.Width, mWindow.Height); ViewChanged(mMainCamera, mMainCamera.View); ProjectionChanged(mMainCamera, mMainCamera.Projection); CamControl = new CameraControl(window); CamControl.PositionChanged += MapManager.UpdatePosition; if (!LeftHandedCamera) { CamControl.InvertY = false; } window.MouseDown += OnRenderWindowMouseDown; }