aboutsummaryrefslogtreecommitdiff
path: root/src/displaywindow.c
diff options
context:
space:
mode:
authortaw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1>2007-10-03 17:37:13 +0000
committertaw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1>2007-10-03 17:37:13 +0000
commit2314f19f1502e713cf9aa54330273820e652e6f6 (patch)
tree1c75d2fa9687dd2053d15e0b61a2b8cfe76df562 /src/displaywindow.c
parent4712ae776093d645e85e2280153976191227c4f3 (diff)
Fix muppetry
git-svn-id: svn://cook.msm.cam.ac.uk:745/diff-tomo/dtr@150 bf6ca9ba-c028-0410-8290-897cf20841d1
Diffstat (limited to 'src/displaywindow.c')
-rw-r--r--src/displaywindow.c254
1 files changed, 135 insertions, 119 deletions
diff --git a/src/displaywindow.c b/src/displaywindow.c
index 92e3b0a..8e99411 100644
--- a/src/displaywindow.c
+++ b/src/displaywindow.c
@@ -238,7 +238,7 @@ static void displaywindow_gl_create_list(DisplayWindow *dw) {
/* "Measured" reflections */
if ( dw->gl_use_buffers ) {
glGenBuffersARB(1, &dw->gl_ref_vertex_buffer);
- glGenBuffersARB(1, &dw->gl_marker_normal_buffer);
+ glGenBuffersARB(1, &dw->gl_ref_normal_buffer);
}
reflection = ctx->reflectionlist->reflections;
i = 0;
@@ -247,32 +247,36 @@ static void displaywindow_gl_create_list(DisplayWindow *dw) {
reflection = reflection->next;
};
dw->gl_ref_num_vertices = i;
- i = 0;
- reflection = ctx->reflectionlist->reflections;
- vertices = malloc(3*dw->gl_ref_num_vertices*sizeof(GLfloat));
- normals = malloc(3*dw->gl_ref_num_vertices*sizeof(GLfloat));
- while ( reflection != NULL ) {
- if ( reflection->type == REFLECTION_NORMAL ) {
- vertices[3*i + 0] = reflection->x/1e9;
- vertices[3*i + 1] = reflection->y/1e9;
- vertices[3*i + 2] = reflection->z/1e9;
- normals[3*i + 0] = reflection->x/1e9;
- normals[3*i + 1] = reflection->y/1e9;
- normals[3*i + 2] = reflection->z/1e9;
- i++;
+ if ( dw->gl_ref_num_vertices ) {
+ i = 0;
+ reflection = ctx->reflectionlist->reflections;
+ vertices = malloc(3*dw->gl_ref_num_vertices*sizeof(GLfloat));
+ normals = malloc(3*dw->gl_ref_num_vertices*sizeof(GLfloat));
+ while ( reflection != NULL ) {
+ if ( reflection->type == REFLECTION_NORMAL ) {
+ vertices[3*i + 0] = reflection->x/1e9;
+ vertices[3*i + 1] = reflection->y/1e9;
+ vertices[3*i + 2] = reflection->z/1e9;
+ normals[3*i + 0] = reflection->x/1e9;
+ normals[3*i + 1] = reflection->y/1e9;
+ normals[3*i + 2] = reflection->z/1e9;
+ i++;
+ }
+ reflection = reflection->next;
+ };
+ if ( dw->gl_use_buffers ) {
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_ref_vertex_buffer);
+ glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_ref_num_vertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
+ free(vertices);
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_ref_normal_buffer);
+ glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_ref_num_vertices*sizeof(GLfloat), normals, GL_STATIC_DRAW);
+ free(normals);
+ } else {
+ dw->gl_ref_vertex_array = vertices;
+ dw->gl_ref_normal_array = normals;
}
- reflection = reflection->next;
- };
- if ( dw->gl_use_buffers ) {
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_ref_vertex_buffer);
- glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_ref_num_vertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
- free(vertices);
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_ref_normal_buffer);
- glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_ref_num_vertices*sizeof(GLfloat), normals, GL_STATIC_DRAW);
- free(normals);
} else {
- dw->gl_ref_vertex_array = vertices;
- dw->gl_ref_normal_array = normals;
+ printf("Drawing no 'measured' reflections\n");
}
/* Marker "reflections" */
@@ -287,26 +291,28 @@ static void displaywindow_gl_create_list(DisplayWindow *dw) {
reflection = reflection->next;
};
dw->gl_marker_num_vertices = i*VERTICES_IN_A_BLOB;
- i = 0;
- reflection = ctx->reflectionlist->reflections;
- vertices = malloc(3*dw->gl_marker_num_vertices*sizeof(GLfloat));
- normals = malloc(3*dw->gl_marker_num_vertices*sizeof(GLfloat));
- while ( reflection != NULL ) {
- if ( reflection->type == REFLECTION_MARKER ) {
- DRAW_BLOB
+ if ( dw->gl_marker_num_vertices ) {
+ i = 0;
+ reflection = ctx->reflectionlist->reflections;
+ vertices = malloc(3*dw->gl_marker_num_vertices*sizeof(GLfloat));
+ normals = malloc(3*dw->gl_marker_num_vertices*sizeof(GLfloat));
+ while ( reflection != NULL ) {
+ if ( reflection->type == REFLECTION_MARKER ) {
+ DRAW_BLOB
+ }
+ reflection = reflection->next;
+ };
+ if ( dw->gl_use_buffers ) {
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_marker_vertex_buffer);
+ glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_marker_num_vertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
+ free(vertices);
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_marker_normal_buffer);
+ glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_marker_num_vertices*sizeof(GLfloat), normals, GL_STATIC_DRAW);
+ free(normals);
+ } else {
+ dw->gl_marker_vertex_array = vertices;
+ dw->gl_marker_normal_array = normals;
}
- reflection = reflection->next;
- };
- if ( dw->gl_use_buffers ) {
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_marker_vertex_buffer);
- glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_marker_num_vertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
- free(vertices);
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_marker_normal_buffer);
- glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_marker_num_vertices*sizeof(GLfloat), normals, GL_STATIC_DRAW);
- free(normals);
- } else {
- dw->gl_marker_vertex_array = vertices;
- dw->gl_marker_normal_array = normals;
}
/* Generated reflections */
@@ -321,27 +327,29 @@ static void displaywindow_gl_create_list(DisplayWindow *dw) {
reflection = reflection->next;
};
dw->gl_gen_num_vertices = i*VERTICES_IN_A_BLOB;
- i = 0;
- reflection = ctx->reflectionlist->reflections;
- vertices = malloc(3*dw->gl_gen_num_vertices*sizeof(GLfloat));
- normals = malloc(3*dw->gl_gen_num_vertices*sizeof(GLfloat));
- while ( reflection != NULL ) {
- if ( reflection->type == REFLECTION_GENERATED ) {
- DRAW_BLOB
+ if ( dw->gl_gen_num_vertices ) {
+ i = 0;
+ reflection = ctx->reflectionlist->reflections;
+ vertices = malloc(3*dw->gl_gen_num_vertices*sizeof(GLfloat));
+ normals = malloc(3*dw->gl_gen_num_vertices*sizeof(GLfloat));
+ while ( reflection != NULL ) {
+ if ( reflection->type == REFLECTION_GENERATED ) {
+ DRAW_BLOB
+ }
+ reflection = reflection->next;
+ };
+ if ( dw->gl_use_buffers ) {
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_vertex_buffer);
+ glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_gen_num_vertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
+ free(vertices);
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_normal_buffer);
+ glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_gen_num_vertices*sizeof(GLfloat), normals, GL_STATIC_DRAW);
+ free(normals);
+ glBindBufferARB(GL_ARRAY_BUFFER, 0); /* ************* */
+ } else {
+ dw->gl_gen_vertex_array = vertices;
+ dw->gl_gen_normal_array = normals;
}
- reflection = reflection->next;
- };
- if ( dw->gl_use_buffers ) {
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_vertex_buffer);
- glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_gen_num_vertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
- free(vertices);
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_normal_buffer);
- glBufferDataARB(GL_ARRAY_BUFFER, 3*dw->gl_gen_num_vertices*sizeof(GLfloat), normals, GL_STATIC_DRAW);
- free(normals);
- glBindBufferARB(GL_ARRAY_BUFFER, 0); /* ************* */
- } else {
- dw->gl_gen_vertex_array = vertices;
- dw->gl_gen_normal_array = normals;
}
dw->gl_list_id = glGenLists(1);
@@ -600,68 +608,76 @@ static gint displaywindow_gl_expose(GtkWidget *widget, GdkEventExpose *event, Di
glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);
/* Draw the "measured" reflections */
- glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, green);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, black);
- glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0.0);
- if ( dw->gl_use_buffers ) {
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_ref_vertex_buffer);
- glVertexPointer(3, GL_FLOAT, 0, NULL);
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_ref_normal_buffer);
- glNormalPointer(GL_FLOAT, 0, NULL);
- glDrawArrays(GL_POINTS, 0, dw->gl_ref_num_vertices);
- } else {
- glVertexPointer(3, GL_FLOAT, 0, dw->gl_ref_vertex_array);
- glNormalPointer(GL_FLOAT, 0, dw->gl_ref_normal_array);
- glDrawArrays(GL_POINTS, 0, dw->gl_ref_num_vertices);
+ if ( dw->gl_ref_num_vertices ) {
+ glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, green);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, black);
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0.0);
+ if ( dw->gl_use_buffers ) {
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_ref_vertex_buffer);
+ glVertexPointer(3, GL_FLOAT, 0, NULL);
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_ref_normal_buffer);
+ glNormalPointer(GL_FLOAT, 0, NULL);
+ glDrawArrays(GL_POINTS, 0, dw->gl_ref_num_vertices);
+ glBindBufferARB(GL_ARRAY_BUFFER, 0);
+ } else {
+ glVertexPointer(3, GL_FLOAT, 0, dw->gl_ref_vertex_array);
+ glNormalPointer(GL_FLOAT, 0, dw->gl_ref_normal_array);
+ glDrawArrays(GL_POINTS, 0, dw->gl_ref_num_vertices);
+ }
+ glPopClientAttrib();
}
- glPopClientAttrib();
/* Draw marker points */
- glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, blue);
- glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, blue_spec);
- glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50.0);
- if ( dw->gl_use_buffers ) {
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_marker_vertex_buffer);
- glVertexPointer(3, GL_FLOAT, 0, NULL);
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_marker_normal_buffer);
- glNormalPointer(GL_FLOAT, 0, NULL);
- glDrawArrays(GL_QUADS, 0, dw->gl_marker_num_vertices);
- } else {
- glVertexPointer(3, GL_FLOAT, 0, dw->gl_marker_vertex_array);
- glNormalPointer(GL_FLOAT, 0, dw->gl_marker_normal_array);
- glDrawArrays(GL_QUADS, 0, dw->gl_marker_num_vertices);
+ if ( dw->gl_marker_num_vertices ) {
+ glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, blue);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, blue_spec);
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50.0);
+ if ( dw->gl_use_buffers ) {
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_marker_vertex_buffer);
+ glVertexPointer(3, GL_FLOAT, 0, NULL);
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_marker_normal_buffer);
+ glNormalPointer(GL_FLOAT, 0, NULL);
+ glDrawArrays(GL_QUADS, 0, dw->gl_marker_num_vertices);
+ glBindBufferARB(GL_ARRAY_BUFFER, 0);
+ } else {
+ glVertexPointer(3, GL_FLOAT, 0, dw->gl_marker_vertex_array);
+ glNormalPointer(GL_FLOAT, 0, dw->gl_marker_normal_array);
+ glDrawArrays(GL_QUADS, 0, dw->gl_marker_num_vertices);
+ }
+ glPopClientAttrib();
}
- glPopClientAttrib();
/* Draw generated reflections */
- glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, gold);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, gold_spec);
- glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 70.0);
- if ( dw->gl_use_buffers ) {
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_vertex_buffer);
- glVertexPointer(3, GL_FLOAT, 0, NULL);
- glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_normal_buffer);
- glNormalPointer(GL_FLOAT, 0, NULL);
- glDrawArrays(GL_QUADS, 0, dw->gl_gen_num_vertices);
- glBindBufferARB(GL_ARRAY_BUFFER, 0); /* NOTE THIS PLZKTHX */
- } else {
- glVertexPointer(3, GL_FLOAT, 0, dw->gl_gen_vertex_array);
- glNormalPointer(GL_FLOAT, 0, dw->gl_gen_normal_array);
- glDrawArrays(GL_QUADS, 0, dw->gl_gen_num_vertices);
+ if ( dw->gl_gen_num_vertices ) {
+ glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, gold);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, gold_spec);
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 70.0);
+ if ( dw->gl_use_buffers ) {
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_vertex_buffer);
+ glVertexPointer(3, GL_FLOAT, 0, NULL);
+ glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_normal_buffer);
+ glNormalPointer(GL_FLOAT, 0, NULL);
+ glDrawArrays(GL_QUADS, 0, dw->gl_gen_num_vertices);
+ glBindBufferARB(GL_ARRAY_BUFFER, 0);
+ } else {
+ glVertexPointer(3, GL_FLOAT, 0, dw->gl_gen_vertex_array);
+ glNormalPointer(GL_FLOAT, 0, dw->gl_gen_normal_array);
+ glDrawArrays(GL_QUADS, 0, dw->gl_gen_num_vertices);
+ }
+ glPopClientAttrib();
}
- glPopClientAttrib();
/* Draw everything else */
glCallList(dw->gl_list_id);