00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of OGRE 00004 (Object-oriented Graphics Rendering Engine) 00005 For the latest info, see http://www.ogre3d.org/ 00006 00007 Copyright (c) 2008 Renato Araujo Oliveira Filho <renatox@gmail.com> 00008 Copyright (c) 2000-2012 Torus Knot Software Ltd 00009 00010 Permission is hereby granted, free of charge, to any person obtaining a copy 00011 of this software and associated documentation files (the "Software"), to deal 00012 in the Software without restriction, including without limitation the rights 00013 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00014 copies of the Software, and to permit persons to whom the Software is 00015 furnished to do so, subject to the following conditions: 00016 00017 The above copyright notice and this permission notice shall be included in 00018 all copies or substantial portions of the Software. 00019 00020 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00021 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00022 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00023 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00024 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00025 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00026 THE SOFTWARE. 00027 ----------------------------------------------------------------------------- 00028 */ 00029 00030 #ifndef __X11EGLSupport_H__ 00031 #define __X11EGLSupport_H__ 00032 00033 00034 #include "OgreEGLSupport.h" 00035 00036 #if (OGRE_PLATFORM == OGRE_PLATFORM_LINUX) 00037 #ifndef Status 00038 #define Status int 00039 #endif 00040 #include <X11/Xlib.h> 00041 #include <X11/Xutil.h> 00042 // #include <X11/extensions/Xrandr.h> 00043 #include <sys/time.h> 00044 #include <X11/keysym.h> 00045 #else 00046 #define StructureNotifyMask 0 00047 #define VisibilityChangeMask 0 00048 #define FocusChangeMask 0 00049 #define CWBackPixel 0 00050 #define CWBorderPixel 0 00051 #define CWColormap 0 00052 #define CWEventMask 0 00053 #define NotUseful 0 00054 #define CWSaveUnder 0 00055 #define CWBackingStore 0 00056 #define CWOverrideRedirect 0 00057 #define InputOutput 0 00058 #define NormalState 0 00059 #define StateHint 0 00060 #define InputHint 0 00061 #define USPosition 0 00062 #define ClientMessage 0 00063 #define SubstructureRedirectMask 0 00064 #define SubstructureNotifyMask 0 00065 #define CurrentTime 0 00066 #define VisualIDMask 0 00067 #define AllocNone 0 00068 00069 enum X11Bool 00070 { 00071 False 00072 , 00073 True 00074 }; 00075 class NotPointerAtom{}; 00076 typedef NotPointerAtom * Atom; 00077 00078 class Display{}; 00079 class XErrorEvent{}; 00080 class XRRScreenConfiguration{}; 00081 class Rotation{}; 00082 class Visual{}; 00083 #define Window NativeWindowType 00084 00085 struct XVisualInfo{int visualid, visual, depth;}; 00086 struct XRRScreenSize{int width, height;}; 00087 struct XWMHints{int initial_state, input, flags;}; 00088 struct XSizeHints{int flags;}; 00089 struct XWindowAttributes{NativeWindowType root; int x, y, width, height;}; 00090 struct XSetWindowAttributes{int background_pixel, border_pixel, colormap, event_mask, backing_store, save_under, override_redirect;}; 00091 struct XTextProperty{int * value;}; 00092 struct StrangeData{StrangeData(){}StrangeData(Atom atom){}StrangeData(int num){}}; 00093 struct XClientMessageEventData{StrangeData l[3];}; 00094 struct XClientMessageEvent{int type, serial, send_event, format; XClientMessageEventData data ; NativeWindowType window; Atom message_type;}; 00095 struct XEvent{}; 00096 00097 00098 void XStringListToTextProperty(char ** prop, int num, XTextProperty * textProp); 00099 Window DefaultRootWindow(Display* nativeDisplayType); 00100 bool XQueryExtension(Display* nativeDisplayType, char * name, int * dummy0, int * dummy2, int * dummy3); 00101 XRRScreenConfiguration * XRRGetScreenInfo(Display* nativeDisplayType, Window window ); 00102 int XRRConfigCurrentConfiguration(XRRScreenConfiguration * config, Rotation * rotation); 00103 XRRScreenSize * XRRConfigSizes(XRRScreenConfiguration * config, int * nSizes); 00104 int XRRConfigCurrentRate(XRRScreenConfiguration * config); 00105 short * XRRConfigRates(XRRScreenConfiguration * config, int sizeID, int * nRates); 00106 void XRRFreeScreenConfigInfo(XRRScreenConfiguration * config); 00107 int DefaultScreen(NativeDisplayType nativeDisplayType); 00108 int DisplayWidth(Display* nativeDisplayType, int screen); 00109 int DisplayHeight(Display* nativeDisplayType, int screen); 00110 Display* XOpenDisplay(int num); 00111 void XCloseDisplay(Display* nativeDisplayType); 00112 Atom XInternAtom(Display* nativeDisplayType, char * name, X11Bool isTrue);; 00113 char * DisplayString(NativeDisplayType nativeDisplayType); 00114 const char * XDisplayName(char * name); 00115 Visual * DefaultVisual(Display* nativeDisplayType, int screen); 00116 int XVisualIDFromVisual(Visual *v); 00117 void XRRSetScreenConfigAndRate(Display* nativeDisplayType, XRRScreenConfiguration * config, Window window, int size, Rotation rotation, int mode, int currentTime ); 00118 XVisualInfo * XGetVisualInfo(Display* nativeDisplayType, int mask, XVisualInfo * info, int * n); 00119 typedef int (*XErrorHandler)(Display *, XErrorEvent*); 00120 XErrorHandler XSetErrorHandler(XErrorHandler xErrorHandler); 00121 void XDestroyWindow(Display* nativeDisplayType, Window nativeWindowType); 00122 bool XGetWindowAttributes(Display* nativeDisplayType, Window nativeWindowType, XWindowAttributes * xWindowAttributes); 00123 int XCreateColormap(Display* nativeDisplayType, Window nativeWindowType, int visual, int allocNone); 00124 Window XCreateWindow(Display* nativeDisplayType, Window nativeWindowType, int left, int top, int width, int height, int dummy1, int depth, int inputOutput, int visual, int mask, XSetWindowAttributes * xSetWindowAttributes); 00125 void XFree(void *data); 00126 XWMHints * XAllocWMHints(); 00127 XSizeHints * XAllocSizeHints(); 00128 void XSetWMProperties(Display* nativeDisplayType, Window nativeWindowType,XTextProperty * titleprop, char * dummy1, char * dummy2, int num, XSizeHints *sizeHints, XWMHints *wmHints, char * dummy3); 00129 void XSetWMProtocols(Display* nativeDisplayType, Window nativeWindowType, Atom * atom, int num); 00130 void XMapWindow(Display* nativeDisplayType, Window nativeWindowType); 00131 void XFlush(Display* nativeDisplayType); 00132 void XMoveWindow(Display* nativeDisplayType, Window nativeWindowType, int left, int top); 00133 void XResizeWindow(Display* nativeDisplayType, Window nativeWindowType, int left, int top); 00134 void XQueryTree(Display* nativeDisplayType, Window nativeWindowType, Window * root, Window *parent, Window **children, unsigned int * nChildren); 00135 void XSendEvent(Display* nativeDisplayType, Window nativeWindowType, int dummy1, int mask, XEvent* xevent); 00136 #endif 00137 00138 00139 namespace Ogre { 00140 class _OgrePrivate X11EGLSupport : public EGLSupport 00141 { 00142 protected: 00143 00144 //removed createEGLWindow because it was easier to just use 00145 // new X11EGLWindow in the code to get the native version. 00146 //virtual EGLWindow* createEGLWindow( EGLSupport * support); 00147 00148 public: 00149 X11EGLSupport(); 00150 virtual ~X11EGLSupport(); 00151 00152 // virtual GLES2PBuffer* createPBuffer(PixelComponentType format, 00153 // size_t width, size_t height); 00154 00155 virtual void switchMode(uint& width, uint& height, short& frequency); 00156 String getDisplayName(void); 00157 00158 NativeDisplayType getNativeDisplay(void); 00159 XVisualInfo *getVisualFromFBConfig(::EGLConfig glConfig); 00160 Atom mAtomDeleteWindow; 00161 Atom mAtomFullScreen; 00162 Atom mAtomState; 00163 00164 // This just sets the native variables needed by EGLSupport::getGLDisplay 00165 //Then it calls EGLSupport::getDLDisplay to do the rest of the work. 00166 EGLDisplay getGLDisplay(); 00167 00168 //Moved this here from EGLSupport because maybe it should be more native. 00169 RenderWindow* newWindow(const String& name, 00170 unsigned int width, unsigned int height, 00171 bool fullScreen, 00172 const NameValuePairList *miscParams = 0); 00173 00174 }; 00175 } 00176 00177 #endif 00178
Copyright © 2012 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Sun Sep 2 2012 07:27:24