SetFormat
bit 0 & 1:
00 Each vertex is unique (although mostly irrelevant UpdateIndexBuffer() and
UpdateTransformationBuffer() are still returning information)
01 Each index is unique => vertices are not necessarily (although mostly
irrelevant UpdateTransformationBuffer() is still returning information)
10 Single level Transformations are used, most optimal when using DirectX till version 11
and OpenGL till version 2
11 Nested Transformations are used, most optimal but till 2011 no known support of
low level 3D interfaces like DirectX and OpenGL
bit 2:
0 Vertex items returned as float (4 byte/32 bit)
1 Vertex items returned as double (8 byte/64 bit)
bit 3:
0 Index items returned as int32_t (4 byte/32 bit)
1 Index items returned as int64_t (8 byte/64 bit) (only available in 64 bit mode)
bit 4:
0 Vertex does not contain 3D point info
1 Vertex does contain 3D point info
bit 5:
0 Vertex does not contain 3D normal vector info
1 Vertex does contain 3D normal vector info => if set, bit 4 will also be set
bit 6:
0 Vertex does not contain first 2D texture info
1 Vertex does contain first 2D texture info
bit 7:
0 Vertex does not contain second 2D texture info
1 Vertex does contain second 2D texture info => if set, bit 6 will also be set
bit 8:
0 No object form triangles are exported
1 Object form triangles are exported (effective if instance contains faces and/or solids)
bit 9:
0 No object polygon lines are exported
1 Object polygon lines are exported (effective if instance contains line representations)
bit 10:
0 No object points are exported
1 Object points are exported (effective if instance contains point representations)
bit 11: Reserved, by default 0
bit 12:
0 No object face polygon lines are exported
1 Object face polygon lines (dense wireframe) are exported => if set, bit 8 will also be set
bit 13:
0 No object conceptual face polygon lines are exported
1 Object conceptual face polygon lines (wireframe) are exported => if set, bit 12 will also be set
bit 14:
0 Polygon lines (wireframe) exported as list, i.e. typical 4 point polygon exported as 0 1 2 3 0 -1
1 Polygon lines (wireframe) exported as tuples, i.e. typical 4 point polygon exported as 0 1 1 2 2 3 3 0
bit 15:
0 All normals of triangles are transformed orthogonal to the 2D face they belong to
1 Normals are exported to be in line with the original semantic form description (could be non orthogonal to the 2D face)
bit 16:
0 no specific behavior
1 Where possible DirectX compatibility is given to exported data (i.e. order of components in vertices)
=> [bit 20, bit 21 both UNSET]
=> if set, bit 17 will be unset
bit 17:
0 no specific behavior
1 Where possible OpenGL compatibility is given to exported data (i.e. order of components in vertices and inverted texture coordinates in Y direction)
=> [bit 20, bit 21 both SET]
=> if set, bit 16 will be unset
bit 18:
0 All faces are defined as calculated
1 Every face has exactly one opposite face (normally both index and vertex array are doubled in size)
bit 19: Reserved, by default 0
bit 20-23:
0000 version 0 (used in case there is different behavior between versions in DirectX or OpenGL)
.... ...
1111 version 15
bit 20:
0 Standard Triangle Rotation (LHS as expected by DirectX)
1 Opposite Triangle Rotation (RHS as expected by OpenGL)
bit 21:
0 X, Y, Z (nX, nY, nZ) formatted as
1 X, Y, Z (nX, nY, nZ) formatted as
bit 24:
0 Vertex does not contain Ambient color information
1 Vertex does contain Ambient color information
bit 25:
0 Vertex does not contain Diffuse color information
1 Vertex does contain Diffuse color information
bit 26:
0 Vertex does not contain Emissive color information
1 Vertex does contain Emissive color information
bit 27:
0 Vertex does not contain Specular color information
1 Vertex does contain Specular color information
bit 28:
0 Vertex does not contain tangent vector for first texture
1 Vertex does contain tangent vector for first texture => if set, bit 6 will also be set
bit 29:
0 Vertex does not contain binormal vector for first texture
1 Vertex does contain binormal vector for first texture => if set, bit 6 will also be set
bit 30: ONLY WORKS IN 64 BIT MODE
0 Vertex does not contain tangent vector for second texture
1 Vertex does contain tangent vector for second texture => if set, bit 6 will also be set
bit 31: ONLY WORKS IN 64 BIT MODE
0 Vertex does not contain binormal vector for second texture
1 Vertex does contain binormal vector for second texture => if set, bit 6 will also be set
bit 26-31: Reserved, by default 0
bit 32-63: Reserved, by default 0
Note: default setting is 0000 0000 0000 0000 0000 0000 0000 0000 - 0000 0000 0000 0000 1000 0001 0011 0000 = h0000 0000 - 0000 8130 = 33072
Syntax
public const string EngineDLL = @"engine.dll";[DllImport(EngineDLL, EntryPoint = "SetFormat")] public static extern Int64 SetFormat(Int64 model, Int64 setting, Int64 mask);
Property model
Size: 64 bit / 8 byte (value)Property setting
Size: 64 bit / 8 byte (value)Property mask
Size: 64 bit / 8 byte (value)
Example
Here you can find code snippits that show how the API call SetFormat can be used.
using Engine; const Int64 flagbit0 = 1; // 2^^0 0000.0000..0000.0001 const Int64 flagbit1 = 2; // 2^^1 0000.0000..0000.0010 const Int64 flagbit2 = 4; // 2^^2 0000.0000..0000.0100 const Int64 flagbit3 = 8; // 2^^3 0000.0000..0000.1000 const Int64 flagbit4 = 16; // 2^^4 0000.0000..0001.0000 const Int64 flagbit5 = 32; // 2^^5 0000.0000..0010.0000 const Int64 flagbit6 = 64; // 2^^6 0000.0000..0100.0000 const Int64 flagbit7 = 128; // 2^^7 0000.0000..1000.0000 const Int64 flagbit8 = 256; // 2^^8 0000.0001..0000.0000 const Int64 flagbit9 = 512; // 2^^9 0000.0010..0000.0000 const Int64 flagbit10 = 1024; // 2^^10 0000.0100..0000.0000 const Int64 flagbit11 = 2048; // 2^^11 0000.1000..0000.0000 const Int64 flagbit12 = 4096; // 2^^12 0001.0000..0000.0000 const Int64 flagbit13 = 8192; // 2^^13 0010.0000..0000.0000 const Int64 flagbit14 = 16384; // 2^^14 0100.0000..0000.0000 const Int64 flagbit15 = 32768; // 2^^15 1000.0000..0000.0000 const Int64 flagbit16 = 65536; // 2^^16 0000.0000..0000.0001 0000.0000..0000.0000 const Int64 flagbit17 = 131072; // 2^^17 0000.0000..0000.0010 0000.0000..0000.0000 const Int64 flagbit18 = 262144; // 2^^18 0000.0000..0000.0100 0000.0000..0000.0000 const Int64 flagbit19 = 524288; // 2^^19 0000.0000..0000.1000 0000.0000..0000.0000 const Int64 flagbit20 = 1048576; // 2^^20 0000.0000..0001.0000 0000.0000..0000.0000 const Int64 flagbit21 = 2097152; // 2^^21 0000.0000..0010.0000 0000.0000..0000.0000 const Int64 flagbit22 = 4194304; // 2^^22 0000.0000..0100.0000 0000.0000..0000.0000 const Int64 flagbit23 = 8388608; // 2^^23 0000.0000..1000.0000 0000.0000..0000.0000 const Int64 flagbit24 = 16777216; // 2^^24 0000.0001..0000.0000 0000.0000..0000.0000 const Int64 flagbit25 = 33554432; // 2^^25 0000.0010..0000.0000 0000.0000..0000.0000 const Int64 flagbit26 = 67108864; // 2^^26 0000.0100..0000.0000 0000.0000..0000.0000 const Int64 flagbit27 = 134217728; // 2^^27 0000.1000..0000.0000 0000.0000..0000.0000 const Int64 flagbit28 = 268435456; // 2^^28 0001.0000..0000.0000 0000.0000..0000.0000 const Int64 flagbit29 = 536870912; // 2^^29 0010.0000..0000.0000 0000.0000..0000.0000 const Int64 flagbit30 = (Int64) 1073741824; // 2^^30 0100.0000..0000.0000 0000.0000..0000.0000 const Int64 flagbit31 = (Int64) 2147483648; // 2^^31 1000.0000..0000.0000 0000.0000..0000.0000 static void Main(string[] args) { Int64 model = Engine.x86_64.CreateModel(); if (model != 0) { { // // Initializing the mask with all possible options // Int64 setting = 0, mask = Engine.x86_64.GetFormat(0, 0); setting += 0 * flagbit2; // SINGLE / DOUBLE PRECISION (float / double) setting += 0 * flagbit3; // 32 / 63 BIT INDEX ARRAY (int32_t / int64_t) setting += 1 * flagbit4; // OFF / ON VECTORS (x, y, z) setting += 1 * flagbit5; // OFF / ON NORMALS (Nx, Ny, Nz) setting += 0 * flagbit6; // OFF / ON TEXTURE I (u1, v1) setting += 0 * flagbit7; // OFF / ON TEXTURE II (u2, v2) setting += 1 * flagbit8; // OFF / ON TRIANGLES setting += 1 * flagbit9; // OFF / ON LINES setting += 1 * flagbit10; // OFF / ON POINTS setting += 0 * flagbit12; // OFF / ON WIREFRAME FACES setting += 0 * flagbit13; // OFF / ON WIREFRAME CONCEPTUAL FACES setting += 0 * flagbit14; // OFF / ON STRUCTURE WIREFRAME AS POLYGON / TUPLE setting += 0 * flagbit15; // OFF / ON ADVANCED NORMALS (I.E. FOLLOWING THE SEMANTIC MEANING OF THE CONCEPT) setting += 0 * flagbit16; // OFF / ON DIRECTX (COMBINATION SETTING BIT 20, 21, 22, 23) setting += 0 * flagbit17; // OFF / ON OPENGL (COMBINATION SETTING BIT 20, 21, 22, 23) setting += 0 * flagbit18; // OFF / ON EXPORT BOTH SIDES OF TRIANGLES setting += 0 * flagbit20; // OFF / ON EXPERT SETTING TRIANGLE WINDING CW / ACW setting += 0 * flagbit21; // OFF / ON EXPERT SETTING NONE / VERTEX + NORMAL Y = Z / Z = -Y setting += 0 * flagbit22; // OFF / ON EXPERT SETTING setting += 0 * flagbit23; // OFF / ON EXPERT SETTING setting += 0 * flagbit24; // OFF / ON AMBIENT COLOR COMPONENT setting += 0 * flagbit25; // OFF / ON DIFFUSE COLOR COMPONENT setting += 0 * flagbit26; // OFF / ON EMISSIVE COLOR COMPONENT setting += 0 * flagbit27; // OFF / ON SPECULAR COLOR COMPONENT setting += 0 * flagbit28; // OFF / ON TEXTURE I TANGENT setting += 0 * flagbit29; // OFF / ON TEXTURE I BINORMAL setting += 0 * flagbit30; // OFF / ON TEXTURE II TANGENT (64 BIT ONLY) setting += 0 * flagbit31; // OFF / ON TEXTURE II BINORMAL (64 BIT ONLY) Int64 vertexElementSizeInBytes = Engine.x86_64.SetFormat(model, setting, mask); } // // Check if a certain option is set // if (Engine.x86_64.GetFormat(model, flagbit5) != 0) { // Normal coordinates (Nx, Ny, Nz) are exported } else { // Normal coordinates (Nx, Ny, Nz) are not exported } if (Engine.x86_64.GetFormat(model, flagbit27) != 0) { // Specular color is exported } else { // Specular color is not exported } { // // Get all set options // Int64 setting = Engine.x86_64.GetFormat(model, Engine.x86_64.GetFormat(0, 0)); if ((setting & flagbit5) != 0) { // Normal coordinates (Nx, Ny, Nz) are exported } else { // Normal coordinates (Nx, Ny, Nz) are not exported } if ((setting & flagbit27) != 0) { // Specular color is exported } else { // Specular color is not exported } } } }