OES纹理是OpenGL ES扩展中的一种纹理类型,可以通过下采样的方式得到新的OES纹理。下面是具体的代码实现:

  1. 创建OES纹理对象

GLuint textureId; glGenTextures(1, &textureId); glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId);

  1. 设置OES纹理参数

glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

  1. 绑定OES纹理到FBO

GLuint fboId; glGenFramebuffers(1, &fboId); glBindFramebuffer(GL_FRAMEBUFFER, fboId); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_EXTERNAL_OES, textureId, 0);

  1. 设置渲染目标和视口

glViewport(0, 0, width, height); glBindFramebuffer(GL_FRAMEBUFFER, fboId);

  1. 渲染场景到OES纹理

// 绘制场景

  1. 生成新的OES纹理

GLuint newTextureId; glGenTextures(1, &newTextureId); glBindTexture(GL_TEXTURE_EXTERNAL_OES, newTextureId); glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_EXTERNAL_OES, 0, GL_RGBA, width / 2, height / 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

  1. 绑定新的OES纹理到FBO

GLuint newFboId; glGenFramebuffers(1, &newFboId); glBindFramebuffer(GL_FRAMEBUFFER, newFboId); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_EXTERNAL_OES, newTextureId, 0);

  1. 设置新的渲染目标和视口

glViewport(0, 0, width / 2, height / 2); glBindFramebuffer(GL_FRAMEBUFFER, newFboId);

  1. 渲染OES纹理到新的OES纹理

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

  1. 解绑FBO和纹理

glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);

通过上述步骤可以得到经过下采样后的新的OES纹理

OES纹理怎么经过下采样得到新的OES纹理具体代码实现?

原文地址: https://www.cveoy.top/t/topic/fsQN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录