首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android的OpenGL ES中有效地将一个纹理分配给另一个纹理

如何在Android的OpenGL ES中有效地将一个纹理分配给另一个纹理
EN

Stack Overflow用户
提问于 2016-10-09 07:21:36
回答 1查看 3.2K关注 0票数 1

我想把texture1复制到texture2。背景是我生成15个空纹理id并将它们绑定到GLES11Ext.GL_TEXTURE_EXTERNAL_OES,下面是我的代码:

代码语言:javascript
复制
int[] textures = new int[15];
GLES20.glGenTextures(15, textures, 0);
GlUtil.checkGlError("glGenTextures");

for(int i=0;i<15;i++)
    GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[i]);

然后,我总是将相机预览转到textures[0],我希望将纹理从textures[0]复制到textures[1],以保持时间戳1的帧内容,并将纹理从textures[0]复制到textures[2],以保持时间戳2的帧内容。它看起来像是在GPU中缓冲一些纹理数据,并在将来呈现其中的一些数据。所以我想知道有什么事要做吗?我可以用textures[2]=textures[0]复制纹理数据吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-09 16:43:08

在ES2.0中没有一种非常直接的复制纹理数据的方法。最简单的方法可能是使用glCopyTexImage2D()。要使用这一点,您必须创建一个FBO,并附加源纹理到它。假设srcTexId是源纹理的id,dstTexId是目标纹理的id:

代码语言:javascript
复制
GLuint fboId = 0;
glGenFramebuffers(1, &fboId);
glBindFramebuffer(GL_FRAMEBUFFER, fboId);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, srcTexId, 0);

glBindTexture(GL_TEXTURE_2D, dstTexId);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);

尽管如此,根据你的描述,我不认为这是你真正应该做的,原因如下:

  • 我不认为复制纹理数据,如上面所示,将工作的外部纹理,您正在使用。
  • 复制纹理数据将永远是昂贵的,听起来完全没有必要解决您的问题。

听起来你想保留最新的15张相机图片。要做到这一点,您可以简单地跟踪15个纹理中的哪个包含最近的图像,并将15个纹理ids的列表作为一个循环缓冲区。

假设您最初创建了纹理ids:

代码语言:javascript
复制
int[] textures = new int[15];
GLES20.glGenTextures(15, textures, 0);
int newestIdx = 0;

然后,每次收到新帧时,都将其写入纹理it列表中的下一个条目,并在15左右进行包装:

代码语言:javascript
复制
newestIdx = (newestIdx + 1) % 15;
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[newestIdx]);
// Capture new frame into currently bound texture.

然后,每次您想要使用ith框架(0引用最近的框架,1引用之前的框架,等等)时,都需要将其绑定到:

代码语言:javascript
复制
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[(newestIdx + i) % 15]);

所以纹理永远不会被复制。您只需跟踪哪个纹理包含哪个框架,并相应地访问它们。

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

https://stackoverflow.com/questions/39941052

复制
相关文章

相似问题

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