Changeset 1671
- Timestamp:
- Jul 26, 2012, 6:17:59 PM (11 years ago)
- Location:
- trunk/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/eglapp.cpp
r1106 r1671 13 13 #endif 14 14 15 #if defined USE_EGL 16 # include <X11/Xlib.h> 17 # include <X11/Xatom.h> 18 # include <X11/Xutil.h> 15 #define HAVE_BCM_HOST_H 1 16 #if defined USE_EGL 17 # if defined HAVE_BCM_HOST_H 18 # include <bcm_host.h> 19 # else 20 # include <X11/Xlib.h> 21 # include <X11/Xatom.h> 22 # include <X11/Xutil.h> 23 # endif 19 24 # include <EGL/egl.h> 25 # include <EGL/eglext.h> 20 26 #endif 21 27 … … 37 43 private: 38 44 #if defined USE_EGL 39 Display *dpy;40 Window win;41 45 EGLDisplay egl_dpy; 42 46 EGLContext egl_ctx; 43 47 EGLSurface egl_surf; 48 uvec2 screen_size; 49 # if defined HAVE_BCM_HOST_H 50 EGL_DISPMANX_WINDOW_T nativewindow; 51 # else 52 Display *dpy; 53 Window win; 54 # endif 44 55 #endif 45 56 }; … … 53 64 { 54 65 #if defined USE_EGL 66 # if defined HAVE_BCM_HOST_H 67 bcm_host_init(); 68 69 data->egl_dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); 70 # else 55 71 data->dpy = XOpenDisplay(NULL); 56 72 if (data->dpy == NULL) … … 83 99 84 100 data->egl_dpy = eglGetDisplay((EGLNativeDisplayType)data->dpy); 101 # endif 85 102 if (data->egl_dpy == EGL_NO_DISPLAY) 86 103 { … … 119 136 } 120 137 138 if (!eglBindAPI(EGL_OPENGL_ES_API)) 139 { 140 Log::Error("cannot bind OpenGL ES API (%i)\n", eglGetError()); 141 exit(EXIT_FAILURE); 142 } 143 144 # if defined HAVE_BCM_HOST_H 145 DISPMANX_ELEMENT_HANDLE_T dispman_element; 146 DISPMANX_DISPLAY_HANDLE_T dispman_display; 147 DISPMANX_UPDATE_HANDLE_T dispman_update; 148 VC_RECT_T dst_rect; 149 VC_RECT_T src_rect; 150 151 graphics_get_display_size(0 /* LCD */, &data->screen_size.x, &data->screen_size.y); 152 153 dst_rect.x = 0; 154 dst_rect.y = 0; 155 dst_rect.width = data->screen_size.x; 156 dst_rect.height = data->screen_size.y; 157 158 src_rect.x = 0; 159 src_rect.y = 0; 160 src_rect.width = data->screen_size.x << 16; 161 src_rect.height = data->screen_size.y << 16; 162 163 dispman_display = vc_dispmanx_display_open(0 /* LCD */); 164 dispman_update = vc_dispmanx_update_start(0); 165 166 dispman_element = vc_dispmanx_element_add(dispman_update, dispman_display, 167 0/*layer*/, &dst_rect, 0/*src*/, &src_rect, DISPMANX_PROTECTION_NONE, 168 0 /*alpha*/, 0/*clamp*/, (DISPMANX_TRANSFORM_T)0/*transform*/); 169 170 data->nativewindow.element = dispman_element; 171 data->nativewindow.width = data->screen_size.x; 172 data->nativewindow.height = data->screen_size.y; 173 vc_dispmanx_update_submit_sync(dispman_update); 174 121 175 data->egl_surf = eglCreateWindowSurface(data->egl_dpy, ecfg, 122 data->win, NULL); 176 &data->nativewindow, NULL); 177 # else 178 data->egl_surf = eglCreateWindowSurface(data->egl_dpy, ecfg, 179 (EGLNativeWindowType)data->win, 180 NULL); 181 # endif 123 182 if (data->egl_surf == EGL_NO_SURFACE) 124 183 { … … 145 204 data->egl_surf, data->egl_ctx); 146 205 206 # if !defined HAVE_BCM_HOST_H 147 207 XWindowAttributes gwa; 148 208 XGetWindowAttributes(data->dpy, data->win, &gwa); 209 data->screen_size = ivec2(gwa.width, gwa.height); 210 # endif 149 211 150 212 /* Initialise everything */ 151 213 Ticker::Setup(fps); 152 Video::Setup( ivec2(gwa.width, gwa.height));214 Video::Setup((ivec2)data->screen_size); 153 215 Audio::Setup(2); 154 216 #endif 217 } 218 219 void EglApp::ShowPointer(bool show) 220 { 221 ; 155 222 } 156 223 … … 173 240 eglDestroySurface(data->egl_dpy, data->egl_surf); 174 241 eglTerminate(data->egl_dpy); 242 # if defined HAVE_BCM_HOST_H 243 /* FIXME */ 244 # else 175 245 XDestroyWindow(data->dpy, data->win); 176 246 XCloseDisplay(data->dpy); 247 # endif 177 248 #endif 178 249 -
trunk/src/eglapp.h
r1139 r1671 30 30 virtual ~EglApp(); 31 31 32 void ShowPointer(bool show); 32 33 void Run(); 33 34
Note: See TracChangeset
for help on using the changeset viewer.