public ModelRenderControl() { SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.Opaque | ControlStyles.UserPaint, true); mTarget = new RenderTarget(WorldFrame.Instance.GraphicsContext); mMatrixBuffer = new ConstantBuffer(WorldFrame.Instance.GraphicsContext); mCamera = new PerspectiveCamera(); mCamera.ViewChanged += ViewChanged; mCamera.ProjectionChanged += ProjChanged; mCamera.SetClip(0.2f, 1000.0f); mCamera.SetParameters(new Vector3(10, 0, 0), Vector3.Zero, Vector3.UnitZ, -Vector3.UnitY); mCamControl = new CameraControl(this); InitializeComponent(); MouseClick += OnClick; Resize += OnResize; renderTimer.Tick += OnRenderTimerTick; OnResize(this, null); renderTimer.Start(); }
public SkySphere(float radius, int rings, int sectors, GxContext context) { mSampler = new Sampler(context); mMesh = new Mesh(context); mMesh.AddElement("POSITION", 0, 3); mMesh.AddElement("TEXCOORD", 0, 2); mMesh.BlendState.BlendEnabled = false; mMesh.DepthState.DepthEnabled = true; mMesh.Stride = IO.SizeCache<SphereVertex>.Size; InitVertices(radius, rings, sectors); mMesh.VertexBuffer.UpdateData(mVertices); mMatrixBuffer = new ConstantBuffer(context); mMatrixBuffer.UpdateData(Matrix.Identity); var program = new ShaderProgram(context); program.SetVertexShader(Resources.Shaders.SkyVertex); program.SetPixelShader(Resources.Shaders.SkyPixel); mMesh.Program = program; }
public void SetPixelConstantBuffer(int slot, ConstantBuffer buffer) { mContext.Context.PixelShader.SetConstantBuffer(slot, buffer.Native); }
public void SetVertexConstantBuffer(int slot, ConstantBuffer buffer) { mContext.Context.VertexShader.SetConstantBuffer(slot, buffer.Native); }
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 SyncLoad() { mIsSyncLoaded = true; if (mModel.Vertices.Length == 0 || mModel.Indices.Length == 0 || mModel.Passes.Count == 0) { mSkipRendering = true; return; } var ctx = WorldFrame.Instance.GraphicsContext; mVertexBuffer = new VertexBuffer(ctx); mIndexBuffer = new IndexBuffer(ctx); mVertexBuffer.UpdateData(mModel.Vertices); mIndexBuffer.UpdateData(mModel.Indices); mAnimBuffer = new ConstantBuffer(ctx); mAnimBuffer.UpdateData(mAnimationMatrices); mPerPassBuffer = new ConstantBuffer(ctx); mPerPassBuffer.UpdateData(new PerModelPassBuffer() { uvAnimMatrix = Matrix.Identity, modelPassParams = Vector4.Zero }); }
public static void Initialize(GxContext context) { gNoBlendState = new BlendState(context) { BlendEnabled = false }; gAlphaBlendState = new BlendState(context) { BlendEnabled = true }; gNoCullState = new RasterState(context) {CullEnabled = false}; gCullState = new RasterState(context) {CullEnabled = true}; Sampler = new Sampler(context); InstanceBuffer = new ConstantBuffer(context); InstanceBuffer.UpdateData(Matrix.Identity); // preallocate space so the underlying buffer wont change anymore Mesh = new Mesh(context) { DepthState = { DepthEnabled = true }, Stride = IO.SizeCache<IO.Files.Models.WmoVertex>.Size }; Mesh.AddElement("POSITION", 0, 3); Mesh.AddElement("NORMAL", 0, 3); Mesh.AddElement("TEXCOORD", 0, 2); Mesh.AddElement("COLOR", 0, 4, DataType.Byte, true); gNoBlendProgram = new ShaderProgram(context); gNoBlendProgram.SetVertexShader(Resources.Shaders.WmoVertex); gNoBlendProgram.SetPixelShader(Resources.Shaders.WmoPixel); gBlendProgram = new ShaderProgram(context); gBlendProgram.SetVertexShader(Resources.Shaders.WmoVertex); gBlendProgram.SetPixelShader(Resources.Shaders.WmoPixelBlend); gIndoorNoBlendProgram = new ShaderProgram(context); gIndoorNoBlendProgram.SetVertexShader(Resources.Shaders.WmoVertex); gIndoorNoBlendProgram.SetPixelShader(Resources.Shaders.WmoPixelIndoor); gIndoorBlendProgram = new ShaderProgram(context); gIndoorBlendProgram.SetVertexShader(Resources.Shaders.WmoVertex); gIndoorBlendProgram.SetPixelShader(Resources.Shaders.WmoPixelBlendIndoor); Mesh.Program = gNoBlendProgram; }
private void SyncLoad() { mAlphaTexture = new Graphics.Texture(WorldFrame.Instance.GraphicsContext); mAlphaTexture.UpdateMemory(64, 64, SharpDX.DXGI.Format.R8G8B8A8_UNorm, mData.AlphaValues, 4 * 64); mHoleTexture = new Graphics.Texture(WorldFrame.Instance.GraphicsContext); mHoleTexture.UpdateMemory(8, 8, SharpDX.DXGI.Format.R8_UNorm, mData.HoleValues, 8); mScaleBuffer = new ConstantBuffer(WorldFrame.Instance.GraphicsContext); mScaleBuffer.UpdateData(mData.TextureScales); mShaderTextures = mData.Textures.ToArray(); mSyncLoaded = true; }