它是否能够在opengl es 2.0中使用EXT纹理格式?

时间:2015-09-21 14:31:52

标签: opengl opengl-es opengl-es-2.0 opentk

现在我必须将我正在使用的OpenGL代码重写为OpenGL ES2.0(使用ANGLE)。 我使用OpenTK并在" ES20"中看到EXT纹理格式,如OpenTK.Graphics.ES20.TextureComponentCount.R32fExt。命名空间。但是当我尝试使用它时,我得到了一个OpenGL错误" InvalidEnum"。

我需要这样的东西(一个频道,> = 16位):

GL.TexImage2D(TextureTarget2d.Texture2D, 0, OpenTK.Graphics.ES20.TextureComponentCount.R32fExt, 1296, 1296, 0, OpenTK.Graphics.ES20.PixelFormat.Red, PixelType.UnsignedShort, (IntPtr)dataPtr); 

能否在ES2.0中使用?

UPD:我需要将这个纹理附加到帧缓冲区,所以我不能使用ALPHA或LUMINANCE格式。

1 个答案:

答案 0 :(得分:1)

如果您希望代码在各种设备上运行,则需要对正在使用的扩展进行运行时检查。

一般机制是您获得扩展字符串:

const GLubyte* extStr = glGetString(GL_EXTENSIONS);

然后检查相关扩展是否是此字符串的一部分。所有已注册的扩展程序列表均可在www.hronos.org上OpenGL ES registry page的底部找到。

例如,要使用浮动纹理,必要的扩展名为OES_texture_float。如果此扩展名称是扩展字符串的一部分,则可以使用GL_FLOAT作为纹理格式。请注意,ES 2.0仍然使用未分级的内部格式,因此对于单分量浮动纹理,您可以使用GL_ALPHA作为内部格式,并使用GL_FLOAT作为类型。