如何将像素从简单的字节数组上传到OpenGl纹理?glTexImage2D + byte []
我使用的是glTexImage2D,我得到的只是一个白色矩形而不是像素化纹理。第9个参数(像素数据的32位指针)是IMO的问题。我尝试了很多参数类型(byte,ref byte,byte [],ref byte [],int & IntPtr + Marshall,out byte,out byte [],byte *)。 glGetError()总是返回GL_NO_ERROR。必须有我做错的事情,因为它从来不是一些乱码像素。它总是白色的。 glGenTextures的作品正确。像OpenGL一样,第一个id的值为1。我画出彩色线条没有任何问题。所以我的纹理有些问题。我在控制DllImport。所以我可以根据需要更改参数类型。
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);
这是什么让你觉得这是图像上传这就是问题所在? – 2012-04-12 23:57:52
另外,你如何编组一个.NET字节数组到C API函数?您的评论“我在控制DllImport”暗示您没有使用OpenTK或其他预先制作的OpenGL绑定。那么代码是什么样的? – 2012-04-13 00:10:24
那会是什么呢?我用GL_QUADS绘制它,但它总是用我当前的glColor()(白色)填充。我绑定了纹理ID并启用了GL_TEXTURE_2D。 – miniMe 2012-04-13 00:13:22