don't waste a full byte on mirror/flip setting
moved MIRROR bits into bits 2 and 3 of what used to be `uv_clamp` member of TextureObject renamed `uv_clamp` member to `uv_wrap` updated and commented code accessing `uv_wrap` for both clamp and mirror settings
This commit is contained in:
parent
708566af72
commit
0cd447dbcf
@ -138,7 +138,7 @@ typedef struct {
|
||||
GLubyte mipmap_bias;
|
||||
GLubyte env;
|
||||
GLubyte mipmapCount; /* The number of mipmap levels */
|
||||
GLubyte uv_clamp;
|
||||
GLubyte uv_wrap; /* clamp and flip settings for u and v */
|
||||
//40
|
||||
/* Mipmap textures have a different
|
||||
* offset for the base level when supplying the data, this
|
||||
@ -153,9 +153,7 @@ typedef struct {
|
||||
//50
|
||||
GLenum internalFormat;
|
||||
//54
|
||||
GLubyte uv_flip;
|
||||
// 55
|
||||
GLubyte padding[9]; // Pad to 64-bytes
|
||||
GLubyte padding[10]; // Pad to 64-bytes
|
||||
} __attribute__((aligned(32))) TextureObject;
|
||||
|
||||
typedef struct {
|
||||
|
@ -390,8 +390,10 @@ void _glUpdatePVRTextureContext(PolyContext *context, GLshort textureUnit) {
|
||||
}
|
||||
|
||||
context->txr.env = tx1->env;
|
||||
context->txr.uv_flip = tx1->uv_flip;
|
||||
context->txr.uv_clamp = tx1->uv_clamp;
|
||||
// extract mirror setting from bits 2 and 3 of uv_wrap by shifting out the clamp bits and masking
|
||||
context->txr.uv_flip = (tx1->uv_wrap >> 2) & 3;
|
||||
// extract clamp setting from bits 0 and 1 of uv_wrap by masking
|
||||
context->txr.uv_clamp = tx1->uv_wrap & 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
22
GL/texture.c
22
GL/texture.c
@ -14,12 +14,13 @@
|
||||
* issues with the allocator */
|
||||
#define PVR_MEM_BUFFER_SIZE (64 * 1024)
|
||||
|
||||
/* Clamp settings go in lower bits of uv_wrap
|
||||
* Mirror settings go in upper bits */
|
||||
#define MIRROR_U (1<<3)
|
||||
#define MIRROR_V (1<<2)
|
||||
#define CLAMP_U (1<<1)
|
||||
#define CLAMP_V (1<<0)
|
||||
|
||||
#define MIRROR_U (1<<1)
|
||||
#define MIRROR_V (1<<0)
|
||||
|
||||
static TextureObject* TEXTURE_UNITS[MAX_GLDC_TEXTURE_UNITS] = {NULL, NULL};
|
||||
static NamedArray TEXTURE_OBJECTS;
|
||||
GLubyte ACTIVE_TEXTURE = 0;
|
||||
@ -507,8 +508,7 @@ static void _glInitializeTextureObject(TextureObject* txr, unsigned int id) {
|
||||
txr->index = id;
|
||||
txr->width = txr->height = 0;
|
||||
txr->mipmap = 0;
|
||||
txr->uv_clamp = 0;
|
||||
txr->uv_flip = 0;
|
||||
txr->uv_wrap = 0;
|
||||
txr->env = GPU_TXRENV_MODULATEALPHA;
|
||||
txr->data = NULL;
|
||||
txr->mipmapCount = 0;
|
||||
@ -1897,15 +1897,15 @@ void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param) {
|
||||
switch(param) {
|
||||
case GL_CLAMP_TO_EDGE:
|
||||
case GL_CLAMP:
|
||||
active->uv_clamp |= CLAMP_U;
|
||||
active->uv_wrap |= CLAMP_U;
|
||||
break;
|
||||
|
||||
case GL_REPEAT:
|
||||
active->uv_clamp &= ~CLAMP_U;
|
||||
active->uv_wrap &= ~CLAMP_U;
|
||||
break;
|
||||
|
||||
case GL_MIRRORED_REPEAT:
|
||||
active->uv_flip |= MIRROR_U;
|
||||
active->uv_wrap |= MIRROR_U;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1915,15 +1915,15 @@ void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param) {
|
||||
switch(param) {
|
||||
case GL_CLAMP_TO_EDGE:
|
||||
case GL_CLAMP:
|
||||
active->uv_clamp |= CLAMP_V;
|
||||
active->uv_wrap |= CLAMP_V;
|
||||
break;
|
||||
|
||||
case GL_REPEAT:
|
||||
active->uv_clamp &= ~CLAMP_V;
|
||||
active->uv_wrap &= ~CLAMP_V;
|
||||
break;
|
||||
|
||||
case GL_MIRRORED_REPEAT:
|
||||
active->uv_flip |= MIRROR_V;
|
||||
active->uv_wrap |= MIRROR_V;
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user