opengl working ( scale, rot) but disabled
This commit is contained in:
parent
5ce404bc01
commit
b2263b0bfd
|
@ -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 @@ void decode_screen () {
|
|||
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 @@ void decode_screen () {
|
|||
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 @@ void decode_screen () {
|
|||
}
|
||||
}
|
||||
|
||||
int unrealized=2;
|
||||
|
||||
gboolean screen (GtkWidget * widget, int offset_pix) {
|
||||
int H,W,L;
|
||||
#ifndef HAVE_LIBGDKGLEXT_X11_1_0
|
||||
|
||||
// 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;
|
||||
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 @@ void init_GL_capabilities(GtkWidget * widget) {
|
|||
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;
|
||||
GLuint Textures[1];
|
||||
|
||||
init_GL_capabilities(widget);
|
||||
|
||||
my_glDrawable = gtk_widget_get_gl_drawable(widget);
|
||||
my_glContext = gtk_widget_get_gl_context(widget);
|
||||
|
||||
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 );
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glGenTextures(1, &Textures[0]);
|
||||
|
||||
/*
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
*/
|
||||
// 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);
|
||||
else
|
||||
glFlush ();
|
||||
glViewport (0, 0,
|
||||
widget->allocation.width, widget->allocation.height);
|
||||
gdk_gl_drawable_gl_end(my_glDrawable);
|
||||
#endif
|
||||
}
|
||||
|
||||
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);
|
||||
gdk_gl_drawable_gl_end(my_glDrawable);
|
||||
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,16 +305,20 @@ gboolean on_wDraw_Main_expose_event (GtkWidget *widget, GdkEventExpose *event
|
|||
#endif
|
||||
return screen(widget, 0);
|
||||
}
|
||||
|
||||
/* OUTPUT LOWER SCREEN */
|
||||
void on_wDraw_Sub_realize (GtkWidget *widget, gpointer user_data) {
|
||||
init_GL(widget);
|
||||
unrealized--;
|
||||
}
|
||||
gboolean on_wDraw_Sub_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) {
|
||||
return screen(widget, offset_pixels_lower_screen());
|
||||
return screen(widget, 1);
|
||||
}
|
||||
|
||||
gboolean on_wDraw_Main_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) {
|
||||
reshape(widget); return TRUE;
|
||||
}
|
||||
gboolean on_wDraw_Sub_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) {
|
||||
reshape(widget); return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -32,10 +32,13 @@ G_MODULE_EXPORT gboolean on_wMainW_key_release_event (GtkWidget *widget, GdkEv
|
|||
/* 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);
|
||||
|
|
|
@ -581,13 +581,12 @@
|
|||
<child>
|
||||
<widget class="GtkRadioMenuItem" id="size1x">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">1x</property>
|
||||
<property name="label" translatable="yes">1,0x</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">True</property>
|
||||
<signal name="activate" handler="on_size1x_activate" last_modification_time="Mon, 01 Jan 2007 20:14:20 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkRadioMenuItem" id="size2x">
|
||||
<property name="visible">True</property>
|
||||
|
@ -1053,8 +1052,9 @@
|
|||
<widget class="GtkDrawingArea" id="wDraw_Main">
|
||||
<property name="width_request">256</property>
|
||||
<property name="height_request">192</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_EXPOSURE_MASK</property>
|
||||
<property name="visible">False</property>
|
||||
<property name="events">GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK</property>
|
||||
<signal name="configure_event" handler="on_wDraw_Main_configure_event" last_modification_time="Mon, 05 Feb 2007 00:49:24 GMT"/>
|
||||
<signal name="realize" handler="on_wDraw_Main_realize" after="yes" last_modification_time="Tue, 02 Jan 2007 10:27:08 GMT"/>
|
||||
<signal name="expose_event" handler="on_wDraw_Main_expose_event" last_modification_time="Tue, 02 Jan 2007 10:27:18 GMT"/>
|
||||
</widget>
|
||||
|
@ -1217,8 +1217,9 @@
|
|||
<widget class="GtkDrawingArea" id="wDraw_Sub">
|
||||
<property name="width_request">256</property>
|
||||
<property name="height_request">192</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||
<property name="visible">False</property>
|
||||
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
|
||||
<signal name="configure_event" handler="on_wDraw_Sub_configure_event" last_modification_time="Mon, 05 Feb 2007 00:49:24 GMT"/>
|
||||
<signal name="realize" handler="on_wDraw_Sub_realize" after="yes" last_modification_time="Tue, 02 Jan 2007 10:27:45 GMT"/>
|
||||
<signal name="expose_event" handler="on_wDraw_Sub_expose_event" last_modification_time="Tue, 02 Jan 2007 10:27:52 GMT"/>
|
||||
<signal name="button_press_event" handler="on_wDraw_Sub_button_press_event" last_modification_time="Tue, 02 Jan 2007 10:28:11 GMT"/>
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
#endif
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <glade/glade.h>
|
||||
|
||||
|
|
|
@ -252,6 +252,9 @@ int main(int argc, char *argv[]) {
|
|||
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 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
}
|
||||
|
||||
gtk_widget_show(pDrawingArea);
|
||||
gtk_widget_show(pDrawingArea2);
|
||||
|
||||
/* start event loop */
|
||||
gtk_main();
|
||||
desmume_free();
|
||||
|
|
Loading…
Reference in New Issue