diff options
author | taw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1> | 2008-01-09 15:02:15 +0000 |
---|---|---|
committer | taw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1> | 2008-01-09 15:02:15 +0000 |
commit | 43f6c9d2d701a8bb8667619a2681fdabb78494d0 (patch) | |
tree | c83daf09f9bd56fcb95e5359865b75e5b09d919a /src/glbits.c | |
parent | 620c56468a1e26c22afaafe698b09f4cb7b14b61 (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.c | 49 |
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); |