/* * (c) Copyright 1993, Silicon Graphics, Inc. * 1993-1995 Microsoft Corporation * * ALL RIGHTS RESERVED * * Please refer to OpenGL/readme.txt for additional information * */ /* * alpha.c * This program draws several overlapping filled polygons * to demonstrate the effect order has on alpha blending results. */ #include "glos.h" #include #include #include void myinit(void); void CALLBACK myReshape(GLsizei w, GLsizei h); void CALLBACK display(void); /* Initialize alpha blending function. */ void myinit(void) { glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glShadeModel (GL_FLAT); glClearColor (0.0, 0.0, 0.0, 0.0); } void CALLBACK display(void) { glClear(GL_COLOR_BUFFER_BIT); glColor4f (1.0, 1.0, 0.0, 0.75); glRectf (0.0, 0.0, 0.5, 1.0); glColor4f (0.0, 1.0, 1.0, 0.75); glRectf (0.0, 0.0, 1.0, 0.5); /* draw colored polygons in reverse order in upper right */ glColor4f (0.0, 1.0, 1.0, 0.75); glRectf (0.5, 0.5, 1.0, 1.0); glColor4f (1.0, 1.0, 0.0, 0.75); glRectf (0.5, 0.5, 1.0, 1.0); glFlush(); } void CALLBACK myReshape(GLsizei w, GLsizei h) { h = (h == 0) ? 1 : h; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) gluOrtho2D (0.0, 1.0, 0.0, 1.0*(GLfloat)h/(GLfloat)w); else gluOrtho2D (0.0, 1.0*(GLfloat)w/(GLfloat)h, 0.0, 1.0); glMatrixMode(GL_MODELVIEW); } /* Main Loop * Open window with initial window size, title bar, * RGBA display mode, and handle input events. */ int main(int argc, char** argv) { auxInitDisplayMode (AUX_SINGLE | AUX_RGB); auxInitPosition (0, 0, 500, 500); auxInitWindow ("Alpha Blending"); myinit(); auxReshapeFunc (myReshape); auxMainLoop(display); return(0); }