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: ¶m[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); }