23
#include "GLResource.h"
24
#include "GLTextureStates.h"
28
const struct TextureStateLookUpTable
30
TextureStateLookUpTable()
32
// setup render state map
33
#define UL_MAP(state__, default_value__, checked__) \
34
default_texture_state[GFXTS_##state__].iValue = default_value__; \
35
default_texture_state[GFXTS_##state__].Checked = checked__;
37
#define UL_MAP_FLOAT(state__, default_value__, checked__) \
38
default_texture_state[GFXTS_##state__].fValue = default_value__; \
39
default_texture_state[GFXTS_##state__].Checked = checked__;
41
UL_MAP(ADDRESSU , GL_REPEAT , 1);
42
UL_MAP(ADDRESSV , GL_REPEAT , 1);
43
UL_MAP(ADDRESSW , GL_REPEAT , 1);
45
UL_MAP(MINFILTER , GL_NEAREST , 1);
46
UL_MAP(MAGFILTER , GL_NEAREST , 1);
47
UL_MAP(MIPFILTER , GL_NEAREST , 1);
49
UL_MAP(MIP_BASE_LEVEL , 0 , 1);
50
UL_MAP(MIP_MAX_LEVEL , 1000 , 1);
51
UL_MAP_FLOAT(MIN_LOD , -1000 , 1);
52
UL_MAP_FLOAT(MAX_LOD , +1000 , 1);
54
UL_MAP(BORDERCOLOR , 0x0 , 1);
60
TextureStateMap default_texture_state[GFXTS_MAX_TEXTURESTATES];
64
GLTextureStates::GLTextureStates(GLuint Type)
67
Memcpy(&m_TextureStateChanges, &s_TextureStateLUT.default_texture_state, sizeof(m_TextureStateChanges));
70
GLTextureStates::~GLTextureStates()
75
void GLTextureStates::SetType(GLuint Type)
78
(Type == GL_TEXTURE_1D) ||
79
(Type == GL_TEXTURE_2D) ||
80
(Type == GL_TEXTURE_RECTANGLE_ARB) ||
81
(Type == GL_TEXTURE_3D) ||
82
(Type == GL_TEXTURE_CUBE_MAP_ARB),
83
TEXT("Error[GLTextureStates::GLTextureStates]: Invalid texture type."));
88
void GLTextureStates::ResetDefault()
93
void GLTextureStates::ResetStateChangeToDefault()
98
void GLTextureStates::SetRenderStates()
106
#define SET_TS_VALUE(a, b) if(a.iValue != b){(a).iValue = (b); (a).Dirty = true;}
107
#define TS_VALUE(a, b) (a).iValue
109
#define SET_TS_VALUE_FLOAT(a, b) if(a.fValue != b){(a).fValue = (b); (a).Dirty = true;}
110
#define TS_VALUE_FLOAT(a, b) (a).fValue
113
void GLTextureStates::HW_SetFiltering()
115
if(m_TextureStateChanges[GFXTS_MINFILTER].Dirty || m_TextureStateChanges[GFXTS_MAGFILTER].Dirty)
117
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MIN_FILTER, m_TextureStateChanges[GFXTS_MINFILTER].iValue ) );
118
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MAG_FILTER, m_TextureStateChanges[GFXTS_MAGFILTER].iValue) );
119
m_TextureStateChanges[GFXTS_MINFILTER].Dirty = false;
120
m_TextureStateChanges[GFXTS_MAGFILTER].Dirty = false;
124
void GLTextureStates::HW_SetWrap()
126
if(m_TextureStateChanges[GFXTS_ADDRESSU].Dirty ||
127
m_TextureStateChanges[GFXTS_ADDRESSV].Dirty ||
128
m_TextureStateChanges[GFXTS_ADDRESSW].Dirty)
130
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_WRAP_S, m_TextureStateChanges[GFXTS_ADDRESSU].iValue) );
131
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_WRAP_T, m_TextureStateChanges[GFXTS_ADDRESSV].iValue) );
132
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_WRAP_R, m_TextureStateChanges[GFXTS_ADDRESSW].iValue) );
133
m_TextureStateChanges[GFXTS_ADDRESSU].Dirty = false;
134
m_TextureStateChanges[GFXTS_ADDRESSV].Dirty = false;
135
m_TextureStateChanges[GFXTS_ADDRESSW].Dirty = false;
139
void GLTextureStates::HW_SetLOD()
141
if(m_Type == GL_TEXTURE_RECTANGLE_ARB)
143
// No support for mip LOP on rectangle texture.
144
// ATI seems to not generate and Error.
145
// Nvidia generates an error
146
m_TextureStateChanges[GFXTS_MIN_LOD].Dirty = false;
147
m_TextureStateChanges[GFXTS_MAX_LOD].Dirty = false;
150
if(m_TextureStateChanges[GFXTS_MIN_LOD].Dirty || m_TextureStateChanges[GFXTS_MAX_LOD].Dirty)
152
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MIN_LOD, m_TextureStateChanges[GFXTS_MIN_LOD].fValue) );
153
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MAX_LOD, m_TextureStateChanges[GFXTS_MAX_LOD].fValue) );
154
m_TextureStateChanges[GFXTS_MIN_LOD].Dirty = false;
155
m_TextureStateChanges[GFXTS_MAX_LOD].Dirty = false;
159
void GLTextureStates::HW_SetMipLevel()
161
if(m_TextureStateChanges[GFXTS_MIN_LOD].Dirty || m_TextureStateChanges[GFXTS_MAX_LOD].Dirty)
163
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MIN_LOD, m_TextureStateChanges[GFXTS_MIN_LOD].fValue) );
164
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MAX_LOD, m_TextureStateChanges[GFXTS_MAX_LOD].fValue) );
165
m_TextureStateChanges[GFXTS_MIN_LOD].Dirty = false;
166
m_TextureStateChanges[GFXTS_MAX_LOD].Dirty = false;
170
void GLTextureStates::HW_SetBorderColor()
175
void GLTextureStates::SetFiltering(
176
unsigned int MinFilter,
177
unsigned int MagFilter
178
/*,unsigned int MIP*/)
181
(MinFilter == GL_LINEAR) ||
182
(MinFilter == GL_NEAREST) ||
183
(MinFilter == GL_NEAREST_MIPMAP_NEAREST) ||
184
(MinFilter == GL_LINEAR_MIPMAP_NEAREST) ||
185
(MinFilter == GL_NEAREST_MIPMAP_LINEAR) ||
186
(MinFilter == GL_LINEAR_MIPMAP_LINEAR),
187
TEXT("Error[GLTextureStates::SetFiltering]: Invalid MinFilter state"));
190
(MagFilter == GL_LINEAR) ||
191
(MagFilter == GL_NEAREST),
192
TEXT("Error[GLTextureStates::SetFiltering]: Invalid MagFilter state"));
195
// (MIP == GL_LINEAR) ||
196
// (MIP == GL_NEAREST),
197
// TEXT("Error[GLTextureStates::SetFiltering]: Invalid Mipmap Filter State"));
199
if(m_Type == GL_TEXTURE_RECTANGLE_ARB)
201
if((MinFilter != GL_NEAREST) && (MinFilter != GL_LINEAR))
203
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect MinFilter for rectangle texture."));
204
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MINFILTER], GL_LINEAR);
208
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MINFILTER], MinFilter);
211
if((MagFilter != GL_NEAREST) && (MagFilter != GL_LINEAR))
213
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect MagFilter for rectangle texture."));
214
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MAGFILTER], GL_LINEAR);
218
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MAGFILTER], MagFilter);
223
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MINFILTER], MinFilter);
224
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MAGFILTER], MagFilter);
226
//SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIPFILTER], MIP);
229
void GLTextureStates::SetWrap(
236
(U == GL_CLAMP_TO_EDGE) ||
237
(U == GL_CLAMP_TO_BORDER) ||
238
(U == GL_MIRRORED_REPEAT) ||
239
(U == GL_MIRROR_CLAMP_EXT) ||
240
(U == GL_MIRROR_CLAMP_TO_EDGE_EXT) ||
241
(U == GL_MIRROR_CLAMP_TO_BORDER_EXT) ||
243
TEXT("Error[GLTextureStates::SetWrap]: Invalid U Wrap State"));
247
(V == GL_CLAMP_TO_EDGE) ||
248
(V == GL_CLAMP_TO_BORDER) ||
249
(V == GL_MIRRORED_REPEAT) ||
250
(V == GL_MIRROR_CLAMP_EXT) ||
251
(V == GL_MIRROR_CLAMP_TO_EDGE_EXT) ||
252
(V == GL_MIRROR_CLAMP_TO_BORDER_EXT) ||
254
TEXT("Error[GLTextureStates::SetWrap]: Invalid V Wrap State"));
257
(W == GL_CLAMP_TO_EDGE) ||
258
(W == GL_CLAMP_TO_BORDER) ||
259
(W == GL_MIRRORED_REPEAT) ||
260
(W == GL_MIRROR_CLAMP_EXT) ||
261
(W == GL_MIRROR_CLAMP_TO_EDGE_EXT) ||
262
(W == GL_MIRROR_CLAMP_TO_BORDER_EXT) ||
264
TEXT("Error[GLTextureStates::SetWrap]: Invalid W Wrap State"));
266
if(m_Type == GL_TEXTURE_RECTANGLE_ARB)
268
if((U != GL_CLAMP) && (U != GL_CLAMP_TO_BORDER) && (U != GL_CLAMP_TO_EDGE))
270
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect warp for rectangle texture."));
271
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSU], GL_CLAMP_TO_EDGE);
275
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSU], U);
278
if((V != GL_CLAMP) && (V != GL_CLAMP_TO_BORDER) && (V != GL_CLAMP_TO_EDGE))
280
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect warp for rectangle texture."));
281
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSV], GL_CLAMP_TO_EDGE);
285
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSV], V);
288
if((W != GL_CLAMP) && (W != GL_CLAMP_TO_BORDER) && (W != GL_CLAMP_TO_EDGE))
290
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect warp for rectangle texture."));
291
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSW], GL_CLAMP_TO_EDGE);
295
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSW], W);
300
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSU], U);
301
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSV], V);
302
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSW], W);
306
void GLTextureStates::SetLOD(float MinLod,
309
SET_TS_VALUE_FLOAT(m_TextureStateChanges[GFXTS_MIN_LOD], MinLod);
310
SET_TS_VALUE_FLOAT(m_TextureStateChanges[GFXTS_MAX_LOD], MaxLod);
313
void GLTextureStates::SetMipLevel(
317
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIP_BASE_LEVEL], MinMip);
318
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIP_MAX_LEVEL], MaxMip);
321
void GLTextureStates::SetBorderColor(
327
unsigned int r, g, b, a;
328
r = 255 * Clamp(R, 0.0f, 1.0f);
329
g = 255 * Clamp(G, 0.0f, 1.0f);
330
b = 255 * Clamp(B, 0.0f, 1.0f);
331
a = 255 * Clamp(A, 0.0f, 1.0f);
332
unsigned int color = (unsigned int) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b));
334
SET_TS_VALUE(m_TextureStateChanges[GFXTS_BORDERCOLOR], color);
340
#undef SET_TS_VALUE_FLOAT
341
#undef TS_VALUE_FLOAT
23
#include "GLResource.h"
24
#include "GLTextureStates.h"
28
const struct TextureStateLookUpTable
30
TextureStateLookUpTable()
32
// setup render state map
33
#define UL_MAP(state__, default_value__, checked__) \
34
default_texture_state[GFXTS_##state__].iValue = default_value__; \
35
default_texture_state[GFXTS_##state__].Checked = checked__;
37
#define UL_MAP_FLOAT(state__, default_value__, checked__) \
38
default_texture_state[GFXTS_##state__].fValue = default_value__; \
39
default_texture_state[GFXTS_##state__].Checked = checked__;
41
UL_MAP(ADDRESSU , GL_REPEAT , 1);
42
UL_MAP(ADDRESSV , GL_REPEAT , 1);
43
UL_MAP(ADDRESSW , GL_REPEAT , 1);
45
UL_MAP(MINFILTER , GL_NEAREST , 1);
46
UL_MAP(MAGFILTER , GL_NEAREST , 1);
47
UL_MAP(MIPFILTER , GL_NEAREST , 1);
49
UL_MAP(MIP_BASE_LEVEL , 0 , 1);
50
UL_MAP(MIP_MAX_LEVEL , 1000 , 1);
51
UL_MAP_FLOAT(MIN_LOD , -1000 , 1);
52
UL_MAP_FLOAT(MAX_LOD , +1000 , 1);
54
UL_MAP(BORDERCOLOR , 0x0 , 1);
60
TextureStateMap default_texture_state[GFXTS_MAX_TEXTURESTATES];
64
GLTextureStates::GLTextureStates(GLuint Type)
67
Memcpy(&m_TextureStateChanges, &s_TextureStateLUT.default_texture_state, sizeof(m_TextureStateChanges));
70
GLTextureStates::~GLTextureStates()
75
void GLTextureStates::SetType(GLuint Type)
78
(Type == GL_TEXTURE_1D) ||
79
(Type == GL_TEXTURE_2D) ||
80
(Type == GL_TEXTURE_RECTANGLE_ARB) ||
81
(Type == GL_TEXTURE_3D) ||
82
(Type == GL_TEXTURE_CUBE_MAP_ARB),
83
TEXT("Error[GLTextureStates::GLTextureStates]: Invalid texture type."));
88
void GLTextureStates::ResetDefault()
93
void GLTextureStates::ResetStateChangeToDefault()
98
void GLTextureStates::SetRenderStates()
106
#define SET_TS_VALUE(a, b) if(a.iValue != b){(a).iValue = (b); (a).Dirty = true;}
107
#define TS_VALUE(a, b) (a).iValue
109
#define SET_TS_VALUE_FLOAT(a, b) if(a.fValue != b){(a).fValue = (b); (a).Dirty = true;}
110
#define TS_VALUE_FLOAT(a, b) (a).fValue
113
void GLTextureStates::HW_SetFiltering()
115
if(m_TextureStateChanges[GFXTS_MINFILTER].Dirty || m_TextureStateChanges[GFXTS_MAGFILTER].Dirty)
117
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MIN_FILTER, m_TextureStateChanges[GFXTS_MINFILTER].iValue ) );
118
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MAG_FILTER, m_TextureStateChanges[GFXTS_MAGFILTER].iValue) );
119
m_TextureStateChanges[GFXTS_MINFILTER].Dirty = false;
120
m_TextureStateChanges[GFXTS_MAGFILTER].Dirty = false;
124
void GLTextureStates::HW_SetWrap()
126
if(m_TextureStateChanges[GFXTS_ADDRESSU].Dirty ||
127
m_TextureStateChanges[GFXTS_ADDRESSV].Dirty ||
128
m_TextureStateChanges[GFXTS_ADDRESSW].Dirty)
130
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_WRAP_S, m_TextureStateChanges[GFXTS_ADDRESSU].iValue) );
131
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_WRAP_T, m_TextureStateChanges[GFXTS_ADDRESSV].iValue) );
132
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_WRAP_R, m_TextureStateChanges[GFXTS_ADDRESSW].iValue) );
133
m_TextureStateChanges[GFXTS_ADDRESSU].Dirty = false;
134
m_TextureStateChanges[GFXTS_ADDRESSV].Dirty = false;
135
m_TextureStateChanges[GFXTS_ADDRESSW].Dirty = false;
139
void GLTextureStates::HW_SetLOD()
141
if(m_Type == GL_TEXTURE_RECTANGLE_ARB)
143
// No support for mip LOP on rectangle texture.
144
// ATI seems to not generate and Error.
145
// Nvidia generates an error
146
m_TextureStateChanges[GFXTS_MIN_LOD].Dirty = false;
147
m_TextureStateChanges[GFXTS_MAX_LOD].Dirty = false;
150
if(m_TextureStateChanges[GFXTS_MIN_LOD].Dirty || m_TextureStateChanges[GFXTS_MAX_LOD].Dirty)
152
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MIN_LOD, m_TextureStateChanges[GFXTS_MIN_LOD].fValue) );
153
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MAX_LOD, m_TextureStateChanges[GFXTS_MAX_LOD].fValue) );
154
m_TextureStateChanges[GFXTS_MIN_LOD].Dirty = false;
155
m_TextureStateChanges[GFXTS_MAX_LOD].Dirty = false;
159
void GLTextureStates::HW_SetMipLevel()
161
if(m_TextureStateChanges[GFXTS_MIN_LOD].Dirty || m_TextureStateChanges[GFXTS_MAX_LOD].Dirty)
163
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MIN_LOD, m_TextureStateChanges[GFXTS_MIN_LOD].fValue) );
164
CHECKGL( glTexParameteri(m_Type, GL_TEXTURE_MAX_LOD, m_TextureStateChanges[GFXTS_MAX_LOD].fValue) );
165
m_TextureStateChanges[GFXTS_MIN_LOD].Dirty = false;
166
m_TextureStateChanges[GFXTS_MAX_LOD].Dirty = false;
170
void GLTextureStates::HW_SetBorderColor()
175
void GLTextureStates::SetFiltering(
176
unsigned int MinFilter,
177
unsigned int MagFilter
178
/*,unsigned int MIP*/)
181
(MinFilter == GL_LINEAR) ||
182
(MinFilter == GL_NEAREST) ||
183
(MinFilter == GL_NEAREST_MIPMAP_NEAREST) ||
184
(MinFilter == GL_LINEAR_MIPMAP_NEAREST) ||
185
(MinFilter == GL_NEAREST_MIPMAP_LINEAR) ||
186
(MinFilter == GL_LINEAR_MIPMAP_LINEAR),
187
TEXT("Error[GLTextureStates::SetFiltering]: Invalid MinFilter state"));
190
(MagFilter == GL_LINEAR) ||
191
(MagFilter == GL_NEAREST),
192
TEXT("Error[GLTextureStates::SetFiltering]: Invalid MagFilter state"));
195
// (MIP == GL_LINEAR) ||
196
// (MIP == GL_NEAREST),
197
// TEXT("Error[GLTextureStates::SetFiltering]: Invalid Mipmap Filter State"));
199
if(m_Type == GL_TEXTURE_RECTANGLE_ARB)
201
if((MinFilter != GL_NEAREST) && (MinFilter != GL_LINEAR))
203
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect MinFilter for rectangle texture."));
204
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MINFILTER], GL_LINEAR);
208
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MINFILTER], MinFilter);
211
if((MagFilter != GL_NEAREST) && (MagFilter != GL_LINEAR))
213
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect MagFilter for rectangle texture."));
214
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MAGFILTER], GL_LINEAR);
218
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MAGFILTER], MagFilter);
223
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MINFILTER], MinFilter);
224
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MAGFILTER], MagFilter);
226
//SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIPFILTER], MIP);
229
void GLTextureStates::SetWrap(
236
(U == GL_CLAMP_TO_EDGE) ||
237
(U == GL_CLAMP_TO_BORDER) ||
238
(U == GL_MIRRORED_REPEAT) ||
239
(U == GL_MIRROR_CLAMP_EXT) ||
240
(U == GL_MIRROR_CLAMP_TO_EDGE_EXT) ||
241
(U == GL_MIRROR_CLAMP_TO_BORDER_EXT) ||
243
TEXT("Error[GLTextureStates::SetWrap]: Invalid U Wrap State"));
247
(V == GL_CLAMP_TO_EDGE) ||
248
(V == GL_CLAMP_TO_BORDER) ||
249
(V == GL_MIRRORED_REPEAT) ||
250
(V == GL_MIRROR_CLAMP_EXT) ||
251
(V == GL_MIRROR_CLAMP_TO_EDGE_EXT) ||
252
(V == GL_MIRROR_CLAMP_TO_BORDER_EXT) ||
254
TEXT("Error[GLTextureStates::SetWrap]: Invalid V Wrap State"));
257
(W == GL_CLAMP_TO_EDGE) ||
258
(W == GL_CLAMP_TO_BORDER) ||
259
(W == GL_MIRRORED_REPEAT) ||
260
(W == GL_MIRROR_CLAMP_EXT) ||
261
(W == GL_MIRROR_CLAMP_TO_EDGE_EXT) ||
262
(W == GL_MIRROR_CLAMP_TO_BORDER_EXT) ||
264
TEXT("Error[GLTextureStates::SetWrap]: Invalid W Wrap State"));
266
if(m_Type == GL_TEXTURE_RECTANGLE_ARB)
268
if((U != GL_CLAMP) && (U != GL_CLAMP_TO_BORDER) && (U != GL_CLAMP_TO_EDGE))
270
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect warp for rectangle texture."));
271
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSU], GL_CLAMP_TO_EDGE);
275
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSU], U);
278
if((V != GL_CLAMP) && (V != GL_CLAMP_TO_BORDER) && (V != GL_CLAMP_TO_EDGE))
280
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect warp for rectangle texture."));
281
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSV], GL_CLAMP_TO_EDGE);
285
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSV], V);
288
if((W != GL_CLAMP) && (W != GL_CLAMP_TO_BORDER) && (W != GL_CLAMP_TO_EDGE))
290
nuxError(TEXT("[GLTextureStates::SetFiltering] Incorrect warp for rectangle texture."));
291
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSW], GL_CLAMP_TO_EDGE);
295
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSW], W);
300
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSU], U);
301
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSV], V);
302
SET_TS_VALUE(m_TextureStateChanges[GFXTS_ADDRESSW], W);
306
void GLTextureStates::SetLOD(float MinLod,
309
SET_TS_VALUE_FLOAT(m_TextureStateChanges[GFXTS_MIN_LOD], MinLod);
310
SET_TS_VALUE_FLOAT(m_TextureStateChanges[GFXTS_MAX_LOD], MaxLod);
313
void GLTextureStates::SetMipLevel(
317
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIP_BASE_LEVEL], MinMip);
318
SET_TS_VALUE(m_TextureStateChanges[GFXTS_MIP_MAX_LEVEL], MaxMip);
321
void GLTextureStates::SetBorderColor(
327
unsigned int r, g, b, a;
328
r = 255 * Clamp(R, 0.0f, 1.0f);
329
g = 255 * Clamp(G, 0.0f, 1.0f);
330
b = 255 * Clamp(B, 0.0f, 1.0f);
331
a = 255 * Clamp(A, 0.0f, 1.0f);
332
unsigned int color = (unsigned int) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b));
334
SET_TS_VALUE(m_TextureStateChanges[GFXTS_BORDERCOLOR], color);
340
#undef SET_TS_VALUE_FLOAT
341
#undef TS_VALUE_FLOAT