Opengl 使用 lwjgl 压缩纹理
我在 ByteBuffer 中加载了一个 DXT1 纹理,并且尝试使用 Opengl 加载它,
int tID = glGenTextures();
glBindTexture(GL_TEXTURE_2D, tID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, w, h, 0, imageData);
System.out.println(gluErrorString(glGetError()));
但在 glCompressedTexImage2D 调用上却出现错误“无效操作”。似乎无法弄清楚为什么。
I have a DXT1 texture loaded in a ByteBuffer and I'm trying to load it with Opengl
int tID = glGenTextures();
glBindTexture(GL_TEXTURE_2D, tID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, w, h, 0, imageData);
System.out.println(gluErrorString(glGetError()));
It's giving me the error "Invalid Operation" on the glCompressedTexImage2D call. Can't seem to figure out why.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,我知道问题是什么了。
imageData 的大小不正确。
由于 DXT1 是每像素 4 位,我一直认为它应该是 w * h * 4。
它应该是 w * h * 1/2(4 位为 1/2 个字节)。
Ok i figured out what the problem was.
The size of imageData was incorrect.
Since DXT1 is 4 bits per pixel, i kept thinking it should be w * h * 4.
It should have been w * h * 1/2 (4 bits being 1/2 a byte).