首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL ES:使用Tegra特定扩展(GL_EXT_texture_array)

OpenGL ES:使用Tegra特定扩展(GL_EXT_texture_array)
EN

Stack Overflow用户
提问于 2013-04-22 20:58:52
回答 1查看 1.8K关注 0票数 3

我目前正在使用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中)的支持?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 11:46:13

当您说您的Tegra3设备支持GL_EXT_texture_array但不支持GL_NV_texture_array时,我假设您是通过调用glGetString(GL_EXTENSIONS)来确定的。

GL_NV_texture_arrayGL_EXT_texture_array非常相似,只是限于二维纹理数组。毫不奇怪,它使用许多与GL_EXT_texture_array相同的常量,只是名称不同。

GL_NV_texture_array

代码语言:javascript
复制
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

代码语言:javascript
复制
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

This version of gl2ext_nv.hGL_EXT_texture_array定义了常量,但没有为GL_NV_texture_array定义常量,所以也许nVidia现在使用的是旧名称。如果你找不到最新版本的头文件,只需要包含这个。

要访问GL扩展提供的函数,请使用eglGetProcAddress将函数分配给函数指针。

代码语言:javascript
复制
// 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:

代码语言:javascript
复制
glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) eglGetProcAddress("glFramebufferTextureLayerEXT");

现在,您可以像使用常规OpenGL的一部分一样使用该函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16147700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档