diff options
Diffstat (limited to 'progs/samples/blendxor.c')
-rw-r--r-- | progs/samples/blendxor.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/progs/samples/blendxor.c b/progs/samples/blendxor.c index 7d3285d049f..6f34e28461c 100644 --- a/progs/samples/blendxor.c +++ b/progs/samples/blendxor.c @@ -19,6 +19,8 @@ GLenum doubleBuffer; int dithering = 0; +int use11ops = 0; +int supportlogops = 0; GLint windW, windH; static void Init(void) @@ -50,6 +52,13 @@ static void Key(unsigned char key, int x, int y) case 'd': dithering = !dithering; break; + case 'l': + if (supportlogops == 3) + use11ops = (!use11ops); + if (use11ops) + printf("Using GL 1.1 color logic ops.\n"); + else printf("Using GL_EXT_blend_logic_op.\n"); + break; default: return; } @@ -62,6 +71,8 @@ static void Draw(void) int i; glDisable(GL_BLEND); + if (supportlogops & 2) + glDisable(GL_COLOR_LOGIC_OP); (dithering) ? glEnable(GL_DITHER) : glDisable(GL_DITHER); @@ -83,7 +94,10 @@ static void Draw(void) glEnd(); glEnable(GL_BLEND); - glBlendEquationEXT(GL_LOGIC_OP); + if (!use11ops) + glBlendEquationEXT(GL_LOGIC_OP); + else + glEnable(GL_COLOR_LOGIC_OP); glLogicOp(GL_XOR); /* Draw a set of rectangles across the window */ @@ -142,6 +156,7 @@ int main(int argc, char **argv) GLenum type; char *s; char *extName = "GL_EXT_blend_logic_op"; + char *version; glutInit(&argc, argv); @@ -161,10 +176,21 @@ int main(int argc, char **argv) /* Make sure blend_logic_op extension is there. */ s = (char *) glGetString(GL_EXTENSIONS); + version = (char*) glGetString(GL_VERSION); if (!s) exit(1); - if (strstr(s,extName) == 0) { - printf("Blend_logic_op extension is not present.\n"); + if (strstr(s,extName)) { + supportlogops = 1; + use11ops = 0; + printf("blend_logic_op extension available.\n"); + } + if (strncmp(version,"1.1",3)>=0) { + supportlogops += 2; + use11ops = 1; + printf("1.1 color logic ops available.\n"); + } + if (supportlogops == 0) { + printf("Blend_logic_op extension and GL 1.1 not present.\n"); exit(1); } |