Opengl es OpenGL ES2.0将8位图像加载到模具缓冲区

Opengl es OpenGL ES2.0将8位图像加载到模具缓冲区,opengl-es,Opengl Es,我正在学习OpenGL ES2.0。我需要在我的项目模具缓冲区 What I am going to do: 1) Create a stencil buffer. 2) Load a 8-bit gray color image into this stencil buffer (which is also 8-bit per pixel). 3) The gray color image has different area (by setting different part a diff

我正在学习OpenGL ES2.0。我需要在我的项目模具缓冲区

What I am going to do:
1) Create a stencil buffer.
2) Load a 8-bit gray color image into this stencil buffer (which is also 8-bit per pixel).
3) The gray color image has different area (by setting different part a different value),       so I can render for each area by changing the stencil test value.
我已经搜索了很多时间,仍然不知道如何将图像加载到模具缓冲区


因此,对于上面的图像,我将蓝色区域的模具值设置为1,将绿色区域的模具值设置为2。如何实现这一点?

如果位图是1位的,只需编写一个着色器,该着色器可以
丢弃
s或允许基于alpha测试的像素继续,或者在固定管道下使用
glAlphaFunc
执行相同的操作,并使用相应的
glStencilFunc
绘制一个合适的四元体


如果它是8位的,并且您真的希望所有8个都传输到模具,那么我能想到的最佳跨平台解决方案包括8个绘图-从0开始,使用
glStencilMask
隔离单个位,将
glStencilOp
设置为反转,在着色器中的相关位中测试非零-或仅使用常规纹理并直接在着色器中实现等效的模具测试。

感谢您的回答,但您能否对此进行更多解释:“或仅使用常规纹理并直接在着色器中实现等效的模具测试”?我将使用8位模具,您将在着色器中对纹理进行采样,并根据其值决定是否放弃(或者在ES中,如果混合模式使其看起来像是放弃,则可能使用alpha 0输出,因为这在PowerVR上提供了更好的性能)。您将自己实现模具测试,而不是使用固定的模具测试。你得花一个采样器。如果你想放入模具的图案应该无限期地留在那里,那么进行逐点插入会更明智。你能解释一下为什么需要8位模具吗?你打算在一点时间内完成什么?嗨,我要做的是照片拼贴。请参考我的第二张图片,我可能在屏幕上有几个区域,这就是为什么我需要8位模具而不是1位。这张图片只是一个演示,实际上,它是一个8位的灰色图像,每个区域有0,1,2,4个值。所以我要做的就是把这个8位图像加载到模具缓冲区!谢谢好的,所以你的模具上没有真正的软边?你不希望它做一些像乘法到阿尔法通道的事情吗?嗨,我发现我对模具的理解是错误的,我读了以下内容:。所以我要做的是在空中创建一个位图,位图包含几个区域(值为1、2、3的区域…)。然后,我为每个区域绘制(丢弃当前区域外的区域),通过这一点,我可以为模具缓冲区设置正确的模具值。对此有何评论?谢谢!