2
* Copyright 2010 Inalogic Inc.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU Lesser General Public License version 3, as
6
* published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranties of
10
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
11
* PURPOSE. See the applicable version of the GNU Lesser General Public
12
* License for more details.
14
* You should have received a copy of both the GNU Lesser General Public
15
* License version 3 along with this program. If not, see
16
* <http://www.gnu.org/licenses/>
18
* Authored by: Jay Taoko <jay.taoko_AT_gmail_DOT_com>
23
#ifndef GLTEXTURESTATES_H
24
#define GLTEXTURESTATES_H
26
#include "NuxCore/NuxCore.h"
33
GFXTS_ADDRESSU, // GL_REPEAT
34
GFXTS_ADDRESSV, // GL_REPEAT
35
GFXTS_ADDRESSW, // GL_REPEAT
37
GFXTS_MINFILTER, // GL_NEAREST
38
GFXTS_MAGFILTER, // GL_NEAREST
39
GFXTS_MIPFILTER, // GL_NEAREST
41
GFXTS_MIP_BASE_LEVEL, // 0
42
GFXTS_MIP_MAX_LEVEL, // 1000
43
GFXTS_MIN_LOD, // -1000
44
GFXTS_MAX_LOD, // +1000
46
GFXTS_BORDERCOLOR, // 0x00000000
49
GFXTS_MAX_TEXTURESTATES,
52
struct TextureStateMap
69
GLTextureStates (GLuint Type = GL_TEXTURE_2D);
73
void ResetStateChangeToDefault();
74
void SetRenderStates();
76
void SetType (GLuint Type);
79
unsigned int MIN = GL_NEAREST,
80
unsigned int MAG = GL_NEAREST/*,
81
unsigned int MIP = GL_NEAREST*/);
84
unsigned int U = GL_REPEAT,
85
unsigned int V = GL_REPEAT,
86
unsigned int W = GL_REPEAT);
89
float MinLod = -1000.0f,
90
float MaxLod = +1000.0f);
93
unsigned int MinMip = 0,
94
unsigned int MaxMip = 1000);
103
void HW_SetFiltering();
106
void HW_SetMipLevel();
107
void HW_SetBorderColor();
110
TextureStateMap m_TextureStateChanges[GFXTS_MAX_TEXTURESTATES];
112
friend class GpuDevice;
115
// #define SET_TS_VALUE(a, b) (a).iValue = (b); (a).Dirty = true;
116
// #define TS_VALUE(a, b) (a).iValue
118
// #define SET_TS_VALUE_FLOAT(a, b) (a).fValue = (b); (a).Dirty = true;
119
// #define TS_VALUE_FLOAT(a, b) (a).fValue
122
// inline void GLTextureStates::SetFiltering(
125
// /*,unsigned int MIP*/)
128
// (MIN == GL_LINEAR) ||
129
// (MIN == GL_NEAREST) ||
130
// (MIN == GL_NEAREST_MIPMAP_NEAREST) ||
131
// (MIN == GL_LINEAR_MIPMAP_NEAREST) ||
132
// (MIN == GL_NEAREST_MIPMAP_LINEAR) ||
133
// (MIN == GL_LINEAR_MIPMAP_LINEAR),
134
// TEXT("Error[GLTextureStates::SetFiltering]: Invalid Min. Filter State"));
137
// (MAG == GL_LINEAR) ||
138
// (MAG == GL_NEAREST),
139
// TEXT("Error[GLTextureStates::SetFiltering]: Invalid Mag. Filter State"));
142
// // (MIP == GL_LINEAR) ||
143
// // (MIP == GL_NEAREST),
144
// // TEXT("Error[GLTextureStates::SetFiltering]: Invalid Mipmap Filter State"));
146
// SET_TS_VALUE(m_TextureStateChanges[GFXTS_MINFILTER], MIN);
147
// SET_TS_VALUE(m_TextureStateChanges[GFXTS_MAGFILTER], MAG);
148
// //SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIPFILTER], MIP);
151
// inline void GLTextureStates::SetWrap(
157
// (U == GL_CLAMP) ||
158
// (U == GL_CLAMP_TO_EDGE) ||
160
// TEXT("Error[GLTextureStates::SetWrap]: Invalid U Wrap State"));
162
// (V == GL_CLAMP) ||
163
// (V == GL_CLAMP_TO_EDGE) ||
165
// TEXT("Error[GLTextureStates::SetWrap]: Invalid V Wrap State"));
167
// (W == GL_CLAMP) ||
168
// (W == GL_CLAMP_TO_EDGE) ||
170
// TEXT("Error[GLTextureStates::SetWrap]: Invalid W Wrap State"));
172
// SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSU], U);
173
// SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSV], V);
174
// SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSW], W);
179
// inline void GLTextureStates::SetLOD(float MinLod,
182
// SET_TS_VALUE_FLOAT(m_TextureStateChanges[GFXTS_MIN_LOD], MinLod);
183
// SET_TS_VALUE_FLOAT(m_TextureStateChanges[GFXTS_MAX_LOD], MaxLod);
186
// inline void GLTextureStates::SetMipLevel(
187
// unsigned int MinMip,
188
// unsigned int MaxMip)
190
// SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIP_BASE_LEVEL], MinMip);
191
// SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIP_MAX_LEVEL], MaxMip);
194
// inline void GLTextureStates::SetBorderColor(
200
// unsigned int r, g, b, a;
201
// r = 255 * Clamp(R, 0.0f, 1.0f);
202
// g = 255 * Clamp(G, 0.0f, 1.0f);
203
// b = 255 * Clamp(B, 0.0f, 1.0f);
204
// a = 255 * Clamp(A, 0.0f, 1.0f);
205
// unsigned int color = (unsigned int) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b));
207
// SET_TS_VALUE(m_TextureStateChanges[GFXTS_BORDERCOLOR], color);
210
// #undef SET_TS_VALUE
213
// #undef SET_TS_VALUE_FLOAT
214
// #undef TS_VALUE_FLOAT
218
#endif // GLTEXTURESTATES_H