For those testing the PCB+GL branch git clone git://repo.or.cz/geda-pcb/pcjc2.git git checkout -b before_pours origin/before_pours
And to update (easiest I think.. but discards local changes): git fetch git checkout master git branch -D before_pours git checkout -b before_pours origin/before_pours The last update I made breaks support for non direct rendering. Turns out mapping a VBO fails in that case, and I print the error message: "Couldn't map VBO.. sorry, don't know how best to handle this gracefully" (I've not added a fall-back case yet) If this affects you, please apply the attached patch, which reverts to the (slightly slower) non VBO uploading of the vertex array. Testing with a critical eye to performance, rendering quality, visual artefacts will be warmly received. Best wishes, -- Peter Clifton Electrical Engineering Division, Engineering Department, University of Cambridge, 9, JJ Thomson Avenue, Cambridge CB3 0FA Tel: +44 (0)7729 980173 - (No signal in the lab!)
>From a29308975ae41dde8351d87b0455058749587948 Mon Sep 17 00:00:00 2001 From: Peter Clifton <pc...@cam.ac.uk> Date: Mon, 2 Feb 2009 14:40:54 +0000 Subject: [PATCH] Don't use a VBO --- src/hid/common/hidgl.c | 35 ++++------------------------------- src/hid/common/hidgl.h | 4 +--- src/hid/gtk/gui-output-events.c | 9 --------- src/hid/gtk/gui-pinout-preview.c | 4 ---- 4 files changed, 5 insertions(+), 47 deletions(-) diff --git a/src/hid/common/hidgl.c b/src/hid/common/hidgl.c index eb1044f..875a138 100644 --- a/src/hid/common/hidgl.c +++ b/src/hid/common/hidgl.c @@ -60,28 +60,10 @@ hidgl_new_triangle_array (void) void hidgl_init_triangle_array (triangle_buffer *buffer) { - GLenum errCode; - const GLubyte *errString; - + glEnableClientState (GL_VERTEX_ARRAY); + glVertexPointer (2, GL_FLOAT, 0, buffer->triangle_array); buffer->triangle_count = 0; buffer->coord_comp_count = 0; - - glEnableClientState (GL_VERTEX_ARRAY); - glGenBuffers (1, &buffer->vbo_name); - glBindBuffer (GL_ARRAY_BUFFER, buffer->vbo_name); - glBufferData (GL_ARRAY_BUFFER, TRIANGLE_ARRAY_BYTES, NULL, GL_STATIC_DRAW); - - buffer->triangle_array = glMapBuffer (GL_ARRAY_BUFFER, GL_WRITE_ONLY); - - if ((errCode = glGetError()) != GL_NO_ERROR) { - errString = gluErrorString(errCode); - fprintf (stderr, "OpenGL Error: %s\n", errString); - } - - if (buffer->triangle_array == NULL) { - printf ("Couldn't map VBO.. sorry, don't know how best to handle this gracefully\n"); - exit (1); - } } void @@ -90,18 +72,9 @@ hidgl_flush_triangles (triangle_buffer *buffer) if (buffer->triangle_count == 0) return; - glUnmapBuffer (GL_ARRAY_BUFFER); - - glVertexPointer (2, GL_FLOAT, 0, NULL); // buffer->triangle_array); glDrawArrays (GL_TRIANGLES, 0, buffer->triangle_count * 3); - -// buffer->triangle_count = 0; -// buffer->coord_comp_count = 0; - - glBindBuffer(GL_ARRAY_BUFFER, 0); - glDeleteBuffers (1, &buffer->vbo_name); - - hidgl_init_triangle_array (buffer); + buffer->triangle_count = 0; + buffer->coord_comp_count = 0; } void diff --git a/src/hid/common/hidgl.h b/src/hid/common/hidgl.h index f82056a..1f15d3f 100644 --- a/src/hid/common/hidgl.h +++ b/src/hid/common/hidgl.h @@ -31,11 +31,9 @@ 4 * 5461 * 2 * 3 = 109464 */ #define TRIANGLE_ARRAY_BYTES 131072 typedef struct { -// GLfloat triangle_array [2 * 3 * TRIANGLE_ARRAY_SIZE]; - GLfloat *triangle_array; + GLfloat triangle_array [2 * 3 * TRIANGLE_ARRAY_SIZE]; unsigned int triangle_count; unsigned int coord_comp_count; - GLuint vbo_name; } triangle_buffer; extern triangle_buffer buffer; diff --git a/src/hid/gtk/gui-output-events.c b/src/hid/gtk/gui-output-events.c index 849741e..4cf470a 100644 --- a/src/hid/gtk/gui-output-events.c +++ b/src/hid/gtk/gui-output-events.c @@ -1079,11 +1079,6 @@ ghid_port_drawing_area_expose_event_cb (GtkWidget * widget, hidgl_flush_triangles (&buffer); glPopMatrix (); - - glUnmapBuffer (GL_ARRAY_BUFFER); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glDeleteBuffers (1, &buffer.vbo_name); - draw_grid (); hidgl_init_triangle_array (&buffer); @@ -1104,10 +1099,6 @@ ghid_port_drawing_area_expose_event_cb (GtkWidget * widget, hidgl_flush_triangles (&buffer); - glUnmapBuffer (GL_ARRAY_BUFFER); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glDeleteBuffers (1, &buffer.vbo_name); - if (gdk_gl_drawable_is_double_buffered (pGlDrawable)) gdk_gl_drawable_swap_buffers (pGlDrawable); else diff --git a/src/hid/gtk/gui-pinout-preview.c b/src/hid/gtk/gui-pinout-preview.c index bebaf96..137471f 100644 --- a/src/hid/gtk/gui-pinout-preview.c +++ b/src/hid/gtk/gui-pinout-preview.c @@ -236,10 +236,6 @@ ghid_pinout_preview_expose (GtkWidget * widget, GdkEventExpose * ev) hidgl_flush_triangles (&buffer); glPopMatrix (); - glUnmapBuffer (GL_ARRAY_BUFFER); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glDeleteBuffers (1, &buffer.vbo_name); - if (gdk_gl_drawable_is_double_buffered (pGlDrawable)) gdk_gl_drawable_swap_buffers (pGlDrawable); else -- 1.6.0.4
_______________________________________________ geda-user mailing list geda-user@moria.seul.org http://www.seul.org/cgi-bin/mailman/listinfo/geda-user