diff options
| -rw-r--r-- | progs/samples/blendeq.c | 41 | ||||
| -rw-r--r-- | progs/samples/blendxor.c | 32 | 
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);      }  | 
