windows-nt/Source/XPSP1/NT/multimedia/opengl/test/auxprogs/rgb/rgbrop.c
2020-09-26 16:20:57 +08:00

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;
}