public void Draw(Matrix view, Matrix proj) { if (m_genMesh.m_meshGPU == null) { return; } MeshGPU meshGPU = m_genMesh.m_meshGPU; if (meshGPU.m_npartsCount < 0) { return; } var effect = meshGPU.SingleEffect; effect.CurrentTechnique = effect.Techniques["Technique1"]; effect.Parameters["xWorld"].SetValue(m_worldMtx); effect.Parameters["xView"].SetValue(view); effect.Parameters["xProjection"].SetValue(proj); effect.Parameters["xDirectionalLightDir"].SetValue(LightDir); if (m_tex2DBorder != null) { effect.Parameters["xTexSlot0"].SetValue(m_tex2DBorder); } if (ShowGridOnVoxel == true) { effect.Parameters["xGridPower"].SetValue(1.0f); } else { effect.Parameters["xGridPower"].SetValue(0.0f); } // Create a vertex buffer, and copy our vertex data into it. GraphicsDevice device = effect.GraphicsDevice; device.RasterizerState = RasterizerState.CullCounterClockwise;// CullClockwise; device.DepthStencilState = DepthStencilState.Default; device.BlendState = BlendState.Opaque; effect.CurrentTechnique.Passes[0].Apply(); //One pass //Draw Grouped by Effect Slot for (int i = 0; i < meshGPU.m_npartsCount; i++) { MeshGPUPart part = meshGPU.m_meshParts[i]; device.SetVertexBuffer(part.m_gpuVertexBuffer); device.Indices = part.m_gpuIndexBuffer; device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, part.m_gpuIndexBuffer.IndexCount / 3); } }
/// <summary> /// Create a mesh objet for GPU /// </summary> /// <returns></returns> public void CreateGPUMesh(GraphicsDevice _gd, bool _bComputeBounds) { if (m_meshGPU == null) { m_meshGPU = new MeshGPU(); } m_meshGPU.FromGenMesh(_gd, this, _bComputeBounds); m_bGPUDirty = false; }