/// <summary> /// Override PointGeometryModel3D's Attach method to /// provide a buffer of DynamoPointVertices /// </summary> public override void Attach(IRenderHost host) { var techManager = host.RenderTechniquesManager; renderTechnique = techManager.RenderTechniques[DefaultRenderTechniqueNames.Points]; base.Attach(host); if (Geometry == null) return; if (renderHost.RenderTechnique == host.RenderTechniquesManager.RenderTechniques.Get(DeferredRenderTechniqueNames.Deferred) || renderHost.RenderTechnique == host.RenderTechniquesManager.RenderTechniques.Get(DeferredRenderTechniqueNames.Deferred)) return; vertexLayout = host.EffectsManager.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); effectTransforms = new EffectTransformVariables(effect); var geometry = Geometry as PointGeometry3D; if (geometry != null) { vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, VertexSizeInBytes, CreateVertexArray()); } vViewport = effect.GetVariableByName("vViewport").AsVector(); vPointParams = effect.GetVariableByName("vPointParams").AsVector(); var pointParams = new Vector4((float)Size.Width, (float)Size.Height, (float)Figure, (float)FigureRatio); vPointParams.Set(pointParams); OnRasterStateChanged(DepthBias); Device.ImmediateContext.Flush(); }
public override void Attach(IRenderHost host) { /// --- attach this.renderTechnique = Techniques.RenderCubeMap; base.Attach(host); /// --- get variables this.vertexLayout = EffectsManager.Instance.GetLayout(this.renderTechnique); this.effectTechnique = effect.GetTechniqueByName(this.renderTechnique.Name); this.effectTransforms = new EffectTransformVariables(this.effect); /// -- attach cube map if (this.Filename != null) { /// -- attach texture using (var texture = Texture2D.FromFile<Texture2D>(this.Device, this.Filename)) { this.texCubeMapView = new ShaderResourceView(this.Device, texture); } this.texCubeMap = effect.GetVariableByName("texCubeMap").AsShaderResource(); this.texCubeMap.SetResource(this.texCubeMapView); this.bHasCubeMap = effect.GetVariableByName("bHasCubeMap").AsScalar(); this.bHasCubeMap.Set(true); /// --- set up geometry var sphere = new MeshBuilder(false,true,false); sphere.AddSphere(new Vector3(0, 0, 0)); this.geometry = sphere.ToMeshGeometry3D(); /// --- set up vertex buffer this.vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, CubeVertex.SizeInBytes, this.geometry.Positions.Select((x, ii) => new CubeVertex() { Position = new Vector4(x, 1f) }).ToArray()); /// --- set up index buffer this.indexBuffer = Device.CreateBuffer(BindFlags.IndexBuffer, sizeof(int), geometry.Indices.Array); /// --- set up rasterizer states var rasterStateDesc = new RasterizerStateDescription() { FillMode = FillMode.Solid, CullMode = CullMode.Back, IsMultisampleEnabled = true, IsAntialiasedLineEnabled = true, IsFrontCounterClockwise = false, }; this.rasterState = new RasterizerState(this.Device, rasterStateDesc); /// --- set up depth stencil state var depthStencilDesc = new DepthStencilStateDescription() { DepthComparison = Comparison.LessEqual, DepthWriteMask = global::SharpDX.Direct3D11.DepthWriteMask.All, IsDepthEnabled = true, }; this.depthStencilState = new DepthStencilState(this.Device, depthStencilDesc); } /// --- flush this.Device.ImmediateContext.Flush(); }
public override void Attach(IRenderHost host) { renderTechnique = host.RenderTechniquesManager.RenderTechniques[DefaultRenderTechniqueNames.Lines]; base.Attach(host); if (Geometry == null) return; if (host.SupportDeferredRender) { if (renderHost.RenderTechnique == host.RenderTechniquesManager.RenderTechniques[DeferredRenderTechniqueNames.Deferred] || renderHost.RenderTechnique == host.RenderTechniquesManager.RenderTechniques[DeferredRenderTechniqueNames.GBuffer]) return; } vertexLayout = renderHost.EffectsManager.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); effectTransforms = new EffectTransformVariables(effect); var geometry = Geometry as LineGeometry3D; if (geometry != null) { vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, VertexSizeInBytes, CreateVertexArray()); indexBuffer = Device.CreateBuffer(BindFlags.IndexBuffer, sizeof(int), geometry.Indices.ToArray()); } hasInstances = (Instances != null) && (Instances.Any()); bHasInstances = effect.GetVariableByName("bHasInstances").AsScalar(); if (hasInstances) { instanceBuffer = Buffer.Create(Device, instanceArray, new BufferDescription(Matrix.SizeInBytes * instanceArray.Length, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None, 0)); } vViewport = effect.GetVariableByName("vViewport").AsVector(); vLineParams = effect.GetVariableByName("vLineParams").AsVector(); var lineParams = new Vector4((float)Thickness, (float)Smoothness, 0, 0); vLineParams.Set(lineParams); OnRasterStateChanged(DepthBias); Device.ImmediateContext.Flush(); }
public override void Attach(IRenderHost host) { // --- attach renderTechnique = host.RenderTechniquesManager.RenderTechniques[DefaultRenderTechniqueNames.BillboardText]; effect = host.EffectsManager.GetEffect(renderTechnique); renderHost = host; // --- get variables vertexLayout = renderHost.EffectsManager.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); // --- transformations effectTransforms = new EffectTransformVariables(effect); // --- shader variables vViewport = effect.GetVariableByName("vViewport").AsVector(); // --- get geometry var geometry = Geometry as BillboardText3D; if (geometry == null) { return; } // --- material // this.AttachMaterial(); billboardTextureVariable = effect.GetVariableByName("billboardTexture").AsShaderResource(); var textureBytes = BillboardText3D.Texture.ToByteArray(); billboardTextureView = ShaderResourceView.FromMemory(Device, textureBytes); billboardTextureVariable.SetResource(billboardTextureView); // -- set geometry if given vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, VertexSizeInBytes, CreateBillboardVertexArray()); /// --- set rasterstate OnRasterStateChanged(DepthBias); /// --- flush Device.ImmediateContext.Flush(); }
/// <summary> /// By overriding Attach, we can provide our own vertex array. /// </summary> /// <param name="host">An object whose type implements IRenderHost.</param> public override void Attach(IRenderHost host) { renderTechnique = host.RenderTechniquesManager.RenderTechniques[DefaultRenderTechniqueNames.Points]; base.Attach(host); if (Geometry == null) return; if (renderHost.RenderTechnique == renderHost.RenderTechniquesManager.RenderTechniques.Get(DeferredRenderTechniqueNames.Deferred) || renderHost.RenderTechnique == renderHost.RenderTechniquesManager.RenderTechniques.Get(DeferredRenderTechniqueNames.GBuffer)) return; vertexLayout = renderHost.EffectsManager.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); effectTransforms = new EffectTransformVariables(effect); var geometry = Geometry as PointGeometry3D; if (geometry != null) { /// --- set up buffers vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, VertexSizeInBytes, CreateVertexArray()); } /// --- set up const variables vViewport = effect.GetVariableByName("vViewport").AsVector(); //this.vFrustum = effect.GetVariableByName("vFrustum").AsVector(); vPointParams = effect.GetVariableByName("vPointParams").AsVector(); /// --- set effect per object const vars var pointParams = new Vector4((float)Size.Width, (float)Size.Height, (float)Figure, (float)FigureRatio); vPointParams.Set(pointParams); /// --- create raster state OnRasterStateChanged(); /// --- flush Device.ImmediateContext.Flush(); }
/// <summary> /// /// </summary> /// <param name="host"></param> public override void Attach(IRenderHost host) { /// --- attach this.renderTechnique = Techniques.RenderLines; base.Attach(host); if (this.Geometry == null) return; #if DEFERRED if (renderHost.RenderTechnique == Techniques.RenderDeferred || renderHost.RenderTechnique == Techniques.RenderGBuffer) return; #endif // --- get device this.vertexLayout = EffectsManager.Instance.GetLayout(this.renderTechnique); this.effectTechnique = effect.GetTechniqueByName(this.renderTechnique.Name); this.effectTransforms = new EffectTransformVariables(this.effect); // --- get geometry var geometry = this.Geometry as LineGeometry3D; // -- set geometry if given if (geometry != null) { /// --- set up buffers this.vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, LinesVertex.SizeInBytes, this.CreateLinesVertexArray()); /// --- set up indexbuffer this.indexBuffer = Device.CreateBuffer(BindFlags.IndexBuffer, sizeof(int), geometry.Indices.Array); } /// --- init instances buffer this.hasInstances = (this.Instances != null)&&(this.Instances.Any()); this.bHasInstances = this.effect.GetVariableByName("bHasInstances").AsScalar(); if (this.hasInstances) { this.instanceBuffer = Buffer.Create(this.Device, this.instanceArray, new BufferDescription(Matrix.SizeInBytes * this.instanceArray.Length, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None, 0)); } /// --- set up const variables this.vViewport = effect.GetVariableByName("vViewport").AsVector(); //this.vFrustum = effect.GetVariableByName("vFrustum").AsVector(); this.vLineParams = effect.GetVariableByName("vLineParams").AsVector(); /// --- set effect per object const vars var lineParams = new Vector4((float)this.Thickness, (float)this.Smoothness, 0, 0); this.vLineParams.Set(lineParams); /// === debug hack //{ // var texDiffuseMapView = ShaderResourceView.FromFile(device, @"G:\Projects\Deformation Project\FrameworkWPF2012\Externals\HelixToolkit-SharpDX\Source\Examples\SharpDX.Wpf\LightingDemo\TextureCheckerboard2.jpg"); // var texDiffuseMap = effect.GetVariableByName("texDiffuseMap").AsShaderResource(); // texDiffuseMap.SetResource(texDiffuseMapView); //} /// --- create raster state this.OnRasterStateChanged(this.DepthBias); //this.rasterState = new RasterizerState(this.device, rasterStateDesc); /// --- set up depth stencil state //var depthStencilDesc = new DepthStencilStateDescription() //{ // DepthComparison = Comparison.Less, // DepthWriteMask = global::SharpDX.Direct3D11.DepthWriteMask.All, // IsDepthEnabled = true, //}; //this.depthStencilState = new DepthStencilState(this.device, depthStencilDesc); /// --- flush this.Device.ImmediateContext.Flush(); }
public override void Attach(IRenderHost host) { base.Attach(host); renderTechnique = host.RenderTechniquesManager.RenderTechniques["RenderCustom"]; if (Geometry == null) return; vertexLayout = renderHost.EffectsManager.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); effectTransforms = new EffectTransformVariables(effect); AttachMaterial(); var geometry = Geometry as MeshGeometry3D; if (geometry == null) { throw new Exception("Geometry must not be null"); } vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, VertexSizeInBytes, CreateCustomVertexArray()); indexBuffer = Device.CreateBuffer(BindFlags.IndexBuffer, sizeof(int), Geometry.Indices.ToArray()); hasInstances = (Instances != null) && (Instances.Any()); bHasInstances = effect.GetVariableByName("bHasInstances").AsScalar(); if (hasInstances) { instanceBuffer = Buffer.Create(Device, instanceArray, new BufferDescription(Matrix.SizeInBytes * instanceArray.Length, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None, 0)); } OnRasterStateChanged(); Device.ImmediateContext.Flush(); }
/// <summary> /// /// </summary> /// <param name="host"></param> public override void Attach(IRenderHost host) { /// --- attach renderTechnique = host.RenderTechnique; base.Attach(host); // --- get variables vertexLayout = renderHost.EffectsManager.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); // --- get the pass shaderPass = effectTechnique.GetPassByName(Shading); /// --- model transformation effectTransforms = new EffectTransformVariables(effect); /// --- material AttachMaterial(); // -- get geometry var geometry = Geometry as MeshGeometry3D; // -- get geometry if (geometry != null) { //throw new HelixToolkitException("Geometry not found!"); /// --- init vertex buffer vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, DefaultVertex.SizeInBytes, geometry.Positions.Select((x, ii) => new DefaultVertex() { Position = new Vector4(x, 1f), Color = geometry.Colors != null ? geometry.Colors[ii] : new Color4(1f, 0f, 0f, 1f), TexCoord = geometry.TextureCoordinates != null ? geometry.TextureCoordinates[ii] : new Vector2(), Normal = geometry.Normals != null ? geometry.Normals[ii] : new Vector3(), Tangent = geometry.Tangents != null ? geometry.BiTangents[ii] : new Vector3(), BiTangent = geometry.BiTangents != null ? geometry.BiTangents[ii] : new Vector3(), }).ToArray()); /// --- init index buffer indexBuffer = Device.CreateBuffer(BindFlags.IndexBuffer, sizeof(int), Geometry.Indices.Array); } else { throw new System.Exception("Geometry must not be null"); } ///// --- init instances buffer //this.hasInstances = this.Instances != null; //this.bHasInstances = this.effect.GetVariableByName("bHasInstances").AsScalar(); //if (this.hasInstances) //{ // this.instanceBuffer = Buffer.Create(this.device, this.instanceArray, new BufferDescription(Matrix.SizeInBytes * this.instanceArray.Length, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None, 0)); //} /// --- init tessellation vars vTessellationVariables = effect.GetVariableByName("vTessellation").AsVector(); vTessellationVariables.Set(new Vector4((float)TessellationFactor, 0, 0, 0)); /// --- flush Device.ImmediateContext.Flush(); }
/// <summary> /// /// </summary> /// <param name="host"></param> public override void Attach(IRenderHost host) { renderTechnique = Techniques.RenderPoints; base.Attach(host); if (Geometry == null) return; #if DEFERRED if (renderHost.RenderTechnique == Techniques.RenderDeferred || renderHost.RenderTechnique == Techniques.RenderGBuffer) return; #endif // --- get device vertexLayout = EffectsManager.Instance.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); effectTransforms = new EffectTransformVariables(effect); // --- get geometry var geometry = Geometry as PointGeometry3D; // -- set geometry if given if (geometry != null) { /// --- set up buffers vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, Geometry3D.PointsVertex.SizeInBytes, CreatePointVertexArray()); } /// --- set up const variables vViewport = effect.GetVariableByName("vViewport").AsVector(); //this.vFrustum = effect.GetVariableByName("vFrustum").AsVector(); vPointParams = effect.GetVariableByName("vPointParams").AsVector(); /// --- set effect per object const vars var pointParams = new Vector4((float)Size.Width, (float)Size.Height, (float)Figure, (float)FigureRatio); vPointParams.Set(pointParams); /// --- create raster state OnRasterStateChanged(DepthBias); /// --- flush Device.ImmediateContext.Flush(); }
/// <summary> /// /// </summary> /// <param name="host"></param> public override void Attach(IRenderHost host) { /// --- attach renderTechnique = Techniques.RenderLines; base.Attach(host); if (Geometry == null) { return; } #if DEFERRED if (renderHost.RenderTechnique == Techniques.RenderDeferred || renderHost.RenderTechnique == Techniques.RenderGBuffer) { return; } #endif // --- get device vertexLayout = EffectsManager.Instance.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); effectTransforms = new EffectTransformVariables(effect); // --- get geometry var geometry = Geometry as LineGeometry3D; // -- set geometry if given if (geometry != null) { /// --- set up buffers vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, LinesVertex.SizeInBytes, CreateLinesVertexArray()); /// --- set up indexbuffer indexBuffer = Device.CreateBuffer(BindFlags.IndexBuffer, sizeof(int), geometry.Indices.Array); } /// --- init instances buffer hasInstances = (Instances != null) && (Instances.Any()); bHasInstances = effect.GetVariableByName("bHasInstances").AsScalar(); if (hasInstances) { instanceBuffer = Buffer.Create(Device, instanceArray, new BufferDescription(Matrix.SizeInBytes * instanceArray.Length, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None, 0)); } /// --- set up const variables vViewport = effect.GetVariableByName("vViewport").AsVector(); //this.vFrustum = effect.GetVariableByName("vFrustum").AsVector(); vLineParams = effect.GetVariableByName("vLineParams").AsVector(); /// --- set effect per object const vars var lineParams = new Vector4((float)Thickness, (float)Smoothness, 0, 0); vLineParams.Set(lineParams); /// === debug hack //{ // var texDiffuseMapView = ShaderResourceView.FromFile(device, @"G:\Projects\Deformation Project\FrameworkWPF2012\Externals\HelixToolkit-SharpDX\Source\Examples\SharpDX.Wpf\LightingDemo\TextureCheckerboard2.jpg"); // var texDiffuseMap = effect.GetVariableByName("texDiffuseMap").AsShaderResource(); // texDiffuseMap.SetResource(texDiffuseMapView); //} /// --- create raster state OnRasterStateChanged(DepthBias); //this.rasterState = new RasterizerState(this.device, rasterStateDesc); /// --- set up depth stencil state //var depthStencilDesc = new DepthStencilStateDescription() //{ // DepthComparison = Comparison.Less, // DepthWriteMask = global::SharpDX.Direct3D11.DepthWriteMask.All, // IsDepthEnabled = true, //}; //this.depthStencilState = new DepthStencilState(this.device, depthStencilDesc); /// --- flush Device.ImmediateContext.Flush(); }
/// <summary> /// /// </summary> /// <param name="host"></param> public override void Attach(IRenderHost host) { /// --- attach renderTechnique = host.RenderTechnique; base.Attach(host); if (this.Geometry == null || this.Geometry.Positions == null || this.Geometry.Positions.Count == 0 || this.Geometry.Indices == null || this.Geometry.Indices.Count == 0) { return; } // --- get variables vertexLayout = renderHost.EffectsManager.GetLayout(renderTechnique); effectTechnique = effect.GetTechniqueByName(renderTechnique.Name); // --- get the pass shaderPass = effectTechnique.GetPassByName(Shading); /// --- model transformation effectTransforms = new EffectTransformVariables(effect); /// --- material AttachMaterial(); // -- get geometry var geometry = Geometry as MeshGeometry3D; // -- get geometry if (geometry != null) { //throw new HelixToolkitException("Geometry not found!"); /// --- init vertex buffer vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, DefaultVertex.SizeInBytes, geometry.Positions.Select((x, ii) => new DefaultVertex() { Position = new Vector4(x, 1f), Color = geometry.Colors != null ? geometry.Colors[ii] : new Color4(1f, 0f, 0f, 1f), TexCoord = geometry.TextureCoordinates != null ? geometry.TextureCoordinates[ii] : new Vector2(), Normal = geometry.Normals != null ? geometry.Normals[ii] : new Vector3(), Tangent = geometry.Tangents != null ? geometry.BiTangents[ii] : new Vector3(), BiTangent = geometry.BiTangents != null ? geometry.BiTangents[ii] : new Vector3(), }).ToArray()); /// --- init index buffer indexBuffer = Device.CreateBuffer(BindFlags.IndexBuffer, sizeof(int), Geometry.Indices.Array); } else { throw new System.Exception("Geometry must not be null"); } ///// --- init instances buffer //this.hasInstances = this.Instances != null; //this.bHasInstances = this.effect.GetVariableByName("bHasInstances").AsScalar(); //if (this.hasInstances) //{ // this.instanceBuffer = Buffer.Create(this.device, this.instanceArray, new BufferDescription(Matrix.SizeInBytes * this.instanceArray.Length, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None, 0)); //} /// --- init tessellation vars vTessellationVariables = effect.GetVariableByName("vTessellation").AsVector(); vTessellationVariables.Set(new Vector4((float)TessellationFactor, 0, 0, 0)); /// --- flush Device.ImmediateContext.Flush(); }
public override void Attach(IRenderHost host) { /// --- attach this.renderTechnique = host.RenderTechniquesManager.RenderTechniques[DefaultRenderTechniqueNames.CubeMap]; base.Attach(host); /// --- get variables this.vertexLayout = renderHost.EffectsManager.GetLayout(this.renderTechnique); this.effectTechnique = effect.GetTechniqueByName(this.renderTechnique.Name); this.effectTransforms = new EffectTransformVariables(this.effect); /// -- attach cube map if (this.Filename != null) { /// -- attach texture using (var texture = Texture2D.FromFile <Texture2D>(this.Device, this.Filename)) { this.texCubeMapView = new ShaderResourceView(this.Device, texture); } this.texCubeMap = effect.GetVariableByName("texCubeMap").AsShaderResource(); this.texCubeMap.SetResource(this.texCubeMapView); this.bHasCubeMap = effect.GetVariableByName("bHasCubeMap").AsScalar(); this.bHasCubeMap.Set(true); /// --- set up geometry var sphere = new MeshBuilder(false, true, false); sphere.AddSphere(new Vector3(0, 0, 0)); this.geometry = sphere.ToMeshGeometry3D(); /// --- set up vertex buffer this.vertexBuffer = Device.CreateBuffer(BindFlags.VertexBuffer, CubeVertex.SizeInBytes, this.geometry.Positions.Select((x, ii) => new CubeVertex() { Position = new Vector4(x, 1f) }).ToArray()); /// --- set up index buffer this.indexBuffer = Device.CreateBuffer(BindFlags.IndexBuffer, sizeof(int), geometry.Indices.Array); /// --- set up rasterizer states var rasterStateDesc = new RasterizerStateDescription() { FillMode = FillMode.Solid, CullMode = CullMode.Back, IsMultisampleEnabled = true, IsAntialiasedLineEnabled = true, IsFrontCounterClockwise = false, }; this.rasterState = new RasterizerState(this.Device, rasterStateDesc); /// --- set up depth stencil state var depthStencilDesc = new DepthStencilStateDescription() { DepthComparison = Comparison.LessEqual, DepthWriteMask = global::SharpDX.Direct3D11.DepthWriteMask.All, IsDepthEnabled = true, }; this.depthStencilState = new DepthStencilState(this.Device, depthStencilDesc); } /// --- flush this.Device.ImmediateContext.Flush(); }