aboutsummaryrefslogtreecommitdiff
path: root/src/render.c
diff options
context:
space:
mode:
authortaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-07-24 16:40:35 +0000
committertaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-07-24 16:40:35 +0000
commit103a64f376c03711cc641c08ec968245586320c5 (patch)
tree3ba104c0a52fddfbc4f49778aeb2509e5abe9da3 /src/render.c
parent629c0e0b26f739dba68b103fcfb37b42fe2c8666 (diff)
Wrap render.c to 120 columns
Introduce convenience functions git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@167 84d2e878-0bd5-11dd-ad15-13eda11d74c5
Diffstat (limited to 'src/render.c')
-rw-r--r--src/render.c85
1 files changed, 55 insertions, 30 deletions
diff --git a/src/render.c b/src/render.c
index 06c12a7..3995c74 100644
--- a/src/render.c
+++ b/src/render.c
@@ -28,6 +28,24 @@
#define PANEL_ALPHA 0.3
+static void render_setunf(GLuint program, const char *name, GLfloat val) {
+ GLint loc;
+ loc = glGetUniformLocation(program, name);
+ glUniform1f(loc, val);
+}
+
+static void render_setun2f(GLuint program, const char *name, GLfloat val1, GLfloat val2) {
+ GLint loc;
+ loc = glGetUniformLocation(program, name);
+ glUniform2f(loc, val1, val2);
+}
+
+static void render_setuni(GLuint program, const char *name, GLint val) {
+ GLint loc;
+ loc = glGetUniformLocation(program, name);
+ glUniform1i(loc, val);
+}
+
/* Utility function to load and compile a shader, checking the info log */
static GLuint render_load_shader(const char *filename, GLenum type) {
@@ -147,7 +165,8 @@ RenderContext *render_setup(int width, int height, int disable_vbos, int disable
r->vbos = 1;
} else {
r->vbos = 0;
- fprintf(stderr, "Vertex buffer objects are not supported by your graphics card (or maybe just by its driver).\n");
+ fprintf(stderr, "Vertex buffer objects are not supported by your graphics card "
+ "(or maybe just by its driver).\n");
fprintf(stderr, " -> Geometry performance may be less than optimal.\n");
}
} else {
@@ -163,7 +182,8 @@ RenderContext *render_setup(int width, int height, int disable_vbos, int disable
r->fbos = 1;
} else {
r->fbos = 0;
- fprintf(stderr, "Framebuffer objects are not supported by your graphics card (or maybe just by its driver).\n");
+ fprintf(stderr, "Framebuffer objects are not supported by your graphics card"
+ "(or maybe just by its driver).\n");
}
} else {
printf("The use of framebuffer objects has been disabled at your request.\n");
@@ -179,7 +199,8 @@ RenderContext *render_setup(int width, int height, int disable_vbos, int disable
r->shaders = 1;
} else {
r->shaders = 0;
- fprintf(stderr, "Shaders are not supported by your graphics card (or maybe just by its driver).\n");
+ fprintf(stderr, "Shaders are not supported by your graphics card"
+ "(or maybe just by its driver).\n");
}
} else {
printf("The use of shaders has been disabled at your request.\n");
@@ -217,7 +238,8 @@ RenderContext *render_setup(int width, int height, int disable_vbos, int disable
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, r->swirly_texture, 0);
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
+ GL_TEXTURE_2D, r->swirly_texture, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}
@@ -294,7 +316,7 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC
GLfloat black[] = {0.0, 0.0, 0.0, 1.0};
int wibble;
- if ( r->shaders ) glUniform1f(glGetUniformLocation(r->lighting_program, "alpha"), alpha);
+ if ( r->shaders ) render_setunf(r->lighting_program, "alpha", alpha);
if ( nvert == NULL ) nvert = &wibble;
@@ -310,7 +332,8 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC
p = m->primitives[j];
- if ( ((p->attribs & ATTRIB_PULSE) && !(p->attribs & ATTRIB_SWIRLY)) || ((p->attribs & ATTRIB_SWIRLY) && !(r->fbos && r->shaders)) ) {
+ if ( ((p->attribs & ATTRIB_PULSE) && !(p->attribs & ATTRIB_SWIRLY))
+ || ((p->attribs & ATTRIB_SWIRLY) && !(r->fbos && r->shaders)) ) {
float s;
s = fabsf(0.4*cosf(t * 0.001));
GLfloat c[] = {s*p->col_r, s*p->col_g, s*p->col_b, 1.0};
@@ -338,7 +361,7 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC
/* Location and orientation */
glPushMatrix();
glTranslatef(x, y, z);
- glRotatef(rad2deg(instance->yaw), 0.0, 0.0, -1.0); /* Minus sign defines +yaw as "right" */
+ glRotatef(rad2deg(instance->yaw), 0.0, 0.0, -1.0); /* Minus sign defines +yaw as "right" */
/* Texture */
if ( p->attribs & ATTRIB_SWIRLY ) {
@@ -347,10 +370,10 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC
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);
- glUniform1i(glGetUniformLocation(r->lighting_program, "texture_emits"), 1);
+ render_setuni(r->lighting_program, "texture_emits", 1);
} else {
if ( r->shaders ) {
- glUniform1i(glGetUniformLocation(r->lighting_program, "texture_enabled"), 0);
+ render_setuni(r->lighting_program, "texture_enabled", 0);
} /* else don't enable texturing */
}
} else if ( p->texture != NULL ) {
@@ -360,12 +383,12 @@ 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 ) glUniform1i(glGetUniformLocation(r->lighting_program, "texture_enabled"), 1);
+ if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 1);
} else {
- if ( r->shaders ) glUniform1i(glGetUniformLocation(r->lighting_program, "texture_enabled"), 0);
+ if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 0);
}
} else {
- if ( r->shaders ) glUniform1i(glGetUniformLocation(r->lighting_program, "texture_enabled"), 0);
+ if ( r->shaders ) render_setuni(r->lighting_program, "texture_enabled", 0);
}
if ( r->vbos ) {
glBindBuffer(GL_ARRAY_BUFFER, p->vertices_buffer);
@@ -386,7 +409,7 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC
glPopMatrix();
if ( p->attribs & ATTRIB_SWIRLY ) {
- if ( r->shaders ) glUniform1i(glGetUniformLocation(r->lighting_program, "texture_emits"), 0);
+ if ( r->shaders ) render_setuni(r->lighting_program, "texture_emits", 0);
}
} else {
@@ -404,7 +427,7 @@ static int render_model_instance_draw(ModelInstance *instance, Uint32 t, RenderC
glDrawArrays(GL_QUADS, 0, HEMI_NUM_VERTICES);
*nvert += HEMI_NUM_VERTICES;
- if ( r->shaders ) glUniform1i(glGetUniformLocation(r->lighting_program, "texture_emits"), 0);
+ if ( r->shaders ) if ( r->shaders ) render_setuni(r->lighting_program, "texture_emits", 0);
glDisable(GL_RESCALE_NORMAL);
@@ -647,21 +670,22 @@ void render_draw(Game *game, Uint32 t) {
GLfloat rrb = 0.0;
glUseProgram(r->swirly_program);
- glUniform1f(glGetUniformLocation(game->render->swirly_program, "time"), t);
- glUniform1i(glGetUniformLocation(game->render->swirly_program, "landed"), game->lander->recharging);
+ render_setunf(game->render->swirly_program, "time", t);
+ render_setuni(game->render->swirly_program, "landed", game->lander->recharging);
if ( game->lander->recharging ) {
/* Fade in */
rrb = fminf(((GLfloat)t-game->time_of_landing_event)/1500.0, 1.0);
- glUniform1i(glGetUniformLocation(game->render->swirly_program, "rechargeripple"), 1);
+ render_setuni(game->render->swirly_program, "rechargeripple", 1);
} else if ( game->time_of_landing_event - t < 750 ) {
/* Fade out */
rrb = fmaxf(1.0 - ((GLfloat)t-game->time_of_landing_event)/750.0, 0.0);
- glUniform1i(glGetUniformLocation(game->render->swirly_program, "rechargeripple"), 1);
+ render_setuni(game->render->swirly_program, "rechargeripple", 1);
} else {
- glUniform1i(glGetUniformLocation(game->render->swirly_program, "rechargeripple"), 0);
+ render_setuni(game->render->swirly_program, "rechargeripple", 0);
}
- glUniform1f(glGetUniformLocation(game->render->swirly_program, "rrb"), rrb);
- glUniform2f(glGetUniformLocation(game->render->swirly_program, "lander"), game->platform_rel_x, game->platform_rel_y);
+ render_setunf(game->render->swirly_program, "rrb", rrb);
+ render_setun2f(game->render->swirly_program, "lander",
+ game->platform_rel_x, game->platform_rel_y);
} /* else this is all a little pointless... */
glMatrixMode(GL_PROJECTION);
@@ -694,10 +718,10 @@ void render_draw(Game *game, Uint32 t) {
sqrtf(2.0)*sinf(game->lander->yaw)*sinf(game->view_angle),
sqrtf(2.0)*cosf(game->lander->yaw)*sinf(game->view_angle), sqrtf(2.0)*cosf(game->view_angle));
if ( r->shaders ) glUseProgram(r->lighting_program);
- if ( r->shaders ) glUniform1i(glGetUniformLocation(game->render->lighting_program, "texture"), 0); /* Using GL_TEXTURE0 */
- if ( r->shaders ) glUniform1i(glGetUniformLocation(game->render->lighting_program, "texture_only"), 0);
- if ( r->shaders ) glUniform1i(glGetUniformLocation(game->render->lighting_program, "texture_enabled"), 1);
- if ( r->shaders ) glUniform1i(glGetUniformLocation(game->render->lighting_program, "fill_light_enabled"), 0);
+ if ( r->shaders ) render_setuni(game->render->lighting_program, "texture", 0); /* GL_TEXTURE0 */
+ if ( r->shaders ) render_setuni(game->render->lighting_program, "texture_only", 0);
+ if ( r->shaders ) render_setuni(game->render->lighting_program, "texture_enabled", 1);
+ if ( r->shaders ) render_setuni(game->render->lighting_program, "fill_light_enabled", 0);
render_setup_lighting(game);
amb[0] = 0.02; amb[1] = 0.02; amb[2] = 0.02;
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, amb);
@@ -711,16 +735,17 @@ void render_draw(Game *game, Uint32 t) {
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- if ( r->shaders ) glUniform1i(glGetUniformLocation(game->render->lighting_program, "fill_light_enabled"), 1);
+ if ( r->shaders ) render_setuni(game->render->lighting_program, "fill_light_enabled", 1);
render_model_instance_draw(game->lander, t, r, NULL, 1.0);
- if ( r->shaders ) glUniform1i(glGetUniformLocation(game->render->lighting_program, "fill_light_enabled"), 0);
+ if ( r->shaders ) render_setuni(game->render->lighting_program, "fill_light_enabled", 0);
glPopClientAttrib();
- if ( r->shaders ) glUniform1i(glGetUniformLocation(game->render->lighting_program, "texture_enabled"), 0);
- render_draw_line(game->lander->x, game->lander->y, game->lander->z, game->lander->x, game->lander->y, game->lander->z-200.0);
+ if ( r->shaders ) render_setuni(game->render->lighting_program, "texture_enabled", 0);
+ render_draw_line(game->lander->x, game->lander->y, game->lander->z,
+ game->lander->x, game->lander->y, game->lander->z-200.0);
glDisable(GL_LIGHT2);
/* Back faces (done last to make blending work properly) */
- if ( r->shaders ) glUseProgram(0); /* Speed things up a bit by not using per-fragment lighting for back faces */
+ if ( r->shaders ) glUseProgram(0); /* Speed things up a bit by not using per-fragment lighting */
glFrontFace(GL_CW);
glPolygonOffset(1.0, 1.0);
glEnable(GL_POLYGON_OFFSET_FILL);