summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-04-12 19:34:13 +0200
committerGravatar waker <wakeroid@gmail.com>2012-04-12 19:34:13 +0200
commit7420ed88b753badcdf51e9c9b731765658bde2c4 (patch)
treeb59854f7e1a04243493b0b59c06496c2fa672e3c
parent1323fde4d218eb84a4f3e7e365cdf42b0ef31cab (diff)
experimented with vsync; fixed xlib include
-rw-r--r--README3
-rw-r--r--plugins/gtkui/gtkui.c1
-rw-r--r--plugins/gtkui/gtkuigl.c2
-rw-r--r--plugins/gtkui/gtkuigl.h12
-rw-r--r--plugins/gtkui/widgets.c38
5 files changed, 50 insertions, 6 deletions
diff --git a/README b/README
index ddf83475..5f398756 100644
--- a/README
+++ b/README
@@ -37,13 +37,14 @@ full list of dependencies:
libsndfile: for sndfile plugin
libcdio + libcddb: for cd audio plugin
ffmpeg (libavcodec + libavformat): for ffmpeg plugin
- xlib: for global hotkeys
+ xlib: for global hotkeys and for gtkui opengl support
dbus: for notification daemon support (OSD current song notifications)
pulseaudio: for PulseAudio output plugin
faad2: for AAC plugin
zlib: for Audio Overload plugin (psf, psf2, etc), GME (for vgz)
libzip: for vfs_zip plugin
yasm: required to build assembly portions of ffap plugin on supported platforms (x86, x86_64)
+ gtkglext: for gtkui opengl support
actual package names for your Linux distribution may vary.
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c
index 25654d5e..e7555170 100644
--- a/plugins/gtkui/gtkui.c
+++ b/plugins/gtkui/gtkui.c
@@ -47,6 +47,7 @@
#include "gtkui_api.h"
#include "wingeom.h"
#include "widgets.h"
+#include "X11/Xlib.h"
#define trace(...) { fprintf(stderr, __VA_ARGS__); }
//#define trace(fmt,...)
diff --git a/plugins/gtkui/gtkuigl.c b/plugins/gtkui/gtkuigl.c
index 9d8df7da..def1dcf3 100644
--- a/plugins/gtkui/gtkuigl.c
+++ b/plugins/gtkui/gtkuigl.c
@@ -22,6 +22,7 @@
#include "gtkuigl.h"
static int gl_initialized;
+//PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI;
int
gtkui_gl_init (void) {
@@ -35,6 +36,7 @@ gtkui_gl_init (void) {
if (!success) {
return -1;
}
+// glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalSGI");
return 0;
}
diff --git a/plugins/gtkui/gtkuigl.h b/plugins/gtkui/gtkuigl.h
index 17fda004..ddba54dd 100644
--- a/plugins/gtkui/gtkuigl.h
+++ b/plugins/gtkui/gtkuigl.h
@@ -20,5 +20,17 @@
#define __GTKUIGL_H
#include <gtk/gtkgl.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+//#include <GL/glx.h>
+//#include <GL/glxext.h>
+//
+//#ifndef GLX_SGI_swap_control
+//typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
+//#endif
+//extern PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI;
+
+int
+gtkui_gl_init (void);
#endif
diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c
index 50b6eabf..dbdbd50b 100644
--- a/plugins/gtkui/widgets.c
+++ b/plugins/gtkui/widgets.c
@@ -20,8 +20,6 @@
#include <stdlib.h>
#include <string.h>
#include <assert.h>
-#include <GL/gl.h>
-#include <GL/glu.h>
#include "gtkui.h"
#include "widgets.h"
#include "ddbtabstrip.h"
@@ -1754,6 +1752,9 @@ scope_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data
GdkGLDrawable *d = gtk_widget_get_gl_drawable (widget);
gdk_gl_drawable_gl_begin (d, w->glcontext);
+// if (glXSwapIntervalSGI) {
+// glXSwapIntervalSGI (1);
+// }
glClear (GL_COLOR_BUFFER_BIT);
glMatrixMode (GL_PROJECTION);
@@ -1761,6 +1762,28 @@ scope_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data
gluOrtho2D(0,a.width,a.height,0);
glMatrixMode (GL_MODELVIEW);
glViewport (0, 0, a.width, a.height);
+
+#if 0
+ // vsync test
+ static int box = 0;
+ static int speed = 5;
+ if (box > a.width-50) {
+ box = a.width-50;
+ speed = -5;
+ }
+ else if (box < 0) {
+ box = 0;
+ speed = 5;
+ }
+ box += speed;
+
+ glBegin (GL_QUADS);
+ glVertex2f (box, 0);
+ glVertex2f (box+50, 0);
+ glVertex2f (box+50, 50);
+ glVertex2f (box, 50);
+ glEnd ();
+#endif
glBegin (GL_LINE_STRIP);
short *samples = (short *)data;
@@ -1778,6 +1801,13 @@ scope_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data
gdk_gl_drawable_gl_end (d);
}
+ else {
+ GdkGLDrawable *d = gtk_widget_get_gl_drawable (widget);
+ gdk_gl_drawable_gl_begin (d, w->glcontext);
+ glClear (GL_COLOR_BUFFER_BIT);
+ gdk_gl_drawable_swap_buffers (d);
+ gdk_gl_drawable_gl_end (d);
+ }
return FALSE;
@@ -1790,6 +1820,7 @@ scope_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data
void
w_scope_init (ddb_gtkui_widget_t *w) {
w_scope_t *s = (w_scope_t *)w;
+ gtkui_gl_init ();
if (s->drawtimer) {
g_source_remove (s->drawtimer);
}
@@ -1800,7 +1831,6 @@ void
scope_realize (GtkWidget *widget, gpointer data) {
w_scope_t *w = data;
w->glcontext = gtk_widget_create_gl_context (w->drawarea, NULL, TRUE, GDK_GL_RGBA_TYPE);
- printf ("ctx: %p\n", w->glcontext);
}
ddb_gtkui_widget_t *
@@ -1815,9 +1845,7 @@ w_scope_create (void) {
int attrlist[] = {GDK_GL_ATTRIB_LIST_NONE};
GdkGLConfig *conf = gdk_gl_config_new_by_mode ((GdkGLConfigMode)(GDK_GL_MODE_RGB |
GDK_GL_MODE_DOUBLE));
- printf ("conf: %p\n", conf);
gboolean cap = gtk_widget_set_gl_capability (w->drawarea, conf, NULL, TRUE, GDK_GL_RGBA_TYPE);
- printf ("cap: %d\n", cap);
gtk_widget_show (w->drawarea);
gtk_container_add (GTK_CONTAINER (w->base.widget), w->drawarea);
#if !GTK_CHECK_VERSION(3,0,0)