Mercurial > sdl-ios-xcode
annotate src/video/photon/SDL_photon.c @ 3235:d35b649858e0
David Carre to Sam
Hello sam, me again.
I'v fixed another bug in the pandora code, it's on the no-X videodriver, i forgot to add some code to destroy the window so it was impossible to reload SDL inside the same application (eglTerminate).
You'll find the svn diff attached.
See you,
David.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 11 Aug 2009 13:45:01 +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: */ |