2
votes

What's the best choice when trying to mask a texture like ColorSplash or other apps like iSteam, etc?

I started learning OPENGL ES like... 4 days ago (I'm a total rookie) and tried the following approach:

1) I created a colored texture2D, a grayscale version of the first texture and a third texture2D called mask

2) I also created a texture2D for the brush... which is grayscale and it's opaque (brush = black = 0,0,0,1 and surroundings = white = 1,1,1,1). My intention was to create an antialiased brush with smooth edges but i'm fine with a normal one right now

3) I searched for masking techniques on the internet and found this tutorial ZeusCMD - Design and Development Tutorials : OpenGL ES Programming Tutorials - Masking about masking. The tutorial tells me to use blending to achieve masking... first draw colored, then mask with glBlendFunc(GL_DST_COLOR, GL_ZERO) and then grayscale with glBlendFunc(GL_ONE, GL_ONE) ... and this gives me something close to what i want... but not exactly what i want. The result is masked but it's somehow overbright-ed

4) For drawing to the mask texture i used an extra frame buffer object (FBO)

I'm not really happy with the resulting image (overbright-ed picture) nor with the speed achieved with this method. I think the normal way was to draw directly to the grayscale (overlay) texture2D affecting only it's alpha channel in the places where the brush hits. Is there a fast way to achieve this? I have searched a lot and never got an answer that's clear and understandable. Then, in the main draw loop I could only draw the colored texture and then blend the grayscale ontop with glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).

I just want to learn to use OPENGL ES and it's driving me nuts because i can't get it to work properly. An advice, a link to a tutorial would be much appreciated.

1

1 Answers

0
votes

For something that will actually work on the iPhone, try texture combiners.

I used them to mask an RGBA texture against another, transformed alpha texture.
This was for generating a complicated shadow in the absence of a stencil buffer,
but your situation doesn't seem so different.

Note that this link explains combiners in terms of fragment shaders, which works well.
Unfortunately the combiners are more complicated than their shader counterparts.