opengl-es - 你能glBlitFramebuffer在同一纹理的不同层次之间吗?
问题描述
假设我有一个纹理需要 mipmap,但我希望 mipmap 完成硬件加速。我决定采取的最佳路线是这样的:
int read = glGenFramebuffers();
int draw = glGenFramebuffers();
int wh = 256;
int glObject = glGenTextures();
glBindTexture(GL_TEXTURE_2D, glObject);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, wh, wh, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
for(int i = 0; i < mipLevels; ++i) {
glBindFramebuffer(GL_FRAMEBUFFER, read);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glObject, i);
glTexImage2D(GL_TEXTURE_2D, i + 1, GL_RGBA8, wh / 2, wh / 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByeBuffer)null);
glBindFramebuffer(GL_FRAMEBUFFER, draw);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glObject, i + 1);
glBindFramebuffer(GL_READ_FRAMEBUFFER, read);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, draw);
glBlitFramebuffer(0, 0, wh, wh, 0, 0, wh / 2, wh / 2, GL_COLOR_BUFFER_BIT, GL_LINEAR);
wh /= 2;
}
当调用 glCheckFramebufferStatus 时,两个帧缓冲区都在此代码块中返回 INCOMPLETE_ATTACHMENT。我究竟做错了什么?我是否正确分配了空白 mipmap 级别?
解决方案
答:在这些情况下glTexImage2D
,我应该用来分配空白级别时,我正在使用分配空白 mip 级别。glTexStorage2D
以下是指向手册页的链接以glTexStorage2D
获取更多详细信息:https ://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexStorage2D.xhtml
推荐阅读
- java - Wildfly 18 JMS 执行导致“远程连接突然关闭”
- python - python selenium定位元素问题
- c++ - 如何在 C++ 中使用移动语义进行运算符重载?(优雅地)
- java - 如何使用 Firebase 数据库中的数据在 RecyclerView 上实现加载更多分页(无限滚动)
- c++ - C++ 表示回文
- basic - #define, #macro, #error 拒绝运行
- javascript - 如何在 Javascript 中清除超时后取消 setTimeout() 中的事件
- java - LWJGL 在 glDrawElements 上崩溃
- python - 我可以一次为所有列(持有股票收益)生成 Beta(股票),而不必遍历 Pandas 框架中的每一列
- python - Python 构建 exe 文件在 conda 提示符下成功运行,但在运行时退出