예제 #1
0
 protected override void OnCreateGeometryBuffers()
 {
     // --- set up buffers
     CreateVertexBuffer();
     // --- set up indexbuffer
     indexBuffer.CreateBufferFromDataArray(Device, geometryInternal.Indices);
 }
예제 #2
0
 protected override void OnGeometryPropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     base.OnGeometryPropertyChanged(sender, e);
     if (sender is MeshGeometry3D)
     {
         if (e.PropertyName.Equals(nameof(MeshGeometry3D.TextureCoordinates)))
         {
             OnUpdateVertexBuffer(UpdateTextureOnly);
         }
         else if (e.PropertyName.Equals(nameof(MeshGeometry3D.Positions)))
         {
             OnUpdateVertexBuffer(UpdatePositionOnly);
         }
         else if (e.PropertyName.Equals(nameof(MeshGeometry3D.Colors)))
         {
             OnUpdateVertexBuffer(UpdateColorsOnly);
         }
         else if (e.PropertyName.Equals(nameof(MeshGeometry3D.Indices)) || e.PropertyName.Equals(Geometry3D.TriangleBuffer))
         {
             indexBuffer.CreateBufferFromDataArray(this.Device, this.geometryInternal.Indices);
             InvalidateRender();
         }
         else if (e.PropertyName.Equals(Geometry3D.VertexBuffer))
         {
             OnUpdateVertexBuffer(CreateDefaultVertexArray);
         }
     }
 }
 protected override void OnCreateGeometryBuffers()
 {
     // --- init vertex buffer
     vertexBuffer.CreateBufferFromDataArray(Device, CreateDefaultVertexArray(), geometryInternal.Positions.Count);
     // --- init index buffer
     indexBuffer.CreateBufferFromDataArray(Device, geometryInternal.Indices.Array);
 }
예제 #4
0
        private void CreateVertexBuffer(Func <DefaultVertex[]> updateFunction)
        {
            // --- get geometry
            var geometry = this.geometryInternal as MeshGeometry3D;

            // -- set geometry if given
            if (geometry != null && geometry.Positions != null)
            {
                var data = updateFunction();
                vertexBuffer.CreateBufferFromDataArray(this.Device, data);
            }
        }
        private void CreateVertexBuffer()
        {
            var geometry = geometryInternal as PointGeometry3D;

            if (geometry != null && geometry.Positions != null)
            {
                // --- set up buffers
                var data = CreateVertexArray();
                vertexBuffer.CreateBufferFromDataArray(this.Device, data, geometry.Positions.Count);
            }
            InvalidateRender();
        }
        protected override bool OnAttach(IRenderHost host)
        {
            if (!base.OnAttach(host))
            {
                return(false);
            }

            if (renderHost.RenderTechnique == renderHost.RenderTechniquesManager.RenderTechniques.Get(DeferredRenderTechniqueNames.Deferred) ||
                renderHost.RenderTechnique == renderHost.RenderTechniquesManager.RenderTechniques.Get(DeferredRenderTechniqueNames.GBuffer))
            {
                return(false);
            }

            var geometry = Geometry as LineGeometry3D;

            if (geometry != null)
            {
                vertexBuffer.CreateBufferFromDataArray(Device, CreateVertexArray());
                indexBuffer.CreateBufferFromDataArray(Device, geometry.Indices);
            }

            //hasInstances = (Instances != null) && (Instances.Any());
            //bHasInstances = effect.GetVariableByName("bHasInstances").AsScalar();
            //if (hasInstances)
            //{
            //    isInstanceChanged = true;
            //    InstanceBuffer.CreateBufferFromDataArray(Device, Instances);
            //}

            vViewport   = effect.GetVariableByName("vViewport").AsVector();
            vLineParams = effect.GetVariableByName("vLineParams").AsVector();

            var lineParams = new Vector4((float)Thickness, (float)Smoothness, 0, 0);

            vLineParams.Set(lineParams);

            OnRasterStateChanged();

            //  Device.ImmediateContext.Flush();
            return(true);
        }
        protected override void OnCreateGeometryBuffers()
        {
            if (geometryInternal != null && geometryInternal.Positions != null)
            {
                vertexBuffer.CreateBufferFromDataArray(this.Device, CreateBillboardVertexArray(), geometryInternal.Positions.Count);
            }
            Disposer.RemoveAndDispose(ref billboardTextureView);
            Disposer.RemoveAndDispose(ref billboardAlphaTextureView);
            var billboardGeometry = geometryInternal as IBillboardText;

            if (billboardGeometry != null)
            {
                if (billboardGeometry.Texture != null)
                {
                    var textureBytes = billboardGeometry.Texture.ToByteArray();
                    billboardTextureView = TextureLoader.FromMemoryAsShaderResourceView(Device, textureBytes);
                }
                if (billboardGeometry.AlphaTexture != null)
                {
                    billboardAlphaTextureView = global::SharpDX.Toolkit.Graphics.Texture.Load(Device, billboardGeometry.AlphaTexture);
                }
            }
        }
예제 #8
0
        /// <summary>
        /// By overriding Attach, we can provide our own vertex array.
        /// </summary>
        /// <param name="host">An object whose type implements IRenderHost.</param>
        protected override bool OnAttach(IRenderHost host)
        {
            if (!base.OnAttach(host))
            {
                return(false);
            }

            if (renderHost.RenderTechnique == renderHost.RenderTechniquesManager.RenderTechniques.Get(DeferredRenderTechniqueNames.Deferred) ||
                renderHost.RenderTechnique == renderHost.RenderTechniquesManager.RenderTechniques.Get(DeferredRenderTechniqueNames.GBuffer))
            {
                return(false);
            }

            var geometry = Geometry as PointGeometry3D;

            if (geometry != null)
            {
                vertexBuffer.CreateBufferFromDataArray(Device, 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();
            return(true);
        }
 protected override void OnCreateGeometryBuffers()
 {
     vertexBuffer.CreateBufferFromDataArray(Device, CreateCustomVertexArray());
     indexBuffer.CreateBufferFromDataArray(Device, Geometry.Indices.ToArray());
 }
예제 #10
0
 protected override void OnCreateGeometryBuffers()
 {
     CreateVertexBuffer(CreateDefaultVertexArray);
     indexBuffer.CreateBufferFromDataArray(this.Device, geometryInternal.Indices);
 }