From 610231f47989858c7a17c3387c0d11fbccf0edb9 Mon Sep 17 00:00:00 2001 From: taw27 Date: Wed, 6 Aug 2008 11:57:50 +0000 Subject: Shader optimisations (use blank texture when none specified) git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@220 84d2e878-0bd5-11dd-ad15-13eda11d74c5 --- src/render.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/render.c b/src/render.c index 26d1dcc..84de330 100644 --- a/src/render.c +++ b/src/render.c @@ -185,6 +185,7 @@ RenderContext *render_setup(int width, int height, int disable_vbos, int disable /* Load misc texture bits */ texture_load(r, "radioactive"); texture_load(r, "fuel"); + texture_load(r, "placeholder"); render_text_setup(r); @@ -209,6 +210,20 @@ static GLenum render_gltype(PrimitiveType type) { } +static void render_placeholder_texture(RenderContext *r) { + + Texture *texture; + + texture = texture_lookup(r, "placeholder"); + if ( texture != NULL ) { + glBindTexture(GL_TEXTURE_2D, texture->texname); + glEnable(GL_TEXTURE_2D); + } else { + fprintf(stderr, "Couldn't find placeholder texture!\n"); + } + +} + static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderContext *r, int *nvert, GLfloat alpha) { int j; @@ -271,9 +286,8 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); shaderutils_setuni(r->lighting_program, "texture_emits", 1); } else { - if ( r->shaders ) { - shaderutils_setuni(r->lighting_program, "texture_enabled", 0); - } /* else don't enable texturing */ + if ( r->shaders ) render_placeholder_texture(r); + /* else don't glEnable() texturing */ } } else if ( p->texture != NULL ) { Texture *texture; @@ -282,7 +296,6 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC glBindTexture(GL_TEXTURE_2D, texture->texname); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - if ( r->shaders ) shaderutils_setuni(r->lighting_program, "texture_enabled", 1); if ( r->shaders && texture->has_normals ) { glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texture->normalmap); @@ -290,10 +303,10 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC glActiveTexture(GL_TEXTURE0); } } else { - if ( r->shaders ) shaderutils_setuni(r->lighting_program, "texture_enabled", 0); + if ( r->shaders ) render_placeholder_texture(r); } } else { - if ( r->shaders ) shaderutils_setuni(r->lighting_program, "texture_enabled", 0); + if ( r->shaders ) render_placeholder_texture(r); } if ( r->vbos ) { glBindBuffer(GL_ARRAY_BUFFER, p->vertices_buffer); @@ -623,7 +636,6 @@ void render_draw(Game *game, Uint32 t) { shaderutils_setuni(game->render->lighting_program, "texture", 0); /* GL_TEXTURE0 */ shaderutils_setuni(game->render->lighting_program, "normalmap", 1); /* GL_TEXTURE1 */ shaderutils_setuni(game->render->lighting_program, "texture_only", 0); - shaderutils_setuni(game->render->lighting_program, "texture_enabled", 1); shaderutils_setuni(game->render->lighting_program, "has_normals", 0); } render_setup_lighting(game); -- cgit v1.2.3