当您说您的 Tegra 3 设备支持GL_EXT_texture_array
但不 GL_NV_texture_array
支持时,我假设您通过调用glGetString(GL_EXTENSIONS)
.
GL_NV_texture_array
与 非常相似GL_EXT_texture_array
,仅限于 2d 纹理数组。毫不奇怪,它使用许多与 GL_EXT_texture_array 相同的常量,只是名称不同。
GL_NV_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 0x8DC1
GL_EXT_texture_array:
TEXTURE_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 0x8DC1
这个版本的 gl2ext_nv.h定义了常量 forGL_EXT_texture_array
但不是for 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 的一部分一样使用该函数。