[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

gEDA-user: PCB + GL latest (patch for indirect rendering support)



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 <pcjc2@xxxxxxxxx>
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@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user