1 //------------------------------------------------------------------------------
2 // File : SkyTextureState.hpp
3 //------------------------------------------------------------------------------
4 // SkyWorks : Copyright 2002 Mark J. Harris and
5 // The University of North Carolina at Chapel Hill
6 //------------------------------------------------------------------------------
7 // Permission to use, copy, modify, distribute and sell this software and its
8 // documentation for any purpose is hereby granted without fee, provided that
9 // the above copyright notice appear in all copies and that both that copyright
10 // notice and this permission notice appear in supporting documentation.
11 // Binaries may be compiled with this software without any royalties or
14 // The author(s) and The University of North Carolina at Chapel Hill make no
15 // representations about the suitability of this software for any purpose.
16 // It is provided "as is" without express or
19 * @file SkyTextureState.hpp
21 * Interface Definition for class SkyTextureState, which encapsulates OpenGL texture state.
23 #ifndef __SKYTEXTURESTATE_HPP__
24 #define __SKYTEXTURESTATE_HPP__
26 #include "SkyUtil.hpp"
27 #include "SkyTexture.hpp"
28 #include "SkyContext.hpp"
31 //------------------------------------------------------------------------------
33 * @class SkyTextureState
34 * @brief A wrapper for texture unit state.
36 * @todo <WRITE EXTENDED CLASS DESCRIPTION>
47 SKYRESULT SetTexture(unsigned int iTextureUnit, GLenum eTarget, SkyTexture& texture);
48 SKYRESULT SetTexture(unsigned int iTextureUnit, GLenum eTarget, unsigned int iTextureID);
49 SKYRESULT EnableTexture(unsigned int iTextureUnit, bool bEnable);
50 SKYRESULT SetTextureParameter(unsigned int iTextureUnit,
54 inline GLenum GetActiveTarget(unsigned int iTextureUnit) const;
55 inline unsigned int GetTextureID(unsigned int iTextureUnit) const;
56 inline bool IsTextureEnabled(unsigned int iTextureUnit) const;
57 inline GLenum GetTextureParameter(unsigned int iTextureUnit, GLenum eParameter) const;
59 protected: // datatypes
62 TexState() : eActiveTarget(GL_TEXTURE_2D), iBoundTexture(0), bEnabled(false)
64 // set state to GL defaults.
66 for (i = 0; i < SKY_TEXCOORD_COUNT; ++i) { eWrapMode[i] = GL_REPEAT; }
67 eFilterMode[SKY_FILTER_MIN] = GL_NEAREST_MIPMAP_LINEAR;
68 eFilterMode[SKY_FILTER_MAG] = GL_LINEAR;
87 unsigned int iBoundTexture;
89 GLenum eWrapMode[SKY_TEXCOORD_COUNT];
90 GLenum eFilterMode[SKY_FILTER_COUNT];
95 TexState *_pTextureUnitState; // one per texture unit
97 static unsigned int s_iNumTextureUnits;
101 //------------------------------------------------------------------------------
102 // Function : SkyTextureState::GetActiveTarget
104 //------------------------------------------------------------------------------
106 * @fn SkyTextureState::GetActiveTarget(unsigned int iTextureUnit) const
107 * @brief Returns the active texture target for the specified texture unit.
109 * If an invalid texture unit is specifed, returns GL_NONE.
111 inline GLenum SkyTextureState::GetActiveTarget(unsigned int iTextureUnit) const
113 if (iTextureUnit >= s_iNumTextureUnits)
115 SkyTrace("SkyTextureState::GetActiveTexture(): Invalid texture unit.");
118 return _pTextureUnitState[iTextureUnit].eActiveTarget;
122 //------------------------------------------------------------------------------
123 // Function : int SkyTextureState::GetTextureID
125 //------------------------------------------------------------------------------
127 * @fn int SkyTextureState::GetTextureID(unsigned int iTextureUnit) const
128 * @brief Returns the texture ID associated with the specified texture unit.
130 * If an invalid texture unit is specifed, returns GL_NONE.
132 inline unsigned int SkyTextureState::GetTextureID(unsigned int iTextureUnit) const
134 if (iTextureUnit >= s_iNumTextureUnits)
136 SkyTrace("SkyTextureState::GetTextureID(): Invalid texture unit.");
139 return _pTextureUnitState[iTextureUnit].iBoundTexture;
143 //------------------------------------------------------------------------------
144 // Function : SkyTextureState::IsTextureEnabled
146 //------------------------------------------------------------------------------
148 * @fn SkyTextureState::IsTextureEnabled(unsigned int iTextureUnit) const
149 * @brief Returns the status (enabled or disabled) of the specified texture unit.
151 * If an invalid texture unit is specifed, returns false.
153 inline bool SkyTextureState::IsTextureEnabled(unsigned int iTextureUnit) const
155 if (iTextureUnit >= s_iNumTextureUnits)
157 SkyTrace("SkyTextureState::IsTextureEnabled(): Invalid texture unit.");
160 return _pTextureUnitState[iTextureUnit].bEnabled;
164 //------------------------------------------------------------------------------
165 // Function : SkyTextureState::GetTextureParameter
167 //------------------------------------------------------------------------------
169 * @fn SkyTextureState::GetTextureParameter(unsigned int iTextureUnit, GLenum eParamter) const
170 * @brief Returns the current value of @eParameter on the specified texture unit.
172 * If an invalid texture unit or parameter is specified, returns GL_NONE.
174 inline GLenum SkyTextureState::GetTextureParameter(unsigned int iTextureUnit, GLenum eParameter) const
176 if (iTextureUnit >= s_iNumTextureUnits)
178 SkyTrace("SkyTextureState::GetTextureParamter(): Invalid texture unit.");
184 case GL_TEXTURE_WRAP_S:
185 return _pTextureUnitState[iTextureUnit].eWrapMode[TexState::SKY_TEXCOORD_S];
187 case GL_TEXTURE_WRAP_T:
188 return _pTextureUnitState[iTextureUnit].eWrapMode[TexState::SKY_TEXCOORD_T];
190 case GL_TEXTURE_WRAP_R:
191 return _pTextureUnitState[iTextureUnit].eWrapMode[TexState::SKY_TEXCOORD_R];
193 case GL_TEXTURE_MIN_FILTER:
194 return _pTextureUnitState[iTextureUnit].eFilterMode[TexState::SKY_FILTER_MIN];
196 case GL_TEXTURE_MAG_FILTER:
197 return _pTextureUnitState[iTextureUnit].eFilterMode[TexState::SKY_FILTER_MAG];
200 SkyTrace("SkyTExtureState::SetTextureParameter(): Invalid parameter.");
206 #endif //__SKYTEXTURESTATE_HPP__