使用GlblitFrameBuffer进行多样采样,无法使用OpenGL ES 3.0
Multisampling with glBlitFramebuffer not working opengl es 3.0
概述:从中,我更改为ES 3.0,在阅读和尝试一天之后,我再次被困在实现抗血液中。我正在在iOS模拟器上进行测试。
问题:我的图纸是可见的,但它们与没有抗逆性的相同。我尝试使用OBJC的[self.glkView setDrawableMultisample:GLKViewDrawableMultisample4X];
,差异很明显。这意味着我的多样采样根本不起作用。我缺少什么吗?
使用的资源:我已经阅读了Apple的指南(使用ES3 Update(作为基础指南。Kronos Wiki作为附加指南(它使用glEnable(GL_MULTISAMPLE)
在ES3中不存在...我发现类似的是sample coverage
,我也尝试过启用它,但仍然没有运气(。
代码:
/*
setting up shader program code...
*/
// initializing frame buffers
glGenFramebuffers(1, &sampleFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, sampleFramebuffer);
glGenRenderbuffers(1, &sampleColorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, sampleColorRenderbuffer);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_RGBA8, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, sampleColorRenderbuffer);
glGenRenderbuffers(1, &sampleDepthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, sampleDepthRenderbuffer);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_DEPTH_COMPONENT16, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, sampleDepthRenderbuffer);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
printf("Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
// Making Draw FrameBuffer
glGenFramebuffers(1, &resolveFrameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, resolveFrameBuffer);
glGenRenderbuffers(1, &resolveColorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, resolveColorRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, resolveColorRenderbuffer);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
printf("Failed to make complete framebuffer2 object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
// Cleaning buffer steps
glBindFramebuffer(GL_FRAMEBUFFER, sampleFramebuffer);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
完成此操作后,在我的绘图代码中,完成绘图后,我会这样做:
*use gl program*
*drawarrays*
glBindFramebuffer(GL_READ_FRAMEBUFFER, sampleFramebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, resolveFrameBuffer);
glBlitFramebuffer(0, 0, _Width, _Height, 0, 0, _Width, _Height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
checkGLError("glBlitFramebuffer");
我弄清楚了,这是因为我如何测试图纸。我将片段着色器设置为始终给出纯红色(r:1,g:0,b:0,a:1)
。我之所以这样做,是因为我的Android项目是由其他人建立的,并且在我拿了副本时还没有完全完成。为了避免工作,我即兴创作并将颜色设置为红色,以便我可以看到在黑色背景上绘制的内容(愚蠢的想法(。
tldr :覆盖片段着色器输出,确保正在完成的任何反式化都被覆盖。将其设置回顶点着色器所提供的内容。
相关文章:
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- SDL + OpenGL ES 2.0 使用着色器显示纹理
- 为什么OpenGL ES 3.1+上GL_DEPTH_COMPONENT的glCheckFramebufferStatu
- OpenGL ES 绘制形状
- 如何使用着色器在 opengl es 中渲染四边形内部的部分纹理
- OpenGL ES:在顶点着色器中计算顶点位置时性能不佳
- OpenGL (ES) 图像处理C++
- E/libEGL:调用没有当前上下文的 OpenGL ES API (每个线程记录一次) - Android/SDL
- 使用GlblitFrameBuffer进行多样采样,无法使用OpenGL ES 3.0
- 在使用PI上的OpenGL ES绘制之前,如何旋转纹理
- 使用Emscripten将OpenGL ES转换回主机
- OpenGL ES ANDROID C++ ERROR
- OpenGL ES glTexImage2D optimization
- 在 OpenGL ES for Android 中运行时创建大型纹理的最有效方法
- 使用GlreadPixels()opengl es读取浮动值
- 如何将这些OpenGL着色器转换为Android NDK的GLES3的OpenGL ES着色器
- glDrawBuffers in opengl es 2.0 c++
- 如何在OpenGL ES 1.X中实现Glpushattrib(GL_Current_bit)
- android最佳OpenGL ES语法
- 在 OpenGL ES 示例中找不到"esUtil.h"