Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
SimpleExtensions.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Collections.Generic;
5 using System.Linq;
6 using SiliconStudio.Paradox.Effects.Data;
7 using SiliconStudio.Paradox.Graphics;
8 using SiliconStudio.Core;
9 using SiliconStudio.Core.Mathematics;
10 using SiliconStudio.Paradox.Graphics.Data;
11 
12 namespace SiliconStudio.Paradox.Extensions
13 {
14  public static class SimpleExtensions
15  {
16  /// <summary>
17  /// Determines whether the specified vertex buffer binding data is simple.
18  /// A vertex buffer binding data is simple if:
19  /// * Offset is 0.
20  /// * Stride is 0 (automatic), or equals to Declaration.VertexStride.
21  /// * Buffer.Content.Length is equal to Declaration.VertexStride * Count
22  /// </summary>
23  /// <param name="vertexBufferBindingData">The vertex buffer binding data.</param>
24  /// <returns></returns>
25  public static bool IsSimple(this VertexBufferBindingData vertexBufferBindingData)
26  {
27  if (vertexBufferBindingData.Offset != 0)
28  return false;
29 
30  var stride = vertexBufferBindingData.Declaration.VertexStride;
31  if (vertexBufferBindingData.Stride != 0
32  && vertexBufferBindingData.Stride != stride)
33  return false;
34 
35  var buffer = vertexBufferBindingData.Buffer.Value;
36  if (buffer.Content.Length != stride * vertexBufferBindingData.Count)
37  return false;
38 
39  return true;
40  }
41 
42  /// <summary>
43  /// Determines whether the specified index buffer binding data is simple.
44  /// A index buffer binding data is simple if:
45  /// * Offset is 0.
46  /// * Is32Bit is true.
47  /// * Buffer.Content.Length is equal to sizeof(int) * Count.
48  /// </summary>
49  /// <param name="indexBufferBindingData">The index buffer binding data.</param>
50  /// <returns></returns>
51  public static bool IsSimple(this IndexBufferBindingData indexBufferBindingData)
52  {
53  if (indexBufferBindingData.Offset != 0)
54  return false;
55 
56  if (!indexBufferBindingData.Is32Bit)
57  return false;
58 
59  var buffer = indexBufferBindingData.Buffer.Value;
60  if (buffer.Content.Length != sizeof(int) * indexBufferBindingData.Count)
61  return false;
62 
63  return true;
64  }
65 
66  /// <summary>
67  /// Determines whether the specified mesh draw data is simple.
68  /// A <see cref="MeshDrawData"/> is simple if:
69  /// * It contains only one <see cref="VertexBufferBindingData"/>, which must be simple.
70  /// * It contains either no <see cref="IndexBufferBindingData"/>, or a simple one.
71  /// * StartLocation is 0.
72  /// * DrawCount is IndexBuffer.Count if there is an index buffer, otherwise VertexBuffers[0].Count.
73  /// </summary>
74  /// <param name="meshDrawData">The mesh draw data.</param>
75  /// <returns></returns>
76  public static bool IsSimple(this MeshDrawData meshDrawData)
77  {
78  if (meshDrawData.VertexBuffers.Length != 1)
79  return false;
80 
81  if (!meshDrawData.VertexBuffers[0].IsSimple())
82  return false;
83 
84  if (meshDrawData.IndexBuffer != null)
85  {
86  if (!meshDrawData.IndexBuffer.IsSimple())
87  return false;
88 
89  if (meshDrawData.DrawCount != meshDrawData.IndexBuffer.Count)
90  return false;
91  }
92  else
93  {
94  if (meshDrawData.DrawCount != meshDrawData.VertexBuffers[0].Count)
95  return false;
96  }
97 
98  if (meshDrawData.StartLocation != 0)
99  return false;
100 
101  return true;
102  }
103  }
104 }
System.Int32 Offset
Data field for SiliconStudio.Paradox.Graphics.IndexBufferBinding.Offset.
SiliconStudio.Paradox.Graphics.Data.VertexBufferBindingData[] VertexBuffers
Data field for SiliconStudio.Paradox.Effects.MeshDraw.VertexBuffers.
Definition: EngineData.cs:185
System.Int32 Stride
Data field for SiliconStudio.Paradox.Graphics.VertexBufferBinding.Stride.
System.Int32 Count
Data field for SiliconStudio.Paradox.Graphics.VertexBufferBinding.Count.
SiliconStudio.Paradox.Graphics.Data.IndexBufferBindingData IndexBuffer
Data field for SiliconStudio.Paradox.Effects.MeshDraw.IndexBuffer.
Definition: EngineData.cs:190
static bool IsSimple(this MeshDrawData meshDrawData)
Determines whether the specified mesh draw data is simple. A MeshDrawData is simple if: ...
static bool IsSimple(this VertexBufferBindingData vertexBufferBindingData)
Determines whether the specified vertex buffer binding data is simple. A vertex buffer binding data i...
System.Int32 DrawCount
Data field for SiliconStudio.Paradox.Effects.MeshDraw.DrawCount.
Definition: EngineData.cs:175
System.Int32 Count
Data field for SiliconStudio.Paradox.Graphics.IndexBufferBinding.Count.
Data type for SiliconStudio.Paradox.Graphics.IndexBufferBinding.
Data type for SiliconStudio.Paradox.Graphics.VertexBufferBinding.
Data type for SiliconStudio.Paradox.Effects.MeshDraw.
Definition: EngineData.cs:165
static bool IsSimple(this IndexBufferBindingData indexBufferBindingData)
Determines whether the specified index buffer binding data is simple. A index buffer binding data is ...
System.Int32 StartLocation
Data field for SiliconStudio.Paradox.Effects.MeshDraw.StartLocation.
Definition: EngineData.cs:180
System.Boolean Is32Bit
Data field for SiliconStudio.Paradox.Graphics.IndexBufferBinding.Is32Bit.
System.Int32 Offset
Data field for SiliconStudio.Paradox.Graphics.VertexBufferBinding.Offset.