[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