Update of /cvsroot/desmume/desmume/src/gtk-glade
In directory sc8-pr-cvs12.sourceforge.net:/tmp/cvs-serv9235
Modified Files:
callbacks_IO.c callbacks_IO.h globals.h main.c
Log Message:
opengl working ( scale, rot) but disabled
Index: callbacks_IO.c
===================================================================
RCS file: /cvsroot/desmume/desmume/src/gtk-glade/callbacks_IO.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- callbacks_IO.c 4 Feb 2007 22:46:29 -0000 1.17
+++ callbacks_IO.c 5 Feb 2007 02:29:32 -0000 1.18
@@ -22,8 +22,7 @@
#include "callbacks_IO.h"
-// uncomment this if you want to debug
-// non working opengl
+// comment for GL :D
#undef HAVE_LIBGDKGLEXT_X11_1_0
static u16 Cur_Keypad = 0;
@@ -113,7 +112,8 @@
pixel++;
}
}
-#define LOOP(a,b,c,d,e,f) \
+#ifndef HAVE_LIBGDKGLEXT_X11_1_0
+ #define LOOP(a,b,c,d,e,f) \
L=W*ScreenCoeff_Size; \
BL=L*sizeof(u32); \
for (a; b; c) { \
@@ -129,7 +129,14 @@
rgb32 += L; \
} \
}
-
+#else
+ #define LOOP(a,b,c,d,e,f) \
+ for (a; b; c) { \
+ for (d; e; f) { \
+ rgb32 = image[y][x]; rgb32++; \
+ } \
+ }
+#endif
/* load pixels in buffer accordingly */
if (ScreenRotate) {
W=RAW_H; H=RAW_W;
@@ -141,82 +148,33 @@
}
}
-int unrealized=2;
+#ifndef HAVE_LIBGDKGLEXT_X11_1_0
-gboolean screen (GtkWidget * widget, int offset_pix) {
+// they are empty if no opengl
+void init_GL_capabilities(GtkWidget * widget) {}
+void init_GL(GtkWidget * widget, int screen) {}
+void reshape (GtkWidget * widget) {}
+
+gboolean screen (GtkWidget * widget, int off) {
int H,W,L;
-#ifndef HAVE_LIBGDKGLEXT_X11_1_0
if (ScreenRotate) {
W=RAW_H; H=RAW_W;
} else {
H=RAW_H; W=RAW_W;
}
L=W*ScreenCoeff_Size*sizeof(u32);
-
+ off*= offset_pixels_lower_screen();
gdk_draw_rgb_32_image (widget->window,
widget->style->fg_gc[widget->state],0,0,
W*ScreenCoeff_Size, H*ScreenCoeff_Size,
- GDK_RGB_DITHER_NONE,((guchar*)on_screen_image32)+offset_pix,L);
-#else
- GdkGLDrawable * my_glDrawable;
- GdkGLContext * my_glContext;
-
- if (unrealized) return TRUE;
-
- my_glDrawable = gtk_widget_get_gl_drawable(widget);
- my_glContext = gtk_widget_get_gl_context(widget);
-
- printf("%08X %08X\n", my_glDrawable, my_glContext);
- if (!gdk_gl_drawable_gl_begin(my_glDrawable, my_glContext))
- return FALSE;
-
- printf("ok\n");
-
- glLoadIdentity();
- glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-
- glBegin(GL_QUADS);
- glColor3ub(255,0,0); glVertex2d(-0.75,-0.75);
- glColor3ub(128,255,0); glVertex2d(-0.75, 0.75);
- glColor3ub(0,255,128); glVertex2d( 0.75, 0.75);
- glColor3ub(0,0,255); glVertex2d( 0.75,-0.75);
- glEnd();
-
- glPixelZoom(1.0f * ScreenCoeff_Size, -1.0f * ScreenCoeff_Size);
-
- if (ScreenRotate) {
- W=RAW_H; H=RAW_W;
- glRotatef(90.0, 0.5, 0.5, 1.0);
- glRasterPos2f(-1.0,1.0);
-// glBitmap(0,0,0,0,-1.0,1.0,NULL);
- glDrawPixels(RAW_W,RAW_H,GL_RGBA,GL_UNSIGNED_SHORT_1_5_5_5_REV,GPU_screen);
- glRasterPos2f(0.0,1.0);
-// glBitmap(0,0,0,0,0.0,1.0,NULL);
- glDrawPixels(RAW_W,RAW_H,GL_RGBA,GL_UNSIGNED_SHORT_1_5_5_5_REV,GPU_screen+RAW_OFFSET);
- } else {
- H=RAW_H; W=RAW_W;
- glRasterPos2f(-1.0,1.0);
-// glBitmap(0,0,0,0,-1.0,1.0,NULL);
- glDrawPixels(RAW_W,RAW_H,GL_RGBA,GL_UNSIGNED_SHORT_1_5_5_5_REV,GPU_screen);
- glRasterPos2f(-1.0,0.0);
-// glBitmap(0,0,0,0,-1.0,0.0,NULL);
- glDrawPixels(RAW_W,RAW_H,GL_RGBA,GL_UNSIGNED_SHORT_1_5_5_5_REV,GPU_screen+RAW_OFFSET);
- }
-
- if (gdk_gl_drawable_is_double_buffered (my_glDrawable))
- gdk_gl_drawable_swap_buffers (my_glDrawable);
- else
- glFlush ();
-
- gdk_gl_drawable_gl_end(my_glDrawable);
-#endif
+ GDK_RGB_DITHER_NONE,((guchar*)on_screen_image32)+off,L);
return TRUE;
}
-GdkGLContext * last_glContext=NULL;
+#else /* if HAVE_LIBGDKGLEXT_X11_1_0 */
+
void init_GL_capabilities(GtkWidget * widget) {
-#ifdef HAVE_LIBGDKGLEXT_X11_1_0
GdkGLConfig * my_glConfig;
my_glConfig = gdk_gl_config_new_by_mode (
GDK_GL_MODE_RGB
@@ -226,59 +184,119 @@
if (!gtk_widget_set_gl_capability(
widget,
my_glConfig,
- last_glContext,
+ NULL,
TRUE,
GDK_GL_RGBA_TYPE)) {
- printf ("YOU FAIL ! \n");
+ printf ("gtk_widget_set_gl_capability\n");
gtk_main_quit();
}
- last_glContext = gtk_widget_get_gl_context(widget);
-#endif
}
-void init_GL(GtkWidget * widget) {
-#ifdef HAVE_LIBGDKGLEXT_X11_1_0
- GdkGLDrawable * my_glDrawable;
- GdkGLContext * my_glContext;
-
- init_GL_capabilities(widget);
-
- my_glDrawable = gtk_widget_get_gl_drawable(widget);
- my_glContext = gtk_widget_get_gl_context(widget);
+GLuint Textures[1];
- printf("%08X %08X\n", my_glDrawable, my_glContext);
+void init_GL(GtkWidget * widget, int screen) {
+ GdkGLContext *my_glContext = gtk_widget_get_gl_context (widget);
+ GdkGLDrawable *my_glDrawable = gtk_widget_get_gl_drawable (widget);
if (!gdk_gl_drawable_gl_begin(my_glDrawable, my_glContext))
return;
- printf("ok\n");
-
/* Set the background black */
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
- /* Depth buffer setup */
- glClearDepth(1.0f);
-
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+ glEnable(GL_TEXTURE_2D);
+ glGenTextures(1, &Textures[0]);
+
+/*
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
+*/
+ // beautiful quad
+ glBegin(GL_QUADS);
+ glColor3ub(255,0,0); glVertex2d(-0.75,-0.75);
+ glColor3ub(128,255,0); glVertex2d(-0.75, 0.75);
+ glColor3ub(0,255,128); glVertex2d( 0.75, 0.75);
+ glColor3ub(0,0,255); glVertex2d( 0.75,-0.75);
+ glEnd();
+
+ glFlush ();
+ if (gdk_gl_drawable_is_double_buffered (my_glDrawable))
+ gdk_gl_drawable_swap_buffers (my_glDrawable);
+ gdk_gl_drawable_gl_end(my_glDrawable);
+}
+
+void reshape (GtkWidget * widget) {
+ GdkGLContext *my_glContext = gtk_widget_get_gl_context (widget);
+ GdkGLDrawable *my_glDrawable = gtk_widget_get_gl_drawable (widget);
+ if (!gdk_gl_drawable_gl_begin (my_glDrawable, my_glContext)) return;
+
+ glViewport (0, 0, widget->allocation.width, widget->allocation.height);
+
+ gdk_gl_drawable_gl_end (my_glDrawable);
+}
+
+gboolean screen (GtkWidget * widget, int screen) {
+ int H,W,off;
+ GdkGLContext *my_glContext = gtk_widget_get_gl_context (widget);
+ GdkGLDrawable *my_glDrawable = gtk_widget_get_gl_drawable (widget);
+ if (!gdk_gl_drawable_gl_begin(my_glDrawable, my_glContext))
+ return TRUE;
+
glLoadIdentity();
+ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+
+ // colorful quads so that there's something to see in case of pb
+ glBegin(GL_QUADS);
+ glColor3ub(255,0,0); glVertex2d(-0.75,-0.75);
+ glColor3ub(128,255,0); glVertex2d(-0.75, 0.75);
+ glColor3ub(0,255,128); glVertex2d( 0.75, 0.75);
+ glColor3ub(0,0,255); glVertex2d( 0.75,-0.75);
+ glColor3ub(255,255,255);
+ glEnd();
+
+ off = (screen)?RAW_OFFSET:0;
+ if (ScreenRotate) {
+ glRotatef(90.0, 0.0, 0.0, 1.0);
+ }
+
+ glBindTexture(GL_TEXTURE_2D, Textures[0]);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexImage2D(GL_TEXTURE_2D, 0, 4,
+ 256, 256, 0, GL_RGBA,
+ GL_UNSIGNED_SHORT_1_5_5_5_REV,
+// GL_UNSIGNED_SHORT_5_5_5_1,
+ GPU_screen+off);
+
+ glBegin(GL_QUADS);
+ // texcoords 0.75 means 192, 1 means 256
+ glTexCoord2f(0.0, 0.00); glVertex2d(-1.0, 1.0);
+ glTexCoord2f(0.0, 0.75); glVertex2d(-1.0,-1.0);
+ glTexCoord2f(1.0, 0.75); glVertex2d( 1.0,-1.0);
+ glTexCoord2f(1.0, 0.00); glVertex2d( 1.0, 1.0);
+ glEnd();
+
+
+ glFlush ();
if (gdk_gl_drawable_is_double_buffered (my_glDrawable))
gdk_gl_drawable_swap_buffers (my_glDrawable);
- else
- glFlush ();
- glViewport (0, 0,
- widget->allocation.width, widget->allocation.height);
gdk_gl_drawable_gl_end(my_glDrawable);
-#endif
+ return TRUE;
}
+#endif /* if HAVE_LIBGDKGLEXT_X11_1_0 */
+
/* OUTPUT UPPER SCREEN */
+/* OUTPUT LOWER SCREEN */
void on_wDraw_Main_realize (GtkWidget *widget, gpointer user_data) {
- init_GL(widget);
- unrealized--;
+ init_GL(widget, 0);
+}
+void on_wDraw_Sub_realize (GtkWidget *widget, gpointer user_data) {
+ init_GL(widget, 1);
}
gboolean on_wDraw_Main_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) {
@@ -287,14 +305,15 @@
#endif
return screen(widget, 0);
}
+gboolean on_wDraw_Sub_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) {
+ return screen(widget, 1);
+}
-/* OUTPUT LOWER SCREEN */
-void on_wDraw_Sub_realize (GtkWidget *widget, gpointer user_data) {
- init_GL(widget);
- unrealized--;
+gboolean on_wDraw_Main_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) {
+ reshape(widget); return TRUE;
}
-gboolean on_wDraw_Sub_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) {
- return screen(widget, offset_pixels_lower_screen());
+gboolean on_wDraw_Sub_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) {
+ reshape(widget); return TRUE;
}
@@ -303,6 +322,9 @@
+
+
+
/* ***** ***** INPUT STYLUS / MOUSE ***** ***** */
void set_touch_pos (int x, int y) {
Index: callbacks_IO.h
===================================================================
RCS file: /cvsroot/desmume/desmume/src/gtk-glade/callbacks_IO.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- callbacks_IO.h 4 Feb 2007 22:46:29 -0000 1.8
+++ callbacks_IO.h 5 Feb 2007 02:29:32 -0000 1.9
@@ -32,10 +32,13 @@
/* OUTPUT UPPER SCREEN */
G_MODULE_EXPORT void on_wDraw_Main_realize (GtkWidget *widget, gpointer user_data);
G_MODULE_EXPORT gboolean on_wDraw_Main_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data);
+G_MODULE_EXPORT gboolean on_wDraw_Main_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data);
+
/* OUTPUT LOWER SCREEN */
G_MODULE_EXPORT void on_wDraw_Sub_realize (GtkWidget *widget, gpointer user_data);
G_MODULE_EXPORT gboolean on_wDraw_Sub_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data);
+G_MODULE_EXPORT gboolean on_wDraw_Sub_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data);
/* INPUT STYLUS / MOUSE */
G_MODULE_EXPORT gboolean on_wDraw_Sub_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data);
Index: main.c
===================================================================
RCS file: /cvsroot/desmume/desmume/src/gtk-glade/main.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- main.c 4 Feb 2007 23:45:13 -0000 1.21
+++ main.c 5 Feb 2007 02:29:32 -0000 1.22
@@ -252,6 +252,9 @@
pDrawingArea = glade_xml_get_widget(xml, "wDraw_Main");
pDrawingArea2 = glade_xml_get_widget(xml, "wDraw_Sub");
+ init_GL_capabilities(pDrawingArea);
+ init_GL_capabilities(pDrawingArea2);
+
/* connect the signals in the interface */
glade_xml_signal_autoconnect(xml);
@@ -273,6 +276,9 @@
}
}
+ gtk_widget_show(pDrawingArea);
+ gtk_widget_show(pDrawingArea2);
+
/* start event loop */
gtk_main();
desmume_free();
Index: globals.h
===================================================================
RCS file: /cvsroot/desmume/desmume/src/gtk-glade/globals.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- globals.h 4 Feb 2007 22:46:29 -0000 1.19
+++ globals.h 5 Feb 2007 02:29:32 -0000 1.20
@@ -42,7 +42,6 @@
#endif
#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
#include <gdk/gdkkeysyms.h>
#include <glade/glade.h>
|