From ecf09819d157e3b2bb05b18ce314246ee8fb9668 Mon Sep 17 00:00:00 2001 From: Corbin Simpson Date: Thu, 6 Nov 2008 02:02:11 -0800 Subject: [PATCH] Shamelessly borrow Mesa's progs/tests/fog test. --- src/Makefile.am | 2 + src/Makefile.in | 5 ++- src/gl_fog.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/gl_fog.h | 27 ++++++++++++++ src/revenge_test.c | 2 + 5 files changed, 135 insertions(+), 1 deletions(-) create mode 100644 src/gl_fog.c create mode 100644 src/gl_fog.h diff --git a/src/Makefile.am b/src/Makefile.am index 75757cd..1954960 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -23,6 +23,8 @@ revenge_SOURCES = \ gl_depth_range.h \ gl_ext_texture_filter_anisotropic.c \ gl_ext_texture_filter_anisotropic.h \ + gl_fog.c \ + gl_fog.h \ gl_front_face.c \ gl_front_face.h \ gl_line_smooth.c \ diff --git a/src/Makefile.in b/src/Makefile.in index a1d5c2b..ca4b4d6 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -48,7 +48,7 @@ am_revenge_OBJECTS = gl_alpha_test.$(OBJEXT) gl_blend.$(OBJEXT) \ gl_color_logic_op.$(OBJEXT) gl_cull_face.$(OBJEXT) \ gl_depth_func.$(OBJEXT) gl_depth_mask.$(OBJEXT) \ gl_depth_range.$(OBJEXT) \ - gl_ext_texture_filter_anisotropic.$(OBJEXT) \ + gl_ext_texture_filter_anisotropic.$(OBJEXT) gl_fog.$(OBJEXT) \ gl_front_face.$(OBJEXT) gl_line_smooth.$(OBJEXT) \ gl_line_smooth_hint.$(OBJEXT) gl_line_width.$(OBJEXT) \ gl_null.$(OBJEXT) gl_occlusion_query.$(OBJEXT) \ @@ -183,6 +183,8 @@ revenge_SOURCES = \ gl_depth_range.h \ gl_ext_texture_filter_anisotropic.c \ gl_ext_texture_filter_anisotropic.h \ + gl_fog.c \ + gl_fog.h \ gl_front_face.c \ gl_front_face.h \ gl_line_smooth.c \ @@ -314,6 +316,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_depth_mask.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_depth_range.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_ext_texture_filter_anisotropic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_fog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_front_face.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_line_smooth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_line_smooth_hint.Po@am__quote@ diff --git a/src/gl_fog.c b/src/gl_fog.c new file mode 100644 index 0000000..bf2fa57 --- /dev/null +++ b/src/gl_fog.c @@ -0,0 +1,100 @@ +/* + * $Id$ + * Copyright (C) 2007 Oliver McFadden + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include + +#include + +/* Shamelessly based on Eric Anholt's fog test program in Mesa. */ + +void +gl_fog (void) +{ + test_prologue (NULL); + + GLint i, depthi; + GLfloat fogcolor[4] = {1, 1, 1, 1}; + + static GLfloat Near = 0.0, Far = 1.0; + + glEnable(GL_FOG); + glFogfv(GL_FOG_COLOR, fogcolor); + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + glPushMatrix(); + for (i = 0; i < 6; i++) { + + glPushMatrix(); + for (depthi = 0; depthi < 5; depthi++) { + GLfloat depth = Near + (Far - Near) * depthi / 4; + + switch (i % 3) { + case 0: + glFogi(GL_FOG_MODE, GL_LINEAR); + glFogf(GL_FOG_START, Near); + glFogf(GL_FOG_END, Far); + break; + case 1: + glFogi(GL_FOG_MODE, GL_EXP); + glFogf(GL_FOG_DENSITY, 2); + break; + case 2: + glFogi(GL_FOG_MODE, GL_EXP2); + glFogf(GL_FOG_DENSITY, 2); + break; + } + + glColor4f(0, 0, 0, 0); + if (i < 3) { + glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FRAGMENT_DEPTH_EXT); + + glBegin(GL_POLYGON); + glVertex3f(0, 0, depth); + glVertex3f(1, 0, depth); + glVertex3f(1, 1, depth); + glVertex3f(0, 1, depth); + glEnd(); + } else { + glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT); + glFogCoordfEXT(depth); + + glBegin(GL_POLYGON); + glVertex3f(0, 0, (Near + Far) / 2); + glVertex3f(1, 0, (Near + Far) / 2); + glVertex3f(1, 1, (Near + Far) / 2); + glVertex3f(0, 1, (Near + Far) / 2); + glEnd(); + } + glTranslatef(1.5, 0, 0); + } + + glPopMatrix(); + glTranslatef(0, 1.5, 0); + } + glPopMatrix(); + + glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FRAGMENT_DEPTH_EXT); + glDisable(GL_FOG); + + test_epilogue (false); +} diff --git a/src/gl_fog.h b/src/gl_fog.h new file mode 100644 index 0000000..1936df7 --- /dev/null +++ b/src/gl_fog.h @@ -0,0 +1,27 @@ +/* + * $Id$ + * Copyright (C) 2007 Oliver McFadden + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GL_FOG_H__ +#define __GL_FOG_H__ + +#include +#include + +void gl_fog (void); + +#endif diff --git a/src/revenge_test.c b/src/revenge_test.c index 1626d87..aa3ec68 100644 --- a/src/revenge_test.c +++ b/src/revenge_test.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -203,6 +204,7 @@ static struct test_t tests[] = { {_(gl_depth_mask)}, {_(gl_depth_range)}, {_(gl_ext_texture_filter_anisotropic)}, + {_(gl_fog)}, {_(gl_front_face)}, {_(gl_line_smooth)}, {_(gl_line_smooth_hint)}, -- 1.5.6.5