Mercurial > sdl-ios-xcode
annotate src/video/photon/SDL_photon.c @ 3374:725b16784e96
MatÄ›j TÃ½Ä 2009-10-05 14:09:03 PDT
patched to comply to the up-to-date autoconf
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 10 Oct 2009 18:37:35 +0000 |
parents | 64e4442676a6 |
children | dd105b317335 |
rev | line source |
---|---|
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 Copyright (C) 1997-2009 Sam Lantinga |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
21 |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
22 QNX Photon GUI SDL driver |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
23 Copyright (C) 2009 Mike Gorchak |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
24 (mike@malva.ua, lestat@i.com.ua) |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
27 /* SDL internals */ |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 #include "SDL_config.h" |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include "../SDL_sysvideo.h" |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
30 #include "SDL_version.h" |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
31 #include "SDL_syswm.h" |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
32 #include "SDL_loadso.h" |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
33 #include "SDL_events.h" |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
34 #include "../../events/SDL_mouse_c.h" |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
35 #include "../../events/SDL_keyboard_c.h" |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
36 |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
37 /* Photon declarations */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
38 #include "SDL_photon.h" |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
39 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
40 /* Pixel format conversion routines */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
41 #include "SDL_photon_pixelfmt.h" |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
42 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
43 /* Use GF's pixel format functions for OpenGL ES context creation */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
44 #if defined(SDL_VIDEO_OPENGL_ES) |
3139 | 45 #include "../qnxgf/SDL_gf_pixelfmt.h" |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
46 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
47 /* If GF driver is not compiled in, include some of usefull functions */ |
3139 | 48 #if !defined(SDL_VIDEO_DRIVER_QNXGF) |
49 #include "../qnxgf/SDL_gf_pixelfmt.c" | |
50 #endif /* SDL_VIDEO_DRIVER_QNXGF */ | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
51 #endif /* SDL_VIDEO_OPENGL_ES */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
52 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
53 /* Use GF's OpenGL ES 1.1 functions emulation */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
54 #if defined(SDL_VIDEO_OPENGL_ES) |
3139 | 55 #include "../qnxgf/SDL_gf_opengles.h" |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
56 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
57 /* If GF driver is not compiled in, include some of usefull functions */ |
3139 | 58 #if !defined(SDL_VIDEO_DRIVER_QNXGF) |
59 #include "../qnxgf/SDL_gf_opengles.c" | |
60 #endif /* SDL_VIDEO_DRIVER_QNXGF */ | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
61 #endif /* SDL_VIDEO_OPENGL_ES */ |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
62 |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
63 /* Low level device graphics driver names, which they are reporting */ |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
64 static const Photon_DeviceCaps photon_devicename[] = { |
3139 | 65 /* ATI Rage 128 graphics driver (devg-ati_rage128) */ |
66 {"ati_rage128", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
67 , | |
68 /* Fujitsu Carmine graphics driver (devg-carmine.so) */ | |
69 {"carmine", SDL_PHOTON_ACCELERATED | SDL_PHOTON_ACCELERATED_3D} | |
70 , | |
71 /* C&T graphics driver (devg-chips.so) */ | |
72 {"chips", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
73 , | |
74 /* Fujitsu Coral graphics driver (devg-coral.so) */ | |
75 {"coral", SDL_PHOTON_ACCELERATED | SDL_PHOTON_ACCELERATED_3D} | |
76 , | |
77 /* Intel integrated graphics driver (devg-extreme2.so) */ | |
78 {"extreme2", SDL_PHOTON_ACCELERATED | SDL_PHOTON_ACCELERATED_3D} | |
79 , | |
80 /* Unaccelerated FB driver (devg-flat.so) */ | |
81 {"flat", SDL_PHOTON_UNACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
82 , | |
83 /* NS Geode graphics driver (devg-geode.so) */ | |
84 {"geode", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
85 , | |
86 /* Geode LX graphics driver (devg-geodelx.so) */ | |
87 {"geodelx", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
88 , | |
89 /* Intel integrated graphics driver (devg-gma9xx.so) */ | |
90 {"gma", SDL_PHOTON_ACCELERATED | SDL_PHOTON_ACCELERATED_3D} | |
91 , | |
92 /* Intel integrated graphics driver (devg-i810.so) */ | |
93 {"i810", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
94 , | |
95 /* Intel integrated graphics driver (devg-i830.so) */ | |
96 {"i830", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
97 , | |
98 /* Geode LX graphics driver (devg-lx800.so) */ | |
99 {"lx800", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
100 , | |
101 /* Matrox Gxx graphics driver (devg-matroxg.so) */ | |
102 {"matroxg", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
103 , | |
104 /* Intel Poulsbo graphics driver (devg-poulsbo.so) */ | |
105 {"poulsbo", SDL_PHOTON_ACCELERATED | SDL_PHOTON_ACCELERATED_3D} | |
106 , | |
107 /* ATI Radeon driver (devg-radeon.so) */ | |
108 {"radeon", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
109 , | |
110 /* ATI Rage driver (devg-rage.so) */ | |
111 {"rage", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
112 , | |
113 /* S3 Savage graphics driver (devg-s3_savage.so) */ | |
114 {"s3_savage", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
115 , | |
116 /* SiS630 integrated graphics driver (devg-sis630.so) */ | |
117 {"sis630", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
118 , | |
119 /* PowerVR SGX 535 graphics driver (devg-poulsbo.so) */ | |
120 {"sgx", SDL_PHOTON_ACCELERATED | SDL_PHOTON_ACCELERATED_3D} | |
121 , | |
122 /* SM Voyager GX graphics driver (devg-smi5xx.so) */ | |
123 {"smi5xx", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
124 , | |
125 /* Silicon Motion graphics driver (devg-smi7xx.so) */ | |
126 {"smi7xx", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
127 , | |
128 /* SVGA unaccelerated gfx driver (devg-svga.so) */ | |
129 {"svga", SDL_PHOTON_UNACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
130 , | |
131 /* nVidia TNT graphics driver (devg-tnt.so) */ | |
132 {"tnt", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
133 , | |
134 /* VIA integrated graphics driver (devg-tvia.so) */ | |
135 {"tvia", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
136 , | |
137 /* VIA UniChrome graphics driver (devg-unichrome.so) */ | |
138 {"unichrome", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
139 , | |
140 /* VESA unaccelerated gfx driver (devg-vesa.so) */ | |
141 {"vesa", SDL_PHOTON_UNACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
142 , | |
143 /* VmWare graphics driver (devg-volari.so) */ | |
144 {"vmware", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
145 , | |
146 /* XGI XP10 graphics driver (devg-volari.so), OpenGL 1.5 */ | |
147 {"volari", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} | |
148 , | |
149 /* End of list */ | |
150 {NULL, 0x00000000} | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
151 }; |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 |
3139 | 153 static SDL_bool photon_initialized = SDL_FALSE; |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 |
3139 | 155 static int |
156 photon_available(void) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 { |
3139 | 158 int status; |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 |
3139 | 160 /* Check if Photon was initialized before */ |
161 if (photon_initialized == SDL_FALSE) { | |
162 /* Initialize Photon widget library and open channel to Photon */ | |
163 status = PtInit(NULL); | |
164 if (status == 0) { | |
165 photon_initialized = SDL_TRUE; | |
166 return 1; | |
167 } else { | |
168 photon_initialized = SDL_FALSE; | |
169 return 0; | |
170 } | |
171 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 |
3139 | 173 return 1; |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 |
3139 | 176 static void |
177 photon_destroy(SDL_VideoDevice * device) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 { |
3139 | 179 SDL_VideoData *phdata = (SDL_VideoData *) device->driverdata; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
180 |
3139 | 181 #if defined(SDL_VIDEO_OPENGL_ES) |
182 if (phdata->gfinitialized != SDL_FALSE) { | |
183 gf_dev_detach(phdata->gfdev); | |
184 } | |
185 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
186 |
3139 | 187 if (device->driverdata != NULL) { |
188 device->driverdata = NULL; | |
189 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 |
3139 | 192 static SDL_VideoDevice * |
193 photon_create(int devindex) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 { |
3139 | 195 SDL_VideoDevice *device; |
196 SDL_VideoData *phdata; | |
197 int status; | |
198 | |
199 /* Check if photon could be initialized */ | |
200 status = photon_available(); | |
201 if (status == 0) { | |
202 /* Photon could not be used */ | |
203 return NULL; | |
204 } | |
205 | |
206 /* Photon agregates all video devices to one with multiple heads */ | |
207 if (devindex != 0) { | |
208 /* devindex could be zero only in Photon SDL driver */ | |
209 return NULL; | |
210 } | |
211 | |
212 /* Initialize SDL_VideoDevice structure */ | |
213 device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); | |
214 if (device == NULL) { | |
215 SDL_OutOfMemory(); | |
216 return NULL; | |
217 } | |
218 | |
219 /* Initialize internal photon specific data */ | |
220 phdata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData)); | |
221 if (phdata == NULL) { | |
222 SDL_OutOfMemory(); | |
223 SDL_free(device); | |
224 return NULL; | |
225 } | |
226 device->driverdata = phdata; | |
227 | |
228 /* Get all photon display devices */ | |
229 phdata->avail_rids = | |
230 PdGetDevices(&phdata->rid[0], SDL_VIDEO_PHOTON_MAX_RIDS); | |
231 if (phdata->avail_rids > SDL_VIDEO_PHOTON_MAX_RIDS) { | |
232 phdata->avail_rids = SDL_VIDEO_PHOTON_MAX_RIDS; | |
233 } | |
234 #if defined(SDL_VIDEO_OPENGL_ES) | |
235 /* TODO: add real device detection versus multiple heads */ | |
236 status = | |
237 gf_dev_attach(&phdata->gfdev, GF_DEVICE_INDEX(0), | |
238 &phdata->gfdev_info); | |
239 if (status != GF_ERR_OK) { | |
240 /* Do not fail right now, if GF can't be attached */ | |
241 phdata->gfinitialized = SDL_FALSE; | |
242 } else { | |
243 phdata->gfinitialized = SDL_TRUE; | |
244 } | |
245 #endif /* SDL_VIDEO_OPENGL_ES */ | |
246 | |
247 /* Set default target device */ | |
248 status = PdSetTargetDevice(NULL, phdata->rid[0]); | |
249 if (status == -1) { | |
250 SDL_SetError("Photon: Can't set default target device"); | |
251 #if defined(SDL_VIDEO_OPENGL_ES) | |
252 gf_dev_detach(phdata->gfdev); | |
253 #endif /* SDL_VIDEO_OPENGL_ES */ | |
254 SDL_free(phdata); | |
255 SDL_free(device); | |
256 return NULL; | |
257 } | |
258 phdata->current_device_id = 0; | |
259 | |
260 /* Setup amount of available displays and current display */ | |
261 device->num_displays = 0; | |
262 device->current_display = 0; | |
263 | |
264 /* Set device free function */ | |
265 device->free = photon_destroy; | |
266 | |
267 /* Setup all functions which we can handle */ | |
268 device->VideoInit = photon_videoinit; | |
269 device->VideoQuit = photon_videoquit; | |
270 device->GetDisplayModes = photon_getdisplaymodes; | |
271 device->SetDisplayMode = photon_setdisplaymode; | |
272 device->SetDisplayPalette = photon_setdisplaypalette; | |
273 device->GetDisplayPalette = photon_getdisplaypalette; | |
274 device->SetDisplayGammaRamp = photon_setdisplaygammaramp; | |
275 device->GetDisplayGammaRamp = photon_getdisplaygammaramp; | |
276 device->CreateWindow = photon_createwindow; | |
277 device->CreateWindowFrom = photon_createwindowfrom; | |
278 device->SetWindowTitle = photon_setwindowtitle; | |
279 device->SetWindowIcon = photon_setwindowicon; | |
280 device->SetWindowPosition = photon_setwindowposition; | |
281 device->SetWindowSize = photon_setwindowsize; | |
282 device->ShowWindow = photon_showwindow; | |
283 device->HideWindow = photon_hidewindow; | |
284 device->RaiseWindow = photon_raisewindow; | |
285 device->MaximizeWindow = photon_maximizewindow; | |
286 device->MinimizeWindow = photon_minimizewindow; | |
287 device->RestoreWindow = photon_restorewindow; | |
288 device->SetWindowGrab = photon_setwindowgrab; | |
289 device->DestroyWindow = photon_destroywindow; | |
290 device->GetWindowWMInfo = photon_getwindowwminfo; | |
291 device->GL_LoadLibrary = photon_gl_loadlibrary; | |
292 device->GL_GetProcAddress = photon_gl_getprocaddres; | |
293 device->GL_UnloadLibrary = photon_gl_unloadlibrary; | |
294 device->GL_CreateContext = photon_gl_createcontext; | |
295 device->GL_MakeCurrent = photon_gl_makecurrent; | |
296 device->GL_SetSwapInterval = photon_gl_setswapinterval; | |
297 device->GL_GetSwapInterval = photon_gl_getswapinterval; | |
298 device->GL_SwapWindow = photon_gl_swapwindow; | |
299 device->GL_DeleteContext = photon_gl_deletecontext; | |
300 device->PumpEvents = photon_pumpevents; | |
301 device->SuspendScreenSaver = photon_suspendscreensaver; | |
302 | |
303 return device; | |
304 } | |
305 | |
306 VideoBootStrap photon_bootstrap = { | |
307 "photon", | |
308 "SDL QNX Photon video driver", | |
309 photon_available, | |
310 photon_create | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 }; |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
313 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
314 /* SDL Video and Display initialization/handling functions */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
315 /*****************************************************************************/ |
3139 | 316 int |
317 photon_videoinit(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
318 { |
3139 | 319 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
320 PgHWCaps_t hwcaps; | |
321 PgVideoModeInfo_t modeinfo; | |
322 int32_t status; | |
323 SDL_VideoDisplay display; | |
324 SDL_DisplayMode current_mode; | |
325 SDL_DisplayData *didata; | |
326 uint32_t it; | |
327 uint32_t jt; | |
328 char *override; | |
329 | |
330 /* By default Photon do not uses swap on VSYNC */ | |
331 phdata->swapinterval = 0; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
332 |
3139 | 333 for (it = 0; it < phdata->avail_rids; it++) { |
334 didata = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData)); | |
335 if (didata == NULL) { | |
336 /* memory allocation error */ | |
337 SDL_OutOfMemory(); | |
338 return -1; | |
339 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
340 |
3139 | 341 /* Allocate two cursors with SDL_VIDEO_PHOTON_MAX_CURSOR_SIZE size */ |
342 /* and 128 bytes of spare place */ | |
343 didata->cursor_size = | |
344 ((SDL_VIDEO_PHOTON_MAX_CURSOR_SIZE * 4) >> 3) + 128; | |
345 didata->cursor = (PhCursorDef_t *) SDL_calloc(1, didata->cursor_size); | |
346 if (didata->cursor == NULL) { | |
347 /* memory allocation error */ | |
348 SDL_OutOfMemory(); | |
349 SDL_free(didata); | |
350 return -1; | |
351 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
352 |
3139 | 353 /* Initialize GF in case of OpenGL ES support is compiled in */ |
354 #if defined(SDL_VIDEO_OPENGL_ES) | |
355 /* TODO: add real device detection versus multiple heads */ | |
356 if (phdata->gfinitialized == SDL_TRUE) { | |
357 status = | |
358 gf_display_attach(&didata->display, phdata->gfdev, it, | |
359 &didata->display_info); | |
360 if (status != GF_ERR_OK) { | |
361 /* Just shutdown GF, do not fail */ | |
362 gf_dev_detach(phdata->gfdev); | |
363 phdata->gfinitialized = SDL_FALSE; | |
364 } | |
365 } | |
366 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
367 |
3139 | 368 /* Check if current device is not the same as target */ |
369 if (phdata->current_device_id != it) { | |
370 /* Set target device as default for Pd and Pg functions */ | |
371 status = PdSetTargetDevice(NULL, phdata->rid[it]); | |
372 if (status != 0) { | |
373 SDL_SetError("Photon: Can't set default target device\n"); | |
374 SDL_free(didata->cursor); | |
375 SDL_free(didata); | |
376 return -1; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
377 } |
3139 | 378 phdata->current_device_id = it; |
379 } | |
380 | |
381 /* Store device id */ | |
382 didata->device_id = it; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
383 |
3139 | 384 /* Query photon about graphics hardware caps and current video mode */ |
385 status = PgGetGraphicsHWCaps(&hwcaps); | |
386 if (status != 0) { | |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
387 PhRect_t extent; |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
388 PdOffscreenContext_t* curctx; |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
389 |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
390 /* If error happens, this also could mean, that photon is working */ |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
391 /* under custom (not listed by photon) video mode */ |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
392 status=PhWindowQueryVisible(Ph_QUERY_GRAPHICS, 0, 0, &extent); |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
393 if (status != 0) { |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
394 SDL_SetError("Photon: Can't get graphics driver region"); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
395 SDL_free(didata->cursor); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
396 SDL_free(didata); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
397 return -1; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
398 } |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
399 modeinfo.width=extent.lr.x+1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
400 modeinfo.height=extent.lr.y+1; |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
401 /* Hardcode 60Hz, as the base refresh rate frequency */ |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
402 hwcaps.current_rrate=60; |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
403 /* Clear current video driver name, no way to get it somehow */ |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
404 hwcaps.chip_name[0]=0x00; |
3139 | 405 |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
406 /* Create offscreen context from video memory, which is currently */ |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
407 /* displayed on the screen */ |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
408 curctx=PdCreateOffscreenContext(0, 0, 0, Pg_OSC_MAIN_DISPLAY); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
409 if (curctx==NULL) |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
410 { |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
411 SDL_SetError("Photon: Can't get display area capabilities"); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
412 SDL_free(didata->cursor); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
413 SDL_free(didata); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
414 return -1; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
415 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
416 /* Retrieve current bpp */ |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
417 modeinfo.type=curctx->format; |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
418 PhDCRelease(curctx); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
419 } else { |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
420 /* Get current video mode details */ |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
421 status = PgGetVideoModeInfo(hwcaps.current_video_mode, &modeinfo); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
422 if (status != 0) { |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
423 SDL_SetError("Photon: Can't get current video mode information"); |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
424 SDL_free(didata->cursor); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
425 SDL_free(didata); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
426 return -1; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
427 } |
3139 | 428 } |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
429 |
3139 | 430 /* Setup current desktop mode for SDL */ |
431 SDL_zero(current_mode); | |
432 current_mode.w = modeinfo.width; | |
433 current_mode.h = modeinfo.height; | |
434 current_mode.refresh_rate = hwcaps.current_rrate; | |
435 current_mode.format = photon_image_to_sdl_pixelformat(modeinfo.type); | |
436 current_mode.driverdata = NULL; | |
437 | |
438 /* Copy device name */ | |
439 SDL_strlcpy(didata->description, hwcaps.chip_name, | |
440 SDL_VIDEO_PHOTON_DEVICENAME_MAX - 1); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
441 |
3139 | 442 /* Search device capabilities and possible workarounds */ |
443 jt = 0; | |
444 do { | |
445 if (photon_devicename[jt].name == NULL) { | |
446 break; | |
447 } | |
448 if (SDL_strncmp | |
449 (photon_devicename[jt].name, didata->description, | |
450 SDL_strlen(photon_devicename[jt].name)) == 0) { | |
451 didata->caps = photon_devicename[jt].caps; | |
452 } | |
453 jt++; | |
454 } while (1); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
455 |
3139 | 456 /* Initialize display structure */ |
457 SDL_zero(display); | |
458 display.desktop_mode = current_mode; | |
459 display.current_mode = current_mode; | |
460 display.driverdata = didata; | |
461 didata->current_mode = current_mode; | |
462 SDL_AddVideoDisplay(&display); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
463 |
3139 | 464 /* Check for environment variables which could override some SDL settings */ |
465 didata->custom_refresh = 0; | |
466 override = SDL_getenv("SDL_VIDEO_PHOTON_REFRESH_RATE"); | |
467 if (override != NULL) { | |
468 if (SDL_sscanf(override, "%u", &didata->custom_refresh) != 1) { | |
469 didata->custom_refresh = 0; | |
470 } | |
471 } | |
472 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
473 |
3139 | 474 /* Add photon input devices */ |
475 status = photon_addinputdevices(_this); | |
476 if (status != 0) { | |
477 /* SDL error is set by photon_addinputdevices() function */ | |
478 return -1; | |
479 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
480 |
3139 | 481 /* Add photon renderer to SDL */ |
482 photon_addrenderdriver(_this); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
483 |
3139 | 484 /* video has been initialized successfully */ |
485 return 1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
486 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
487 |
3139 | 488 void |
489 photon_videoquit(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
490 { |
3139 | 491 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
492 SDL_DisplayData *didata; | |
493 uint32_t it; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
494 |
3139 | 495 /* SDL will restore our desktop mode on exit */ |
496 for (it = 0; it < _this->num_displays; it++) { | |
497 didata = _this->displays[it].driverdata; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
498 |
3139 | 499 if (didata->cursor != NULL) { |
500 SDL_free(didata->cursor); | |
501 } | |
502 #if defined(SDL_VIDEO_OPENGL_ES) | |
503 if (phdata->gfinitialized == SDL_TRUE) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
504 /* Detach GF display */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
505 gf_display_detach(didata->display); |
3139 | 506 } |
507 #endif /* SDL_VIDEO_OPENGL_ES */ | |
508 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
509 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
510 |
3139 | 511 void |
512 photon_getdisplaymodes(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
513 { |
3139 | 514 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
515 SDL_DisplayData *didata = | |
516 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
517 SDL_DisplayMode mode; | |
518 PgVideoModes_t modes; | |
519 PgVideoModeInfo_t modeinfo; | |
520 int32_t status; | |
521 uint32_t it; | |
522 uint32_t jt; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
523 |
3139 | 524 /* Check if current device is not the same as target */ |
525 if (phdata->current_device_id != didata->device_id) { | |
526 /* Set target device as default for Pd and Pg functions */ | |
527 status = PdSetTargetDevice(NULL, phdata->rid[didata->device_id]); | |
528 if (status != 0) { | |
529 SDL_SetError("Photon: Can't set default target device\n"); | |
530 return; | |
531 } | |
532 phdata->current_device_id = didata->device_id; | |
533 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
534 |
3139 | 535 /* Get array of available video modes */ |
536 status = PgGetVideoModeList(&modes); | |
537 if (status != 0) { | |
538 SDL_SetError("Photon: Can't get video mode list"); | |
539 return; | |
540 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
541 |
3139 | 542 for (it = 0; it < modes.num_modes; it++) { |
543 status = PgGetVideoModeInfo(modes.modes[it], &modeinfo); | |
544 if (status != 0) { | |
545 /* Maybe something wrong with this particular mode, skip it */ | |
546 continue; | |
547 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
548 |
3139 | 549 jt = 0; |
550 do { | |
551 if (modeinfo.refresh_rates[jt] != 0) { | |
552 mode.w = modeinfo.width; | |
553 mode.h = modeinfo.height; | |
554 mode.refresh_rate = modeinfo.refresh_rates[jt]; | |
555 mode.format = photon_image_to_sdl_pixelformat(modeinfo.type); | |
556 mode.driverdata = NULL; | |
557 SDL_AddDisplayMode(_this->current_display, &mode); | |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
558 |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
559 /* If mode is RGBA8888, add the same mode as RGBx888 */ |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
560 if (modeinfo.type == Pg_IMAGE_DIRECT_8888) { |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
561 mode.w = modeinfo.width; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
562 mode.h = modeinfo.height; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
563 mode.refresh_rate = modeinfo.refresh_rates[jt]; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
564 mode.format = SDL_PIXELFORMAT_RGB888; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
565 mode.driverdata = NULL; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
566 SDL_AddDisplayMode(_this->current_display, &mode); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
567 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
568 |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
569 /* If mode is RGBA1555, add the same mode as RGBx555 */ |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
570 if (modeinfo.type == Pg_IMAGE_DIRECT_1555) { |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
571 mode.w = modeinfo.width; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
572 mode.h = modeinfo.height; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
573 mode.refresh_rate = modeinfo.refresh_rates[jt]; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
574 mode.format = SDL_PIXELFORMAT_RGB555; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
575 mode.driverdata = NULL; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
576 SDL_AddDisplayMode(_this->current_display, &mode); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
577 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
578 |
3139 | 579 jt++; |
580 } else { | |
581 break; | |
582 } | |
583 } while (1); | |
584 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
585 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
586 |
3139 | 587 int |
588 photon_setdisplaymode(_THIS, SDL_DisplayMode * mode) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
589 { |
3139 | 590 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
591 SDL_DisplayData *didata = | |
592 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
593 PgVideoModes_t modes; | |
594 PgVideoModeInfo_t modeinfo; | |
595 PgDisplaySettings_t modesettings; | |
596 uint32_t refresh_rate = 0; | |
597 int32_t status; | |
598 uint32_t it; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
599 |
3139 | 600 /* Check if current device is not the same as target */ |
601 if (phdata->current_device_id != didata->device_id) { | |
602 /* Set target device as default for Pd and Pg functions */ | |
603 status = PdSetTargetDevice(NULL, phdata->rid[didata->device_id]); | |
604 if (status != 0) { | |
605 SDL_SetError("Photon: Can't set default target device\n"); | |
606 return; | |
607 } | |
608 phdata->current_device_id = didata->device_id; | |
609 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
610 |
3139 | 611 /* Get array of available video modes */ |
612 status = PgGetVideoModeList(&modes); | |
613 if (status != 0) { | |
614 SDL_SetError("Photon: Can't get video mode list"); | |
615 return; | |
616 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
617 |
3139 | 618 /* Current display dimension and bpp are no more valid */ |
619 didata->current_mode.format = SDL_PIXELFORMAT_UNKNOWN; | |
620 didata->current_mode.w = 0; | |
621 didata->current_mode.h = 0; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
622 |
3139 | 623 /* Check if custom refresh rate requested */ |
624 if (didata->custom_refresh != 0) { | |
625 refresh_rate = didata->custom_refresh; | |
626 } else { | |
627 refresh_rate = mode->refresh_rate; | |
628 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
629 |
3139 | 630 /* Check if SDL GF driver needs to find appropriate refresh rate itself */ |
631 if (refresh_rate == 0) { | |
632 SDL_DisplayMode tempmode; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
633 |
3139 | 634 /* Clear display mode structure */ |
635 SDL_memset(&tempmode, 0x00, sizeof(SDL_DisplayMode)); | |
636 tempmode.refresh_rate = 0x0000FFFF; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
637 |
3139 | 638 /* Check if window width and height matches one of our modes */ |
639 for (it = 0; it < SDL_CurrentDisplay.num_display_modes; it++) { | |
640 if ((SDL_CurrentDisplay.display_modes[it].w == mode->w) && | |
641 (SDL_CurrentDisplay.display_modes[it].h == mode->h) && | |
642 (SDL_CurrentDisplay.display_modes[it].format == mode->format)) | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
643 { |
3139 | 644 /* Find the lowest refresh rate available */ |
645 if (tempmode.refresh_rate > | |
646 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
647 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
648 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
649 } |
3139 | 650 } |
651 if (tempmode.refresh_rate != 0x0000FFFF) { | |
652 refresh_rate = tempmode.refresh_rate; | |
653 } else { | |
654 /* Let video driver decide what to do with this */ | |
655 refresh_rate = 0; | |
656 } | |
657 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
658 |
3139 | 659 /* Check if SDL GF driver needs to check custom refresh rate */ |
660 if (didata->custom_refresh != 0) { | |
661 SDL_DisplayMode tempmode; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
662 |
3139 | 663 /* Clear display mode structure */ |
664 SDL_memset(&tempmode, 0x00, sizeof(SDL_DisplayMode)); | |
665 tempmode.refresh_rate = 0x0000FFFF; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
666 |
3139 | 667 /* Check if window width and height matches one of our modes */ |
668 for (it = 0; it < SDL_CurrentDisplay.num_display_modes; it++) { | |
669 if ((SDL_CurrentDisplay.display_modes[it].w == mode->w) && | |
670 (SDL_CurrentDisplay.display_modes[it].h == mode->h) && | |
671 (SDL_CurrentDisplay.display_modes[it].format == mode->format)) | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
672 { |
3139 | 673 /* Find the lowest refresh rate available */ |
674 if (tempmode.refresh_rate > | |
675 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
676 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
677 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
678 |
3139 | 679 /* Check if requested refresh rate found */ |
680 if (refresh_rate == | |
681 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
682 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
683 break; | |
684 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
685 } |
3139 | 686 } |
687 if (tempmode.refresh_rate != 0x0000FFFF) { | |
688 refresh_rate = tempmode.refresh_rate; | |
689 } else { | |
690 /* Let video driver decide what to do with this */ | |
691 refresh_rate = 0; | |
692 } | |
693 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
694 |
3139 | 695 /* Find photon's video mode number */ |
696 for (it = 0; it < modes.num_modes; it++) { | |
697 uint32_t jt; | |
698 uint32_t foundrefresh; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
699 |
3139 | 700 /* Get current video mode details */ |
701 status = PgGetVideoModeInfo(modes.modes[it], &modeinfo); | |
702 if (status != 0) { | |
703 /* Maybe something wrong with this particular mode, skip it */ | |
704 continue; | |
705 } | |
706 if ((modeinfo.width == mode->w) && (modeinfo.height == mode->h) && | |
707 (modeinfo.type == photon_sdl_to_image_pixelformat(mode->format))) | |
708 { | |
709 /* Mode is found, find requested refresh rate, this case is for */ | |
710 /* video drivers, which provide non-generic video modes. */ | |
711 jt = 0; | |
712 foundrefresh = 0; | |
713 do { | |
714 if (modeinfo.refresh_rates[jt] != 0) { | |
715 if (modeinfo.refresh_rates[jt] == refresh_rate) { | |
716 foundrefresh = 1; | |
717 break; | |
718 } | |
719 jt++; | |
720 } else { | |
721 break; | |
722 } | |
723 } while (1); | |
724 if (foundrefresh != 0) { | |
725 break; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
726 } |
3139 | 727 } |
728 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
729 |
3139 | 730 /* Check if video mode has not been found */ |
731 if (it == modes.num_modes) { | |
732 SDL_SetError("Photon: Can't find appropriate video mode"); | |
733 return -1; | |
734 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
735 |
3139 | 736 /* Fill mode settings */ |
737 modesettings.flags = 0x00000000; | |
738 modesettings.mode = modes.modes[it]; | |
739 modesettings.refresh = refresh_rate; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
740 |
3139 | 741 /* Finally set new video mode */ |
742 status = PgSetVideoMode(&modesettings); | |
743 if (status != 0) { | |
744 SDL_SetError("Photon: Can't set new video mode"); | |
745 return -1; | |
746 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
747 |
3139 | 748 /* Store new video mode parameters */ |
749 didata->current_mode = *mode; | |
750 didata->current_mode.refresh_rate = refresh_rate; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
751 |
3139 | 752 return 0; |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
753 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
754 |
3139 | 755 int |
756 photon_setdisplaypalette(_THIS, SDL_Palette * palette) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
757 { |
3139 | 758 SDL_DisplayData *didata = |
759 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
760 |
3139 | 761 /* Setting display palette operation has been failed */ |
762 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
763 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
764 |
3139 | 765 int |
766 photon_getdisplaypalette(_THIS, SDL_Palette * palette) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
767 { |
3139 | 768 SDL_DisplayData *didata = |
769 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
770 |
3139 | 771 /* Getting display palette operation has been failed */ |
772 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
773 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
774 |
3139 | 775 int |
776 photon_setdisplaygammaramp(_THIS, Uint16 * ramp) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
777 { |
3139 | 778 SDL_DisplayData *didata = |
779 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
780 |
3139 | 781 /* Setting display gamma ramp operation has been failed */ |
782 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
783 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
784 |
3139 | 785 int |
786 photon_getdisplaygammaramp(_THIS, Uint16 * ramp) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
787 { |
3139 | 788 /* Getting display gamma ramp operation has been failed */ |
789 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
790 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
791 |
3139 | 792 int |
793 photon_createwindow(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
794 { |
3139 | 795 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
796 SDL_DisplayData *didata = | |
797 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
798 SDL_WindowData *wdata; | |
799 PhDim_t winsize; | |
800 PhPoint_t winpos; | |
801 PtArg_t winargs[32]; | |
802 uint32_t winargc = 0; | |
803 int32_t status; | |
804 PhRegion_t wregion; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
805 |
3139 | 806 /* Allocate window internal data */ |
807 wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); | |
808 if (wdata == NULL) { | |
809 SDL_OutOfMemory(); | |
810 return -1; | |
811 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
812 |
3139 | 813 /* Setup driver data for this window */ |
814 window->driverdata = wdata; | |
815 | |
816 /* Set initial window title */ | |
817 if (window->title != NULL) { | |
818 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_TITLE, window->title, 0); | |
819 } else { | |
820 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_TITLE, "", 0); | |
821 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
822 |
3139 | 823 /* TODO: handle SDL_WINDOW_INPUT_GRABBED */ |
824 | |
825 /* Disable default window filling on redraw */ | |
826 PtSetArg(&winargs[winargc++], Pt_ARG_BASIC_FLAGS, Pt_TRUE, | |
827 Pt_BASIC_PREVENT_FILL); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
828 |
3139 | 829 /* Reset default managed flags to disabled state */ |
830 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, | |
831 Ph_WM_APP_DEF_MANAGED); | |
832 /* Set which events we will not handle, let WM to handle them */ | |
833 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_TRUE, | |
834 Ph_WM_BACKDROP | Ph_WM_TOFRONT | Ph_WM_COLLAPSE | Ph_WM_FFRONT | | |
835 Ph_WM_FOCUS | Ph_WM_HELP | Ph_WM_HIDE | Ph_WM_MAX | | |
836 Ph_WM_MENU | Ph_WM_MOVE | Ph_WM_RESTORE | Ph_WM_TASKBAR | | |
837 Ph_WM_TOBACK | Ph_WM_RESIZE); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
838 |
3139 | 839 /* Reset default notify events to disable */ |
840 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_FALSE, | |
841 Ph_WM_RESIZE | Ph_WM_CLOSE | Ph_WM_HELP); | |
842 /* Set which events we will handle */ | |
843 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE, | |
844 Ph_WM_CLOSE | Ph_WM_COLLAPSE | Ph_WM_FOCUS | Ph_WM_MAX | | |
845 Ph_WM_MOVE | Ph_WM_RESIZE | Ph_WM_RESTORE | Ph_WM_HIDE); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
846 |
3139 | 847 /* Borderless window can't be resizeable */ |
848 if ((window->flags & SDL_WINDOW_BORDERLESS) == SDL_WINDOW_BORDERLESS) { | |
849 window->flags &= ~(SDL_WINDOW_RESIZABLE); | |
850 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
851 |
3139 | 852 /* Reset all default decorations */ |
853 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_FALSE, | |
854 Ph_WM_APP_DEF_RENDER); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
855 |
3139 | 856 /* Fullscreen window has its own decorations */ |
857 if ((window->flags & SDL_WINDOW_FULLSCREEN) == SDL_WINDOW_FULLSCREEN) { | |
858 window->flags |= SDL_WINDOW_BORDERLESS; | |
859 window->flags &= ~(SDL_WINDOW_RESIZABLE); | |
860 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_TRUE, | |
861 Ph_WM_RENDER_CLOSE | Ph_WM_RENDER_TITLE); | |
862 } else { | |
863 uint32_t decorations = | |
864 Ph_WM_RENDER_CLOSE | Ph_WM_RENDER_MENU | Ph_WM_RENDER_MIN | | |
865 Ph_WM_RENDER_TITLE | Ph_WM_RENDER_MOVE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
866 |
3139 | 867 if ((window->flags & SDL_WINDOW_RESIZABLE) == SDL_WINDOW_RESIZABLE) { |
868 decorations |= | |
869 Ph_WM_RENDER_BORDER | Ph_WM_RENDER_RESIZE | Ph_WM_RENDER_MAX; | |
870 PtSetArg(&winargs[winargc++], Pt_ARG_RESIZE_FLAGS, Pt_TRUE, | |
871 Pt_RESIZE_XY_AS_REQUIRED); | |
872 } | |
873 if ((window->flags & SDL_WINDOW_BORDERLESS) != SDL_WINDOW_BORDERLESS) { | |
874 decorations |= Ph_WM_RENDER_BORDER; | |
875 } | |
876 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_TRUE, | |
877 decorations); | |
878 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
879 |
3139 | 880 /* Set initial window state */ |
881 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_STATE, Pt_FALSE, | |
882 Ph_WM_STATE_ISFOCUS); | |
883 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_STATE, Pt_TRUE, | |
884 Ph_WM_STATE_ISALTKEY); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
885 |
3139 | 886 /* Set window dimension */ |
887 winsize.w = window->w; | |
888 winsize.h = window->h; | |
889 PtSetArg(&winargs[winargc++], Pt_ARG_DIM, &winsize, 0); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
890 |
3139 | 891 /* Check if upper level requests WM to position window */ |
892 if ((window->x == SDL_WINDOWPOS_UNDEFINED) | |
893 && (window->y == SDL_WINDOWPOS_UNDEFINED)) { | |
894 /* Do not set widget position, let WM to set it */ | |
895 } else { | |
896 if (window->x == SDL_WINDOWPOS_UNDEFINED) { | |
897 window->x = 0; | |
898 } | |
899 if (window->y == SDL_WINDOWPOS_UNDEFINED) { | |
900 window->y = 0; | |
901 } | |
902 if (window->x == SDL_WINDOWPOS_CENTERED) { | |
903 window->x = (didata->current_mode.w - window->w) / 2; | |
904 } | |
905 if (window->y == SDL_WINDOWPOS_CENTERED) { | |
906 window->y = (didata->current_mode.h - window->h) / 2; | |
907 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
908 |
3139 | 909 /* Now set window position */ |
910 winpos.x = window->x; | |
911 winpos.y = window->y; | |
912 PtSetArg(&winargs[winargc++], Pt_ARG_POS, &winpos, 0); | |
913 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
914 |
3139 | 915 /* Check if window must support OpenGL ES rendering */ |
916 if ((window->flags & SDL_WINDOW_OPENGL) == SDL_WINDOW_OPENGL) { | |
917 #if defined(SDL_VIDEO_OPENGL_ES) | |
918 EGLBoolean initstatus; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
919 |
3139 | 920 /* Check if GF was initialized correctly */ |
921 if (phdata->gfinitialized == SDL_FALSE) { | |
922 SDL_SetError | |
923 ("Photon: GF initialization failed, no OpenGL ES support"); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
924 return -1; |
3139 | 925 } |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
926 |
3139 | 927 /* Mark this window as OpenGL ES compatible */ |
928 wdata->uses_gles = SDL_TRUE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
929 |
3139 | 930 /* Create connection to OpenGL ES */ |
931 if (phdata->egldisplay == EGL_NO_DISPLAY) { | |
932 phdata->egldisplay = eglGetDisplay(phdata->gfdev); | |
933 if (phdata->egldisplay == EGL_NO_DISPLAY) { | |
934 SDL_SetError("Photon: Can't get connection to OpenGL ES"); | |
935 return -1; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
936 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
937 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
938 /* Initialize OpenGL ES library, ignore EGL version */ |
3139 | 939 initstatus = eglInitialize(phdata->egldisplay, NULL, NULL); |
940 if (initstatus != EGL_TRUE) { | |
941 SDL_SetError("Photon: Can't init OpenGL ES library"); | |
942 return -1; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
943 } |
3139 | 944 } |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
945 |
3139 | 946 /* Increment GL ES reference count usage */ |
947 phdata->egl_refcount++; | |
948 #else | |
949 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
950 return -1; | |
951 #endif /* SDL_VIDEO_OPENGL_ES */ | |
952 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
953 |
3139 | 954 /* Finally create the window */ |
955 wdata->window = PtCreateWidget(PtWindow, Pt_NO_PARENT, winargc, winargs); | |
956 if (wdata->window == NULL) { | |
957 SDL_SetError("Photon: Can't create window widget"); | |
958 SDL_free(wdata); | |
959 return -1; | |
960 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
961 |
3139 | 962 /* Show widget */ |
963 status = PtRealizeWidget(wdata->window); | |
964 if (status != 0) { | |
965 SDL_SetError("Photon: Can't realize window widget"); | |
966 PtDestroyWidget(wdata->window); | |
967 SDL_free(wdata); | |
968 return; | |
969 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
970 |
3139 | 971 /* Just created SDL window always gets focus */ |
972 window->flags |= SDL_WINDOW_INPUT_FOCUS; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
973 |
3139 | 974 /* Create window-specific cursor after creation */ |
975 if (didata->cursor_visible == SDL_TRUE) { | |
976 /* Setup cursor type. shape and default color */ | |
977 PtSetResource(wdata->window, Pt_ARG_CURSOR_COLOR, | |
978 Ph_CURSOR_DEFAULT_COLOR, 0); | |
979 PtSetResource(wdata->window, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_BITMAP, 0); | |
980 PtSetResource(wdata->window, Pt_ARG_BITMAP_CURSOR, didata->cursor, | |
981 didata->cursor->hdr.len + sizeof(PhRegionDataHdr_t)); | |
982 } else { | |
983 PtSetResource(wdata->window, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE, 0); | |
984 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
985 |
3139 | 986 /* Set window region sensible to mouse motion events */ |
987 status = | |
988 PhRegionQuery(PtWidgetRid(wdata->window), &wregion, NULL, NULL, 0); | |
989 if (status != 0) { | |
990 SDL_SetError | |
991 ("Photon: Can't set region sensivity to mouse motion events"); | |
992 PtDestroyWidget(wdata->window); | |
993 SDL_free(wdata); | |
994 return -1; | |
995 } | |
996 wregion.events_sense |= | |
997 Ph_EV_PTR_MOTION_BUTTON | Ph_EV_PTR_MOTION_NOBUTTON; | |
998 status = PhRegionChange(Ph_REGION_EV_SENSE, 0, &wregion, NULL, NULL); | |
999 if (status < 0) { | |
1000 SDL_SetError("Photon: Can't change region sensivity"); | |
1001 PtDestroyWidget(wdata->window); | |
1002 SDL_free(wdata); | |
1003 return -1; | |
1004 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1005 |
3139 | 1006 /* Flush all widget operations again */ |
1007 PtFlush(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1008 |
3139 | 1009 /* By default last created window got a input focus */ |
1010 SDL_SetKeyboardFocus(0, window->id); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1011 |
3139 | 1012 /* Window has been successfully created */ |
1013 return 0; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1014 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1015 |
3139 | 1016 int |
1017 photon_createwindowfrom(_THIS, SDL_Window * window, const void *data) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1018 { |
3139 | 1019 /* TODO: it is possible */ |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1020 |
3139 | 1021 /* Failed to create window from another window */ |
1022 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1023 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1024 |
3139 | 1025 void |
1026 photon_setwindowtitle(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1027 { |
3139 | 1028 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1029 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1030 |
3139 | 1031 /* Set window title */ |
1032 if (window->title != NULL) { | |
1033 status = | |
1034 PtSetResource(wdata->window, Pt_ARG_WINDOW_TITLE, window->title, | |
1035 0); | |
1036 } else { | |
1037 status = PtSetResource(wdata->window, Pt_ARG_WINDOW_TITLE, "", 0); | |
1038 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1039 |
3139 | 1040 if (status != 0) { |
1041 SDL_SetError("Photon: Can't set window title"); | |
1042 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1043 |
3139 | 1044 /* Flush all widget operations */ |
1045 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1046 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1047 |
3139 | 1048 void |
1049 photon_setwindowicon(_THIS, SDL_Window * window, SDL_Surface * icon) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1050 { |
3139 | 1051 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1052 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1053 |
3139 | 1054 /* TODO: Use iconify ? */ |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1055 |
3139 | 1056 /* Flush all widget operations */ |
1057 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1058 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1059 |
3139 | 1060 void |
1061 photon_setwindowposition(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1062 { |
3139 | 1063 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1064 SDL_DisplayData *didata = | |
1065 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1066 PhPoint_t winpos; | |
1067 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1068 |
3139 | 1069 /* Check if upper level requests WM to position window */ |
1070 if ((window->x == SDL_WINDOWPOS_UNDEFINED) | |
1071 && (window->y == SDL_WINDOWPOS_UNDEFINED)) { | |
1072 /* Do not set widget position, let WM to set it */ | |
1073 } else { | |
1074 if (window->x == SDL_WINDOWPOS_UNDEFINED) { | |
1075 window->x = 0; | |
1076 } | |
1077 if (window->y == SDL_WINDOWPOS_UNDEFINED) { | |
1078 window->y = 0; | |
1079 } | |
1080 if (window->x == SDL_WINDOWPOS_CENTERED) { | |
1081 window->x = (didata->current_mode.w - window->w) / 2; | |
1082 } | |
1083 if (window->y == SDL_WINDOWPOS_CENTERED) { | |
1084 window->y = (didata->current_mode.h - window->h) / 2; | |
1085 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1086 |
3139 | 1087 /* Now set window position */ |
1088 winpos.x = window->x; | |
1089 winpos.y = window->y; | |
1090 status = PtSetResource(wdata->window, Pt_ARG_POS, &winpos, 0); | |
1091 if (status != 0) { | |
1092 SDL_SetError("Photon: Can't set window position"); | |
1093 } | |
1094 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1095 |
3139 | 1096 /* Flush all widget operations */ |
1097 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1098 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1099 |
3139 | 1100 void |
1101 photon_setwindowsize(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1102 { |
3139 | 1103 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1104 PhDim_t winsize; | |
1105 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1106 |
3139 | 1107 winsize.w = window->w; |
1108 winsize.h = window->h; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1109 |
3139 | 1110 status = PtSetResource(wdata->window, Pt_ARG_DIM, &winsize, 0); |
1111 if (status != 0) { | |
1112 SDL_SetError("Photon: Can't set window size"); | |
1113 } | |
1114 | |
1115 /* Flush all widget operations */ | |
1116 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1117 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1118 |
3139 | 1119 void |
1120 photon_showwindow(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1121 { |
3139 | 1122 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1123 int32_t status; | |
1124 | |
1125 /* Bring focus to window and put it in front of others */ | |
1126 PtWindowToFront(wdata->window); | |
1127 | |
1128 /* Flush all widget operations */ | |
1129 PtFlush(); | |
1130 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1131 |
3139 | 1132 void |
1133 photon_hidewindow(_THIS, SDL_Window * window) | |
1134 { | |
1135 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1136 PhWindowEvent_t winevent; | |
1137 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1138 |
3139 | 1139 SDL_memset(&winevent, 0x00, sizeof(PhWindowEvent_t)); |
1140 winevent.event_f = Ph_WM_HIDE; | |
1141 winevent.rid = PtWidgetRid(wdata->window); | |
1142 winevent.event_state = Ph_WM_EVSTATE_HIDE; | |
1143 | |
1144 status = PtForwardWindowEvent(&winevent); | |
1145 if (status != 0) { | |
1146 SDL_SetError("Photon: Can't hide window"); | |
1147 } | |
1148 | |
1149 /* Flush all widget operations */ | |
1150 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1151 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1152 |
3139 | 1153 void |
1154 photon_raisewindow(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1155 { |
3139 | 1156 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1157 PhWindowEvent_t winevent; | |
1158 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1159 |
3139 | 1160 SDL_memset(&winevent, 0x00, sizeof(PhWindowEvent_t)); |
1161 winevent.event_f = Ph_WM_HIDE; | |
1162 winevent.rid = PtWidgetRid(wdata->window); | |
1163 winevent.event_state = Ph_WM_EVSTATE_UNHIDE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1164 |
3139 | 1165 status = PtForwardWindowEvent(&winevent); |
1166 if (status != 0) { | |
1167 SDL_SetError("Photon: Can't hide window"); | |
1168 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1169 |
3139 | 1170 /* Flush all widget operations */ |
1171 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1172 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1173 |
3139 | 1174 void |
1175 photon_maximizewindow(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1176 { |
3139 | 1177 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1178 PhWindowEvent_t winevent; | |
1179 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1180 |
3139 | 1181 /* Flush all widget operations */ |
1182 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1183 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1184 |
3139 | 1185 void |
1186 photon_minimizewindow(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1187 { |
3139 | 1188 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1189 PhWindowEvent_t winevent; | |
1190 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1191 |
3139 | 1192 SDL_memset(&winevent, 0x00, sizeof(PhWindowEvent_t)); |
1193 winevent.event_f = Ph_WM_HIDE; | |
1194 winevent.rid = PtWidgetRid(wdata->window); | |
1195 winevent.event_state = Ph_WM_EVSTATE_HIDE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1196 |
3139 | 1197 status = PtForwardWindowEvent(&winevent); |
1198 if (status != 0) { | |
1199 SDL_SetError("Photon: Can't hide window"); | |
1200 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1201 |
3139 | 1202 /* Flush all widget operations */ |
1203 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1204 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1205 |
3139 | 1206 void |
1207 photon_restorewindow(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1208 { |
3139 | 1209 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1210 PhWindowEvent_t winevent; | |
1211 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1212 |
3139 | 1213 /* Flush all widget operations */ |
1214 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1215 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1216 |
3139 | 1217 void |
1218 photon_setwindowgrab(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1219 { |
3139 | 1220 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1221 PhWindowEvent_t winevent; | |
1222 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1223 |
3139 | 1224 /* Flush all widget operations */ |
1225 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1226 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1227 |
3139 | 1228 void |
1229 photon_destroywindow(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1230 { |
3139 | 1231 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
1232 SDL_DisplayData *didata = | |
1233 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1234 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1235 int32_t status; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1236 |
3139 | 1237 if (wdata != NULL) { |
1238 status = PtDestroyWidget(wdata->window); | |
1239 if (status != 0) { | |
1240 SDL_SetError("Photon: Can't destroy window widget"); | |
1241 } | |
1242 wdata->window = NULL; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1243 |
3139 | 1244 #if defined(SDL_VIDEO_OPENGL_ES) |
1245 if (phdata->gfinitialized == SDL_TRUE) { | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1246 /* Destroy photon handle to GF surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1247 if (wdata->phsurface != NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1248 PhDCRelease(wdata->phsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1249 wdata->phsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1250 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1251 |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1252 /* Destroy OpenGL ES surface if it was created */ |
3139 | 1253 if (wdata->gles_surface != EGL_NO_SURFACE) { |
1254 eglDestroySurface(phdata->egldisplay, wdata->gles_surface); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1255 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1256 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1257 /* Free OpenGL ES target surface */ |
3139 | 1258 if (wdata->gfsurface != NULL) { |
1259 gf_surface_free(wdata->gfsurface); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1260 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1261 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1262 phdata->egl_refcount--; |
3139 | 1263 if (phdata->egl_refcount == 0) { |
1264 /* Terminate connection to OpenGL ES */ | |
1265 if (phdata->egldisplay != EGL_NO_DISPLAY) { | |
1266 eglTerminate(phdata->egldisplay); | |
1267 phdata->egldisplay = EGL_NO_DISPLAY; | |
1268 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1269 } |
3139 | 1270 } |
1271 #endif /* SDL_VIDEO_OPENGL_ES */ | |
1272 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1273 |
3139 | 1274 /* Flush all widget operations */ |
1275 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1276 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1277 |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1278 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1279 /* SDL Window Manager function */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1280 /*****************************************************************************/ |
3139 | 1281 SDL_bool |
1282 photon_getwindowwminfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1283 { |
3139 | 1284 if (info->version.major <= SDL_MAJOR_VERSION) { |
1285 return SDL_TRUE; | |
1286 } else { | |
1287 SDL_SetError("application not compiled with SDL %d.%d\n", | |
1288 SDL_MAJOR_VERSION, SDL_MINOR_VERSION); | |
1289 return SDL_FALSE; | |
1290 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1291 |
3139 | 1292 /* Failed to get window manager information */ |
1293 return SDL_FALSE; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1294 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1295 |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1296 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1297 /* SDL OpenGL/OpenGL ES functions */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1298 /*****************************************************************************/ |
3139 | 1299 int |
1300 photon_gl_loadlibrary(_THIS, const char *path) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1301 { |
3139 | 1302 #if defined(SDL_VIDEO_OPENGL_ES) |
1303 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1304 |
3139 | 1305 if (phdata->gfinitialized != SDL_TRUE) { |
1306 SDL_SetError | |
1307 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1308 return NULL; | |
1309 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1310 |
3139 | 1311 /* Check if OpenGL ES library is specified for GF driver */ |
1312 if (path == NULL) { | |
1313 path = SDL_getenv("SDL_OPENGL_LIBRARY"); | |
1314 if (path == NULL) { | |
1315 path = SDL_getenv("SDL_OPENGLES_LIBRARY"); | |
1316 } | |
1317 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1318 |
3139 | 1319 /* Check if default library loading requested */ |
1320 if (path == NULL) { | |
1321 /* Already linked with GF library which provides egl* subset of */ | |
1322 /* functions, use Common profile of OpenGL ES library by default */ | |
1323 path = "/usr/lib/libGLES_CM.so.1"; | |
1324 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1325 |
3139 | 1326 /* Load dynamic library */ |
1327 _this->gl_config.dll_handle = SDL_LoadObject(path); | |
1328 if (!_this->gl_config.dll_handle) { | |
1329 /* Failed to load new GL ES library */ | |
1330 SDL_SetError("Photon: Failed to locate OpenGL ES library"); | |
1331 return -1; | |
1332 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1333 |
3139 | 1334 /* Store OpenGL ES library path and name */ |
1335 SDL_strlcpy(_this->gl_config.driver_path, path, | |
1336 SDL_arraysize(_this->gl_config.driver_path)); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1337 |
3139 | 1338 /* New OpenGL ES library is loaded */ |
1339 return 0; | |
1340 #else | |
1341 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1342 return -1; | |
1343 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1344 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1345 |
3139 | 1346 void * |
1347 photon_gl_getprocaddres(_THIS, const char *proc) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1348 { |
3139 | 1349 #if defined(SDL_VIDEO_OPENGL_ES) |
1350 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1351 void *function_address; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1352 |
3139 | 1353 if (phdata->gfinitialized != SDL_TRUE) { |
1354 SDL_SetError | |
1355 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1356 return NULL; | |
1357 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1358 |
3139 | 1359 /* Try to get function address through the egl interface */ |
1360 function_address = eglGetProcAddress(proc); | |
1361 if (function_address != NULL) { | |
1362 return function_address; | |
1363 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1364 |
3139 | 1365 /* Then try to get function in the OpenGL ES library */ |
1366 if (_this->gl_config.dll_handle) { | |
1367 function_address = | |
1368 SDL_LoadFunction(_this->gl_config.dll_handle, proc); | |
1369 if (function_address != NULL) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1370 return function_address; |
3139 | 1371 } |
1372 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1373 |
3139 | 1374 /* Add emulated OpenGL ES 1.1 functions */ |
1375 if (SDL_strcmp(proc, "glTexParameteri") == 0) { | |
1376 return glTexParameteri; | |
1377 } | |
1378 if (SDL_strcmp(proc, "glTexParameteriv") == 0) { | |
1379 return glTexParameteriv; | |
1380 } | |
1381 if (SDL_strcmp(proc, "glColor4ub") == 0) { | |
1382 return glColor4ub; | |
1383 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1384 |
3139 | 1385 /* Failed to get GL ES function address pointer */ |
1386 SDL_SetError("Photon: Cannot locate OpenGL ES function name"); | |
1387 return NULL; | |
1388 #else | |
1389 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1390 return NULL; | |
1391 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1392 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1393 |
3139 | 1394 void |
1395 photon_gl_unloadlibrary(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1396 { |
3139 | 1397 #if defined(SDL_VIDEO_OPENGL_ES) |
1398 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1399 |
3139 | 1400 if (phdata->gfinitialized == SDL_TRUE) { |
1401 /* Unload OpenGL ES library */ | |
1402 if (_this->gl_config.dll_handle) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1403 SDL_UnloadObject(_this->gl_config.dll_handle); |
3139 | 1404 _this->gl_config.dll_handle = NULL; |
1405 } | |
1406 } else { | |
1407 SDL_SetError | |
1408 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1409 } | |
1410 #else | |
1411 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1412 return; | |
1413 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1414 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1415 |
3139 | 1416 SDL_GLContext |
1417 photon_gl_createcontext(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1418 { |
3139 | 1419 #if defined(SDL_VIDEO_OPENGL_ES) |
1420 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1421 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1422 SDL_DisplayData *didata = | |
1423 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1424 EGLBoolean status; | |
1425 int32_t gfstatus; | |
1426 EGLint configs; | |
1427 uint32_t attr_pos; | |
1428 EGLint attr_value; | |
1429 EGLint cit; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1430 |
3139 | 1431 /* Check if GF was initialized */ |
1432 if (phdata->gfinitialized != SDL_TRUE) { | |
1433 SDL_SetError | |
1434 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1435 return NULL; | |
1436 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1437 |
3139 | 1438 /* Prepare attributes list to pass them to OpenGL ES */ |
1439 attr_pos = 0; | |
1440 wdata->gles_attributes[attr_pos++] = EGL_NATIVE_VISUAL_ID; | |
1441 wdata->gles_attributes[attr_pos++] = | |
1442 qnxgf_sdl_to_gf_pixelformat(didata->current_mode.format); | |
1443 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE; | |
1444 wdata->gles_attributes[attr_pos++] = _this->gl_config.red_size; | |
1445 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE; | |
1446 wdata->gles_attributes[attr_pos++] = _this->gl_config.green_size; | |
1447 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE; | |
1448 wdata->gles_attributes[attr_pos++] = _this->gl_config.blue_size; | |
1449 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1450 |
3139 | 1451 /* Setup alpha size in bits */ |
1452 if (_this->gl_config.alpha_size) { | |
1453 wdata->gles_attributes[attr_pos++] = _this->gl_config.alpha_size; | |
1454 } else { | |
1455 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1456 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1457 |
3139 | 1458 /* Setup color buffer size */ |
1459 if (_this->gl_config.buffer_size) { | |
1460 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE; | |
1461 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size; | |
1462 } else { | |
1463 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE; | |
1464 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1465 } | |
1466 | |
1467 /* Setup depth buffer bits */ | |
1468 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; | |
1469 wdata->gles_attributes[attr_pos++] = _this->gl_config.depth_size; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1470 |
3139 | 1471 /* Setup stencil bits */ |
1472 if (_this->gl_config.stencil_size) { | |
1473 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1474 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size; | |
1475 } else { | |
1476 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1477 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1478 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1479 |
3139 | 1480 /* Set number of samples in multisampling */ |
1481 if (_this->gl_config.multisamplesamples) { | |
1482 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES; | |
1483 wdata->gles_attributes[attr_pos++] = | |
1484 _this->gl_config.multisamplesamples; | |
1485 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1486 |
3139 | 1487 /* Multisample buffers, OpenGL ES 1.0 spec defines 0 or 1 buffer */ |
1488 if (_this->gl_config.multisamplebuffers) { | |
1489 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS; | |
1490 wdata->gles_attributes[attr_pos++] = | |
1491 _this->gl_config.multisamplebuffers; | |
1492 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1493 |
3139 | 1494 /* Finish attributes list */ |
1495 wdata->gles_attributes[attr_pos] = EGL_NONE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1496 |
3139 | 1497 /* Request first suitable framebuffer configuration */ |
1498 status = eglChooseConfig(phdata->egldisplay, wdata->gles_attributes, | |
1499 wdata->gles_configs, SDL_VIDEO_GF_OPENGLES_CONFS, | |
1500 &configs); | |
1501 if (status != EGL_TRUE) { | |
1502 SDL_SetError | |
1503 ("Photon: Can't find closest configuration for OpenGL ES"); | |
1504 return NULL; | |
1505 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1506 |
3139 | 1507 /* Check if nothing has been found, try "don't care" settings */ |
1508 if (configs == 0) { | |
1509 int32_t it; | |
1510 int32_t jt; | |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
1511 static const GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE }; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1512 |
3139 | 1513 for (it = 0; it < 4; it++) { |
1514 for (jt = 16; jt >= 0; jt--) { | |
1515 /* Don't care about color buffer bits, use what exist */ | |
1516 /* Replace previous set data with EGL_DONT_CARE */ | |
1517 attr_pos = 0; | |
1518 wdata->gles_attributes[attr_pos++] = EGL_NATIVE_VISUAL_ID; | |
1519 wdata->gles_attributes[attr_pos++] = | |
1520 qnxgf_sdl_to_gf_pixelformat(didata->current_mode.format); | |
1521 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE; | |
1522 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1523 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE; | |
1524 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1525 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE; | |
1526 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1527 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE; | |
1528 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1529 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE; | |
1530 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1531 |
3139 | 1532 /* Try to find requested or smallest depth */ |
1533 if (_this->gl_config.depth_size) { | |
1534 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; | |
1535 wdata->gles_attributes[attr_pos++] = depthbits[it]; | |
1536 } else { | |
1537 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; | |
1538 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1539 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1540 |
3139 | 1541 if (_this->gl_config.stencil_size) { |
1542 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1543 wdata->gles_attributes[attr_pos++] = jt; | |
1544 } else { | |
1545 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1546 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1547 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1548 |
3139 | 1549 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES; |
1550 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1551 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS; | |
1552 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1553 wdata->gles_attributes[attr_pos] = EGL_NONE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1554 |
3139 | 1555 /* Request first suitable framebuffer configuration */ |
1556 status = | |
1557 eglChooseConfig(phdata->egldisplay, | |
1558 wdata->gles_attributes, | |
1559 wdata->gles_configs, | |
1560 SDL_VIDEO_GF_OPENGLES_CONFS, &configs); | |
1561 if (status != EGL_TRUE) { | |
1562 SDL_SetError | |
1563 ("Photon: Can't find closest configuration for OpenGL ES"); | |
1564 return NULL; | |
1565 } | |
1566 if (configs != 0) { | |
1567 break; | |
1568 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1569 } |
3139 | 1570 if (configs != 0) { |
1571 break; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1572 } |
3139 | 1573 } |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1574 |
3139 | 1575 /* No available configs */ |
1576 if (configs == 0) { | |
1577 SDL_SetError | |
1578 ("Photon: Can't find any configuration for OpenGL ES"); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1579 return NULL; |
3139 | 1580 } |
1581 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1582 |
3139 | 1583 /* Initialize config index */ |
1584 wdata->gles_config = 0; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1585 |
3139 | 1586 /* Now check each configuration to find out the best */ |
1587 for (cit = 0; cit < configs; cit++) { | |
1588 uint32_t stencil_found; | |
1589 uint32_t depth_found; | |
1590 | |
1591 stencil_found = 0; | |
1592 depth_found = 0; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1593 |
3139 | 1594 if (_this->gl_config.stencil_size) { |
1595 status = | |
1596 eglGetConfigAttrib(phdata->egldisplay, | |
1597 wdata->gles_configs[cit], EGL_STENCIL_SIZE, | |
1598 &attr_value); | |
1599 if (status == EGL_TRUE) { | |
1600 if (attr_value != 0) { | |
1601 stencil_found = 1; | |
1602 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1603 } |
3139 | 1604 } else { |
1605 stencil_found = 1; | |
1606 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1607 |
3139 | 1608 if (_this->gl_config.depth_size) { |
1609 status = | |
1610 eglGetConfigAttrib(phdata->egldisplay, | |
1611 wdata->gles_configs[cit], EGL_DEPTH_SIZE, | |
1612 &attr_value); | |
1613 if (status == EGL_TRUE) { | |
1614 if (attr_value != 0) { | |
1615 depth_found = 1; | |
1616 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1617 } |
3139 | 1618 } else { |
1619 depth_found = 1; | |
1620 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1621 |
3139 | 1622 /* Exit from loop if found appropriate configuration */ |
1623 if ((depth_found != 0) && (stencil_found != 0)) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1624 break; |
3139 | 1625 } |
1626 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1627 |
3139 | 1628 /* If best could not be found, use first */ |
1629 if (cit == configs) { | |
1630 cit = 0; | |
1631 } | |
1632 wdata->gles_config = cit; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1633 |
3139 | 1634 /* Create OpenGL ES context */ |
1635 wdata->gles_context = | |
1636 eglCreateContext(phdata->egldisplay, | |
1637 wdata->gles_configs[wdata->gles_config], | |
1638 EGL_NO_CONTEXT, NULL); | |
1639 if (wdata->gles_context == EGL_NO_CONTEXT) { | |
1640 SDL_SetError("Photon: OpenGL ES context creation has been failed"); | |
1641 return NULL; | |
1642 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1643 |
3139 | 1644 /* Check if surface is exist */ |
1645 if (wdata->gfsurface != NULL) { | |
1646 gf_surface_free(wdata->gfsurface); | |
1647 wdata->gfsurface = NULL; | |
1648 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1649 |
3139 | 1650 /* Create GF surface */ |
1651 gfstatus = | |
1652 gf_surface_create(&wdata->gfsurface, phdata->gfdev, window->w, | |
1653 window->h, | |
1654 qnxgf_sdl_to_gf_pixelformat(didata->current_mode. | |
1655 format), NULL, | |
1656 GF_SURFACE_CREATE_2D_ACCESSIBLE | | |
1657 GF_SURFACE_CREATE_3D_ACCESSIBLE | | |
1658 GF_SURFACE_CREATE_SHAREABLE); | |
1659 if (gfstatus != GF_ERR_OK) { | |
1660 eglDestroyContext(phdata->egldisplay, wdata->gles_context); | |
1661 wdata->gles_context = EGL_NO_CONTEXT; | |
1662 SDL_SetError("Photon: Can't create GF 3D surface (%08X)", gfstatus); | |
1663 return NULL; | |
1664 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1665 |
3139 | 1666 /* Create pixmap 3D target surface */ |
1667 wdata->gles_surface = | |
1668 eglCreatePixmapSurface(phdata->egldisplay, | |
1669 wdata->gles_configs[wdata->gles_config], | |
1670 wdata->gfsurface, NULL); | |
1671 if (wdata->gles_surface == EGL_NO_SURFACE) { | |
1672 gf_surface_free(wdata->gfsurface); | |
1673 eglDestroyContext(phdata->egldisplay, wdata->gles_context); | |
1674 wdata->gles_context = EGL_NO_CONTEXT; | |
1675 SDL_SetError("Photon: Can't create EGL pixmap surface"); | |
1676 return NULL; | |
1677 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1678 |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1679 /* Store last used context and surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1680 phdata->lgles_surface=wdata->gles_surface; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1681 phdata->lgles_context=wdata->gles_context; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1682 |
3139 | 1683 /* Make just created context current */ |
1684 status = | |
1685 eglMakeCurrent(phdata->egldisplay, wdata->gles_surface, | |
1686 wdata->gles_surface, wdata->gles_context); | |
1687 if (status != EGL_TRUE) { | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1688 /* Reset last used context and surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1689 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1690 phdata->lgles_context=EGL_NO_CONTEXT; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1691 |
3139 | 1692 /* Destroy OpenGL ES surface */ |
1693 eglDestroySurface(phdata->egldisplay, wdata->gles_surface); | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1694 wdata->gles_surface=EGL_NO_SURFACE; |
3139 | 1695 gf_surface_free(wdata->gfsurface); |
1696 eglDestroyContext(phdata->egldisplay, wdata->gles_context); | |
1697 wdata->gles_context = EGL_NO_CONTEXT; | |
1698 SDL_SetError("Photon: Can't set OpenGL ES context on creation"); | |
1699 return NULL; | |
1700 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1701 |
3139 | 1702 /* Setup into SDL internals state of OpenGL ES: */ |
1703 /* it is accelerated or not */ | |
1704 if ((didata->caps & SDL_PHOTON_ACCELERATED_3D) == | |
1705 SDL_PHOTON_ACCELERATED_3D) { | |
1706 _this->gl_config.accelerated = 1; | |
1707 } else { | |
1708 _this->gl_config.accelerated = 0; | |
1709 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1710 |
3139 | 1711 /* Always clear stereo enable, since OpenGL ES do not supports stereo */ |
1712 _this->gl_config.stereo = 0; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1713 |
3139 | 1714 /* Get back samples and samplebuffers configurations. Rest framebuffer */ |
1715 /* parameters could be obtained through the OpenGL ES API */ | |
1716 status = | |
1717 eglGetConfigAttrib(phdata->egldisplay, | |
1718 wdata->gles_configs[wdata->gles_config], | |
1719 EGL_SAMPLES, &attr_value); | |
1720 if (status == EGL_TRUE) { | |
1721 _this->gl_config.multisamplesamples = attr_value; | |
1722 } | |
1723 status = | |
1724 eglGetConfigAttrib(phdata->egldisplay, | |
1725 wdata->gles_configs[wdata->gles_config], | |
1726 EGL_SAMPLE_BUFFERS, &attr_value); | |
1727 if (status == EGL_TRUE) { | |
1728 _this->gl_config.multisamplebuffers = attr_value; | |
1729 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1730 |
3139 | 1731 /* Get back stencil and depth buffer sizes */ |
1732 status = | |
1733 eglGetConfigAttrib(phdata->egldisplay, | |
1734 wdata->gles_configs[wdata->gles_config], | |
1735 EGL_DEPTH_SIZE, &attr_value); | |
1736 if (status == EGL_TRUE) { | |
1737 _this->gl_config.depth_size = attr_value; | |
1738 } | |
1739 status = | |
1740 eglGetConfigAttrib(phdata->egldisplay, | |
1741 wdata->gles_configs[wdata->gles_config], | |
1742 EGL_STENCIL_SIZE, &attr_value); | |
1743 if (status == EGL_TRUE) { | |
1744 _this->gl_config.stencil_size = attr_value; | |
1745 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1746 |
3139 | 1747 /* Under Photon OpenGL ES output can't be double buffered */ |
1748 _this->gl_config.double_buffer = 0; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1749 |
3139 | 1750 /* Check if current device is not the same as target */ |
1751 if (phdata->current_device_id != didata->device_id) { | |
1752 /* Set target device as default for Pd and Pg functions */ | |
1753 status = PdSetTargetDevice(NULL, phdata->rid[didata->device_id]); | |
1754 if (status != 0) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1755 /* Destroy OpenGL ES surface */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1756 eglDestroySurface(phdata->egldisplay, wdata->gles_surface); |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1757 wdata->gles_surface=EGL_NO_SURFACE; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1758 gf_surface_free(wdata->gfsurface); |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1759 eglDestroyContext(phdata->egldisplay, wdata->gles_context); |
3139 | 1760 wdata->gles_context = EGL_NO_CONTEXT; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1761 SDL_SetError("Photon: Can't set default target device\n"); |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1762 return NULL; |
3139 | 1763 } |
1764 phdata->current_device_id = didata->device_id; | |
1765 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1766 |
3139 | 1767 wdata->phsurface = PdCreateOffscreenContextGF(wdata->gfsurface); |
1768 if (wdata->phsurface == NULL) { | |
1769 /* Destroy OpenGL ES surface */ | |
1770 eglDestroySurface(phdata->egldisplay, wdata->gles_surface); | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1771 wdata->gles_surface=EGL_NO_SURFACE; |
3139 | 1772 gf_surface_free(wdata->gfsurface); |
1773 eglDestroyContext(phdata->egldisplay, wdata->gles_context); | |
1774 wdata->gles_context = EGL_NO_CONTEXT; | |
1775 SDL_SetError("Photon: Can't bind GF surface to Photon\n"); | |
1776 return NULL; | |
1777 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1778 |
3139 | 1779 /* GL ES context was successfully created */ |
1780 return wdata->gles_context; | |
1781 #else | |
1782 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1783 return NULL; | |
1784 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1785 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1786 |
3139 | 1787 int |
1788 photon_gl_makecurrent(_THIS, SDL_Window * window, SDL_GLContext context) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1789 { |
3139 | 1790 #if defined(SDL_VIDEO_OPENGL_ES) |
1791 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1792 SDL_WindowData *wdata; | |
1793 EGLBoolean status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1794 |
3139 | 1795 if (phdata->gfinitialized != SDL_TRUE) { |
1796 SDL_SetError | |
1797 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1798 return -1; | |
1799 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1800 |
3139 | 1801 if ((window == NULL) && (context == NULL)) { |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1802 /* Reset last used context and surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1803 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1804 phdata->lgles_context=EGL_NO_CONTEXT; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1805 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1806 /* Unset current context */ |
3139 | 1807 status = |
1808 eglMakeCurrent(phdata->egldisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, | |
1809 EGL_NO_CONTEXT); | |
1810 if (status != EGL_TRUE) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1811 /* Failed to set current GL ES context */ |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1812 SDL_SetError("Photon: Can't empty current OpenGL ES context"); |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1813 return -1; |
3139 | 1814 } |
1815 } else { | |
1816 wdata = (SDL_WindowData *) window->driverdata; | |
1817 if (wdata->gles_surface == EGL_NO_SURFACE) { | |
1818 SDL_SetError | |
1819 ("Photon: OpenGL ES surface is not initialized for this window"); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1820 return -1; |
3139 | 1821 } |
1822 if (wdata->gles_context == EGL_NO_CONTEXT) { | |
1823 SDL_SetError | |
1824 ("Photon: OpenGL ES context is not initialized for this window"); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1825 return -1; |
3139 | 1826 } |
1827 if (wdata->gles_context != context) { | |
1828 SDL_SetError | |
1829 ("Photon: OpenGL ES context is not belong to this window"); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1830 return -1; |
3139 | 1831 } |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1832 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1833 /* Store last set surface and context */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1834 phdata->lgles_surface=wdata->gles_surface; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1835 phdata->lgles_context=wdata->gles_context; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1836 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1837 /* Set new current context */ |
3139 | 1838 status = |
1839 eglMakeCurrent(phdata->egldisplay, wdata->gles_surface, | |
1840 wdata->gles_surface, wdata->gles_context); | |
1841 if (status != EGL_TRUE) { | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1842 /* Reset last used context and surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1843 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1844 phdata->lgles_context=EGL_NO_CONTEXT; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1845 /* Failed to set current GL ES context */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1846 SDL_SetError("Photon: Can't set OpenGL ES context"); |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1847 return -1; |
3139 | 1848 } |
1849 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1850 |
3139 | 1851 return 0; |
1852 #else | |
1853 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1854 return -1; | |
1855 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1856 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1857 |
3139 | 1858 int |
1859 photon_gl_setswapinterval(_THIS, int interval) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1860 { |
3139 | 1861 #if defined(SDL_VIDEO_OPENGL_ES) |
1862 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1863 EGLBoolean status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1864 |
3139 | 1865 if (phdata->gfinitialized != SDL_TRUE) { |
1866 SDL_SetError | |
1867 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1868 return -1; | |
1869 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1870 |
3139 | 1871 /* Check if OpenGL ES connection has been initialized */ |
1872 if (phdata->egldisplay != EGL_NO_DISPLAY) { | |
1873 /* Set swap OpenGL ES interval */ | |
1874 status = eglSwapInterval(phdata->egldisplay, interval); | |
1875 if (status == EGL_TRUE) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1876 /* Return success to upper level */ |
3139 | 1877 phdata->swapinterval = interval; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1878 return 0; |
3139 | 1879 } |
1880 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1881 |
3139 | 1882 /* Failed to set swap interval */ |
1883 SDL_SetError("Photon: Cannot set swap interval"); | |
1884 return -1; | |
1885 #else | |
1886 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1887 return -1; | |
1888 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1889 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1890 |
3139 | 1891 int |
1892 photon_gl_getswapinterval(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1893 { |
3139 | 1894 #if defined(SDL_VIDEO_OPENGL_ES) |
1895 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1896 |
3139 | 1897 if (phdata->gfinitialized != SDL_TRUE) { |
1898 SDL_SetError | |
1899 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1900 return -1; | |
1901 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1902 |
3139 | 1903 /* Return default swap interval value */ |
1904 return phdata->swapinterval; | |
1905 #else | |
1906 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1907 return -1; | |
1908 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1909 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1910 |
3139 | 1911 void |
1912 photon_gl_swapwindow(_THIS, SDL_Window * window) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1913 { |
3139 | 1914 #if defined(SDL_VIDEO_OPENGL_ES) |
1915 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1916 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1917 SDL_DisplayData *didata = | |
1918 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1919 PhRect_t dst_rect; | |
1920 PhRect_t src_rect; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1921 |
3139 | 1922 if (phdata->gfinitialized != SDL_TRUE) { |
1923 SDL_SetError | |
1924 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1925 return; | |
1926 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1927 |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1928 if (wdata->phsurface==NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1929 SDL_SetError |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1930 ("Photon: Photon OpenGL ES surface is not initialized"); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1931 return; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1932 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1933 |
3139 | 1934 /* Many applications do not uses glFinish(), so we call it for them */ |
1935 glFinish(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1936 |
3139 | 1937 /* Wait until OpenGL ES rendering is completed */ |
1938 eglWaitGL(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1939 |
3139 | 1940 /* Wait for VSYNC manually, if it was enabled */ |
1941 if (phdata->swapinterval != 0) { | |
1942 /* Wait for VSYNC, we use GF function, since Photon requires */ | |
1943 /* to enter to the Direct mode to call PgWaitVSync() */ | |
1944 gf_display_wait_vsync(didata->display); | |
1945 } | |
1946 | |
1947 /* Set blit area */ | |
1948 dst_rect = *PtGetCanvas(wdata->window); | |
1949 src_rect.ul.x = 0; | |
1950 src_rect.ul.y = 0; | |
1951 src_rect.lr.x = window->w - 1; | |
1952 src_rect.lr.y = window->h - 1; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1953 |
3139 | 1954 /* Blit OpenGL ES pixmap surface directly to window region */ |
1955 PgFFlush(Ph_START_DRAW); | |
1956 PgSetRegionCx(PhDCGetCurrent(), PtWidgetRid(wdata->window)); | |
1957 PgClearTranslationCx(PgGetGCCx(PhDCGetCurrent())); | |
1958 PgContextBlit(wdata->phsurface, &src_rect, NULL, &dst_rect); | |
1959 PgFFlush(Ph_DONE_DRAW); | |
1960 PgWaitHWIdle(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1961 |
3139 | 1962 eglSwapBuffers(phdata->egldisplay, wdata->gles_surface); |
1963 #else | |
1964 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1965 return; | |
1966 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1967 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1968 |
3139 | 1969 void |
1970 photon_gl_deletecontext(_THIS, SDL_GLContext context) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1971 { |
3139 | 1972 #if defined(SDL_VIDEO_OPENGL_ES) |
1973 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1974 EGLBoolean status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1975 |
3139 | 1976 if (phdata->gfinitialized != SDL_TRUE) { |
1977 SDL_SetError | |
1978 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1979 return; | |
1980 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1981 |
3139 | 1982 /* Check if OpenGL ES connection has been initialized */ |
1983 if (phdata->egldisplay != EGL_NO_DISPLAY) { | |
1984 if (context != EGL_NO_CONTEXT) { | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1985 /* Check if we are destroying current active context */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1986 if (phdata->lgles_context==context) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1987 /* Release current context */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1988 eglMakeCurrent(phdata->egldisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1989 phdata->lgles_context=EGL_NO_CONTEXT; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1990 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1991 } |
3139 | 1992 status = eglDestroyContext(phdata->egldisplay, context); |
1993 if (status != EGL_TRUE) { | |
1994 /* Error during OpenGL ES context destroying */ | |
1995 SDL_SetError("Photon: OpenGL ES context destroy error"); | |
1996 return; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1997 } |
3139 | 1998 } |
1999 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2000 |
3139 | 2001 return; |
2002 #else | |
2003 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
2004 return; | |
2005 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2006 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2007 |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2008 /* Helper function, which re-creates surface, not an API */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2009 int photon_gl_recreatesurface(_THIS, SDL_Window * window, uint32_t width, uint32_t height) |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2010 { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2011 #if defined(SDL_VIDEO_OPENGL_ES) |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2012 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2013 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2014 SDL_DisplayData *didata = |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2015 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2016 SDL_bool makecurrent=SDL_FALSE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2017 int32_t gfstatus; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2018 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2019 /* Check if context has been initialized */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2020 if (wdata->gles_context == EGL_NO_CONTEXT) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2021 /* If no, abort surface re-creating */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2022 return -1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2023 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2024 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2025 /* Check if last used surface the same as one which must be re-created */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2026 if (phdata->lgles_surface == wdata->gles_surface) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2027 makecurrent=SDL_TRUE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2028 /* Flush all current drawings */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2029 glFinish(); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2030 /* Wait until OpenGL ES rendering is completed */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2031 eglWaitGL(); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2032 /* Release current context */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2033 eglMakeCurrent(phdata->egldisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2034 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2035 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2036 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2037 /* Check if we need to destroy previous surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2038 if (wdata->gles_surface != EGL_NO_SURFACE) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2039 /* Destroy photon handle to GF surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2040 if (wdata->phsurface != NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2041 PhDCRelease(wdata->phsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2042 wdata->phsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2043 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2044 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2045 /* Destroy previous surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2046 eglDestroySurface(phdata->egldisplay, wdata->gles_surface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2047 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2048 /* Set surface to uninitialized */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2049 wdata->gles_surface = EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2050 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2051 if (wdata->gfsurface!=NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2052 gf_surface_free(wdata->gfsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2053 wdata->gfsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2054 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2055 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2056 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2057 /* Create new GF surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2058 gfstatus = |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2059 gf_surface_create(&wdata->gfsurface, phdata->gfdev, width, |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2060 height, |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2061 qnxgf_sdl_to_gf_pixelformat(didata->current_mode. |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2062 format), NULL, |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2063 GF_SURFACE_CREATE_2D_ACCESSIBLE | |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2064 GF_SURFACE_CREATE_3D_ACCESSIBLE | |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2065 GF_SURFACE_CREATE_SHAREABLE); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2066 if (gfstatus != GF_ERR_OK) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2067 SDL_SetError("Photon: Can't create GF 3D surface (%08X)", gfstatus); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2068 return -1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2069 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2070 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2071 /* Create new pixmap 3D target surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2072 wdata->gles_surface = |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2073 eglCreatePixmapSurface(phdata->egldisplay, |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2074 wdata->gles_configs[wdata->gles_config], |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2075 wdata->gfsurface, NULL); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2076 if (wdata->gles_surface == EGL_NO_SURFACE) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2077 gf_surface_free(wdata->gfsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2078 wdata->gfsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2079 SDL_SetError("Photon: Can't create EGL pixmap surface"); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2080 return -1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2081 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2082 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2083 wdata->phsurface = PdCreateOffscreenContextGF(wdata->gfsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2084 if (wdata->phsurface == NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2085 /* Destroy OpenGL ES surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2086 eglDestroySurface(phdata->egldisplay, wdata->gles_surface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2087 wdata->gles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2088 gf_surface_free(wdata->gfsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2089 wdata->gfsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2090 SDL_SetError("Photon: Can't bind GF surface to Photon\n"); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2091 return -1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2092 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2093 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2094 /* Check if we need to set this surface and context as current */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2095 if (makecurrent == SDL_TRUE) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2096 return photon_gl_makecurrent(_this, window, wdata->gles_context); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2097 } else { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2098 return 0; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2099 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2100 #else |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2101 /* Do nothing, if OpenGL ES support is not compiled in */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2102 return 0; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2103 #endif /* SDL_VIDEO_OPENGL_ES */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2104 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2105 |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2106 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2107 /* SDL Event handling function */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2108 /*****************************************************************************/ |
3139 | 2109 void |
2110 photon_pumpevents(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2111 { |
3139 | 2112 uint8_t eventbuffer[SDL_VIDEO_PHOTON_EVENT_SIZE]; |
2113 PhEvent_t *event = (PhEvent_t *) eventbuffer; | |
2114 int32_t status; | |
2115 uint32_t finish = 0; | |
2116 uint32_t it; | |
2117 SDL_Window *window; | |
2118 SDL_WindowData *wdata; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2119 |
3139 | 2120 do { |
2121 status = PhEventPeek(event, SDL_VIDEO_PHOTON_EVENT_SIZE); | |
2122 switch (status) { | |
2123 case Ph_RESIZE_MSG: | |
2124 { | |
2125 SDL_SetError("Photon: Event size too much for buffer"); | |
2126 return; | |
2127 } | |
2128 break; | |
2129 case Ph_EVENT_MSG: | |
2130 { | |
2131 /* Find a window, to which this handle destinated */ | |
2132 status = 0; | |
2133 for (it = 0; it < SDL_CurrentDisplay.num_windows; it++) { | |
2134 wdata = | |
2135 (SDL_WindowData *) SDL_CurrentDisplay.windows[it]. | |
2136 driverdata; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2137 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2138 /* Find the proper window */ |
3139 | 2139 if (wdata->window != NULL) { |
2140 if (PtWidgetRid(wdata->window) == | |
2141 event->collector.rid) { | |
2142 window = | |
2143 (SDL_Window *) & SDL_CurrentDisplay. | |
2144 windows[it]; | |
2145 status = 1; | |
2146 break; | |
2147 } | |
2148 } else { | |
2149 continue; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2150 } |
3139 | 2151 } |
2152 if (status == 0) { | |
2153 window = NULL; | |
2154 wdata = NULL; | |
2155 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2156 |
3139 | 2157 /* Event is ready */ |
2158 switch (event->type) { | |
2159 case Ph_EV_BOUNDARY: | |
2160 { | |
2161 switch (event->subtype) { | |
2162 case Ph_EV_PTR_ENTER: | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2163 { |
3139 | 2164 /* Mouse cursor over handled window */ |
2165 if (window != NULL) { | |
2166 SDL_SendWindowEvent(window->id, | |
2167 SDL_WINDOWEVENT_ENTER, | |
2168 0, 0); | |
2169 SDL_SetMouseFocus(0, window->id); | |
2170 } | |
2171 } | |
2172 break; | |
2173 case Ph_EV_PTR_LEAVE: | |
2174 { | |
2175 /* Mouse cursor out of handled window */ | |
2176 if (window != NULL) { | |
2177 SDL_SendWindowEvent(window->id, | |
2178 SDL_WINDOWEVENT_LEAVE, | |
2179 0, 0); | |
2180 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2181 } |
3139 | 2182 break; |
2183 } | |
2184 } | |
2185 break; | |
2186 case Ph_EV_PTR_MOTION_BUTTON: | |
2187 case Ph_EV_PTR_MOTION_NOBUTTON: | |
2188 { | |
2189 PhPointerEvent_t *pevent = NULL; | |
2190 PhRect_t *prects = NULL; | |
2191 | |
2192 /* Get event data */ | |
2193 pevent = PhGetData(event); | |
2194 /* Get associated event rectangles */ | |
2195 prects = PhGetRects(event); | |
2196 if ((pevent != NULL) && (prects != NULL)) { | |
2197 SDL_SendMouseMotion(0, 0, prects->ul.x, | |
2198 prects->ul.y, 0); | |
2199 } | |
2200 } | |
2201 break; | |
2202 case Ph_EV_BUT_PRESS: | |
2203 { | |
2204 /* Button press event */ | |
2205 PhPointerEvent_t *pevent = NULL; | |
2206 uint32_t sdlbutton = 0x00000000; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2207 |
3139 | 2208 /* Get event data */ |
2209 pevent = PhGetData(event); | |
2210 if (pevent != NULL) { | |
2211 for (it = 0; it < sizeof(pevent->buttons) * 8; | |
2212 it++) { | |
2213 if ((pevent->buttons & (0x0001 << it)) == | |
2214 (0x0001 << it)) { | |
2215 switch (it) { | |
2216 case 0: | |
2217 { | |
2218 sdlbutton = SDL_BUTTON_RIGHT; | |
2219 } | |
2220 break; | |
2221 case 1: | |
2222 { | |
2223 sdlbutton = SDL_BUTTON_MIDDLE; | |
2224 } | |
2225 break; | |
2226 case 2: | |
2227 { | |
2228 sdlbutton = SDL_BUTTON_LEFT; | |
2229 } | |
2230 break; | |
2231 default: | |
2232 { | |
2233 sdlbutton = it + 1; | |
2234 } | |
2235 break; | |
2236 } | |
2237 SDL_SendMouseButton(0, SDL_PRESSED, | |
2238 sdlbutton); | |
2239 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2240 } |
3139 | 2241 } |
2242 } | |
2243 break; | |
2244 case Ph_EV_BUT_RELEASE: | |
2245 { | |
2246 /* Button press event */ | |
2247 PhPointerEvent_t *pevent = NULL; | |
2248 uint32_t sdlbutton = 0x00000000; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2249 |
3139 | 2250 /* Get event data */ |
2251 pevent = PhGetData(event); | |
2252 if (pevent != NULL) { | |
2253 for (it = 0; it < sizeof(pevent->buttons) * 8; | |
2254 it++) { | |
2255 if ((pevent->buttons & (0x0001 << it)) == | |
2256 (0x0001 << it)) { | |
2257 switch (it) { | |
2258 case 0: | |
2259 { | |
2260 sdlbutton = SDL_BUTTON_RIGHT; | |
2261 } | |
2262 break; | |
2263 case 1: | |
2264 { | |
2265 sdlbutton = SDL_BUTTON_MIDDLE; | |
2266 } | |
2267 break; | |
2268 case 2: | |
2269 { | |
2270 sdlbutton = SDL_BUTTON_LEFT; | |
2271 } | |
2272 break; | |
2273 default: | |
2274 { | |
2275 sdlbutton = it + 1; | |
2276 } | |
2277 break; | |
2278 } | |
2279 } | |
2280 } | |
2281 } | |
2282 | |
2283 switch (event->subtype) { | |
2284 case Ph_EV_RELEASE_REAL: | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2285 { |
3139 | 2286 /* Real release button event */ |
2287 SDL_SendMouseButton(0, SDL_RELEASED, | |
2288 sdlbutton); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2289 } |
3139 | 2290 break; |
2291 case Ph_EV_RELEASE_PHANTOM: | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2292 { |
3139 | 2293 /* We will get phantom button release */ |
2294 /* event in case if it was unpressed */ | |
2295 /* outside of window */ | |
2296 if (window != NULL) { | |
2297 if ((window-> | |
2298 flags & SDL_WINDOW_MOUSE_FOCUS) != | |
2299 SDL_WINDOW_MOUSE_FOCUS) { | |
2300 /* Send phantom button release */ | |
2301 SDL_SendMouseButton(0, SDL_RELEASED, | |
2302 sdlbutton); | |
2303 } | |
2304 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2305 } |
3139 | 2306 break; |
2307 } | |
2308 } | |
2309 break; | |
2310 case Ph_EV_EXPOSE: | |
2311 { | |
2312 switch (event->subtype) { | |
2313 case Ph_NORMAL_EXPOSE: | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2314 { |
3139 | 2315 PhRect_t *rects = NULL; |
2316 | |
2317 /* Get array of rectangles to be updated */ | |
2318 rects = PhGetRects(event); | |
2319 if (rects == NULL) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2320 break; |
3139 | 2321 } |
2322 | |
2323 /* Check if expose come to one of the our windows */ | |
2324 if ((wdata != NULL) && (window != NULL)) { | |
2325 /* Check if window uses OpenGL ES */ | |
2326 if (wdata->uses_gles == SDL_TRUE) { | |
2327 PhRect_t dst_rect; | |
2328 PhRect_t src_rect; | |
2329 | |
2330 /* Cycle through each rectangle */ | |
2331 for (it = 0; it < event->num_rects; | |
2332 it++) { | |
2333 /* Blit OpenGL ES pixmap surface directly to window region */ | |
2334 PgFFlush(Ph_START_DRAW); | |
2335 PgSetRegionCx(PhDCGetCurrent(), | |
2336 PtWidgetRid(wdata-> | |
2337 window)); | |
2338 PgClearTranslationCx(PgGetGCCx | |
2339 (PhDCGetCurrent | |
2340 ())); | |
2341 PgContextBlit(wdata->phsurface, | |
2342 &rects[it], NULL, | |
2343 &rects[it]); | |
2344 PgFFlush(Ph_DONE_DRAW); | |
2345 PgWaitHWIdle(); | |
2346 } | |
2347 } else { | |
2348 /* Normal window */ | |
2349 /* TODO: update the damaged rectangles */ | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2350 } |
3139 | 2351 } |
2352 | |
2353 /* Flush all blittings */ | |
2354 PgFlush(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2355 } |
3139 | 2356 break; |
2357 case Ph_CAPTURE_EXPOSE: | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2358 { |
3139 | 2359 /* Check if expose come to one of the our windows */ |
2360 if ((wdata != NULL) && (window != NULL)) { | |
2361 /* Check if window uses OpenGL ES */ | |
2362 if (wdata->uses_gles == SDL_TRUE) { | |
2363 PhRect_t dst_rect; | |
2364 PhRect_t src_rect; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2365 |
3139 | 2366 /* Set blit area */ |
2367 dst_rect = | |
2368 *PtGetCanvas(wdata->window); | |
2369 src_rect.ul.x = 0; | |
2370 src_rect.ul.y = 0; | |
2371 src_rect.lr.x = window->w - 1; | |
2372 src_rect.lr.y = window->h - 1; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2373 |
3139 | 2374 /* We need to redraw entire window */ |
2375 PgFFlush(Ph_START_DRAW); | |
2376 PgSetRegionCx(PhDCGetCurrent(), | |
2377 PtWidgetRid(wdata-> | |
2378 window)); | |
2379 PgClearTranslationCx(PgGetGCCx | |
2380 (PhDCGetCurrent | |
2381 ())); | |
2382 PgContextBlit(wdata->phsurface, | |
2383 &src_rect, NULL, | |
2384 &dst_rect); | |
2385 PgFFlush(Ph_DONE_DRAW); | |
2386 PgWaitHWIdle(); | |
2387 } else { | |
2388 /* Normal window */ | |
2389 /* TODO: update the damaged rectangles */ | |
3115
1102a3305928
Added handler for all window events.
Mike Gorchak <lestat@i.com.ua>
parents:
3108
diff
changeset
|
2390 |
3139 | 2391 /* We need to redraw entire window */ |
2392 } | |
2393 } | |
2394 } | |
2395 break; | |
2396 case Ph_GRAPHIC_EXPOSE: | |
2397 { | |
2398 /* TODO: What this event means ? */ | |
2399 } | |
2400 break; | |
2401 } | |
2402 } | |
2403 break; | |
2404 case Ph_EV_INFO: | |
2405 { | |
2406 } | |
2407 break; | |
2408 case Ph_EV_KEY: | |
2409 { | |
2410 PhKeyEvent_t *keyevent = NULL; | |
2411 SDL_scancode scancode = SDL_SCANCODE_UNKNOWN; | |
2412 SDL_bool pressed = SDL_FALSE; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2413 |
3139 | 2414 keyevent = PhGetData(event); |
2415 if (keyevent == NULL) { | |
2416 break; | |
2417 } | |
2418 | |
2419 /* Check if key is repeated */ | |
2420 if ((keyevent->key_flags & Pk_KF_Key_Repeat) == | |
2421 Pk_KF_Key_Repeat) { | |
2422 /* Ignore such events */ | |
2423 break; | |
2424 } | |
2425 | |
2426 /* Check if key has its own scancode */ | |
2427 if ((keyevent->key_flags & Pk_KF_Scan_Valid) == | |
2428 Pk_KF_Scan_Valid) { | |
2429 if ((keyevent->key_flags & Pk_KF_Key_Down) == | |
2430 Pk_KF_Key_Down) { | |
2431 pressed = SDL_TRUE; | |
2432 } else { | |
2433 pressed = SDL_FALSE; | |
2434 } | |
2435 scancode = | |
2436 photon_to_sdl_keymap(keyevent->key_scan); | |
2437 | |
2438 /* Add details for the pressed key */ | |
2439 if ((keyevent->key_flags & Pk_KF_Cap_Valid) == | |
2440 Pk_KF_Cap_Valid) { | |
2441 switch (keyevent->key_cap) { | |
2442 case Pk_Hyper_R: /* Right windows flag key */ | |
2443 scancode = SDL_SCANCODE_RGUI; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2444 break; |
3139 | 2445 case Pk_Control_R: /* Right Ctrl key */ |
2446 scancode = SDL_SCANCODE_RCTRL; | |
2447 break; | |
2448 case Pk_Alt_R: /* Right Alt key */ | |
2449 scancode = SDL_SCANCODE_RALT; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2450 break; |
3139 | 2451 case Pk_Up: /* Up key but with invalid scan */ |
2452 if (scancode != SDL_SCANCODE_UP) { | |
2453 /* This is a mouse wheel event */ | |
2454 SDL_SendMouseWheel(0, 0, 1); | |
2455 return; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2456 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2457 break; |
3139 | 2458 case Pk_KP_8: /* Up arrow or 8 on keypad */ |
2459 scancode = SDL_SCANCODE_KP_8; | |
2460 break; | |
2461 case Pk_Down: /* Down key but with invalid scan */ | |
2462 if (scancode != SDL_SCANCODE_DOWN) { | |
2463 /* This is a mouse wheel event */ | |
2464 SDL_SendMouseWheel(0, 0, -1); | |
2465 return; | |
2466 } | |
2467 break; | |
2468 case Pk_KP_2: /* Down arrow or 2 on keypad */ | |
2469 scancode = SDL_SCANCODE_KP_2; | |
2470 break; | |
2471 case Pk_Left: /* Left arrow key */ | |
2472 scancode = SDL_SCANCODE_LEFT; | |
2473 break; | |
2474 case Pk_KP_4: /* Left arrow or 4 on keypad */ | |
2475 scancode = SDL_SCANCODE_KP_4; | |
2476 break; | |
2477 case Pk_Right: /* Right arrow key */ | |
2478 scancode = SDL_SCANCODE_RIGHT; | |
2479 break; | |
2480 case Pk_KP_6: /* Right arrow or 6 on keypad */ | |
2481 scancode = SDL_SCANCODE_KP_6; | |
2482 break; | |
2483 case Pk_Insert: /* Insert key */ | |
2484 scancode = SDL_SCANCODE_INSERT; | |
2485 break; | |
2486 case Pk_KP_0: /* Insert or 0 on keypad */ | |
2487 scancode = SDL_SCANCODE_KP_0; | |
2488 break; | |
2489 case Pk_Home: /* Home key */ | |
2490 scancode = SDL_SCANCODE_HOME; | |
2491 break; | |
2492 case Pk_KP_7: /* Home or 7 on keypad */ | |
2493 scancode = SDL_SCANCODE_KP_7; | |
2494 break; | |
2495 case Pk_Pg_Up: /* PageUp key */ | |
2496 scancode = SDL_SCANCODE_PAGEUP; | |
2497 break; | |
2498 case Pk_KP_9: /* PgUp or 9 on keypad */ | |
2499 scancode = SDL_SCANCODE_KP_9; | |
2500 break; | |
2501 case Pk_Delete: /* Delete key */ | |
2502 scancode = SDL_SCANCODE_DELETE; | |
2503 break; | |
2504 case Pk_KP_Decimal: /* Del or . on keypad */ | |
2505 scancode = SDL_SCANCODE_KP_PERIOD; | |
2506 break; | |
2507 case Pk_End: /* End key */ | |
2508 scancode = SDL_SCANCODE_END; | |
2509 break; | |
2510 case Pk_KP_1: /* End or 1 on keypad */ | |
2511 scancode = SDL_SCANCODE_KP_1; | |
2512 break; | |
2513 case Pk_Pg_Down: /* PageDown key */ | |
2514 scancode = SDL_SCANCODE_PAGEDOWN; | |
2515 break; | |
2516 case Pk_KP_3: /* PgDn or 3 on keypad */ | |
2517 scancode = SDL_SCANCODE_KP_3; | |
2518 break; | |
2519 case Pk_KP_5: /* 5 on keypad */ | |
2520 scancode = SDL_SCANCODE_KP_5; | |
2521 break; | |
2522 case Pk_KP_Enter: | |
2523 scancode = SDL_SCANCODE_KP_ENTER; | |
2524 break; | |
2525 case Pk_KP_Add: | |
2526 scancode = SDL_SCANCODE_KP_PLUS; | |
2527 break; | |
2528 case Pk_KP_Subtract: | |
2529 scancode = SDL_SCANCODE_KP_MINUS; | |
2530 break; | |
2531 case Pk_KP_Multiply: | |
2532 scancode = SDL_SCANCODE_KP_MULTIPLY; | |
2533 break; | |
2534 case Pk_KP_Divide: | |
2535 scancode = SDL_SCANCODE_KP_DIVIDE; | |
2536 break; | |
2537 case Pk_Pause: | |
2538 scancode = SDL_SCANCODE_PAUSE; | |
2539 break; | |
2540 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2541 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2542 |
3139 | 2543 /* Finally check if scancode has been decoded */ |
2544 if (scancode == SDL_SCANCODE_UNKNOWN) { | |
2545 /* Something was pressed, which is not supported */ | |
2546 break; | |
2547 } | |
2548 | |
2549 /* Report pressed/released key to SDL */ | |
2550 if (pressed == SDL_TRUE) { | |
2551 SDL_SendKeyboardKey(0, SDL_PRESSED, scancode); | |
2552 } else { | |
2553 SDL_SendKeyboardKey(0, SDL_RELEASED, | |
2554 scancode); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2555 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2556 |
3139 | 2557 /* Photon doesn't send a release event for PrnScr key */ |
2558 if ((scancode == SDL_SCANCODE_PRINTSCREEN) | |
2559 && (pressed)) { | |
2560 SDL_SendKeyboardKey(0, SDL_RELEASED, | |
2561 scancode); | |
2562 } | |
2563 } | |
2564 } | |
2565 break; | |
2566 case Ph_EV_SERVICE: | |
2567 { | |
2568 } | |
2569 break; | |
2570 case Ph_EV_SYSTEM: | |
2571 { | |
2572 } | |
2573 break; | |
2574 case Ph_EV_WM: | |
2575 { | |
2576 PhWindowEvent_t *wmevent = NULL; | |
2577 | |
2578 /* Get associated event data */ | |
2579 wmevent = PhGetData(event); | |
2580 if (wmevent == NULL) { | |
2581 break; | |
2582 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2583 |
3139 | 2584 switch (wmevent->event_f) { |
2585 case Ph_WM_CLOSE: | |
2586 { | |
2587 if (window != NULL) { | |
2588 SDL_SendWindowEvent(window->id, | |
2589 SDL_WINDOWEVENT_CLOSE, | |
2590 0, 0); | |
2591 } | |
2592 } | |
2593 break; | |
2594 case Ph_WM_FOCUS: | |
2595 { | |
2596 if (wmevent->event_state == | |
2597 Ph_WM_EVSTATE_FOCUS) { | |
2598 if (window != NULL) { | |
2599 PhRegion_t wregion; | |
2600 | |
2601 SDL_SendWindowEvent(window->id, | |
2602 SDL_WINDOWEVENT_FOCUS_GAINED, | |
2603 0, 0); | |
2604 SDL_SetKeyboardFocus(0, window->id); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2605 |
3139 | 2606 /* Set window region sensible to mouse motion events */ |
2607 PhRegionQuery(PtWidgetRid | |
2608 (wdata->window), | |
2609 &wregion, NULL, NULL, | |
2610 0); | |
2611 wregion.events_sense |= | |
2612 Ph_EV_PTR_MOTION_BUTTON | | |
2613 Ph_EV_PTR_MOTION_NOBUTTON; | |
2614 PhRegionChange(Ph_REGION_EV_SENSE, 0, | |
2615 &wregion, NULL, NULL); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2616 |
3139 | 2617 /* If window got a focus, the it is visible */ |
2618 SDL_SendWindowEvent(window->id, | |
2619 SDL_WINDOWEVENT_SHOWN, | |
2620 0, 0); | |
2621 } | |
2622 } | |
2623 if (wmevent->event_state == | |
2624 Ph_WM_EVSTATE_FOCUSLOST) { | |
2625 if (window != NULL) { | |
2626 PhRegion_t wregion; | |
2627 | |
2628 SDL_SendWindowEvent(window->id, | |
2629 SDL_WINDOWEVENT_FOCUS_LOST, | |
2630 0, 0); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2631 |
3139 | 2632 /* Set window region ignore mouse motion events */ |
2633 PhRegionQuery(PtWidgetRid | |
2634 (wdata->window), | |
2635 &wregion, NULL, NULL, | |
2636 0); | |
2637 wregion.events_sense &= | |
2638 ~(Ph_EV_PTR_MOTION_BUTTON | | |
2639 Ph_EV_PTR_MOTION_NOBUTTON); | |
2640 PhRegionChange(Ph_REGION_EV_SENSE, 0, | |
2641 &wregion, NULL, NULL); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2642 } |
3139 | 2643 } |
2644 } | |
2645 break; | |
2646 case Ph_WM_MOVE: | |
2647 { | |
2648 if (window != NULL) { | |
2649 SDL_SendWindowEvent(window->id, | |
2650 SDL_WINDOWEVENT_MOVED, | |
2651 wmevent->pos.x, | |
2652 wmevent->pos.y); | |
2653 } | |
2654 } | |
2655 break; | |
2656 case Ph_WM_RESIZE: | |
2657 { | |
2658 if (window != NULL) { | |
2659 /* Set new window position after resize */ | |
2660 SDL_SendWindowEvent(window->id, | |
2661 SDL_WINDOWEVENT_MOVED, | |
2662 wmevent->pos.x, | |
2663 wmevent->pos.y); | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2664 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2665 /* Check if this window uses OpenGL ES */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2666 if (wdata->uses_gles == SDL_TRUE) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2667 /* If so, recreate surface with new dimensions */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2668 photon_gl_recreatesurface(_this, window, wmevent->size.w, wmevent->size.h); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2669 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2670 |
3139 | 2671 /* Set new window size after resize */ |
2672 SDL_SendWindowEvent(window->id, | |
2673 SDL_WINDOWEVENT_RESIZED, | |
2674 wmevent->size.w, | |
2675 wmevent->size.h); | |
2676 } | |
2677 } | |
2678 break; | |
2679 case Ph_WM_HIDE: | |
2680 { | |
2681 if (window != NULL) { | |
2682 /* Send new window state: minimized */ | |
2683 SDL_SendWindowEvent(window->id, | |
2684 SDL_WINDOWEVENT_MINIMIZED, | |
2685 0, 0); | |
2686 /* In case window is minimized, then it is hidden */ | |
2687 SDL_SendWindowEvent(window->id, | |
2688 SDL_WINDOWEVENT_HIDDEN, | |
2689 0, 0); | |
2690 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2691 } |
3139 | 2692 break; |
2693 case Ph_WM_MAX: | |
2694 { | |
2695 if (window != NULL) { | |
2696 SDL_SendWindowEvent(window->id, | |
2697 SDL_WINDOWEVENT_MAXIMIZED, | |
2698 0, 0); | |
2699 } | |
2700 } | |
2701 break; | |
2702 case Ph_WM_RESTORE: | |
2703 { | |
2704 if (window != NULL) { | |
2705 SDL_SendWindowEvent(window->id, | |
2706 SDL_WINDOWEVENT_RESTORED, | |
2707 0, 0); | |
2708 } | |
2709 } | |
2710 break; | |
2711 } | |
2712 } | |
2713 break; | |
2714 } | |
2715 PtEventHandler(event); | |
2716 } | |
2717 break; | |
2718 case 0: | |
2719 { | |
2720 /* All events are read */ | |
2721 finish = 1; | |
2722 break; | |
2723 } | |
2724 case -1: | |
2725 { | |
2726 /* Error occured in event reading */ | |
2727 SDL_SetError("Photon: Can't read event"); | |
2728 return; | |
2729 } | |
2730 break; | |
2731 } | |
2732 if (finish != 0) { | |
2733 break; | |
2734 } | |
2735 } while (1); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2736 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2737 |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2738 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2739 /* SDL screen saver related functions */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2740 /*****************************************************************************/ |
3139 | 2741 void |
2742 photon_suspendscreensaver(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2743 { |
3139 | 2744 /* There is no screensaver in pure console, it may exist when running */ |
2745 /* GF under Photon, but I do not know, how to disable screensaver */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2746 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2747 |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2748 /* vi: set ts=4 sw=4 expandtab: */ |