00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00027 #ifndef OPENGLPBUFFERDISPLAYDEVICE_H
00028 #define OPENGLPBUFFERDISPLAYDEVICE_H
00029
00030 #include "OpenGLRenderer.h"
00031
00032 #if defined(VMDEGLPBUFFER) && defined(VMDGLXPBUFFER)
00033 #error Cannot enable both EGL and GLX Pbuffer code at the same time (yet)
00034 #endif
00035
00036 class VMDApp;
00037
00038
00039
00040
00041 #if defined(VMDEGLPBUFFER)
00042 #include <EGL/egl.h>
00043 #include <EGL/eglext.h>
00044
00046 typedef struct {
00047 EGLDisplay dpy;
00048 EGLConfig conf;
00049 EGLSurface surf;
00050 EGLContext ctx;
00051 EGLint numdevices;
00052 EGLint devindex;
00053 } eglpbufferdata;
00054 #endif
00055
00056
00057
00058
00059
00060 #if defined(VMDGLXPBUFFER)
00061 #if !defined(_MSC_VER) && !(defined(VMDSDL) && defined(__APPLE__))
00062 #include <GL/glx.h>
00063
00064
00065
00066
00067 #if defined(ARCH_LINUX) && !defined(VMDMESA)
00068 #include <GL/glxext.h>
00069 #endif
00070 #endif
00071
00073 typedef struct {
00074 Display *dpy;
00075 int dpyScreen;
00076 Window rootWindowID;
00077 Window windowID;
00078 GLXContext cx;
00079 } glxpbufferdata;
00080 #endif
00081
00082
00086 class OpenGLPbufferDisplayDevice : public OpenGLRenderer {
00087 private:
00088 unsigned int PbufferMaxXsz;
00089 unsigned int PbufferMaxYsz;
00090
00091 public:
00092 #if defined(VMDEGLPBUFFER)
00093 eglpbufferdata eglsrv;
00094 #endif
00095 #if defined(VMDGLXPBUFFER)
00096 glxpbufferdata glxsrv;
00097 #endif
00098
00099 protected:
00100
00101 int have_window;
00102
00103
00104 #if defined(VMDGLXPBUFFER)
00105 int glx_open_window(char *, int *, int *, int, char **);
00106 #endif
00107 #if defined(VMDEGLPBUFFER)
00108 int egl_open_window(char *, int *, int *, int, char **);
00109 #endif
00110
00111 virtual void do_resize_window(int, int);
00112 virtual void do_reposition_window(int, int) {};
00113
00114 public:
00115
00116 OpenGLPbufferDisplayDevice();
00117
00118
00119
00120
00121 int init(int argc, char **argv, VMDApp *app, int *size, int *loc = NULL);
00122
00123 virtual ~OpenGLPbufferDisplayDevice(void);
00124
00125
00126
00127 virtual int supports_gui() { return FALSE; }
00128
00129
00130
00131
00132
00133 virtual int x(void) { return 0; }
00134 virtual int y(void) { return 0; }
00135
00136
00137 virtual int shift_state(void) { return 0; }
00138
00139
00140
00141 virtual int spaceball(int *, int *, int *, int *, int *, int *, int *) {
00142 return 0;
00143 }
00144
00145
00146 virtual void set_cursor(int) {}
00147
00148
00149
00150
00151
00152
00153
00154
00155 virtual void queue_events(void) {}
00156
00157
00158
00159 virtual int read_event(long &retdev, long &retval) {
00160 retdev = WIN_NOEVENT;
00161 retval = 0;
00162 return (retdev != WIN_NOEVENT);
00163 }
00164
00165
00166
00167
00168 virtual void update(int do_update = TRUE);
00169 virtual void reshape(void);
00170
00171
00172 virtual unsigned char * readpixels_rgb3u(int &x, int &y);
00173 virtual unsigned char * readpixels_rgba4u(int &x, int &y);
00174 };
00175
00176 #endif
00177