static void replicatespuReplicateTextures(CRContext *tempState, CRContext *state) { CRTextureState *texstate = &(state->texture); /* use unit 0 for sending textures */ if (replicate_spu.swap) crPackActiveTextureARBSWAP(GL_TEXTURE0); else crPackActiveTextureARB(GL_TEXTURE0); /* replicate all texture objects */ crHashtableWalk(state->shared->textureTable, TextureObjDiffCallback, tempState); /* default texture objects */ { CRbitvalue *bitID = NULL, *nbitID = NULL; /* not used */ GLboolean alwaysDirty = GL_TRUE; crStateTextureObjectDiff(tempState, bitID, nbitID, &texstate->base1D, alwaysDirty); crStateTextureObjectDiff(tempState, bitID, nbitID, &texstate->base2D, alwaysDirty); crStateTextureObjectDiff(tempState, bitID, nbitID, &texstate->base3D, alwaysDirty); crStateTextureObjectDiff(tempState, bitID, nbitID, &texstate->baseCubeMap, alwaysDirty); crStateTextureObjectDiff(tempState, bitID, nbitID, &texstate->baseRect, alwaysDirty); } /* restore unit 0 bindings */ if (replicate_spu.swap) { crPackActiveTextureARBSWAP(GL_TEXTURE0); crPackBindTextureSWAP(GL_TEXTURE_1D, texstate->unit[0].currentTexture1D->name); crPackBindTextureSWAP(GL_TEXTURE_2D, texstate->unit[0].currentTexture2D->name); crPackBindTextureSWAP(GL_TEXTURE_3D, texstate->unit[0].currentTexture3D->name); crPackBindTextureSWAP(GL_TEXTURE_CUBE_MAP_ARB, texstate->unit[0].currentTextureCubeMap->name); crPackBindTextureSWAP(GL_TEXTURE_RECTANGLE_NV, texstate->unit[0].currentTextureRect->name); } else { crPackActiveTextureARB(GL_TEXTURE0); crPackBindTexture(GL_TEXTURE_1D, texstate->unit[0].currentTexture1D->name); crPackBindTexture(GL_TEXTURE_2D, texstate->unit[0].currentTexture2D->name); crPackBindTexture(GL_TEXTURE_3D, texstate->unit[0].currentTexture3D->name); crPackBindTexture(GL_TEXTURE_CUBE_MAP_ARB, texstate->unit[0].currentTextureCubeMap->name); crPackBindTexture(GL_TEXTURE_RECTANGLE_NV, texstate->unit[0].currentTextureRect->name); } /* finally, set active texture unit again */ crPackActiveTextureARB(GL_TEXTURE0 + texstate->curTextureUnit); }
void PACKSPU_APIENTRY packspu_ActiveTextureARB(GLenum texture) { crStateActiveTextureARB(texture); crPackActiveTextureARB(texture); }