diff options
author | Kent Mein <mein@cs.umn.edu> | 2008-04-16 21:40:59 +0400 |
---|---|---|
committer | Kent Mein <mein@cs.umn.edu> | 2008-04-16 21:40:59 +0400 |
commit | 867e12836b746b174743d0500e39343e1adb1b7f (patch) | |
tree | 36f42a00eb4ab505eca0c2d67c26c85ed78a9e7e /source/gameengine/Ketsji/BL_Texture.cpp | |
parent | d482b3285cdbfc85b5031fc7223b8ffe96619562 (diff) |
This patch spawns from this game engine issue:
[#7113] GE crash pressing as soon as P on 64 bit
Note: glext.h has been removed from the source
If you get errors compiling with it you have 2 options
download/install glext.h (preferred method)
or set WITH_BF_GLEXT=false
If your a user and having problems with game engine try
setting the env var: WITHOUT_GLEXT 1
Kent
Diffstat (limited to 'source/gameengine/Ketsji/BL_Texture.cpp')
-rw-r--r-- | source/gameengine/Ketsji/BL_Texture.cpp | 107 |
1 files changed, 59 insertions, 48 deletions
diff --git a/source/gameengine/Ketsji/BL_Texture.cpp b/source/gameengine/Ketsji/BL_Texture.cpp index f6fb990fd4c..687b1af957d 100644 --- a/source/gameengine/Ketsji/BL_Texture.cpp +++ b/source/gameengine/Ketsji/BL_Texture.cpp @@ -17,6 +17,7 @@ #include <iostream> #include <map> +#include <stdlib.h> #include "BL_Material.h" #include "BL_Texture.h" @@ -360,10 +361,13 @@ unsigned int BL_Texture::GetTextureType() const int BL_Texture::GetMaxUnits() { GLint unit=0; -#ifdef GL_ARB_multitexture - if(RAS_EXT_support._ARB_multitexture) { - glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &unit); - return (MAXTEX>=unit?unit:MAXTEX); + +#if defined(GL_ARB_multitexture) && defined(WITH_GLEXT) + if (!getenv("WITHOUT_GLEXT")) { + if(RAS_EXT_support._ARB_multitexture) { + glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &unit); + return (MAXTEX>=unit?unit:MAXTEX); + } } #endif return 0; @@ -371,28 +375,33 @@ int BL_Texture::GetMaxUnits() void BL_Texture::ActivateFirst() { -#ifdef GL_ARB_multitexture - if(RAS_EXT_support._ARB_multitexture) - bgl::blActiveTextureARB(GL_TEXTURE0_ARB); +#if defined(GL_ARB_multitexture) && defined(WITH_GLEXT) + if (!getenv("WITHOUT_GLEXT")) { + if(RAS_EXT_support._ARB_multitexture) + bgl::blActiveTextureARB(GL_TEXTURE0_ARB); + } #endif } void BL_Texture::ActivateUnit(int unit) { -#ifdef GL_ARB_multitexture - if(RAS_EXT_support._ARB_multitexture) - if(unit <= MAXTEX) - bgl::blActiveTextureARB(GL_TEXTURE0_ARB+unit); +#if defined(GL_ARB_multitexture) && defined(WITH_GLEXT) + if (!getenv("WITHOUT_GLEXT")) { + if(RAS_EXT_support._ARB_multitexture) + if(unit <= MAXTEX) + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+unit); + } #endif } void BL_Texture::DisableUnit() { -#ifdef GL_ARB_multitexture - if(RAS_EXT_support._ARB_multitexture) - bgl::blActiveTextureARB(GL_TEXTURE0_ARB+mUnit); - +#if defined(GL_ARB_multitexture) && defined(WITH_GLEXT) + if (!getenv("WITHOUT_GLEXT")) { + if(RAS_EXT_support._ARB_multitexture) + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+mUnit); + } #endif @@ -420,52 +429,54 @@ void BL_Texture::DisableUnit() void BL_Texture::DisableAllTextures() { -#ifdef GL_ARB_multitexture - glDisable(GL_BLEND); - for(int i=0; i<MAXTEX; i++) { +#if defined(GL_ARB_multitexture) && defined(WITH_GLEXT) + if (!getenv("WITHOUT_GLEXT")) { + glDisable(GL_BLEND); + for(int i=0; i<MAXTEX; i++) { + if(RAS_EXT_support._ARB_multitexture) + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i); + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glDisable(GL_TEXTURE_2D); + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_TEXTURE_GEN_R); + glDisable(GL_TEXTURE_GEN_Q); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + } if(RAS_EXT_support._ARB_multitexture) - bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i); - - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + bgl::blActiveTextureARB(GL_TEXTURE0_ARB); } - if(RAS_EXT_support._ARB_multitexture) - bgl::blActiveTextureARB(GL_TEXTURE0_ARB); - #endif } void BL_Texture::ActivateTexture() { -#ifdef GL_ARB_multitexture - if(RAS_EXT_support._ARB_multitexture) - bgl::blActiveTextureARB(GL_TEXTURE0_ARB+mUnit); +#if defined(GL_ARB_multitexture) && defined(WITH_GLEXT) + if (!getenv("WITHOUT_GLEXT")) { + if(RAS_EXT_support._ARB_multitexture) + bgl::blActiveTextureARB(GL_TEXTURE0_ARB+mUnit); #ifdef GL_ARB_texture_cube_map - if (mType == GL_TEXTURE_CUBE_MAP_ARB && RAS_EXT_support._ARB_texture_cube_map) - { - glBindTexture( GL_TEXTURE_CUBE_MAP_ARB, mTexture ); - glEnable(GL_TEXTURE_CUBE_MAP_ARB); - } - else + if (mType == GL_TEXTURE_CUBE_MAP_ARB && RAS_EXT_support._ARB_texture_cube_map) + { + glBindTexture( GL_TEXTURE_CUBE_MAP_ARB, mTexture ); + glEnable(GL_TEXTURE_CUBE_MAP_ARB); + } else #endif - { + { - #ifdef GL_ARB_texture_cube_map - if(RAS_EXT_support._ARB_texture_cube_map ) - glDisable(GL_TEXTURE_CUBE_MAP_ARB); - #endif + #ifdef GL_ARB_texture_cube_map + if(RAS_EXT_support._ARB_texture_cube_map ) + glDisable(GL_TEXTURE_CUBE_MAP_ARB); + #endif - glBindTexture( GL_TEXTURE_2D, mTexture ); - glEnable(GL_TEXTURE_2D); + glBindTexture( GL_TEXTURE_2D, mTexture ); + glEnable(GL_TEXTURE_2D); + } } #endif } |