diff options
author | lecoanet | 2002-02-15 08:25:44 +0000 |
---|---|---|
committer | lecoanet | 2002-02-15 08:25:44 +0000 |
commit | e14f136e0250caf818c2f6b9b9ac393db7c556d8 (patch) | |
tree | 65fafcebb80218b6e4fa81787948db72d7459f19 /generic/Draw.h | |
parent | e579556a8de609ce3c1d4185601ce1a43e2aa9bd (diff) | |
download | tkzinc-e14f136e0250caf818c2f6b9b9ac393db7c556d8.zip tkzinc-e14f136e0250caf818c2f6b9b9ac393db7c556d8.tar.gz tkzinc-e14f136e0250caf818c2f6b9b9ac393db7c556d8.tar.bz2 tkzinc-e14f136e0250caf818c2f6b9b9ac393db7c556d8.tar.xz |
R�amenagement du code de clipping local utilisant le stencil
Diffstat (limited to 'generic/Draw.h')
-rw-r--r-- | generic/Draw.h | 35 |
1 files changed, 35 insertions, 0 deletions
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, |