我正在尝试创建一个16位纹理来保存我的地形补丁的高度贴图,但是以下两种情况都会返回“无效的枚举”错误。 CHECK_GL_ERROR()宏将gluErrorString显示为消息,如果glGetError返回GL_NO_ERROR以外的其他内容则会中断。
CHECK_GL_ERROR( glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE16, width_, depth_, 0, GL_LUMINANCE, GL_UNSIGNED_SHORT, 0 /*data_.raw_data()*/ ) );
CHECK_GL_ERROR( glTexImage2D( GL_TEXTURE_2D, 0, GL_ALPHA16, width_, depth_, 0, GL_ALPHA, GL_UNSIGNED_SHORT, 0 /*data_.raw_data()*/ ) );
我有一个创建的纹理绑定到GL_TEXTURE_2D目标,并且有和没有相同的错误:
glPixelStorei( GL_UNPACK_ALIGNMENT, 2 );
我在GTX 560Ti上使用OpenGL 3.2上下文,NVIDIA CUDA dev驱动程序286.16。谁能看到我做错了什么?
干杯
答案 0 :(得分:3)
如果你使用的是core context,那么应该是这样的。暂无任何GL_LUMINANCE
或GL_ALPHA
image formats。
如果要模拟它们的效果,则需要创建单通道图像格式。因此GL_R16
应该是您的内部格式。然后在纹理对象上设置texture swizzle mask,以便根据需要将单个红色通道广播到RGB或Alpha。
这种方式确实更好。