【发布时间】:2016-11-29 22:23:57
【问题描述】:
我正在使用 OpenGL/GLSL 实现一个绘画应用程序。 有一个功能,即用户使用带有图案图像的画笔绘制“蒙版”,同时背景根据画笔位置而变化。看视频了解一下:video
我使用 CALayer 的遮罩(iOS 的东西)来实现这个效果(在视频上)。但是这种实现非常昂贵,fps 非常低。所以我决定为此使用OpenGL。 对于 OpenGL 实现,我使用 Stencil 缓冲区进行遮罩,即:
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 0);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
// Draw mask (brush pattern)
glStencilFunc(GL_EQUAL, 1, 255);
// Draw gradient background
// Display the buffer
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];
问题:Stencil 缓冲区不适用于 alpha,这就是为什么我不能为画笔使用半透明图案。
问题:如何使用 OpenGL/GLSL 但不使用 Stencil 缓冲区 从视频中实现这种效果?
【问题讨论】:
-
你说背景变了。所以你已经生成了合适的背景?如果是,背景是否定义为全屏纹理?
-
@MaticOblak ,是的,我为每次绘制迭代生成了适当的背景。我使用着色器生成渐变,作为输入数据,我使用触摸坐标(“开始”和“结束”触摸)。