summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Scheidegger <rscheidegger@gmx.ch>2004-05-21 17:03:38 +0000
committerRoland Scheidegger <rscheidegger@gmx.ch>2004-05-21 17:03:38 +0000
commit9e29536f285a9ce3f23305417c50e96a6514ed54 (patch)
tree05831d73793e708ee68f565ad18a81ebc0533344
parentcbde37a31c3e5a91686c1d1c89f2939329a9c4a7 (diff)
use OGL 1.1 color logic ops in addition to GL_EXT_blend_logic_op
-rw-r--r--progs/samples/blendeq.c41
-rw-r--r--progs/samples/blendxor.c32
2 files changed, 60 insertions, 13 deletions
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);
}