GetVertexDataOffset

Returns offset of the required data in a vertex elements array with the specified format settings requiredData is one of the control vertex data bits (FORMAT_VERTEX...) or 0 to get count of all elements in vertex buffer Functions returns -1 if the required data are absent with the settings. Ensure your settings are actual. They may be differ you pass to SetFormat (for example because of mask) It's preferable to inquire resulting setting with GetFormat(model, GetFormat(0, 0)) Note: vertex buffer element is a double or a float number depending on FORMAT_SIZE_VERTEX_DOUBLE flag. If you need offset in bytes multiply by size of element. Compare to SetFormat that returns size of vertex data in bytes.

Syntax

public const string enginedll = @"engine.dll";

[DllImport(enginedll, EntryPoint = "GetVertexDataOffset")]
public static extern Int32 GetVertexDataOffset(Int64 requiredData, Int64 setting);    

Property requiredData

Size: 64 bit / 8 byte (value)
The required data.

Property setting

Size: 64 bit / 8 byte (value)
The setting is the data that is defined for bitwise operations, only bits set in the mask will be relevant.

Example (based on pure API calls)

Here you can find code snippits that show how the API call GetVertexDataOffset can be used.

using RDF;      //  include at least engine.cs within your solution

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 = RDF.engine.CreateModel();

    if (model != 0)
    {
        {
            //
            //  Initializing the mask with all possible options
            //
            Int64   setting = 0,
                    mask = RDF.engine.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 = RDF.engine.SetFormat(model, setting, mask);
        }

        ...

        int32_t vertexSize = GetVertexDataOffset(0, setting);

        ...
    }
}