From e14f136e0250caf818c2f6b9b9ac393db7c556d8 Mon Sep 17 00:00:00 2001 From: lecoanet Date: Fri, 15 Feb 2002 08:25:44 +0000 Subject: R�amenagement du code de clipping local utilisant le stencil --- generic/Draw.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'generic/Draw.h') diff --git a/generic/Draw.h b/generic/Draw.h index d153520..4524c05 100644 --- a/generic/Draw.h +++ b/generic/Draw.h @@ -47,6 +47,41 @@ struct _WidgetInfo; struct _ImageBits; +#ifdef GLX +#define GLX_START_CLIP(num_clips, render) { \ + if (!num_clips) { \ + glEnable(GL_STENCIL_TEST); \ + } \ + glStencilFunc(GL_EQUAL, num_clips, 0xFF); \ + glStencilOp(GL_KEEP, GL_INCR, GL_INCR); \ + if (!render) { \ + glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); \ + } \ +} +#define GLX_RENDER_CLIPPED() { \ + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); \ + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); \ + } +#define GLX_RESTORE_STENCIL(num_clips, render) { \ + glStencilFunc(GL_EQUAL, num_clips+1, 0xFF); \ + glStencilOp(GL_KEEP, GL_DECR, GL_DECR); \ + if (render) { \ + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); \ + } \ + else { \ + glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); \ + } \ +} +#define GLX_END_CLIP(num_clips) { \ + glStencilFunc(GL_EQUAL, num_clips, 0xFF); \ + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); \ + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); \ + if (!num_clips) { \ + glDisable(GL_STENCIL_TEST); \ + } \ +} +#endif + void SetLineStyle(struct _WidgetInfo *wi, LineStyle line_style); void GetLineShape(ZnPoint *p1, ZnPoint *p2, unsigned int line_width, -- cgit v1.1