public MeshFactory(SharpDXGraphics graphics) { this.device = graphics.Device; this.inputAssembler = device.InputAssembler; this.demo = graphics.Demo; instanceDataDesc = new BufferDescription() { Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.Write, OptionFlags = ResourceOptionFlags.None, }; InputElement[] elements = new InputElement[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 12, 0, InputClassification.PerVertexData, 0), new InputElement("WORLD", 0, Format.R32G32B32A32_Float, 0, 1, InputClassification.PerInstanceData, 1), new InputElement("WORLD", 1, Format.R32G32B32A32_Float, 16, 1, InputClassification.PerInstanceData, 1), new InputElement("WORLD", 2, Format.R32G32B32A32_Float, 32, 1, InputClassification.PerInstanceData, 1), new InputElement("WORLD", 3, Format.R32G32B32A32_Float, 48, 1, InputClassification.PerInstanceData, 1), new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 64, 1, InputClassification.PerInstanceData, 1) }; inputLayout = new InputLayout(device, graphics.GetEffectPass().Description.Signature, elements); groundColor = ColorToUint(Color.Green); activeColor = ColorToUint(Color.Orange); passiveColor = ColorToUint(Color.OrangeRed); softBodyColor = ColorToUint(Color.LightBlue); }
private static void ConfigureConstantsPerFrame(out BufferDescription description) { description.Usage = ResourceUsage.Dynamic; description.BindFlags = BindFlags.ConstantBuffer; description.CpuAccessFlags = CpuAccessFlags.Write; description.OptionFlags = ResourceOptionFlags.None; description.SizeInBytes = FrameConstants.ByteSize; }
private static void ConfigureConstantsPerRender(out BufferDescription description) { description.Usage = ResourceUsage.Dynamic; description.BindFlags = BindFlags.ConstantBuffer; description.CpuAccessFlags = CpuAccessFlags.Write; description.OptionFlags = ResourceOptionFlags.None; description.SizeInBytes = RenderConstants.ByteSize * Renderer.BatchItemCount; }
public void SetVertexBuffer(Device device, Vector3[] vectors) { BufferDescription vertexBufferDesc = new BufferDescription() { SizeInBytes = Vector3.SizeInBytes * vectors.Length, Usage = ResourceUsage.Default, BindFlags = BindFlags.VertexBuffer }; using (var data = new DataStream(vertexBufferDesc.SizeInBytes, false, true)) { data.WriteRange(vectors); data.Position = 0; VertexBuffer = new Buffer(device, data, vertexBufferDesc); } BufferBindings[0] = new VertexBufferBinding(VertexBuffer, 24, 0); }
public PhysicsDebugDraw(SharpDXGraphics graphics) { _device = graphics.Device; _inputAssembler = _device.InputAssembler; InputElement[] elements = { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0, InputClassification.PerVertexData, 0) }; _inputLayout = new InputLayout(_device, graphics.GetDebugDrawPass().Description.Signature, elements); _vertexBufferDesc = new BufferDescription { Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.Write }; _vertexBufferBinding = new VertexBufferBinding(null, PositionColored.Stride, 0); }
public MeshFactory(Demo demo) { this.demo = demo; this.device = demo.Device; this.inputAssembler = device.InputAssembler; instanceDataDesc = new BufferDescription() { SizeInBytes = 0, Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.Write, OptionFlags = ResourceOptionFlags.None, }; InputElement[] elements = new InputElement[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 12, 0, InputClassification.PerVertexData, 0), new InputElement("WORLD", 0, Format.R32G32B32A32_Float, 0, 1, InputClassification.PerInstanceData, 1), new InputElement("WORLD", 1, Format.R32G32B32A32_Float, 16, 1, InputClassification.PerInstanceData, 1), new InputElement("WORLD", 2, Format.R32G32B32A32_Float, 32, 1, InputClassification.PerInstanceData, 1), new InputElement("WORLD", 3, Format.R32G32B32A32_Float, 48, 1, InputClassification.PerInstanceData, 1), new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 64, 1, InputClassification.PerInstanceData, 1) }; inputLayout = new InputLayout(device, demo.GetShadowGenPass().Description.Signature, elements); Color c = Color.Green; groundColor = (uint)c.R + ((uint)c.G << 8) + ((uint)c.B << 16) + ((uint)c.A << 24); c = Color.Orange; activeColor = (uint)c.R + ((uint)c.G << 8) + ((uint)c.B << 16) + ((uint)c.A << 24); c = Color.OrangeRed; passiveColor = (uint)c.R + ((uint)c.G << 8) + ((uint)c.B << 16) + ((uint)c.A << 24); c = Color.LightBlue; softBodyColor = (uint)c.R + ((uint)c.G << 8) + ((uint)c.B << 16) + ((uint)c.A << 24); }
// Used with soft bodies public void SetDynamicVertexBuffer(Device device, Vector3[] vectors) { if (VertexBuffer != null && VertexCount * 2 == vectors.Length) { // Update existing buffer using (var data = VertexBuffer.Map(MapMode.WriteDiscard)) { data.WriteRange(vectors, 0, vectors.Length); VertexBuffer.Unmap(); } } else { // Create new buffer if (VertexBuffer != null) VertexBuffer.Dispose(); BufferDescription vertexBufferDesc = new BufferDescription() { SizeInBytes = Marshal.SizeOf(typeof(Vector3)) * vectors.Length, Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.Write }; using (var data = new DataStream(vertexBufferDesc.SizeInBytes, false, true)) { data.WriteRange(vectors); data.Position = 0; VertexBuffer = new Buffer(device, data, vertexBufferDesc); } BufferBindings[0] = new VertexBufferBinding(VertexBuffer, 24, 0); } }
/* public void RenderSoftBodyTextured(SoftBody softBody) { if (!(softBody.UserObject is Array)) return; object[] userObjArr = softBody.UserObject as object[]; FloatArray vertexBuffer = userObjArr[0] as FloatArray; IntArray indexBuffer = userObjArr[1] as IntArray; int vertexCount = (vertexBuffer.Count / 8); if (vertexCount > 0) { int faceCount = indexBuffer.Count / 2; bool index32 = vertexCount > 65536; Mesh mesh = new Mesh(device, faceCount, vertexCount, MeshFlags.SystemMemory | (index32 ? MeshFlags.Use32Bit : 0), VertexFormat.Position | VertexFormat.Normal | VertexFormat.Texture1); SlimDX.DataStream indices = mesh.LockIndexBuffer(LockFlags.Discard); if (index32) { foreach (int i in indexBuffer) indices.Write(i); } else { foreach (int i in indexBuffer) indices.Write((ushort)i); } mesh.UnlockIndexBuffer(); SlimDX.DataStream verts = mesh.LockVertexBuffer(LockFlags.Discard); foreach (float f in vertexBuffer) verts.Write(f); mesh.UnlockVertexBuffer(); mesh.ComputeNormals(); mesh.DrawSubset(0); mesh.Dispose(); } } * */ public static Buffer CreateScreenQuad(Device device) { Buffer vertexBuffer; BufferDescription vertexBufferDesc = new BufferDescription() { SizeInBytes = sizeof(float) * 5 * 4, Usage = ResourceUsage.Default, BindFlags = BindFlags.VertexBuffer, }; using (var data = new DataStream(vertexBufferDesc.SizeInBytes, false, true)) { data.Write(new Vector3(0.5f, 0.5f, 0)); data.Write(new Vector2(1, 0)); data.Write(new Vector3(0.5f, -0.5f, 0)); data.Write(new Vector2(1, 1)); data.Write(new Vector3(-0.5f, 0.5f, 0)); data.Write(new Vector2(0, 0)); data.Write(new Vector3(-0.5f, -0.5f, 0)); data.Write(new Vector2(0, 1)); data.Position = 0; vertexBuffer = new Buffer(device, data, vertexBufferDesc); } return vertexBuffer; }
public D3D10Renderer(Device1 device3D) { Contract.Requires(device3D != null); _Device3D = device3D; string shader = GetShaderText(Properties.Resources.RenderingEffects); using(var byteCode = ShaderBytecode.Compile( shader, "fx_4_0", ShaderFlags.None, EffectFlags.None)) { _Effect = new Effect(_Device3D, byteCode); } _EffectTechnique = _Effect.GetTechniqueByName("WithTexture"); Contract.Assert(_EffectTechnique != null); _EffectPass = _EffectTechnique.GetPassByIndex(0); Contract.Assert(_EffectPass != null); _InputLayout = new InputLayout( _Device3D, _EffectPass.Description.Signature, _InputLayoutData); const int byteSize = _Stride * _VertexCount; using(DataStream stream = new DataStream(byteSize, true, true)) { for(int i = 0; i < _QuadPrimitiveData.Length; i += 2) { float fx = (2.0f * _QuadPrimitiveData[i + 0].X) - 1.0f; float fy = (2.0f * _QuadPrimitiveData[i + 0].Y) - 1.0f; stream.Write(new Vector3(fx, -fy, 0.5f)); stream.Write(_QuadPrimitiveData[i + 1]); } stream.Seek(0, SeekOrigin.Begin); BufferDescription description = new BufferDescription { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, Usage = ResourceUsage.Immutable, SizeInBytes = byteSize }; description.SizeInBytes = byteSize; _VertexBuffer = new Buffer(_Device3D, stream, description); _VertexBufferBinding = new VertexBufferBinding( _VertexBuffer, _Stride, _Offset); } }
private void ParseFile(Device1 device, string path) { var verts = new List<VertexPosColNorm>(); IndexList = new List<uint>(); uint vertCount = 0; using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open))) { int versionMaj = reader.ReadByte(); int versionMin = reader.ReadByte(); for (; ; ) { // block stuff int blockId = reader.ReadByte(); if (blockId == 0) break; uint blockLength = reader.ReadUInt32(); if (blockId == 1) { //general reader.ReadString(); vertCount = reader.ReadUInt32(); IndexCount = (int)reader.ReadUInt32(); } else if (blockId == 2) { //positions for (int i = 0; i < vertCount; i++) { float x = reader.ReadSingle(); float y = reader.ReadSingle(); float z = reader.ReadSingle(); verts.Add(new VertexPosColNorm(new Vector3(x, y, z) , Color.Gray, Vector3.Zero)); } } else if (blockId == 3) { //indices for (int i = 0; i < IndexCount; i++) { IndexList.Add(reader.ReadUInt32()); } } else if (blockId == 4) { //normals for (int i = 0; i < vertCount; i++) { float x = reader.ReadSingle(); float y = reader.ReadSingle(); float z = reader.ReadSingle(); var copy = verts[i]; verts[i] = new VertexPosColNorm(copy.Position, Color.Gray, new Vector3(x, y, z)); } } else if (blockId == 7) { //colors for (int i = 0; i < vertCount; i++) { float r = reader.ReadSingle(); float g = reader.ReadSingle(); float b = reader.ReadSingle(); float a = reader.ReadSingle(); var copy = verts[i]; verts[i] = new VertexPosColNorm(copy.Position, new Color(r, g, b, a), copy.Normal); } } else { reader.ReadBytes((int)blockLength); } } } //CREATE vertex buffer if (VertexBuffer != null) VertexBuffer.Dispose(); var vertBufferDescription = new BufferDescription { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, Usage = ResourceUsage.Immutable, SizeInBytes = VertexStride * verts.Count }; VertexBuffer = new Buffer(device, DataStream.Create(verts.ToArray(), false, false), vertBufferDescription); //CREATE index buffer if (IndexBuffer != null) IndexBuffer.Dispose(); var intBufferDescription = new BufferDescription { BindFlags = BindFlags.IndexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, Usage = ResourceUsage.Immutable, SizeInBytes = sizeof(uint) * IndexCount }; IndexBuffer = new Buffer(device, DataStream.Create(IndexList.ToArray(), false, false), intBufferDescription); VertexList = new List<Vector3>(); foreach (var vertex in verts) { VertexList.Add(vertex.Position); } }
public void SetVertexBuffer(Device device, Vector3[] vertices) { BufferDescription vertexBufferDesc = new BufferDescription() { SizeInBytes = Marshal.SizeOf(typeof(Vector3)) * vertices.Length, Usage = ResourceUsage.Default, BindFlags = BindFlags.VertexBuffer }; using (var data = new SharpDX.DataStream(vertexBufferDesc.SizeInBytes, false, true)) { data.WriteRange(vertices); data.Position = 0; VertexBuffer = new Buffer(device, data, vertexBufferDesc); VertexBuffer.Unmap(); } BufferBindings[0] = new VertexBufferBinding(VertexBuffer, 24, 0); }
private void CreateVertexBuffer(Device1 device) { var verts = new List<VertexPosColNorm>(); Color col = Color.Red; Vector3 norm = new Vector3(0, 0, -1); //FRONT RED verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, -0.5f), col, norm)); //BACK RED norm = new Vector3(0, 0, 1); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, 0.5f), col, norm)); //LEFT GREEN col = Color.Green; norm = new Vector3(-1, 0, 0); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, 0.5f), col, norm)); //RIGHT GREEN norm = new Vector3(1, 0, 0); verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, 0.5f), col, norm)); //TOP BLUE col = Color.Blue; norm = new Vector3(0, 1, 0); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, -0.5f), col, norm)); //BOTTOM BLUE norm = new Vector3(0, -1, 0); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, -0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, 0.5f), col, norm)); verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, -0.5f), col, norm)); //CREATE BUFFER if (VertexBuffer != null) VertexBuffer.Dispose(); var bufferDescription = new BufferDescription { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, Usage = ResourceUsage.Immutable, SizeInBytes = VertexStride * verts.Count }; VertexBuffer = new Buffer(device, DataStream.Create(verts.ToArray(), false, false), bufferDescription); VertexList = new List<Vector3>(); foreach (var vertex in verts) { VertexList.Add(vertex.Position); } }
private void CreateIndexBuffer(Device1 device) { IndexList = new List<uint>() { 0, 1, 2, 2, 1, 3, 4, 6, 5, 5, 6, 7, 8, 10, 9, 9, 10, 11, 12, 13, 14, 14, 13, 15, 16, 18, 17, 17, 18, 19, 20, 21, 22, 22, 21, 23 }; IndexCount = IndexList.Count; //CREATE BUFFER if (IndexBuffer != null) IndexBuffer.Dispose(); var bufferDescription = new BufferDescription { BindFlags = BindFlags.IndexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, Usage = ResourceUsage.Immutable, SizeInBytes = sizeof(uint) * IndexCount }; IndexBuffer = new Buffer(device, DataStream.Create(IndexList.ToArray(), false, false), bufferDescription); }
public override void Initialize() { Form.SizeChanged += (o, args) => { if (_swapChain == null) return; renderView.Dispose(); depthView.Dispose(); DisposeBuffers(); if (Form.WindowState == FormWindowState.Minimized) return; _width = Form.ClientSize.Width; _height = Form.ClientSize.Height; _swapChain.ResizeBuffers(_swapChain.Description.BufferCount, 0, 0, Format.Unknown, 0); CreateBuffers(); SetSceneConstants(); }; _width = 1024; _height = 768; _nearPlane = 1.0f; ambient = new Color4(Color.Gray.ToArgb()); try { OnInitializeDevice(); } catch (Exception e) { MessageBox.Show(e.ToString(), "Could not create DirectX 10 device."); return; } // shader.fx const ShaderFlags shaderFlags = ShaderFlags.None; //const ShaderFlags shaderFlags = ShaderFlags.Debug | ShaderFlags.SkipOptimization; ShaderBytecode shaderByteCode = LoadShader("shader.fx", shaderFlags); effect = new Effect(_device, shaderByteCode); EffectTechnique technique = effect.GetTechniqueByIndex(0); shadowGenPass = technique.GetPassByIndex(0); gBufferGenPass = technique.GetPassByIndex(1); debugDrawPass = technique.GetPassByName("debug"); BufferDescription sceneConstantsDesc = new BufferDescription() { SizeInBytes = Marshal.SizeOf(typeof(ShaderSceneConstants)), Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.ConstantBuffer, CpuAccessFlags = CpuAccessFlags.Write, OptionFlags = ResourceOptionFlags.None }; sceneConstantsBuffer = new Buffer(_device, sceneConstantsDesc); EffectConstantBuffer effectConstantBuffer = effect.GetConstantBufferByName("scene"); effectConstantBuffer.SetConstantBuffer(sceneConstantsBuffer); RasterizerStateDescription desc = new RasterizerStateDescription() { CullMode = CullMode.None, FillMode = FillMode.Solid, IsFrontCounterClockwise = true, DepthBias = 0, DepthBiasClamp = 0, SlopeScaledDepthBias = 0, IsDepthClipEnabled = true, }; _device.Rasterizer.State = new RasterizerState(_device, desc); DepthStencilStateDescription depthDesc = new DepthStencilStateDescription() { IsDepthEnabled = true, IsStencilEnabled = false, DepthWriteMask = DepthWriteMask.All, DepthComparison = Comparison.Less }; depthStencilState = new DepthStencilState(_device, depthDesc); DepthStencilStateDescription lightDepthStateDesc = new DepthStencilStateDescription() { IsDepthEnabled = true, IsStencilEnabled = false, DepthWriteMask = DepthWriteMask.All, DepthComparison = Comparison.Less }; lightDepthStencilState = new DepthStencilState(_device, lightDepthStateDesc); // grender.fx shaderByteCode = LoadShader("grender.fx", shaderFlags); effect2 = new Effect(_device, shaderByteCode); technique = effect2.GetTechniqueByIndex(0); gBufferRenderPass = technique.GetPassByIndex(0); gBufferOverlayPass = technique.GetPassByIndex(1); info = new InfoText(_device); _meshFactory = new MeshFactory(this); MeshFactory = _meshFactory; CreateBuffers(); LibraryManager.LibraryStarted(); }
void Initialize() { // shader.fx ShaderFlags shaderFlags = ShaderFlags.None; //ShaderFlags shaderFlags = ShaderFlags.Debug | ShaderFlags.SkipOptimization; ShaderBytecode shaderByteCode = ShaderBytecode.CompileFromFile(Application.StartupPath + "\\shader.fx", "fx_4_0", shaderFlags, EffectFlags.None); effect = new Effect(_device, shaderByteCode); EffectTechnique technique = effect.GetTechniqueByIndex(0); shadowGenPass = technique.GetPassByIndex(0); gBufferGenPass = technique.GetPassByIndex(1); BufferDescription sceneConstantsDesc = new BufferDescription() { SizeInBytes = Marshal.SizeOf(typeof(ShaderSceneConstants)), Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.ConstantBuffer, CpuAccessFlags = CpuAccessFlags.Write, OptionFlags = ResourceOptionFlags.None }; sceneConstantsBuffer = new Buffer(_device, sceneConstantsDesc); EffectConstantBuffer effectConstantBuffer = effect.GetConstantBufferByName("scene"); effectConstantBuffer.SetConstantBuffer(sceneConstantsBuffer); RasterizerStateDescription desc = new RasterizerStateDescription() { CullMode = CullMode.None, FillMode = FillMode.Solid, IsFrontCounterClockwise = true, DepthBias = 0, DepthBiasClamp = 0, SlopeScaledDepthBias = 0, IsDepthClipEnabled = true, }; _device.Rasterizer.State = new RasterizerState(_device, desc); DepthStencilStateDescription depthDesc = new DepthStencilStateDescription() { IsDepthEnabled = true, IsStencilEnabled = false, DepthWriteMask = DepthWriteMask.All, DepthComparison = Comparison.Less }; depthStencilState = new DepthStencilState(_device, depthDesc); DepthStencilStateDescription lightDepthStateDesc = new DepthStencilStateDescription() { IsDepthEnabled = true, IsStencilEnabled = false, DepthWriteMask = DepthWriteMask.All, DepthComparison = Comparison.Less }; lightDepthStencilState = new DepthStencilState(_device, lightDepthStateDesc); // grender.fx shaderByteCode = ShaderBytecode.CompileFromFile(Application.StartupPath + "\\grender.fx", "fx_4_0", shaderFlags, EffectFlags.None); effect2 = new Effect(_device, shaderByteCode); technique = effect2.GetTechniqueByIndex(0); gBufferRenderPass = technique.GetPassByIndex(0); Buffer quad = MeshFactory.CreateScreenQuad(_device); quadBinding = new VertexBufferBinding(quad, 20, 0); Matrix quadProjection = Matrix.OrthoLH(1, 1, 0.1f, 1.0f); effect2.GetVariableByName("ViewProjection").AsMatrix().SetMatrix(quadProjection); InputElement[] elements = new InputElement[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 12, 0, InputClassification.PerVertexData, 0), }; quadBufferLayout = new InputLayout(_device, gBufferRenderPass.Description.Signature, elements); Info = new InfoText(_device); meshFactory = new MeshFactory(this); OnInitialize(); CreateBuffers(); SetSceneConstants(); }
public void SetIndexBuffer(Device device, uint[] indices) { IndexFormat = Format.R32_UInt; BufferDescription indexBufferDesc = new BufferDescription() { SizeInBytes = sizeof(uint) * indices.Length, Usage = ResourceUsage.Default, BindFlags = BindFlags.IndexBuffer }; using (var data = new DataStream(indexBufferDesc.SizeInBytes, false, true)) { data.WriteRange(indices); data.Position = 0; IndexBuffer = new Buffer(device, data, indexBufferDesc); } }
public override void Initialize() { Form.SizeChanged += (o, args) => { _width = Form.ClientSize.Width; _height = Form.ClientSize.Height; if (_swapChain == null) return; renderView.Dispose(); depthView.Dispose(); _swapChain.ResizeBuffers(_swapChain.Description.BufferCount, 0, 0, Format.Unknown, 0); CreateBuffers(); SetSceneConstants(); }; _width = 1024; _height = 768; _nearPlane = 1.0f; ambient = new Color4(Color.Gray.ToArgb()); try { OnInitializeDevice(); } catch (Exception e) { MessageBox.Show(e.ToString(), "Could not create DirectX 10 device."); return; } // shader.fx const ShaderFlags shaderFlags = ShaderFlags.None; //const ShaderFlags shaderFlags = ShaderFlags.Debug | ShaderFlags.SkipOptimization; ShaderBytecode shaderByteCode = LoadShader("shader.fx", shaderFlags); effect = new Effect(_device, shaderByteCode); EffectTechnique technique = effect.GetTechniqueByIndex(0); shadowGenPass = technique.GetPassByIndex(0); gBufferGenPass = technique.GetPassByIndex(1); debugDrawPass = technique.GetPassByName("debug"); BufferDescription sceneConstantsDesc = new BufferDescription() { SizeInBytes = Marshal.SizeOf(typeof(ShaderSceneConstants)), Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.ConstantBuffer, CpuAccessFlags = CpuAccessFlags.Write, OptionFlags = ResourceOptionFlags.None }; sceneConstantsBuffer = new Buffer(_device, sceneConstantsDesc); EffectConstantBuffer effectConstantBuffer = effect.GetConstantBufferByName("scene"); effectConstantBuffer.SetConstantBuffer(sceneConstantsBuffer); RasterizerStateDescription desc = new RasterizerStateDescription() { CullMode = CullMode.None, FillMode = FillMode.Solid, IsFrontCounterClockwise = true, DepthBias = 0, DepthBiasClamp = 0, SlopeScaledDepthBias = 0, IsDepthClipEnabled = true, }; _device.Rasterizer.State = new RasterizerState(_device, desc); DepthStencilStateDescription depthDesc = new DepthStencilStateDescription() { IsDepthEnabled = true, IsStencilEnabled = false, DepthWriteMask = DepthWriteMask.All, DepthComparison = Comparison.Less }; depthStencilState = new DepthStencilState(_device, depthDesc); DepthStencilStateDescription lightDepthStateDesc = new DepthStencilStateDescription() { IsDepthEnabled = true, IsStencilEnabled = false, DepthWriteMask = DepthWriteMask.All, DepthComparison = Comparison.Less }; lightDepthStencilState = new DepthStencilState(_device, lightDepthStateDesc); // grender.fx shaderByteCode = LoadShader("grender.fx", shaderFlags); effect2 = new Effect(_device, shaderByteCode); technique = effect2.GetTechniqueByIndex(0); gBufferRenderPass = technique.GetPassByIndex(0); gBufferOverlayPass = technique.GetPassByIndex(1); Buffer quad = DemoFramework.SharpDX.MeshFactory.CreateScreenQuad(_device); quadBinding = new VertexBufferBinding(quad, 20, 0); Matrix quadProjection = Matrix.OrthoLH(1, 1, 0.1f, 1.0f); effect2.GetVariableByName("ViewProjection").AsMatrix().SetMatrix(quadProjection); InputElement[] elements = new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0, InputClassification.PerVertexData, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 12, 0, InputClassification.PerVertexData, 0), }; quadBufferLayout = new InputLayout(_device, gBufferRenderPass.Description.Signature, elements); info = new InfoText(_device); _meshFactory = new MeshFactory(this); MeshFactory = _meshFactory; CreateBuffers(); LibraryManager.LibraryStarted(); }
private static void ConfigureVertexBuffer(out BufferDescription description) { description.Usage = ResourceUsage.Immutable; description.BindFlags = BindFlags.VertexBuffer; description.CpuAccessFlags = CpuAccessFlags.None; description.OptionFlags = ResourceOptionFlags.None; description.SizeInBytes = 0; }