我目前正在使用NDK为Android开发一个OpenGL-ES应用程序。该应用程序将极大地受益于以下Open-GL扩展:
GL_EXT_texture_array
(详情请访问: GL_EXT_texture_arary)
我的Tegra-3设备支持该扩展(华硕EeePad Transformer Prime Tf-201)
我现在面临的问题是,我不知道如何使扩展可用于我的应用程序,因为它不包括在Open-GL ES API注册表中。
(参见“扩展规范”:http://www.khronos.org/registry/gles/)
然而,我注意到一个名为"GL_NV_texture_array“的扩展似乎有相同的用途,但我的Tegra-3设备不支持它。
我知道有可能包含使用函数指针的扩展。但我想也许有一种更舒适的方式。我还发现了一个头文件(gl2ext_nv.h),其中包含必要的扩展名。但是当你通过google搜索它时,这个文件总是特定项目的一部分,而不是官方的东西。我还下载了Tegra Android开发包(2.0),其中既没有这个头文件,也没有想要的扩展。
有人能给我解释一下吗?
如何使用我的Tegra-3设备支持的Open-GL ES扩展,这些扩展似乎不受任何官方Open-GL ES特定标头(在NDK中)的支持?
提前感谢!
发布于 2013-04-26 11:46:13
当您说您的Tegra3设备支持GL_EXT_texture_array但不支持GL_NV_texture_array时,我假设您是通过调用glGetString(GL_EXTENSIONS)来确定的。
GL_NV_texture_array与GL_EXT_texture_array非常相似,只是限于二维纹理数组。毫不奇怪,它使用许多与GL_EXT_texture_array相同的常量,只是名称不同。
TEXTURE_2D_ARRAY_NV 0x8C1A
TEXTURE_BINDING_2D_ARRAY_NV 0x8C1D
MAX_ARRAY_TEXTURE_LAYERS_NV 0x88FF
FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_NV 0x8CD4
SAMPLER_2D_ARRAY_NV 0x8DC1TEXTURE_2D_ARRAY_EXT 0x8C1A
TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D
MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF
FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
SAMPLER_2D_ARRAY_EXT 0x8DC1This version of gl2ext_nv.h为GL_EXT_texture_array定义了常量,但没有为GL_NV_texture_array定义常量,所以也许nVidia现在使用的是旧名称。如果你找不到最新版本的头文件,只需要包含这个。
要访问GL扩展提供的函数,请使用eglGetProcAddress将函数分配给函数指针。
// The function pointer, declared in a header.
// You can put this in a class instance or at global scope.
// If the latter, declare it with "extern", and define the actual function
// pointer without "extern" in a single source file.
PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC glFramebufferTextureLayerEXT; 在检查GL_EXT_texture_array扩展是否存在的函数中,如果找到了,则获取函数的地址并将其存储在函数指针中。使用OpenGL-ES,这意味着询问EGL:
glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) eglGetProcAddress("glFramebufferTextureLayerEXT");现在,您可以像使用常规OpenGL的一部分一样使用该函数。
https://stackoverflow.com/questions/16147700
复制相似问题