void SetExtGLFuncs(void) { //----------------------------------------------------// SetFixes(); // update fix infos //----------------------------------------------------// { if(bAdvancedBlend) bUseMultiPass=TRUE; // -> pseudo-advanced with 2 passes else bUseMultiPass=FALSE; // -> or simple 'bright color' mode // bGLBlend=FALSE; // -> no ext blending! glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glError(); } if(bOpaquePass) // opaque mode? { if(dwActFixes&32) { TCF[0]=CP8RGBA_0; PalTexturedColourFn=CP8RGBA; // -> init col func } else { TCF[0]=XP8RGBA_0; PalTexturedColourFn=XP8RGBA; // -> init col func } TCF[1]=XP8RGBA_1; glAlphaFuncx(GL_GREATER,0.49f); glError(); } else // no opaque mode? { TCF[0]=TCF[1]=P8RGBA; PalTexturedColourFn=P8RGBA; // -> init col func glAlphaFuncx(GL_NOTEQUAL,0); glError(); // --> set alpha func } //----------------------------------------------------// LoadSubTexFn=LoadSubTexturePageSort; // init load tex ptr bBlendEnable=FALSE; // init blending: off glDisable(GL_BLEND); glError(); SetScanTrans(); // init scan lines (if wanted) }
void SetExtGLFuncs(void) { //----------------------------------------------------// SetFixes(); // update fix infos //----------------------------------------------------// if(iUseExts && !(dwActFixes&1024) && // extensions wanted? and not turned off by game fix? strstr((char *)glGetString(GL_EXTENSIONS), // and blend_subtract available? "GL_EXT_blend_subtract")) { // -> get ogl blend function pointer glBlendEquationEXTEx=(PFNGLBLENDEQU)glBlendEquationEXT; } else // no subtract blending? { if(glBlendEquationEXTEx) // -> change to additive blending (if subract was active) glBlendEquationEXTEx(FUNC_ADD_EXT); glBlendEquationEXTEx=(PFNGLBLENDEQU)NULL; // -> no more blend function pointer } //----------------------------------------------------// if(iUseExts && bAdvancedBlend && // advanced blending wanted ? strstr((char *)glGetString(GL_EXTENSIONS), // and extension avail? "GL_EXT_texture_env_combine")) { bUseMultiPass=FALSE;bGLBlend=TRUE; // -> no need for 2 passes, perfect glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, COMBINE_EXT); glTexEnvf(GL_TEXTURE_ENV, COMBINE_RGB_EXT, GL_MODULATE); glTexEnvf(GL_TEXTURE_ENV, COMBINE_ALPHA_EXT, GL_MODULATE); glTexEnvf(GL_TEXTURE_ENV, RGB_SCALE_EXT, 2.0f); } else // no advanced blending wanted/available: { if(bAdvancedBlend) bUseMultiPass=TRUE; // -> pseudo-advanced with 2 passes else bUseMultiPass=FALSE; // -> or simple 'bright color' mode bGLBlend=FALSE; // -> no ext blending! glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } //----------------------------------------------------// // init standard tex quality 0-2, and big alpha mode 3 if(!(dwActFixes&0x4000) && iFilterType && iTexQuality>=3) bSmallAlpha=TRUE; else bSmallAlpha=FALSE; if(bOpaquePass) // opaque mode? { if(dwActFixes&32) { TCF[0]=CP8RGBA_0; PalTexturedColourFn=CP8RGBA; // -> init col func } else { TCF[0]=XP8RGBA_0; PalTexturedColourFn=XP8RGBA; // -> init col func } TCF[1]=XP8RGBA_1; glAlphaFunc(GL_GREATER,0.49f); } else // no opaque mode? { TCF[0]=TCF[1]=P8RGBA; PalTexturedColourFn=P8RGBA; // -> init col func glAlphaFunc(GL_NOTEQUAL,0); // --> set alpha func } //----------------------------------------------------// LoadSubTexFn=LoadSubTexturePageSort; // init load tex ptr giWantedFMT=GL_RGBA; // init ogl tex format switch(iTexQuality) // -> quality: { //--------------------------------------------------// case 0: // -> don't care giWantedRGBA=4; giWantedTYPE=GL_UNSIGNED_BYTE; break; //--------------------------------------------------// case 1: // -> R4G4B4A4 if(bGLExt) { giWantedRGBA=GL_RGBA4; giWantedTYPE=GL_UNSIGNED_SHORT_4_4_4_4_EXT; LoadSubTexFn=LoadPackedSubTexturePageSort; if(bOpaquePass) { if(dwActFixes&32) PTCF[0]=CP4RGBA_0; else PTCF[0]=XP4RGBA_0; PTCF[1]=XP4RGBA_1; } else { PTCF[0]=PTCF[1]=P4RGBA; } } else { giWantedRGBA=GL_RGBA4; giWantedTYPE=GL_UNSIGNED_BYTE; } break; //--------------------------------------------------// case 2: // -> R5B5G5A1 if(bGLExt) { giWantedRGBA=GL_RGB5_A1; giWantedTYPE=GL_UNSIGNED_SHORT_5_5_5_1_EXT; LoadSubTexFn=LoadPackedSubTexturePageSort; if(bOpaquePass) { if(dwActFixes&32) PTCF[0]=CP5RGBA_0; else PTCF[0]=XP5RGBA_0; PTCF[1]=XP5RGBA_1; } else { PTCF[0]=PTCF[1]=P5RGBA; } } else { giWantedRGBA=GL_RGB5_A1;giWantedTYPE=GL_UNSIGNED_BYTE; } break; //--------------------------------------------------// case 3: // -> R8G8B8A8 giWantedRGBA=GL_RGBA8; giWantedTYPE=GL_UNSIGNED_BYTE; if(bSmallAlpha) { if(bOpaquePass) // opaque mode? { if(dwActFixes&32) {TCF[0]=CP8RGBAEx_0;PalTexturedColourFn=CP8RGBAEx;} else {TCF[0]=XP8RGBAEx_0;PalTexturedColourFn=XP8RGBAEx;} TCF[1]=XP8RGBAEx_1; } } break; //--------------------------------------------------// case 4: // -> R8G8B8A8 giWantedRGBA = GL_RGBA8; giWantedTYPE = GL_UNSIGNED_BYTE; if(strstr((char *)glGetString(GL_EXTENSIONS), // and extension avail? "GL_EXT_bgra")) { giWantedFMT = GL_BGRA_EXT; if(bOpaquePass) // opaque mode? { if(bSmallAlpha) { if(dwActFixes&32) {TCF[0]=CP8BGRAEx_0;PalTexturedColourFn=CP8RGBAEx;} else {TCF[0]=XP8BGRAEx_0;PalTexturedColourFn=XP8RGBAEx;} TCF[1]=XP8BGRAEx_1; } else { if(dwActFixes&32) {TCF[0]=CP8BGRA_0;PalTexturedColourFn=CP8RGBA;} else {TCF[0]=XP8BGRA_0;PalTexturedColourFn=XP8RGBA;} TCF[1]=XP8BGRA_1; } } else // no opaque mode? { TCF[0]=TCF[1]=P8BGRA; // -> init col func } } else { iTexQuality=3; if(bSmallAlpha) { if(bOpaquePass) // opaque mode? { if(dwActFixes&32) {TCF[0]=CP8RGBAEx_0;PalTexturedColourFn=CP8RGBAEx;} else {TCF[0]=XP8RGBAEx_0;PalTexturedColourFn=XP8RGBAEx;} TCF[1]=XP8RGBAEx_1; } } } break; //--------------------------------------------------// } bBlendEnable=FALSE; // init blending: off glDisable(GL_BLEND); SetScanTrans(); // init scan lines (if wanted) }