// StencilExt operates like stencil but with access to change the stencil action, // value, and keepvalues. // // action: How to modify any stencil values of pixels that are touched by what's // drawn in the stencil function. // // value: The new stencil value to use for pixels if the "replace" stencil action // is used. Has no effect with other stencil actions. Must be between 0 and 255. // // keepvalues: True to preserve old stencil values of pixels, false to re-set // every pixel's stencil value to 0 before executing the stencil function. Clear // will also re-set all stencil values. func StencilExt(stencil_func func(), action StencilAction, value int32, keepvalues bool) { gl_state.writingToStencil = true if !keepvalues { gl.Clear(gl.STENCIL_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) } if gl_state.currentCanvas != nil { gl_state.currentCanvas.checkCreateStencil() } gl.Enable(gl.STENCIL_TEST) gl.ColorMask(false, false, false, false) gl.StencilFunc(gl.ALWAYS, int(value), 0xFF) gl.StencilOp(gl.KEEP, gl.KEEP, gl.Enum(action)) stencil_func() gl_state.writingToStencil = false SetColorMask(states.back().colorMask) SetStencilTest(states.back().stencilCompare, states.back().stencilTestValue) }
// SetColorMask will set a mask for each r, g, b, and alpha component. func SetColorMask(mask ColorMask) { gl.ColorMask(mask.r, mask.g, mask.b, mask.a) states.back().colorMask = mask }