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 #include <X11/Xutil.h> 00038 #include <X11/extensions/Xrandr.h> 00039 #include <X11/Xutil.h> 00040 #include <sys/time.h> 00041 #include <X11/Xlib.h> 00042 #include <X11/keysym.h> 00043 #include <X11/extensions/Xrandr.h> 00044 #else 00045 #define StructureNotifyMask 0 00046 #define VisibilityChangeMask 0 00047 #define FocusChangeMask 0 00048 #define CWBackPixel 0 00049 #define CWBorderPixel 0 00050 #define CWColormap 0 00051 #define CWEventMask 0 00052 #define NotUseful 0 00053 #define CWSaveUnder 0 00054 #define CWBackingStore 0 00055 #define CWOverrideRedirect 0 00056 #define InputOutput 0 00057 #define NormalState 0 00058 #define StateHint 0 00059 #define InputHint 0 00060 #define USPosition 0 00061 #define ClientMessage 0 00062 #define SubstructureRedirectMask 0 00063 #define SubstructureNotifyMask 0 00064 #define CurrentTime 0 00065 #define VisualIDMask 0 00066 #define AllocNone 0 00067 00068 enum X11Bool 00069 { 00070 False 00071 , 00072 True 00073 }; 00074 class NotPointerAtom{}; 00075 typedef NotPointerAtom * Atom; 00076 00077 class Display{}; 00078 class XErrorEvent{}; 00079 class XRRScreenConfiguration{}; 00080 class Rotation{}; 00081 class Visual{}; 00082 #define Window NativeWindowType 00083 00084 struct XVisualInfo{int visualid, visual, depth;}; 00085 struct XRRScreenSize{int width, height;}; 00086 struct XWMHints{int initial_state, input, flags;}; 00087 struct XSizeHints{int flags;}; 00088 struct XWindowAttributes{NativeWindowType root; int x, y, width, height;}; 00089 struct XSetWindowAttributes{int background_pixel, border_pixel, colormap, event_mask, backing_store, save_under, override_redirect;}; 00090 struct XTextProperty{int * value;}; 00091 struct StrangeData{StrangeData(){}StrangeData(Atom atom){}StrangeData(int num){}}; 00092 struct XClientMessageEventData{StrangeData l[3];}; 00093 struct XClientMessageEvent{int type, serial, send_event, format; XClientMessageEventData data ; NativeWindowType window; Atom message_type;}; 00094 struct XEvent{}; 00095 00096 00097 void XStringListToTextProperty(char ** prop, int num, XTextProperty * textProp); 00098 Window DefaultRootWindow(Display* nativeDisplayType); 00099 bool XQueryExtension(Display* nativeDisplayType, char * name, int * dummy0, int * dummy2, int * dummy3); 00100 XRRScreenConfiguration * XRRGetScreenInfo(Display* nativeDisplayType, Window window ); 00101 int XRRConfigCurrentConfiguration(XRRScreenConfiguration * config, Rotation * rotation); 00102 XRRScreenSize * XRRConfigSizes(XRRScreenConfiguration * config, int * nSizes); 00103 int XRRConfigCurrentRate(XRRScreenConfiguration * config); 00104 short * XRRConfigRates(XRRScreenConfiguration * config, int sizeID, int * nRates); 00105 void XRRFreeScreenConfigInfo(XRRScreenConfiguration * config); 00106 int DefaultScreen(NativeDisplayType nativeDisplayType); 00107 int DisplayWidth(Display* nativeDisplayType, int screen); 00108 int DisplayHeight(Display* nativeDisplayType, int screen); 00109 Display* XOpenDisplay(int num); 00110 void XCloseDisplay(Display* nativeDisplayType); 00111 Atom XInternAtom(Display* nativeDisplayType, char * name, X11Bool isTrue);; 00112 char * DisplayString(NativeDisplayType nativeDisplayType); 00113 const char * XDisplayName(char * name); 00114 Visual * DefaultVisual(Display* nativeDisplayType, int screen); 00115 int XVisualIDFromVisual(Visual *v); 00116 void XRRSetScreenConfigAndRate(Display* nativeDisplayType, XRRScreenConfiguration * config, Window window, int size, Rotation rotation, int mode, int currentTime ); 00117 XVisualInfo * XGetVisualInfo(Display* nativeDisplayType, int mask, XVisualInfo * info, int * n); 00118 typedef int (*XErrorHandler)(Display *, XErrorEvent*); 00119 XErrorHandler XSetErrorHandler(XErrorHandler xErrorHandler); 00120 void XDestroyWindow(Display* nativeDisplayType, Window nativeWindowType); 00121 bool XGetWindowAttributes(Display* nativeDisplayType, Window nativeWindowType, XWindowAttributes * xWindowAttributes); 00122 int XCreateColormap(Display* nativeDisplayType, Window nativeWindowType, int visual, int allocNone); 00123 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); 00124 void XFree(void *data); 00125 XWMHints * XAllocWMHints(); 00126 XSizeHints * XAllocSizeHints(); 00127 void XSetWMProperties(Display* nativeDisplayType, Window nativeWindowType,XTextProperty * titleprop, char * dummy1, char * dummy2, int num, XSizeHints *sizeHints, XWMHints *wmHints, char * dummy3); 00128 void XSetWMProtocols(Display* nativeDisplayType, Window nativeWindowType, Atom * atom, int num); 00129 void XMapWindow(Display* nativeDisplayType, Window nativeWindowType); 00130 void XFlush(Display* nativeDisplayType); 00131 void XMoveWindow(Display* nativeDisplayType, Window nativeWindowType, int left, int top); 00132 void XResizeWindow(Display* nativeDisplayType, Window nativeWindowType, int left, int top); 00133 void XQueryTree(Display* nativeDisplayType, Window nativeWindowType, Window * root, Window *parent, Window **children, unsigned int * nChildren); 00134 void XSendEvent(Display* nativeDisplayType, Window nativeWindowType, int dummy1, int mask, XEvent* xevent); 00135 #endif 00136 00137 00138 namespace Ogre { 00139 class _OgrePrivate X11EGLSupport : public EGLSupport 00140 { 00141 protected: 00142 00143 //removed createEGLWindow because it was easier to just use 00144 // new X11EGLWindow in the code to get the native version. 00145 //virtual EGLWindow* createEGLWindow( EGLSupport * support); 00146 00147 public: 00148 X11EGLSupport(); 00149 virtual ~X11EGLSupport(); 00150 00151 virtual GLESPBuffer* createPBuffer(PixelComponentType format, 00152 size_t width, size_t height); 00153 00154 virtual void switchMode(uint& width, uint& height, short& frequency); 00155 String getDisplayName(void); 00156 00157 NativeDisplayType getNativeDisplay(void); 00158 XVisualInfo *getVisualFromFBConfig(::EGLConfig glConfig); 00159 Atom mAtomDeleteWindow; 00160 Atom mAtomFullScreen; 00161 Atom mAtomState; 00162 00163 // This just sets the native variables needed by EGLSupport::getGLDisplay 00164 //Then it calls EGLSupport::getDLDisplay to do the rest of the work. 00165 EGLDisplay getGLDisplay(); 00166 00167 //Moved this here from EGLSupport because maybe it should be more native. 00168 RenderWindow* newWindow(const String& name, 00169 unsigned int width, unsigned int height, 00170 bool fullScreen, 00171 const NameValuePairList *miscParams = 0); 00172 00173 }; 00174 } 00175 00176 #endif
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