c# arrays -> speicher



  • hallo,

    ich versuche unter c# und opengl ein paar bunte dreiecke auszugeben.
    problem ist, dass die funktion glDrawArrays (bzw glInterleavedArrays) normalerweise(c++) ein Zeiger erwarten, wo die mesh-daten zu finden sind.
    die gleiche funktion in der wrapper-klasse, die ich für c# nutze (Chris Hegarty) erwartet aber ein object[].
    leider weiss ich gar nicht, wie ich die daten speichern soll.
    ich habe erstmal ein (dyn) object[] erstellt:

    pVertices = new object[iVertexCount * 3];
    

    problem ist nur, dass der aufbau des object[] (also wie die Daten im speicher liegen) (logischerweise) nicht mit einem c++ float[] übereinstimmt,
    und somit die ausgabe der dreiecke nicht wie gewünscht ist.

    kann mir jemand sagen, WIE ich das array definieren muss, um die daten richtig zu übergeben?

    die wrapper-klasse ist pointer-free, d.h. ich dass ich auf unsafe-code komplett verzichte.



  • beispiel:

    du hast eine C++ - unmanage-Methode

    void UnmanagedClass::doSomething(const double * param)
    {
     // some work
    }
    

    dann baust du eine managed- cpp - wrapperklasse der unmanaged- klasse

    void ManagedClass::doSomething(double param __gc[])
    {
     double __pin* pointerparam= param == 0 ? 0: &param[0]; // weise die anfangsadresse des Arrays dem Pointer zu und fixiere die Adresse, 
                                                            // damit die Runtime dir nicht dazwischen kommt. Dafür ist das '__pin' gut
    
      unmanagedClass.doSomething(pointerparam);
    }
    

    nun kannste von c# aufrufen:

    void doSomething(double[] param)
    {
      managedClass.doSomething(param);
    }
    

Anmelden zum Antworten