mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
mesa: use an array for current texture objects
Use loops to consolidate lots of texture object code.
This commit is contained in:
parent
4d24b639d1
commit
9818734e01
16 changed files with 168 additions and 264 deletions
|
|
@ -1063,31 +1063,31 @@ void driInitTextureObjects( GLcontext *ctx, driTextureObject * swapped,
|
|||
ctx->Texture.CurrentUnit = i;
|
||||
|
||||
if ( (targets & DRI_TEXMGR_DO_TEXTURE_1D) != 0 ) {
|
||||
texObj = ctx->Texture.Unit[i].Current1D;
|
||||
texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_1D_INDEX];
|
||||
ctx->Driver.BindTexture( ctx, GL_TEXTURE_1D, texObj );
|
||||
move_to_tail( swapped, (driTextureObject *) texObj->DriverData );
|
||||
}
|
||||
|
||||
if ( (targets & DRI_TEXMGR_DO_TEXTURE_2D) != 0 ) {
|
||||
texObj = ctx->Texture.Unit[i].Current2D;
|
||||
texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_2D_INDEX];
|
||||
ctx->Driver.BindTexture( ctx, GL_TEXTURE_2D, texObj );
|
||||
move_to_tail( swapped, (driTextureObject *) texObj->DriverData );
|
||||
}
|
||||
|
||||
if ( (targets & DRI_TEXMGR_DO_TEXTURE_3D) != 0 ) {
|
||||
texObj = ctx->Texture.Unit[i].Current3D;
|
||||
texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_3D_INDEX];
|
||||
ctx->Driver.BindTexture( ctx, GL_TEXTURE_3D, texObj );
|
||||
move_to_tail( swapped, (driTextureObject *) texObj->DriverData );
|
||||
}
|
||||
|
||||
if ( (targets & DRI_TEXMGR_DO_TEXTURE_CUBE) != 0 ) {
|
||||
texObj = ctx->Texture.Unit[i].CurrentCubeMap;
|
||||
texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_CUBE_INDEX]Map;
|
||||
ctx->Driver.BindTexture( ctx, GL_TEXTURE_CUBE_MAP_ARB, texObj );
|
||||
move_to_tail( swapped, (driTextureObject *) texObj->DriverData );
|
||||
}
|
||||
|
||||
if ( (targets & DRI_TEXMGR_DO_TEXTURE_RECT) != 0 ) {
|
||||
texObj = ctx->Texture.Unit[i].CurrentRect;
|
||||
texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_RECT_INDEX];
|
||||
ctx->Driver.BindTexture( ctx, GL_TEXTURE_RECTANGLE_NV, texObj );
|
||||
move_to_tail( swapped, (driTextureObject *) texObj->DriverData );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -400,19 +400,19 @@ void gammaInitTextureObjects( GLcontext *ctx )
|
|||
|
||||
ctx->Texture.CurrentUnit = 0;
|
||||
|
||||
texObj = ctx->Texture.Unit[0].Current1D;
|
||||
texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_1D_INDEX];
|
||||
gammaBindTexture( ctx, GL_TEXTURE_1D, texObj );
|
||||
|
||||
texObj = ctx->Texture.Unit[0].Current2D;
|
||||
texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];
|
||||
gammaBindTexture( ctx, GL_TEXTURE_2D, texObj );
|
||||
|
||||
#if 0
|
||||
ctx->Texture.CurrentUnit = 1;
|
||||
|
||||
texObj = ctx->Texture.Unit[1].Current1D;
|
||||
texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_1D_INDEX];
|
||||
gammaBindTexture( ctx, GL_TEXTURE_1D, texObj );
|
||||
|
||||
texObj = ctx->Texture.Unit[1].Current2D;
|
||||
texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_2D_INDEX];
|
||||
gammaBindTexture( ctx, GL_TEXTURE_2D, texObj );
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -206,8 +206,8 @@ static void mgaUpdateTextureEnvG200( GLcontext *ctx, GLuint unit )
|
|||
mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;
|
||||
GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
|
||||
|
||||
if (tObj != ctx->Texture.Unit[0].Current2D &&
|
||||
tObj != ctx->Texture.Unit[0].CurrentRect)
|
||||
if (tObj != ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX] &&
|
||||
tObj != ctx->Texture.Unit[0].CurrentTex[TEXTURE_RECT_INDEX])
|
||||
return;
|
||||
|
||||
|
||||
|
|
@ -635,8 +635,8 @@ static void mgaUpdateTextureEnvG400( GLcontext *ctx, GLuint unit )
|
|||
mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;
|
||||
GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
|
||||
|
||||
if (tObj != ctx->Texture.Unit[source].Current2D &&
|
||||
tObj != ctx->Texture.Unit[source].CurrentRect)
|
||||
if (tObj != ctx->Texture.Unit[source].CurrentTex[TEXTURE_2D_INDEX] &&
|
||||
tObj != ctx->Texture.Unit[source].CurrentTex[TEXTURE_RECT_INDEX])
|
||||
return;
|
||||
|
||||
switch (ctx->Texture.Unit[source].EnvMode) {
|
||||
|
|
|
|||
|
|
@ -1199,7 +1199,7 @@ r300FetchStateParameter(GLcontext * ctx,
|
|||
|
||||
case STATE_R300_TEXRECT_FACTOR:{
|
||||
struct gl_texture_object *t =
|
||||
ctx->Texture.Unit[state[2]].CurrentRect;
|
||||
ctx->Texture.Unit[state[2]].CurrentTex[TEXTURE_RECT_INDEX];
|
||||
|
||||
if (t && t->Image[0][t->BaseLevel]) {
|
||||
struct gl_texture_image *image =
|
||||
|
|
|
|||
|
|
@ -502,20 +502,20 @@ static void s3vInitTextureObjects( GLcontext *ctx )
|
|||
#if 1
|
||||
ctx->Texture.CurrentUnit = 0;
|
||||
|
||||
texObj = ctx->Texture.Unit[0].Current1D;
|
||||
texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_1D_INDEX];
|
||||
s3vBindTexture( ctx, GL_TEXTURE_1D, texObj );
|
||||
|
||||
texObj = ctx->Texture.Unit[0].Current2D;
|
||||
texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];
|
||||
s3vBindTexture( ctx, GL_TEXTURE_2D, texObj );
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
ctx->Texture.CurrentUnit = 1;
|
||||
|
||||
texObj = ctx->Texture.Unit[1].Current1D;
|
||||
texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_1D_INDEX];
|
||||
s3vBindTexture( ctx, GL_TEXTURE_1D, texObj );
|
||||
|
||||
texObj = ctx->Texture.Unit[1].Current2D;
|
||||
texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_2D_INDEX];
|
||||
s3vBindTexture( ctx, GL_TEXTURE_2D, texObj );
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -2461,13 +2461,13 @@ XMesaBindTexImage(XMesaDisplay *dpy, XMesaBuffer drawable, int buffer,
|
|||
#if 0
|
||||
switch (drawable->TextureTarget) {
|
||||
case GLX_TEXTURE_1D_EXT:
|
||||
texObj = texUnit->Current1D;
|
||||
texObj = texUnit->CurrentTex[TEXTURE_1D_INDEX];
|
||||
break;
|
||||
case GLX_TEXTURE_2D_EXT:
|
||||
texObj = texUnit->Current2D;
|
||||
texObj = texUnit->CurrentTex[TEXTURE_2D_INDEX];
|
||||
break;
|
||||
case GLX_TEXTURE_RECTANGLE_EXT:
|
||||
texObj = texUnit->CurrentRect;
|
||||
texObj = texUnit->CurrentTex[TEXTURE_RECT_INDEX];
|
||||
break;
|
||||
default:
|
||||
return; /* BadMatch error */
|
||||
|
|
|
|||
|
|
@ -365,7 +365,7 @@ _mesa_PushAttrib(GLbitfield mask)
|
|||
|
||||
if (mask & GL_TEXTURE_BIT) {
|
||||
struct texture_state *texstate = CALLOC_STRUCT(texture_state);
|
||||
GLuint u;
|
||||
GLuint u, tex;
|
||||
|
||||
if (!texstate) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glPushAttrib(GL_TEXTURE_BIT)");
|
||||
|
|
@ -381,38 +381,18 @@ _mesa_PushAttrib(GLbitfield mask)
|
|||
* accidentally get deleted while referenced in the attribute stack.
|
||||
*/
|
||||
for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {
|
||||
_mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_1D_INDEX],
|
||||
ctx->Texture.Unit[u].Current1D);
|
||||
_mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_2D_INDEX],
|
||||
ctx->Texture.Unit[u].Current2D);
|
||||
_mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_3D_INDEX],
|
||||
ctx->Texture.Unit[u].Current3D);
|
||||
_mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_CUBE_INDEX],
|
||||
ctx->Texture.Unit[u].CurrentCubeMap);
|
||||
_mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_RECT_INDEX],
|
||||
ctx->Texture.Unit[u].CurrentRect);
|
||||
_mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_1D_ARRAY_INDEX],
|
||||
ctx->Texture.Unit[u].Current1DArray);
|
||||
_mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_2D_ARRAY_INDEX],
|
||||
ctx->Texture.Unit[u].Current2DArray);
|
||||
for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
|
||||
_mesa_reference_texobj(&texstate->SavedTexRef[u][tex],
|
||||
ctx->Texture.Unit[u].CurrentTex[tex]);
|
||||
}
|
||||
}
|
||||
|
||||
/* copy state/contents of the currently bound texture objects */
|
||||
for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {
|
||||
_mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_1D_INDEX],
|
||||
ctx->Texture.Unit[u].Current1D);
|
||||
_mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_2D_INDEX],
|
||||
ctx->Texture.Unit[u].Current2D);
|
||||
_mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_3D_INDEX],
|
||||
ctx->Texture.Unit[u].Current3D);
|
||||
_mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_CUBE_INDEX],
|
||||
ctx->Texture.Unit[u].CurrentCubeMap);
|
||||
_mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_RECT_INDEX],
|
||||
ctx->Texture.Unit[u].CurrentRect);
|
||||
_mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_1D_ARRAY_INDEX],
|
||||
ctx->Texture.Unit[u].Current1DArray);
|
||||
_mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_2D_ARRAY_INDEX],
|
||||
ctx->Texture.Unit[u].Current2DArray);
|
||||
for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
|
||||
_mesa_copy_texture_object(&texstate->SavedObj[u][tex],
|
||||
ctx->Texture.Unit[u].CurrentTex[tex]);
|
||||
}
|
||||
}
|
||||
|
||||
_mesa_unlock_context_textures(ctx);
|
||||
|
|
|
|||
|
|
@ -884,21 +884,21 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
|
|||
params[0] = _mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_1D:
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name);
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_2D:
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name);
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_3D:
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name);
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
|
||||
CHECK_EXT1(MESA_texture_array, "GetBooleanv");
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name);
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
|
||||
CHECK_EXT1(MESA_texture_array, "GetBooleanv");
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name);
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_GEN_S:
|
||||
params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0);
|
||||
|
|
@ -1071,7 +1071,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
|
|||
break;
|
||||
case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
|
||||
CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv");
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name);
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);
|
||||
break;
|
||||
case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
|
||||
CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv");
|
||||
|
|
@ -1558,7 +1558,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
|
|||
break;
|
||||
case GL_TEXTURE_BINDING_RECTANGLE_NV:
|
||||
CHECK_EXT1(NV_texture_rectangle, "GetBooleanv");
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name);
|
||||
params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);
|
||||
break;
|
||||
case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
|
||||
CHECK_EXT1(NV_texture_rectangle, "GetBooleanv");
|
||||
|
|
@ -2710,21 +2710,21 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
|
|||
params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_1D:
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name);
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_2D:
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name);
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_3D:
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name);
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
|
||||
CHECK_EXT1(MESA_texture_array, "GetFloatv");
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name);
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
|
||||
CHECK_EXT1(MESA_texture_array, "GetFloatv");
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name);
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);
|
||||
break;
|
||||
case GL_TEXTURE_GEN_S:
|
||||
params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0));
|
||||
|
|
@ -2897,7 +2897,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
|
|||
break;
|
||||
case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
|
||||
CHECK_EXT1(ARB_texture_cube_map, "GetFloatv");
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name);
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);
|
||||
break;
|
||||
case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
|
||||
CHECK_EXT1(ARB_texture_cube_map, "GetFloatv");
|
||||
|
|
@ -3384,7 +3384,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
|
|||
break;
|
||||
case GL_TEXTURE_BINDING_RECTANGLE_NV:
|
||||
CHECK_EXT1(NV_texture_rectangle, "GetFloatv");
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name);
|
||||
params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);
|
||||
break;
|
||||
case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
|
||||
CHECK_EXT1(NV_texture_rectangle, "GetFloatv");
|
||||
|
|
@ -4536,21 +4536,21 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
|
|||
params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_1D:
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name;
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name;
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_2D:
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name;
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name;
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_3D:
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name;
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name;
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_1D_ARRAY_EXT:
|
||||
CHECK_EXT1(MESA_texture_array, "GetIntegerv");
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name;
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name;
|
||||
break;
|
||||
case GL_TEXTURE_BINDING_2D_ARRAY_EXT:
|
||||
CHECK_EXT1(MESA_texture_array, "GetIntegerv");
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name;
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name;
|
||||
break;
|
||||
case GL_TEXTURE_GEN_S:
|
||||
params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0));
|
||||
|
|
@ -4723,7 +4723,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
|
|||
break;
|
||||
case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
|
||||
CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv");
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name;
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name;
|
||||
break;
|
||||
case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
|
||||
CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv");
|
||||
|
|
@ -5210,7 +5210,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
|
|||
break;
|
||||
case GL_TEXTURE_BINDING_RECTANGLE_NV:
|
||||
CHECK_EXT1(NV_texture_rectangle, "GetIntegerv");
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name;
|
||||
params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name;
|
||||
break;
|
||||
case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:
|
||||
CHECK_EXT1(NV_texture_rectangle, "GetIntegerv");
|
||||
|
|
|
|||
|
|
@ -432,15 +432,15 @@ StateVars = [
|
|||
( "GL_TEXTURE_1D_ARRAY_EXT", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT)"], "", ["MESA_texture_array"] ),
|
||||
( "GL_TEXTURE_2D_ARRAY_EXT", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT)"], "", ["MESA_texture_array"] ),
|
||||
( "GL_TEXTURE_BINDING_1D", GLint,
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name"], "", None ),
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name"], "", None ),
|
||||
( "GL_TEXTURE_BINDING_2D", GLint,
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name"], "", None ),
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name"], "", None ),
|
||||
( "GL_TEXTURE_BINDING_3D", GLint,
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name"], "", None ),
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name"], "", None ),
|
||||
( "GL_TEXTURE_BINDING_1D_ARRAY_EXT", GLint,
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name"], "", ["MESA_texture_array"] ),
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name"], "", ["MESA_texture_array"] ),
|
||||
( "GL_TEXTURE_BINDING_2D_ARRAY_EXT", GLint,
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name"], "", ["MESA_texture_array"] ),
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name"], "", ["MESA_texture_array"] ),
|
||||
( "GL_TEXTURE_GEN_S", GLboolean,
|
||||
["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)"], "", None ),
|
||||
( "GL_TEXTURE_GEN_T", GLboolean,
|
||||
|
|
@ -515,7 +515,7 @@ StateVars = [
|
|||
( "GL_TEXTURE_CUBE_MAP_ARB", GLboolean,
|
||||
["_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB)"], "", ["ARB_texture_cube_map"] ),
|
||||
( "GL_TEXTURE_BINDING_CUBE_MAP_ARB", GLint,
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name"],
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name"],
|
||||
"", ["ARB_texture_cube_map"] ),
|
||||
( "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB", GLint,
|
||||
["(1 << (ctx->Const.MaxCubeTextureLevels - 1))"],
|
||||
|
|
@ -795,7 +795,7 @@ StateVars = [
|
|||
( "GL_TEXTURE_RECTANGLE_NV", GLboolean,
|
||||
["_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV)"], "", ["NV_texture_rectangle"] ),
|
||||
( "GL_TEXTURE_BINDING_RECTANGLE_NV", GLint,
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name"],
|
||||
["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name"],
|
||||
"", ["NV_texture_rectangle"] ),
|
||||
( "GL_MAX_RECTANGLE_TEXTURE_SIZE_NV", GLint,
|
||||
["ctx->Const.MaxTextureRectSize"], "", ["NV_texture_rectangle"] ),
|
||||
|
|
|
|||
|
|
@ -1543,15 +1543,11 @@ struct gl_texture_unit
|
|||
*/
|
||||
struct gl_tex_env_combine_state *_CurrentCombine;
|
||||
|
||||
struct gl_texture_object *Current1D;
|
||||
struct gl_texture_object *Current2D;
|
||||
struct gl_texture_object *Current3D;
|
||||
struct gl_texture_object *CurrentCubeMap; /**< GL_ARB_texture_cube_map */
|
||||
struct gl_texture_object *CurrentRect; /**< GL_NV_texture_rectangle */
|
||||
struct gl_texture_object *Current1DArray; /**< GL_MESA_texture_array */
|
||||
struct gl_texture_object *Current2DArray; /**< GL_MESA_texture_array */
|
||||
/** Current texture object pointers */
|
||||
struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS];
|
||||
|
||||
struct gl_texture_object *_Current; /**< Points to really enabled tex obj */
|
||||
/** Points to highest priority, complete and enabled texture object */
|
||||
struct gl_texture_object *_Current;
|
||||
|
||||
/** GL_SGI_texture_color_table */
|
||||
/*@{*/
|
||||
|
|
|
|||
|
|
@ -766,15 +766,15 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit,
|
|||
{
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
return texUnit->Current1D;
|
||||
return texUnit->CurrentTex[TEXTURE_1D_INDEX];
|
||||
case GL_PROXY_TEXTURE_1D:
|
||||
return ctx->Texture.ProxyTex[TEXTURE_1D_INDEX];
|
||||
case GL_TEXTURE_2D:
|
||||
return texUnit->Current2D;
|
||||
return texUnit->CurrentTex[TEXTURE_2D_INDEX];
|
||||
case GL_PROXY_TEXTURE_2D:
|
||||
return ctx->Texture.ProxyTex[TEXTURE_2D_INDEX];
|
||||
case GL_TEXTURE_3D:
|
||||
return texUnit->Current3D;
|
||||
return texUnit->CurrentTex[TEXTURE_3D_INDEX];
|
||||
case GL_PROXY_TEXTURE_3D:
|
||||
return ctx->Texture.ProxyTex[TEXTURE_3D_INDEX];
|
||||
case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB:
|
||||
|
|
@ -785,25 +785,25 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit,
|
|||
case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB:
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
return ctx->Extensions.ARB_texture_cube_map
|
||||
? texUnit->CurrentCubeMap : NULL;
|
||||
? texUnit->CurrentTex[TEXTURE_CUBE_INDEX] : NULL;
|
||||
case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
|
||||
return ctx->Extensions.ARB_texture_cube_map
|
||||
? ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX] : NULL;
|
||||
case GL_TEXTURE_RECTANGLE_NV:
|
||||
return ctx->Extensions.NV_texture_rectangle
|
||||
? texUnit->CurrentRect : NULL;
|
||||
? texUnit->CurrentTex[TEXTURE_RECT_INDEX] : NULL;
|
||||
case GL_PROXY_TEXTURE_RECTANGLE_NV:
|
||||
return ctx->Extensions.NV_texture_rectangle
|
||||
? ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX] : NULL;
|
||||
case GL_TEXTURE_1D_ARRAY_EXT:
|
||||
return ctx->Extensions.MESA_texture_array
|
||||
? texUnit->Current1DArray : NULL;
|
||||
? texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX] : NULL;
|
||||
case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
|
||||
return ctx->Extensions.MESA_texture_array
|
||||
? ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX] : NULL;
|
||||
case GL_TEXTURE_2D_ARRAY_EXT:
|
||||
return ctx->Extensions.MESA_texture_array
|
||||
? texUnit->Current2DArray : NULL;
|
||||
? texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
|
||||
case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
|
||||
return ctx->Extensions.MESA_texture_array
|
||||
? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
|
||||
|
|
|
|||
|
|
@ -759,44 +759,17 @@ unbind_texobj_from_fbo(GLcontext *ctx, struct gl_texture_object *texObj)
|
|||
static void
|
||||
unbind_texobj_from_texunits(GLcontext *ctx, struct gl_texture_object *texObj)
|
||||
{
|
||||
GLuint u;
|
||||
GLuint u, tex;
|
||||
|
||||
for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {
|
||||
struct gl_texture_unit *unit = &ctx->Texture.Unit[u];
|
||||
if (texObj == unit->Current1D) {
|
||||
_mesa_reference_texobj(&unit->Current1D,
|
||||
ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]);
|
||||
ASSERT(unit->Current1D);
|
||||
}
|
||||
else if (texObj == unit->Current2D) {
|
||||
_mesa_reference_texobj(&unit->Current2D,
|
||||
ctx->Shared->DefaultTex[TEXTURE_2D_INDEX]);
|
||||
ASSERT(unit->Current2D);
|
||||
}
|
||||
else if (texObj == unit->Current3D) {
|
||||
_mesa_reference_texobj(&unit->Current3D,
|
||||
ctx->Shared->DefaultTex[TEXTURE_3D_INDEX]);
|
||||
ASSERT(unit->Current3D);
|
||||
}
|
||||
else if (texObj == unit->CurrentCubeMap) {
|
||||
_mesa_reference_texobj(&unit->CurrentCubeMap,
|
||||
ctx->Shared->DefaultTex[TEXTURE_CUBE_INDEX]);
|
||||
ASSERT(unit->CurrentCubeMap);
|
||||
}
|
||||
else if (texObj == unit->CurrentRect) {
|
||||
_mesa_reference_texobj(&unit->CurrentRect,
|
||||
ctx->Shared->DefaultTex[TEXTURE_RECT_INDEX]);
|
||||
ASSERT(unit->CurrentRect);
|
||||
}
|
||||
else if (texObj == unit->Current1DArray) {
|
||||
_mesa_reference_texobj(&unit->Current1DArray,
|
||||
ctx->Shared->DefaultTex[TEXTURE_1D_ARRAY_INDEX]);
|
||||
ASSERT(unit->Current1DArray);
|
||||
}
|
||||
else if (texObj == unit->Current2DArray) {
|
||||
_mesa_reference_texobj(&unit->Current2DArray,
|
||||
ctx->Shared->DefaultTex[TEXTURE_2D_ARRAY_INDEX]);
|
||||
ASSERT(unit->Current2DArray);
|
||||
for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
|
||||
if (texObj == unit->CurrentTex[tex]) {
|
||||
_mesa_reference_texobj(&unit->CurrentTex[tex],
|
||||
ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]);
|
||||
ASSERT(unit->CurrentTex[tex]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -866,6 +839,35 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert a GL texture target enum such as GL_TEXTURE_2D or GL_TEXTURE_3D
|
||||
* into the corresponding Mesa texture target index.
|
||||
* Return -1 if target is invalid.
|
||||
*/
|
||||
static GLint
|
||||
target_enum_to_index(GLenum target)
|
||||
{
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
return TEXTURE_1D_INDEX;
|
||||
case GL_TEXTURE_2D:
|
||||
return TEXTURE_2D_INDEX;
|
||||
case GL_TEXTURE_3D:
|
||||
return TEXTURE_3D_INDEX;
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
return TEXTURE_CUBE_INDEX;
|
||||
case GL_TEXTURE_RECTANGLE_NV:
|
||||
return TEXTURE_RECT_INDEX;
|
||||
case GL_TEXTURE_1D_ARRAY_EXT:
|
||||
return TEXTURE_1D_ARRAY_INDEX;
|
||||
case GL_TEXTURE_2D_ARRAY_EXT:
|
||||
return TEXTURE_2D_ARRAY_INDEX;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Bind a named texture to a texturing target.
|
||||
*
|
||||
|
|
@ -888,38 +890,20 @@ _mesa_BindTexture( GLenum target, GLuint texName )
|
|||
const GLuint unit = ctx->Texture.CurrentUnit;
|
||||
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
|
||||
struct gl_texture_object *newTexObj = NULL, *defaultTexObj = NULL;
|
||||
GLint targetIndex;
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
|
||||
_mesa_debug(ctx, "glBindTexture %s %d\n",
|
||||
_mesa_lookup_enum_by_nr(target), (GLint) texName);
|
||||
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_1D_INDEX];
|
||||
break;
|
||||
case GL_TEXTURE_2D:
|
||||
defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_2D_INDEX];
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_3D_INDEX];
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_CUBE_INDEX];
|
||||
break;
|
||||
case GL_TEXTURE_RECTANGLE_NV:
|
||||
defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_RECT_INDEX];
|
||||
break;
|
||||
case GL_TEXTURE_1D_ARRAY_EXT:
|
||||
defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_1D_ARRAY_INDEX];
|
||||
break;
|
||||
case GL_TEXTURE_2D_ARRAY_EXT:
|
||||
defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_2D_ARRAY_INDEX];
|
||||
break;
|
||||
default:
|
||||
targetIndex = target_enum_to_index(target);
|
||||
if (targetIndex < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glBindTexture(target)");
|
||||
return;
|
||||
}
|
||||
assert(targetIndex < NUM_TEXTURE_TARGETS);
|
||||
defaultTexObj = ctx->Shared->DefaultTex[targetIndex];
|
||||
|
||||
/*
|
||||
* Get pointer to new texture object (newTexObj)
|
||||
|
|
@ -967,40 +951,8 @@ _mesa_BindTexture( GLenum target, GLuint texName )
|
|||
* texture object will be decremented. It'll be deleted if the
|
||||
* count hits zero.
|
||||
*/
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
_mesa_reference_texobj(&texUnit->Current1D, newTexObj);
|
||||
ASSERT(texUnit->Current1D);
|
||||
break;
|
||||
case GL_TEXTURE_2D:
|
||||
_mesa_reference_texobj(&texUnit->Current2D, newTexObj);
|
||||
ASSERT(texUnit->Current2D);
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
_mesa_reference_texobj(&texUnit->Current3D, newTexObj);
|
||||
ASSERT(texUnit->Current3D);
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
_mesa_reference_texobj(&texUnit->CurrentCubeMap, newTexObj);
|
||||
ASSERT(texUnit->CurrentCubeMap);
|
||||
break;
|
||||
case GL_TEXTURE_RECTANGLE_NV:
|
||||
_mesa_reference_texobj(&texUnit->CurrentRect, newTexObj);
|
||||
ASSERT(texUnit->CurrentRect);
|
||||
break;
|
||||
case GL_TEXTURE_1D_ARRAY_EXT:
|
||||
_mesa_reference_texobj(&texUnit->Current1DArray, newTexObj);
|
||||
ASSERT(texUnit->Current1DArray);
|
||||
break;
|
||||
case GL_TEXTURE_2D_ARRAY_EXT:
|
||||
_mesa_reference_texobj(&texUnit->Current2DArray, newTexObj);
|
||||
ASSERT(texUnit->Current2DArray);
|
||||
break;
|
||||
default:
|
||||
/* Bad target should be caught above */
|
||||
_mesa_problem(ctx, "bad target in BindTexture");
|
||||
return;
|
||||
}
|
||||
_mesa_reference_texobj(&texUnit->CurrentTex[targetIndex], newTexObj);
|
||||
ASSERT(texUnit->CurrentTex[targetIndex]);
|
||||
|
||||
/* Pass BindTexture call to device driver */
|
||||
if (ctx->Driver.BindTexture)
|
||||
|
|
|
|||
|
|
@ -92,29 +92,29 @@ get_texobj(GLcontext *ctx, GLenum target)
|
|||
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
return texUnit->Current1D;
|
||||
return texUnit->CurrentTex[TEXTURE_1D_INDEX];
|
||||
case GL_TEXTURE_2D:
|
||||
return texUnit->Current2D;
|
||||
return texUnit->CurrentTex[TEXTURE_2D_INDEX];
|
||||
case GL_TEXTURE_3D:
|
||||
return texUnit->Current3D;
|
||||
return texUnit->CurrentTex[TEXTURE_3D_INDEX];
|
||||
case GL_TEXTURE_CUBE_MAP:
|
||||
if (ctx->Extensions.ARB_texture_cube_map) {
|
||||
return texUnit->CurrentCubeMap;
|
||||
return texUnit->CurrentTex[TEXTURE_CUBE_INDEX];
|
||||
}
|
||||
break;
|
||||
case GL_TEXTURE_RECTANGLE_NV:
|
||||
if (ctx->Extensions.NV_texture_rectangle) {
|
||||
return texUnit->CurrentRect;
|
||||
return texUnit->CurrentTex[TEXTURE_RECT_INDEX];
|
||||
}
|
||||
break;
|
||||
case GL_TEXTURE_1D_ARRAY_EXT:
|
||||
if (ctx->Extensions.MESA_texture_array) {
|
||||
return texUnit->Current1DArray;
|
||||
return texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX];
|
||||
}
|
||||
break;
|
||||
case GL_TEXTURE_2D_ARRAY_EXT:
|
||||
if (ctx->Extensions.MESA_texture_array) {
|
||||
return texUnit->Current2DArray;
|
||||
return texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ static const struct gl_tex_env_combine_state default_combine_state = {
|
|||
void
|
||||
_mesa_copy_texture_state( const GLcontext *src, GLcontext *dst )
|
||||
{
|
||||
GLuint i;
|
||||
GLuint i, tex;
|
||||
|
||||
ASSERT(src);
|
||||
ASSERT(dst);
|
||||
|
|
@ -104,20 +104,10 @@ _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst )
|
|||
/* copy texture object bindings, not contents of texture objects */
|
||||
_mesa_lock_context_textures(dst);
|
||||
|
||||
_mesa_reference_texobj(&dst->Texture.Unit[i].Current1D,
|
||||
src->Texture.Unit[i].Current1D);
|
||||
_mesa_reference_texobj(&dst->Texture.Unit[i].Current2D,
|
||||
src->Texture.Unit[i].Current2D);
|
||||
_mesa_reference_texobj(&dst->Texture.Unit[i].Current3D,
|
||||
src->Texture.Unit[i].Current3D);
|
||||
_mesa_reference_texobj(&dst->Texture.Unit[i].CurrentCubeMap,
|
||||
src->Texture.Unit[i].CurrentCubeMap);
|
||||
_mesa_reference_texobj(&dst->Texture.Unit[i].CurrentRect,
|
||||
src->Texture.Unit[i].CurrentRect);
|
||||
_mesa_reference_texobj(&dst->Texture.Unit[i].Current1DArray,
|
||||
src->Texture.Unit[i].Current1DArray);
|
||||
_mesa_reference_texobj(&dst->Texture.Unit[i].Current2DArray,
|
||||
src->Texture.Unit[i].Current2DArray);
|
||||
for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
|
||||
_mesa_reference_texobj(&dst->Texture.Unit[i].CurrentTex[tex],
|
||||
src->Texture.Unit[i].CurrentTex[tex]);
|
||||
}
|
||||
|
||||
_mesa_unlock_context_textures(dst);
|
||||
}
|
||||
|
|
@ -558,6 +548,7 @@ update_texture_state( GLcontext *ctx )
|
|||
for (unit = 0; unit < ctx->Const.MaxTextureImageUnits; unit++) {
|
||||
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
|
||||
GLbitfield enableBits;
|
||||
GLuint tex;
|
||||
|
||||
texUnit->_Current = NULL;
|
||||
texUnit->_ReallyEnabled = 0;
|
||||
|
|
@ -584,32 +575,29 @@ update_texture_state( GLcontext *ctx )
|
|||
if (enableBits == 0x0)
|
||||
continue;
|
||||
|
||||
ASSERT(texUnit->Current1D);
|
||||
ASSERT(texUnit->Current2D);
|
||||
ASSERT(texUnit->Current3D);
|
||||
ASSERT(texUnit->CurrentCubeMap);
|
||||
ASSERT(texUnit->CurrentRect);
|
||||
ASSERT(texUnit->Current1DArray);
|
||||
ASSERT(texUnit->Current2DArray);
|
||||
for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
|
||||
ASSERT(texUnit->CurrentTex[tex]);
|
||||
}
|
||||
|
||||
/* Look for the highest-priority texture target that's enabled and
|
||||
* complete. That's the one we'll use for texturing. If we're using
|
||||
* a fragment program we're guaranteed that bitcount(enabledBits) <= 1.
|
||||
*/
|
||||
texture_override(ctx, texUnit, enableBits,
|
||||
texUnit->Current2DArray, TEXTURE_2D_ARRAY_BIT);
|
||||
texture_override(ctx, texUnit, enableBits,
|
||||
texUnit->Current1DArray, TEXTURE_1D_ARRAY_BIT);
|
||||
texture_override(ctx, texUnit, enableBits,
|
||||
texUnit->CurrentCubeMap, TEXTURE_CUBE_BIT);
|
||||
texture_override(ctx, texUnit, enableBits,
|
||||
texUnit->Current3D, TEXTURE_3D_BIT);
|
||||
texture_override(ctx, texUnit, enableBits,
|
||||
texUnit->CurrentRect, TEXTURE_RECT_BIT);
|
||||
texture_override(ctx, texUnit, enableBits,
|
||||
texUnit->Current2D, TEXTURE_2D_BIT);
|
||||
texture_override(ctx, texUnit, enableBits,
|
||||
texUnit->Current1D, TEXTURE_1D_BIT);
|
||||
for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
|
||||
/* texture indexes from highest to lowest priority */
|
||||
static const GLuint targets[NUM_TEXTURE_TARGETS] = {
|
||||
TEXTURE_2D_ARRAY_INDEX,
|
||||
TEXTURE_1D_ARRAY_INDEX,
|
||||
TEXTURE_CUBE_INDEX,
|
||||
TEXTURE_3D_INDEX,
|
||||
TEXTURE_RECT_INDEX,
|
||||
TEXTURE_2D_INDEX,
|
||||
TEXTURE_1D_INDEX
|
||||
};
|
||||
GLuint texIndex = targets[tex];
|
||||
texture_override(ctx, texUnit, enableBits,
|
||||
texUnit->CurrentTex[texIndex], 1 << texIndex);
|
||||
}
|
||||
|
||||
if (!texUnit->_ReallyEnabled) {
|
||||
continue;
|
||||
|
|
@ -734,6 +722,7 @@ static void
|
|||
init_texture_unit( GLcontext *ctx, GLuint unit )
|
||||
{
|
||||
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
|
||||
GLuint tex;
|
||||
|
||||
texUnit->EnvMode = GL_MODULATE;
|
||||
ASSIGN_4V( texUnit->EnvColor, 0.0, 0.0, 0.0, 0.0 );
|
||||
|
|
@ -763,13 +752,10 @@ init_texture_unit( GLcontext *ctx, GLuint unit )
|
|||
ASSIGN_4V( texUnit->GenQ.EyePlane, 0.0, 0.0, 0.0, 0.0 );
|
||||
|
||||
/* initialize current texture object ptrs to the shared default objects */
|
||||
_mesa_reference_texobj(&texUnit->Current1D, ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->Current2D, ctx->Shared->DefaultTex[TEXTURE_2D_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->Current3D, ctx->Shared->DefaultTex[TEXTURE_3D_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->CurrentCubeMap, ctx->Shared->DefaultTex[TEXTURE_CUBE_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->CurrentRect, ctx->Shared->DefaultTex[TEXTURE_RECT_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->Current1DArray, ctx->Shared->DefaultTex[TEXTURE_1D_ARRAY_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->Current2DArray, ctx->Shared->DefaultTex[TEXTURE_2D_ARRAY_INDEX]);
|
||||
for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
|
||||
_mesa_reference_texobj(&texUnit->CurrentTex[tex],
|
||||
ctx->Shared->DefaultTex[tex]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -820,13 +806,9 @@ _mesa_free_texture_data(GLcontext *ctx)
|
|||
/* unreference current textures */
|
||||
for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {
|
||||
struct gl_texture_unit *unit = ctx->Texture.Unit + u;
|
||||
_mesa_reference_texobj(&unit->Current1D, NULL);
|
||||
_mesa_reference_texobj(&unit->Current2D, NULL);
|
||||
_mesa_reference_texobj(&unit->Current3D, NULL);
|
||||
_mesa_reference_texobj(&unit->CurrentCubeMap, NULL);
|
||||
_mesa_reference_texobj(&unit->CurrentRect, NULL);
|
||||
_mesa_reference_texobj(&unit->Current1DArray, NULL);
|
||||
_mesa_reference_texobj(&unit->Current2DArray, NULL);
|
||||
for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) {
|
||||
_mesa_reference_texobj(&unit->CurrentTex[tgt], NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free proxy texture objects */
|
||||
|
|
@ -851,24 +833,13 @@ _mesa_free_texture_data(GLcontext *ctx)
|
|||
void
|
||||
_mesa_update_default_objects_texture(GLcontext *ctx)
|
||||
{
|
||||
GLuint i;
|
||||
GLuint i, tex;
|
||||
|
||||
for (i = 0; i < MAX_TEXTURE_UNITS; i++) {
|
||||
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i];
|
||||
|
||||
_mesa_reference_texobj(&texUnit->Current1D,
|
||||
ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->Current2D,
|
||||
ctx->Shared->DefaultTex[TEXTURE_2D_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->Current3D,
|
||||
ctx->Shared->DefaultTex[TEXTURE_3D_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->CurrentCubeMap,
|
||||
ctx->Shared->DefaultTex[TEXTURE_CUBE_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->CurrentRect,
|
||||
ctx->Shared->DefaultTex[TEXTURE_RECT_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->Current1DArray,
|
||||
ctx->Shared->DefaultTex[TEXTURE_1D_ARRAY_INDEX]);
|
||||
_mesa_reference_texobj(&texUnit->Current2DArray,
|
||||
ctx->Shared->DefaultTex[TEXTURE_2D_ARRAY_INDEX]);
|
||||
for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
|
||||
_mesa_reference_texobj(&texUnit->CurrentTex[tex],
|
||||
ctx->Shared->DefaultTex[tex]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -429,7 +429,7 @@ st_bind_teximage(struct st_framebuffer *stfb, uint surfIndex,
|
|||
}
|
||||
|
||||
if (target == ST_TEXTURE_2D) {
|
||||
texObj = texUnit->Current2D;
|
||||
texObj = texUnit->CurrentTex[TEXTURE_2D_INDEX];
|
||||
texImage = _mesa_get_tex_image(ctx, texObj, GL_TEXTURE_2D, level);
|
||||
stImage = st_texture_image(texImage);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,7 +132,8 @@ _swrast_culltriangle( GLcontext *ctx,
|
|||
|
||||
#define SETUP_CODE \
|
||||
struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0]; \
|
||||
struct gl_texture_object *obj = ctx->Texture.Unit[0].Current2D; \
|
||||
struct gl_texture_object *obj = \
|
||||
ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; \
|
||||
const GLint b = obj->BaseLevel; \
|
||||
const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width; \
|
||||
const GLfloat theight = (GLfloat) obj->Image[0][b]->Height; \
|
||||
|
|
@ -183,7 +184,8 @@ _swrast_culltriangle( GLcontext *ctx,
|
|||
|
||||
#define SETUP_CODE \
|
||||
struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0]; \
|
||||
struct gl_texture_object *obj = ctx->Texture.Unit[0].Current2D; \
|
||||
struct gl_texture_object *obj = \
|
||||
ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; \
|
||||
const GLint b = obj->BaseLevel; \
|
||||
const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width; \
|
||||
const GLfloat theight = (GLfloat) obj->Image[0][b]->Height; \
|
||||
|
|
@ -524,7 +526,8 @@ affine_span(GLcontext *ctx, SWspan *span,
|
|||
#define SETUP_CODE \
|
||||
struct affine_info info; \
|
||||
struct gl_texture_unit *unit = ctx->Texture.Unit+0; \
|
||||
struct gl_texture_object *obj = unit->Current2D; \
|
||||
struct gl_texture_object *obj = \
|
||||
ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; \
|
||||
const GLint b = obj->BaseLevel; \
|
||||
const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width; \
|
||||
const GLfloat theight = (GLfloat) obj->Image[0][b]->Height; \
|
||||
|
|
@ -794,7 +797,8 @@ fast_persp_span(GLcontext *ctx, SWspan *span,
|
|||
#define SETUP_CODE \
|
||||
struct persp_info info; \
|
||||
const struct gl_texture_unit *unit = ctx->Texture.Unit+0; \
|
||||
const struct gl_texture_object *obj = unit->Current2D; \
|
||||
struct gl_texture_object *obj = \
|
||||
ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; \
|
||||
const GLint b = obj->BaseLevel; \
|
||||
info.texture = (const GLchan *) obj->Image[0][b]->Data; \
|
||||
info.twidth_log2 = obj->Image[0][b]->WidthLog2; \
|
||||
|
|
@ -1050,7 +1054,8 @@ _swrast_choose_triangle( GLcontext *ctx )
|
|||
const struct gl_texture_image *texImg;
|
||||
GLenum minFilter, magFilter, envMode;
|
||||
GLint format;
|
||||
texObj2D = ctx->Texture.Unit[0].Current2D;
|
||||
texObj2D = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];
|
||||
|
||||
texImg = texObj2D ? texObj2D->Image[0][texObj2D->BaseLevel] : NULL;
|
||||
format = texImg ? texImg->TexFormat->MesaFormat : -1;
|
||||
minFilter = texObj2D ? texObj2D->MinFilter : (GLenum) 0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue