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 | |
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')
-rw-r--r-- | source/gameengine/Ketsji/BL_Texture.cpp | 107 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.cpp | 24 | ||||
-rw-r--r-- | source/gameengine/Ketsji/Makefile | 5 | ||||
-rw-r--r-- | source/gameengine/Ketsji/SConscript | 3 |
4 files changed, 81 insertions, 58 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 } diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index f3f10ea78b4..b2e744dce4d 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -51,6 +51,8 @@ /* #endif */ #endif +#include <stdlib.h> + #ifdef WIN32 #pragma warning (disable : 4786) #endif //WIN32 @@ -335,16 +337,18 @@ static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *) pprint(""); } #endif -#ifdef GL_ARB_multitexture - support = ext._ARB_multitexture; - count = 1; - pprint(" GL_ARB_multitexture supported? "<< (support?"yes.":"no.")); - if(support){ - pprint(" ----------Details----------"); - int units=0; - glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, (GLint*)&units); - pprint(" Max texture units available. " << units); - pprint(""); +#if defined(GL_ARB_multitexture) && defined(WITH_GLEXT) + if (!getenv("WITHOUT_GLEXT")) { + support = ext._ARB_multitexture; + count = 1; + pprint(" GL_ARB_multitexture supported? "<< (support?"yes.":"no.")); + if(support){ + pprint(" ----------Details----------"); + int units=0; + glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, (GLint*)&units); + pprint(" Max texture units available. " << units); + pprint(""); + } } #endif #ifdef GL_ARB_texture_env_combine diff --git a/source/gameengine/Ketsji/Makefile b/source/gameengine/Ketsji/Makefile index f7813c80a59..502e8949e7a 100644 --- a/source/gameengine/Ketsji/Makefile +++ b/source/gameengine/Ketsji/Makefile @@ -65,6 +65,11 @@ CPPFLAGS += -I../../blender/makesdna CPPFLAGS += -I../../blender/imbuf CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include +ifeq ($(WITH_BF_GLEXT),true) + CPPFLAGS += -DWITH_GLEXT +endif + + ########################### SOURCEDIR = source/gameengine/Ketsji diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript index cb213522f1d..c7c80345796 100644 --- a/source/gameengine/Ketsji/SConscript +++ b/source/gameengine/Ketsji/SConscript @@ -25,6 +25,9 @@ if env['OURPLATFORM'] == 'win32-vc': cflags.append('/GR') cflags.append('/Ox') +if env['WITH_BF_GLEXT'] == 1: + env['CPPFLAGS'].append('-DWITH_GLEXT') + incs += ' ' + env['BF_SOLID_INC'] incs += ' ' + env['BF_PYTHON_INC'] incs += ' ' + env['BF_SDL_INC'] |