summaryrefslogtreecommitdiffstats
path: root/progs/samples/blendeq.c
diff options
context:
space:
mode:
Diffstat (limited to 'progs/samples/blendeq.c')
-rw-r--r--progs/samples/blendeq.c41
1 files changed, 31 insertions, 10 deletions
diff --git a/progs/samples/blendeq.c b/progs/samples/blendeq.c
index 315257b9e45..f78afd30381 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) {