From 9dea7d83cc1bddf77682deb6581a0f4a6cb24113 Mon Sep 17 00:00:00 2001 From: taw27 Date: Mon, 28 Jul 2008 12:29:44 +0000 Subject: Remove hemisphere stuff git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@190 84d2e878-0bd5-11dd-ad15-13eda11d74c5 --- data/models/lander | 6 -- src/model.c | 15 +---- src/render.c | 178 ++++++++++++++++------------------------------------- src/types.h | 7 +-- 4 files changed, 56 insertions(+), 150 deletions(-) diff --git a/data/models/lander b/data/models/lander index 5959966..56b6532 100644 --- a/data/models/lander +++ b/data/models/lander @@ -346,9 +346,3 @@ colour 0.0 0.5 0.2 0.10 0.35 0.05 -0.10 0.35 0.05 -HEMISPHERE -colour 0.2 0.0 1.0 -shiny 100.0 - 0.00 0.00 0.20 -radius 0.25 - diff --git a/src/model.c b/src/model.c index 1e43297..c159aa1 100644 --- a/src/model.c +++ b/src/model.c @@ -78,14 +78,6 @@ static Primitive *model_add_primitive(Model *model, GLenum type, GLfloat *vertic Primitive *p; - /* Sanity check */ - if ( type == PRIMITIVE_HEMISPHERE ) { - if ( !(attribs & ATTRIB_RADIUS) ) { - fprintf(stderr, "Radius must be specified for all hemispheres in model '%s'\n", model->name); - return NULL; - } - } - p = malloc(sizeof(Primitive)); if ( p == NULL ) return NULL; @@ -124,9 +116,9 @@ static Primitive *model_add_primitive(Model *model, GLenum type, GLfloat *vertic p->radius = radius; p->shininess = shininess; - if ( vbos && ( type != PRIMITIVE_HEMISPHERE ) ) { + if ( vbos ) { - /* FIXME: Move this snippet to render.c is some tidy way */ + /* FIXME: Move this snippet to render.c in some tidy way */ glGenBuffers(1, &p->vertices_buffer); glBindBuffer(GL_ARRAY_BUFFER, p->vertices_buffer); @@ -257,9 +249,6 @@ static int model_load(ModelContext *ctx, const char *name, RenderContext *render if ( strncmp(line, "TRIANGLES", 9) == 0 ) { type = PRIMITIVE_TRIANGLES; } - if ( strncmp(line, "HEMISPHERE", 10) == 0 ) { - type = PRIMITIVE_HEMISPHERE; - } if ( sscanf(line, "%f %f %f %f %f", &forget, &forget, &forget, &x, &y) == 5 ) { texx = x; texy = y; diff --git a/src/render.c b/src/render.c index 6c7cd5b..0d3f7fa 100644 --- a/src/render.c +++ b/src/render.c @@ -136,20 +136,6 @@ static void render_delete_shaders(RenderContext *r) { } -#define HEMI_ROUND_BITS 16 -#define HEMI_UP_BITS 8 -#define HEMI_NUM_VERTICES (4 * HEMI_ROUND_BITS * HEMI_UP_BITS) -#define ADD_VERTEX \ - r->hemisphere_v[3*i + 0] = xv; \ - r->hemisphere_v[3*i + 1] = yv; \ - r->hemisphere_v[3*i + 2] = zv; \ - r->hemisphere_n[3*i + 0] = xv; \ - r->hemisphere_n[3*i + 1] = yv; \ - r->hemisphere_n[3*i + 2] = zv; \ - r->hemisphere_t[2*i + 0] = 0.5 + 0.5*sin(xv); \ - r->hemisphere_t[2*i + 1] = 0.5 + 0.5*sin(yv); \ - i++; - /* OpenGL initial setup */ RenderContext *render_setup(int width, int height, int disable_vbos, int disable_fbos, int disable_shaders) { @@ -244,39 +230,6 @@ RenderContext *render_setup(int width, int height, int disable_vbos, int disable } - /* Create coordinates for a hemisphere to reuse later */ - r->hemisphere_v = malloc(3*HEMI_NUM_VERTICES*sizeof(GLfloat)); - r->hemisphere_n = malloc(3*HEMI_NUM_VERTICES*sizeof(GLfloat)); - r->hemisphere_t = malloc(2*HEMI_NUM_VERTICES*sizeof(GLfloat)); - double step_up = M_PI_2/(double)HEMI_UP_BITS; - double step_round = 2*M_PI/(double)HEMI_ROUND_BITS; - int is, js; - int i = 0; - for ( is=0; isshaders ) render_load_shaders(r); r->num_textures = 0; @@ -356,90 +309,65 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC glMaterialfv(GL_FRONT, GL_SPECULAR, black); } - if ( p->type != PRIMITIVE_HEMISPHERE ) { - - /* Location and orientation */ - glPushMatrix(); - glTranslatef(x, y, z); - glRotatef(rad2deg(instance->yaw), 0.0, 0.0, -1.0); /* Minus sign defines +yaw as "right" */ - - /* Texture */ - if ( p->attribs & ATTRIB_SWIRLY ) { - if ( r->fbos && r->shaders ) { - glBindTexture(GL_TEXTURE_2D, r->swirly_texture); - glEnable(GL_TEXTURE_2D); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - render_setuni(r->lighting_program, "texture_emits", 1); - } else { - if ( r->shaders ) { - render_setuni(r->lighting_program, "texture_enabled", 0); - } /* else don't enable texturing */ - } - } else if ( p->texture != NULL ) { - Texture *texture; - texture = texture_lookup(r, p->texture); - if ( texture != NULL ) { - glBindTexture(GL_TEXTURE_2D, texture->texname); - glEnable(GL_TEXTURE_2D); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 1); - if ( r->shaders && texture->has_normals ) { - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, texture->normalmap); - render_setuni(r->lighting_program, "has_normals", 1); - glActiveTexture(GL_TEXTURE0); - } - } else { - if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 0); - } + /* Location and orientation */ + glPushMatrix(); + glTranslatef(x, y, z); + glRotatef(rad2deg(instance->yaw), 0.0, 0.0, -1.0); /* Minus sign defines +yaw as "right" */ + + /* Texture */ + if ( p->attribs & ATTRIB_SWIRLY ) { + if ( r->fbos && r->shaders ) { + glBindTexture(GL_TEXTURE_2D, r->swirly_texture); + glEnable(GL_TEXTURE_2D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + render_setuni(r->lighting_program, "texture_emits", 1); } else { - if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 0); + if ( r->shaders ) { + render_setuni(r->lighting_program, "texture_enabled", 0); + } /* else don't enable texturing */ } - if ( r->vbos ) { - glBindBuffer(GL_ARRAY_BUFFER, p->vertices_buffer); - glVertexPointer(3, GL_FLOAT, 0, NULL); - glBindBuffer(GL_ARRAY_BUFFER, p->normals_buffer); - glNormalPointer(GL_FLOAT, 0, NULL); - glBindBuffer(GL_ARRAY_BUFFER, p->texcoords_buffer); - glTexCoordPointer(2, GL_FLOAT, 0, NULL); - glBindBuffer(GL_ARRAY_BUFFER, 0); + } else if ( p->texture != NULL ) { + Texture *texture; + texture = texture_lookup(r, p->texture); + if ( texture != NULL ) { + glBindTexture(GL_TEXTURE_2D, texture->texname); + glEnable(GL_TEXTURE_2D); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 1); + if ( r->shaders && texture->has_normals ) { + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, texture->normalmap); + render_setuni(r->lighting_program, "has_normals", 1); + glActiveTexture(GL_TEXTURE0); + } } else { - glVertexPointer(3, GL_FLOAT, 0, p->vertices); - glNormalPointer(GL_FLOAT, 0, p->normals); - glTexCoordPointer(2, GL_FLOAT, 0, p->texcoords); - } - glDrawArrays(render_gltype(p->type), 0, p->num_vertices); - *nvert += p->num_vertices; - glDisable(GL_TEXTURE_2D); - render_setuni(r->lighting_program, "has_normals", 0); - glPopMatrix(); - - if ( p->attribs & ATTRIB_SWIRLY ) { - if ( r->shaders ) render_setuni(r->lighting_program, "texture_emits", 0); + if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 0); } - } else { + if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 0); + } + if ( r->vbos ) { + glBindBuffer(GL_ARRAY_BUFFER, p->vertices_buffer); + glVertexPointer(3, GL_FLOAT, 0, NULL); + glBindBuffer(GL_ARRAY_BUFFER, p->normals_buffer); + glNormalPointer(GL_FLOAT, 0, NULL); + glBindBuffer(GL_ARRAY_BUFFER, p->texcoords_buffer); + glTexCoordPointer(2, GL_FLOAT, 0, NULL); + glBindBuffer(GL_ARRAY_BUFFER, 0); + } else { + glVertexPointer(3, GL_FLOAT, 0, p->vertices); + glNormalPointer(GL_FLOAT, 0, p->normals); + glTexCoordPointer(2, GL_FLOAT, 0, p->texcoords); + } + glDrawArrays(render_gltype(p->type), 0, p->num_vertices); + *nvert += p->num_vertices; + glDisable(GL_TEXTURE_2D); + render_setuni(r->lighting_program, "has_normals", 0); + glPopMatrix(); - glPushMatrix(); - glTranslatef(x+p->vertices[0], y+p->vertices[1], z+p->vertices[2]); - glScalef(p->radius, p->radius, p->radius); - glRotatef(rad2deg(instance->yaw), 0.0, 0.0, -1.0); /* Minus sign defines +yaw as "right" */ - - glEnable(GL_RESCALE_NORMAL); - - glVertexPointer(3, GL_FLOAT, 0, r->hemisphere_v); - glNormalPointer(GL_FLOAT, 0, r->hemisphere_n); - glTexCoordPointer(2, GL_FLOAT, 0, r->hemisphere_t); - - glDrawArrays(GL_QUADS, 0, HEMI_NUM_VERTICES); - *nvert += HEMI_NUM_VERTICES; - if ( r->shaders ) if ( r->shaders ) render_setuni(r->lighting_program, "texture_emits", 0); - - glDisable(GL_RESCALE_NORMAL); - - glPopMatrix(); - + if ( p->attribs & ATTRIB_SWIRLY ) { + if ( r->shaders ) render_setuni(r->lighting_program, "texture_emits", 0); } } diff --git a/src/types.h b/src/types.h index 923d791..a759cd4 100644 --- a/src/types.h +++ b/src/types.h @@ -53,8 +53,7 @@ typedef enum { typedef enum { PRIMITIVE_QUADS, - PRIMITIVE_TRIANGLES, - PRIMITIVE_HEMISPHERE + PRIMITIVE_TRIANGLES } PrimitiveType; typedef struct { @@ -153,10 +152,6 @@ typedef struct { int width; int height; - GLfloat *hemisphere_v; - GLfloat *hemisphere_n; - GLfloat *hemisphere_t; - } RenderContext; #define AUDIO_MAX_SOUNDS 16 -- cgit v1.2.3