OES纹理怎么经过下采样得到新的OES纹理具体代码实现?
OES纹理是OpenGL ES扩展中的一种纹理类型,可以通过下采样的方式得到新的OES纹理。下面是具体的代码实现:
- 创建OES纹理对象
GLuint textureId; glGenTextures(1, &textureId); glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId);
- 设置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);
- 绑定OES纹理到FBO
GLuint fboId; glGenFramebuffers(1, &fboId); glBindFramebuffer(GL_FRAMEBUFFER, fboId); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_EXTERNAL_OES, textureId, 0);
- 设置渲染目标和视口
glViewport(0, 0, width, height); glBindFramebuffer(GL_FRAMEBUFFER, fboId);
- 渲染场景到OES纹理
// 绘制场景
- 生成新的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);
- 绑定新的OES纹理到FBO
GLuint newFboId; glGenFramebuffers(1, &newFboId); glBindFramebuffer(GL_FRAMEBUFFER, newFboId); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_EXTERNAL_OES, newTextureId, 0);
- 设置新的渲染目标和视口
glViewport(0, 0, width / 2, height / 2); glBindFramebuffer(GL_FRAMEBUFFER, newFboId);
- 渲染OES纹理到新的OES纹理
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
- 解绑FBO和纹理
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
通过上述步骤可以得到经过下采样后的新的OES纹理
原文地址: https://www.cveoy.top/t/topic/fsQN 著作权归作者所有。请勿转载和采集!