#include #include #include #include #include #include "glaux.h" GLboolean single = GL_FALSE; GLboolean no_op = GL_FALSE; int width = 512; int height = 512; void TriangleAt(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, BOOL colors) { glPushMatrix(); glTranslatef(x, y, z); glBegin (GL_TRIANGLES); if (colors) { glColor3f(1.0f, 0.0f, 0.0f); } glVertex2f (0.0f, 0.0f); if (colors) { glColor3f(0.0f, 1.0f, 0.0f); } glVertex2f (w, h); if (colors) { glColor3f(0.0f, 0.0f, 1.0f); } glVertex2f (0.0f, h); glEnd (); glPopMatrix(); } void SquareAt(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, BOOL colors) { glPushMatrix(); glTranslatef(x, y, z); glBegin (GL_POLYGON); if (colors) { glColor3f(1.0f, 0.0f, 0.0f); } glVertex2f (0.0f, 0.0f); if (colors) { glColor3f(0.0f, 1.0f, 0.0f); } glVertex2f (w, 0.0f); if (colors) { glColor3f(0.0f, 0.0f, 1.0f); } glVertex2f (w, h); if (colors) { glColor3f(1.0f, 0.0f, 1.0f); } glVertex2f (0.0f, h); glEnd (); glPopMatrix(); } void Test(void) { int x, y; for (y = 0; y < 4; y++) { for (x = 0; x < 4; x++) { glDisable(GL_COLOR_LOGIC_OP); glColor3ub(255, 0, 0); TriangleAt(-1.0f+x*0.5f, -1.0f+y*0.5f, 0.0f, 0.5f, 0.5f, FALSE); if (!no_op) { glEnable(GL_COLOR_LOGIC_OP); glLogicOp(GL_CLEAR+x+y*4); glColor3ub(255, 255, 0); SquareAt(-1.0f+x*0.5f, -1.0f+y*0.5f, 0.0f, 0.5f, 0.5f, FALSE); } } } } void Display(void) { glClear(GL_COLOR_BUFFER_BIT); Test(); if (single) { glFlush(); } else { auxSwapBuffers(); } } void Reshape(GLsizei w, GLsizei h) { glViewport(0, 0, w, h); width = w; height = h; } int __cdecl main(int argc, char** argv) { GLenum mode; while (--argc > 0) { argv++; if (!strcmp(*argv, "-sb")) { single = GL_TRUE; } else if (!strcmp(*argv, "-noop")) { no_op = GL_TRUE; } } mode = AUX_RGB | (single ? AUX_SINGLE : AUX_DOUBLE); auxInitDisplayMode(mode); auxInitPosition(10, 10, width, height); auxInitWindow("RGB Logic Op Test"); auxReshapeFunc(Reshape); auxMainLoop(Display); return 0; }