aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-08-06 11:57:50 +0000
committertaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-08-06 11:57:50 +0000
commit610231f47989858c7a17c3387c0d11fbccf0edb9 (patch)
tree04e64712b4f54e5fe922eaa32a8ae2a88bec1855 /src
parent3a60f1731be90d6d3c81debfdb530ca4dc383193 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/render.c26
1 files changed, 19 insertions, 7 deletions
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);