示例#1
0
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);
}
示例#2
0
void PACKSPU_APIENTRY packspu_ActiveTextureARB(GLenum texture)
{
    crStateActiveTextureARB(texture);
    crPackActiveTextureARB(texture);
}