aboutsummaryrefslogtreecommitdiff
path: root/src/glbits.c
diff options
context:
space:
mode:
authortaw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1>2008-01-09 15:02:15 +0000
committertaw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1>2008-01-09 15:02:15 +0000
commit43f6c9d2d701a8bb8667619a2681fdabb78494d0 (patch)
treec83daf09f9bd56fcb95e5359865b75e5b09d919a /src/glbits.c
parent620c56468a1e26c22afaafe698b09f4cb7b14b61 (diff)
Point size perspective
git-svn-id: svn://cook.msm.cam.ac.uk:745/diff-tomo/dtr@244 bf6ca9ba-c028-0410-8290-897cf20841d1
Diffstat (limited to 'src/glbits.c')
-rw-r--r--src/glbits.c49
1 files changed, 29 insertions, 20 deletions
diff --git a/src/glbits.c b/src/glbits.c
index 21a062e..c81d138 100644
--- a/src/glbits.c
+++ b/src/glbits.c
@@ -56,9 +56,9 @@ static GLhandleARB glbits_load_shader(const char *filename, GLenum type) {
static void glbits_load_shaders(DisplayWindow *dw) {
+ /* Lighting-per-fragment */
dw->gl_vshader_lightpp = glbits_load_shader(DATADIR"/dtr/light-pp.vert", GL_VERTEX_SHADER_ARB);
dw->gl_fshader_lightpp = glbits_load_shader(DATADIR"/dtr/light-pp.frag", GL_FRAGMENT_SHADER_ARB);
-
dw->gl_program_lightpp = glCreateProgramObjectARB();
glAttachObjectARB(dw->gl_program_lightpp, dw->gl_vshader_lightpp);
glAttachObjectARB(dw->gl_program_lightpp, dw->gl_fshader_lightpp);
@@ -69,6 +69,7 @@ static void glbits_load_shaders(DisplayWindow *dw) {
static void glbits_delete_shaders(DisplayWindow *dw) {
glDetachObjectARB(dw->gl_program_lightpp, dw->gl_fshader_lightpp);
+ glDetachObjectARB(dw->gl_program_lightpp, dw->gl_vshader_lightpp);
glDeleteObjectARB(dw->gl_fshader_lightpp);
glDeleteObjectARB(dw->gl_program_lightpp);
@@ -686,18 +687,26 @@ gint glbits_expose(GtkWidget *widget, GdkEventExpose *event, DisplayWindow *dw)
build_rotmatrix(m, dw->view_quat);
glMultMatrixf(&m[0][0]);
+ glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+
if ( dw->mode == DW_MAPPED ) {
/* Draw the "measured" reflections */
if ( dw->gl_ref_num_vertices ) {
- glPointSize(2.0);
- glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
+
+ GLfloat att[] = {1.0, 1.0, 0.0};
+
+ glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION, att);
+ glPointSize(10.0);
+ glEnable(GL_POINT_SMOOTH);
+
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, green);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
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);
@@ -710,19 +719,19 @@ gint glbits_expose(GtkWidget *widget, GdkEventExpose *event, DisplayWindow *dw)
glNormalPointer(GL_FLOAT, 0, dw->gl_ref_normal_array);
glDrawArrays(GL_POINTS, 0, dw->gl_ref_num_vertices);
}
- glDisableClientState(GL_NORMAL_ARRAY);
- glPopClientAttrib();
+
+ glDisable(GL_POINT_SMOOTH);
+
}
/* Draw marker points */
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);
@@ -735,21 +744,19 @@ gint glbits_expose(GtkWidget *widget, GdkEventExpose *event, DisplayWindow *dw)
glNormalPointer(GL_FLOAT, 0, dw->gl_marker_normal_array);
glDrawArrays(GL_QUADS, 0, dw->gl_marker_num_vertices);
}
- glDisableClientState(GL_NORMAL_ARRAY);
- glPopClientAttrib();
+
}
} else {
/* Draw generated reflections */
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);
+
glUseProgramObjectARB(dw->gl_program_lightpp);
if ( dw->gl_use_buffers ) {
glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_gen_vertex_buffer);
@@ -764,19 +771,20 @@ gint glbits_expose(GtkWidget *widget, GdkEventExpose *event, DisplayWindow *dw)
glDrawArrays(GL_QUADS, 0, dw->gl_gen_num_vertices);
}
glUseProgramObjectARB(0);
- glDisableClientState(GL_NORMAL_ARRAY);
- glPopClientAttrib();
+
}
}
+ glDisable(GL_NORMAL_ARRAY);
+
/* Draw indexing lines */
if ( dw->lines && dw->gl_line_num_vertices ) {
- glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
- glEnableClientState(GL_VERTEX_ARRAY);
+
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, grey);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, black);
+
if ( dw->gl_use_buffers ) {
glBindBufferARB(GL_ARRAY_BUFFER, dw->gl_line_vertex_buffer);
glVertexPointer(3, GL_FLOAT, 0, NULL);
@@ -786,9 +794,10 @@ gint glbits_expose(GtkWidget *widget, GdkEventExpose *event, DisplayWindow *dw)
glVertexPointer(3, GL_FLOAT, 0, dw->gl_line_vertex_array);
glDrawArrays(GL_LINES, 0, dw->gl_line_num_vertices);
}
- glPopClientAttrib();
}
+ glPopClientAttrib();
+
/* Draw everything else */
glCallList(dw->gl_list_id);