Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2008-06-18 14:30:14 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2008-06-18 14:30:14 +0400
commit3f488f4d7092f8636a7af7860bd9c134f92baecf (patch)
treef78043f39eaf5789b43e975d579cb284b168beb0 /source/gameengine/Rasterizer
parent5cd4b6ac90da5e01da3d758480a404c1562cb792 (diff)
* Fix for a crash in game engine vertex array drawing with texfaces.
* For 2D filters, don't require opengl 2.0 but just the extensions, so it works on computers without full 2.0 support too. * In debug mode, don't print memory statistics for preview render.
Diffstat (limited to 'source/gameengine/Rasterizer')
-rw-r--r--source/gameengine/Rasterizer/RAS_2DFilterManager.cpp17
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp20
2 files changed, 24 insertions, 13 deletions
diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
index 291890a8dde..e9ab4ccca8d 100644
--- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
@@ -54,11 +54,13 @@
RAS_2DFilterManager::RAS_2DFilterManager():
-texturewidth(-1), textureheight(-1),
+texname(-1), texturewidth(-1), textureheight(-1),
canvaswidth(-1), canvasheight(-1),
-numberoffilters(0),texname(-1)
+numberoffilters(0)
{
- isshadersupported = GLEW_VERSION_2_0;
+ isshadersupported = GLEW_ARB_shader_objects &&
+ GLEW_ARB_fragment_shader && GLEW_ARB_multitexture;
+
if(!isshadersupported)
{
std::cout<<"shaders not supported!" << std::endl;
@@ -81,7 +83,6 @@ RAS_2DFilterManager::~RAS_2DFilterManager()
unsigned int RAS_2DFilterManager::CreateShaderProgram(char* shadersource)
{
GLuint program = 0;
-#if defined(GL_ARB_shader_objects) && defined(WITH_GLEXT)
GLuint fShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER);
GLint success;
@@ -117,7 +118,7 @@ unsigned int RAS_2DFilterManager::CreateShaderProgram(char* shadersource)
std::cout << "2dFilters - Shader program validation error" << std::endl;
return 0;
}
-#endif
+
return program;
}
@@ -151,7 +152,6 @@ unsigned int RAS_2DFilterManager::CreateShaderProgram(int filtermode)
void RAS_2DFilterManager::StartShaderProgram(unsigned int shaderprogram)
{
-#if defined(GL_ARB_shader_objects) && defined(WITH_GLEXT)
GLint uniformLoc;
glUseProgramObjectARB(shaderprogram);
uniformLoc = glGetUniformLocationARB(shaderprogram, "bgl_RenderedTexture");
@@ -178,14 +178,11 @@ void RAS_2DFilterManager::StartShaderProgram(unsigned int shaderprogram)
{
glUniform1fARB(uniformLoc,textureheight);
}
-#endif
}
void RAS_2DFilterManager::EndShaderProgram()
{
-#if defined(GL_ARB_shader_objects) && defined(WITH_GLEXT)
glUseProgramObjectARB(0);
-#endif
}
void RAS_2DFilterManager::SetupTexture()
@@ -295,7 +292,6 @@ void RAS_2DFilterManager::EnableFilter(RAS_2DFILTER_MODE mode, int pass, STR_Str
{
if(!isshadersupported)
return;
-#if defined(GL_ARB_shader_objects) && defined(WITH_GLEXT)
if(pass<0 || pass>=MAX_RENDER_PASS)
return;
@@ -336,5 +332,4 @@ void RAS_2DFilterManager::EnableFilter(RAS_2DFILTER_MODE mode, int pass, STR_Str
m_filters[pass] = CreateShaderProgram(mode);
m_enabled[pass] = 1;
}
-#endif
}
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
index 67c72aacdcf..ce76318c2ce 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
@@ -142,6 +142,9 @@ void RAS_VAOpenGLRasterizer::IndexPrimitives( const vecVertexArray& vertexarrays
glColor3d(0,0,0);
}
+ EnableTextures(false);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+
// use glDrawElements to draw each vertexarray
for (vt=0;vt<vertexarrays.size();vt++)
{
@@ -168,6 +171,8 @@ void RAS_VAOpenGLRasterizer::IndexPrimitives( const vecVertexArray& vertexarrays
}
+
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
void RAS_VAOpenGLRasterizer::IndexPrimitivesMulti( const vecVertexArray& vertexarrays,
@@ -281,6 +286,8 @@ void RAS_VAOpenGLRasterizer::TexCoordPtr(const RAS_TexVert *tv)
break;
}
}
+
+ glClientActiveTextureARB(GL_TEXTURE0_ARB);
}
if(GLEW_ARB_vertex_program) {
@@ -359,10 +366,14 @@ void RAS_VAOpenGLRasterizer::EnableTextures(bool enable)
break;
}
}
+
+ glClientActiveTextureARB(GL_TEXTURE0_ARB);
}
else {
- if(enable) glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- else glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ if(texco_num) {
+ if(enable) glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ else glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ }
}
if(GLEW_ARB_vertex_program) {
@@ -383,5 +394,10 @@ void RAS_VAOpenGLRasterizer::EnableTextures(bool enable)
}
}
}
+
+ if(!enable) {
+ m_last_texco_num = 0;
+ m_last_attrib_num = 0;
+ }
}