00001 #include "flGlobal.h" 00002 #if FL_TEXTURE_MANIPULATION != 0 00003 #include <stdlib.h> 00004 #include <stdio.h> 00005 #include <pspkernel.h> 00006 00007 #if FL_INCLUDE_ALL_C == 0 00008 #include "flTextureManipulation.h" 00009 #include "flTexture.h" 00010 #endif 00011 00012 void texMnpColorReplace(Texture* inTex, u32 inColor, u32 inReplace) { 00013 if(inTex->texPixelFormat > GU_PSM_8888) { 00014 #if DEBUG_WARNING != 0 00015 debugWarning("Color replacement is currently only supported for true-color textures."); 00016 #endif 00017 return; 00018 } 00019 int i, j; 00020 if(inTex->texPixelFormat == GU_PSM_8888) { 00021 u32* tempData = (u32*)inTex->texData; 00022 for(j = 0; j < inTex->texHeight; j++) { 00023 for(i = 0; i < inTex->texWidth; i++) { 00024 if(tempData[(j * inTex->texDataWidth) + i] == inColor) 00025 tempData[(j * inTex->texDataWidth) + i] = inReplace; 00026 } 00027 } 00028 } else if(inTex->texPixelFormat < GU_PSM_8888) { 00029 u16* tempData = (u16*)inTex->texData; 00030 for(j = 0; j < inTex->texHeight; j++) { 00031 for(i = 0; i < inTex->texWidth; i++) { 00032 if(tempData[(j * inTex->texDataWidth) + i] == (inColor & 0x0000FFFF)) 00033 tempData[(j * inTex->texDataWidth) + i] = (inReplace & 0x0000FFFF); 00034 } 00035 } 00036 } 00037 #if FL_TEXTURE_UNCACHED == 0 00038 sceKernelDcacheWritebackInvalidateAll(); 00039 #endif 00040 } 00041 00042 #endif