From 9e29536f285a9ce3f23305417c50e96a6514ed54 Mon Sep 17 00:00:00 2001 From: Roland Scheidegger Date: Fri, 21 May 2004 17:03:38 +0000 Subject: use OGL 1.1 color logic ops in addition to GL_EXT_blend_logic_op --- progs/samples/blendeq.c | 41 +++++++++++++++++++++++++++++++---------- progs/samples/blendxor.c | 32 +++++++++++++++++++++++++++++--- 2 files changed, 60 insertions(+), 13 deletions(-) (limited to 'progs/samples') diff --git a/progs/samples/blendeq.c b/progs/samples/blendeq.c index 315257b9e4..f78afd3038 100644 --- a/progs/samples/blendeq.c +++ b/progs/samples/blendeq.c @@ -19,6 +19,8 @@ GLenum doubleBuffer; static int dithering = 0; +int use11ops = 0; +int supportlogops = 0; static int doPrint = 1; static int deltaY; GLint windW, windH; @@ -62,6 +64,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; } @@ -100,6 +109,8 @@ static void Draw(void) (dithering) ? glEnable(GL_DITHER) : glDisable(GL_DITHER); glDisable(GL_BLEND); + if (supportlogops & 2) + glDisable(GL_COLOR_LOGIC_OP); glClearColor(0.5, 0.6, 0.1, 1.0); glClear(GL_COLOR_BUFFER_BIT); @@ -175,48 +186,46 @@ static void Draw(void) glBlendFunc(GL_ONE, GL_ZERO); i -= deltaY; - glBlendEquationEXT(GL_LOGIC_OP); + if (!use11ops) + glBlendEquationEXT(GL_LOGIC_OP); + else + glEnable(GL_COLOR_LOGIC_OP); glLogicOp(GL_CLEAR); glRectf(x1, i, x2, i+deltaY); i -= deltaY; - glBlendEquationEXT(GL_LOGIC_OP); glLogicOp(GL_SET); glRectf(x1, i, x2, i+deltaY); i -= deltaY; - glBlendEquationEXT(GL_LOGIC_OP); glLogicOp(GL_COPY); glRectf(x1, i, x2, i+deltaY); i -= deltaY; - glBlendEquationEXT(GL_LOGIC_OP); glLogicOp(GL_NOOP); glRectf(x1, i, x2, i+deltaY); i -= deltaY; - glBlendEquationEXT(GL_LOGIC_OP); glLogicOp(GL_AND); glRectf(x1, i, x2, i+deltaY); i -= deltaY; - glBlendEquationEXT(GL_LOGIC_OP); glLogicOp(GL_INVERT); glRectf(x1, i, x2, i+deltaY); i -= deltaY; - glBlendEquationEXT(GL_LOGIC_OP); glLogicOp(GL_OR); glRectf(x1, i, x2, i+deltaY); i -= deltaY; - glBlendEquationEXT(GL_LOGIC_OP); glLogicOp(GL_XOR); glRectf(x1, i, x2, i+deltaY); glRectf(x1, i+10, x2, i+5); if (doPrint) { glDisable(GL_BLEND); + if (supportlogops & 2) + glDisable(GL_COLOR_LOGIC_OP); glColor3f(1.0, 1.0, 1.0); PrintColorStrings(); } @@ -254,6 +263,7 @@ int main(int argc, char **argv) char *extName1 = "GL_EXT_blend_logic_op"; char *extName2 = "GL_EXT_blend_minmax"; char *extName3 = "GL_EXT_blend_subtract"; + char *version; glutInit(&argc, argv); @@ -273,10 +283,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,extName1) == 0) { - printf("Blend_logic_op extension is not present.\n"); + if (strstr(s,extName1)) { + 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); } if (strstr(s,extName2) == 0) { diff --git a/progs/samples/blendxor.c b/progs/samples/blendxor.c index 7d3285d049..6f34e28461 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); } -- cgit v1.2.3