147 lines
2.6 KiB
C
147 lines
2.6 KiB
C
|
#include <stdlib.h>
|
||
|
#include <stdio.h>
|
||
|
#include <windows.h>
|
||
|
#include <GL/gl.h>
|
||
|
#include <GL/glu.h>
|
||
|
#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;
|
||
|
}
|