GLenum doubleBuffer;
static int dithering = 0;
+int use11ops = 0;
+int supportlogops = 0;
static int doPrint = 1;
static int deltaY;
GLint windW, windH;
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;
}
(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);
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();
}
char *extName1 = "GL_EXT_blend_logic_op";
char *extName2 = "GL_EXT_blend_minmax";
char *extName3 = "GL_EXT_blend_subtract";
+ char *version;
glutInit(&argc, 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) {
GLenum doubleBuffer;
int dithering = 0;
+int use11ops = 0;
+int supportlogops = 0;
GLint windW, windH;
static void Init(void)
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;
}
int i;
glDisable(GL_BLEND);
+ if (supportlogops & 2)
+ glDisable(GL_COLOR_LOGIC_OP);
(dithering) ? glEnable(GL_DITHER) : glDisable(GL_DITHER);
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 */
GLenum type;
char *s;
char *extName = "GL_EXT_blend_logic_op";
+ char *version;
glutInit(&argc, 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);
}