| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /****************************************************************************** 00002 * VRS - The Virtual Rendering System 00003 * Copyright (C) 2002 Computer Graphics Systems Group at the 00004 * Hasso-Plattner-Institute (HPI), Potsdam, Germany. 00005 * 00006 * This library is free software; you can redistribute it and/or modify it 00007 * under the terms of the GNU Lesser General Public License as published by 00008 * the Free Software Foundation; either version 2.1 of the License, or (at 00009 * your option) any later version. This library is distributed in the hope 00010 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied 00011 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU Lesser General Public License for more details. You should have received 00013 * a copy of the GNU Lesser+ General Public License along with this library; if 00014 * not, write to the FreeSoftware Foundation, Inc., 59 Temple Place, Suite 330, 00015 * Boston, MA, 02111-1307, USA. 00016 ******************************************************************************/ 00017 00018 // $Id: additivemultitexturingeffectgl.h 6014 2007-08-09 07:51:16Z Konstantin_Baumann $ 00019 // $Date: 2007-08-09 09:51:16 +0200 (Thu, 09 Aug 2007) $ 00020 // $Revision: 6014 $ 00021 // $State$ 00022 // $Author: Konstantin_Baumann $ 00023 // 00024 // $Log$ 00025 // Revision 1.7 2005/01/03 01:43:09 klimetschek 00026 // - modified win32 project layout, splitted vrs.vcproj into vrs_container, vrs_core, vrs_sg, vrs_image, vrs_opengl and vrs_io 00027 // - removed vrs.vcproj 00028 // minor things: 00029 // - added all glutexamples to vrs4glut.sln 00030 // - fixed some problems in glutexamples 00031 // - removed all project references from all VS projects (using solution wide project dependencies instead) 00032 // 00033 // Revision 1.6 2004/11/03 14:45:06 saar 00034 // Class comment changed (Doxygen style) 00035 // 00036 // Revision 1.5 2004/03/12 16:28:40 baumann 00037 // macros VRS_NAMESPACE_BEGIN/_END expanded and removed 00038 // 00039 // Revision 1.4 2004/01/19 11:43:58 baumann 00040 // serialization mechanism improved 00041 // 00042 // Revision 1.3 2002/12/17 11:57:17 baumann 00043 // automatic chaining of serveral effects implemented (explicit chaining is not supported any more) 00044 // 00045 // Revision 1.2 2002/11/25 11:01:35 kirsch 00046 // removed "pragma once" (not portable) 00047 // 00048 // Revision 1.1 2002/11/23 09:48:49 baumann 00049 // new attributes added: 00050 // - TexturingEffectGL (abstract base class) 00051 // - AdditiveMultiTexturingEffectGL 00052 // - InterpolatedMultiTexturingEffectGL 00053 // - ModulateMultiTexturingEffectGL 00054 // 00055 00056 #ifndef VRS_OPENGL_ADDITIVEMULTITEXTURINGEFFECTGL_H 00057 #define VRS_OPENGL_ADDITIVEMULTITEXTURINGEFFECTGL_H 00058 00059 #include <vrs/opengl/texturingeffectgl.h> 00060 #include <vrs/container/iterator.h> 00061 00062 namespace VRS { 00063 00064 class TexGenGL; 00065 class TextureGL; 00066 00082 class VRS_CORE_API AdditiveMultiTexturingEffectGL : public TexturingEffectGL { 00083 00084 public: 00085 AdditiveMultiTexturingEffectGL(Iterator<SO<TextureGL> >* textures = NULL, 00086 Iterator<double>* weights = NULL, 00087 Iterator<SO<TexGenGL> >* texGens = NULL, 00088 double previousEffectWeight = 0.0, 00089 bool shaded = false); 00090 /*<! This constructor sets the textures to be added (iterator 00091 pointer can be NULL, elements of the iterator should not 00092 be NULL), the corresponding weights (should be in the 00093 range [0.0, 1.0]; iterator pointer can be NULL; missing 00094 weights will be equally distributed to the remaining 00095 textures), the corresponding texture coordinate generators 00096 (iterator pointer can be NULL, individual elements of the 00097 iterator can be NULL, too), the weight for the previous 00098 effect (if it exists) (the weight should be in the range 00099 [0.0, 1.0]), and the shaded flag. */ 00100 00101 Iterator<SO<TextureGL> >* getTextures() const; 00102 /*<! This method returns the textures which should be modulated 00103 (can return NULL). The elements of the iterator should not 00104 be NULL. */ 00105 00106 void setTextures(Iterator<SO<TextureGL> >* textures); 00107 /*<! This method sets the textures which should be added; 00108 NULL can be specified which disables this effect. 00109 The individual elements of the iterator should not be 00110 NULL. */ 00111 00112 Iterator<double>* getWeights() const; 00113 /*<! This method returns the weights which should be used for 00114 the corresponding textures (can return NULL). */ 00115 00116 void setWeights(Iterator<double>* weights); 00117 /*<! This method sets the weights which should be used for 00118 the corresponding textures; NULL can be specified. The 00119 elements of the iterator should be in the range [0.0, 1.0]. */ 00120 00121 Iterator<SO<TexGenGL> >* getTexGens() const; 00122 /*<! This method returns the texture coordinate generators which 00123 should be used for the corresponding textures (can return 00124 NULL). */ 00125 00126 void setTexGens(Iterator<SO<TexGenGL> >* texGens); 00127 /*<! This method sets the texture coordinate generators which 00128 should be used for the corresponding textures; NULL can 00129 be specified; individual elements of the iterator can 00130 be NULL, too. */ 00131 00132 double getPreviousEffectWeight() const; 00133 /*<! This method returns the weight which should be used 00134 for the previous effect in the effect chain (if present). */ 00135 00136 void setPreviousEffectWeight(double previousEffectWeight); 00137 /*<! This method sets the weight for the previous effect in 00138 the effect chain. */ 00139 00140 using TexturingEffectGL::setShaded; 00141 /*<! Allow the setting of the shaded flag 00142 (this method is protected in the base class). */ 00143 00144 virtual bool ignorePreviousEffects() const; 00145 /*<! This methods returns whether this effect can 00146 be merged with previous effects (if specified). */ 00147 00148 VRS_TYPEINFO(AdditiveMultiTexturingEffectGL, TexturingEffectGL); 00149 VRS_SERIALIZABLE(AdditiveMultiTexturingEffectGL); 00150 00151 private: 00152 SO<Iterator<SO<TextureGL> > > textures_; 00153 SO<Iterator<double> > weights_; 00154 SO<Iterator<SO<TexGenGL> > > texGens_; 00155 double previousWeight_; 00156 }; 00157 00158 } // namespace VRS 00159 00160 #endif // VRS_OPENGL_ADDITIVEMULTITEXTURINGEFFECTGL_H