作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 OpenGLES 2 应用程序中(在 Android 2.3 上的 SGX535 上,没关系),我有一个大纹理,我需要经常对其进行小更新。我将其设置为一对 FBO,在其中我将更新渲染到后缓冲区,然后将整个后缓冲区作为纹理渲染到前缓冲区以“交换”它们。然后在场景中的其他地方使用前缓冲区作为纹理。
更新有时是纯色子矩形,但大多数时候,更新是原始图像数据,与纹理格式相同,例如,新图像数据以 RGB565 的形式出现,帧缓冲区对象由 RGB565 支持纹理。
正如您所料,使用 glTexSubImage2D() 很慢,尤其是在像 SGX 这样的延迟渲染器上。不仅如此,在背面 FBO 上使用 glTexSubImage2D 最终会导致应用程序在 SGX 驱动程序的某个地方崩溃。
我尝试为每个子矩形创建新的纹理对象,调用 glTexImage2D 来初始化它们,然后将它们作为纹理四边形渲染到后台缓冲区。在删除它们之前,我为两个 FBO 缓冲区交换保留了纹理对象,但显然这还不够长,因为当纹理 ID 被重新使用时,它们保留了旧纹理的尺寸。
相反,我目前正在获取原始图像数据的整个缓冲区并将其转换为顶点和颜色结构的数组,如下所示:
struct rawPoint {
GLfloat x;
GLfloat y;
GLclampf r;
GLclampf g;
GLclampf b;
};
最佳答案
我对图形有点陌生,所以请多加注意。
创建一个与纹理大小相同的 native 缓冲区(请参阅 引用资料)
使用 native 缓冲区创建 EGL 图像
eglCreateImageKHR(eglGetCurrentDisplay(),
eglGetCurrentContext(),
EGL_GL_TEXTURE_2D_KHR,
buffer,
attr);
关于opengl-es-2.0 - 如何将图像数据的子矩形上传到 OpenGLES 2 帧缓冲区纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7232290/
我是一名优秀的程序员,十分优秀!