Wie kann ich Pixel von einem einfachen Byte-Array in eine OpenGl-Textur hochladen?glTexImage2D + byte []
Ich benutze glTexImage2D und alles, was ich bekomme, ist ein weißes Rechteck anstelle einer pixeligen Textur. Der 9. Parameter (32-Bit-Zeiger auf die Pixeldaten) ist IMO das Problem. Ich habe dort viele Parametertypen ausprobiert (byte, ref-Byte, byte [], ref-Byte [], int & IntPtr + Marshall, out-Byte, out-Byte [], Byte *). glGetError() gibt immer GL_NO_ERROR zurück. Es muss etwas passieren, das ich falsch mache, weil es nie irgendwelche Kauderwelsch Pixel sind. Es ist immer weiß. glGenTextures funktioniert korrekt. Die erste ID hat wie immer in OpenGL den Wert 1. Und ich zeichne farbige Linien ohne Probleme. Also stimmt etwas nicht mit meiner Texturierung. Ich habe die Kontrolle über den DllImport. So kann ich bei Bedarf die Parametertypen ändern.
GL.glBindTexture(GL.GL_TEXTURE_2D, id);
int w = 4;
int h = 4;
byte[] bytes = new byte[w * h * 4];
for (int i = 0; i < bytes.Length; i++)
bytes[i] = (byte)Utils.random(256);
GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, w, h, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, bytes);
[DllImport(GL_LIBRARY)] public static extern void glTexImage2D(uint what, int level, int internalFormat, int width, int height, int border, int format,
int type, byte[] bytes);
Woran denken Sie, dass das Hochladen des Bildes das Problem ist? –
Wie wird ein .NET-Byte-Array an eine C-API-Funktion gemanaged? Ihr Kommentar "Ich habe die Kontrolle über den DllImport" schlägt vor, dass Sie OpenTK oder eine andere vorgefertigte OpenGL-Bindung nicht verwenden. Wie sieht der Code aus? –
Was könnte es dann sein? Ich zeichne es mit GL_QUADS, aber es füllt es immer mit meinem aktuellen glColor() (weiß). Ich binde die Textur-ID und aktiviere GL_TEXTURE_2D. – miniMe