Mercurial > sdl-ios-xcode
annotate src/video/photon/SDL_photon.c @ 3399:f96615051c8c
Working on fullscreen video modes support
author | Mike Gorchak <lestat@i.com.ua> |
---|---|
date | Tue, 13 Oct 2009 20:17:11 +0000 |
parents | 05499ec8c022 |
children | d15a4daa4a58 |
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 |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
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 |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
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 , | |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
140 /* VESA unaccelerated gfx driver (devg-vesabios.so) */ |
3139 | 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 { |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
158 int32_t 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; | |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
197 int32_t status; |
3139 | 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 */ |
3384
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
385 SDL_memset(&hwcaps, 0x00, sizeof(PgHWCaps_t)); |
3139 | 386 status = PgGetGraphicsHWCaps(&hwcaps); |
387 if (status != 0) { | |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
388 PhRect_t extent; |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
389 PdOffscreenContext_t* curctx; |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
390 |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
391 /* 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
|
392 /* 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
|
393 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
|
394 if (status != 0) { |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
395 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
|
396 SDL_free(didata->cursor); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
397 SDL_free(didata); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
398 return -1; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
399 } |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
400 modeinfo.width=extent.lr.x+1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
401 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
|
402 /* 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
|
403 hwcaps.current_rrate=60; |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
404 /* 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
|
405 hwcaps.chip_name[0]=0x00; |
3139 | 406 |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
407 /* 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
|
408 /* displayed on the screen */ |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
409 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
|
410 if (curctx==NULL) |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
411 { |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
412 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
|
413 SDL_free(didata->cursor); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
414 SDL_free(didata); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
415 return -1; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
416 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
417 /* Retrieve current bpp */ |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
418 modeinfo.type=curctx->format; |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
419 PhDCRelease(curctx); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
420 } else { |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
421 /* Get current video mode details */ |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
422 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
|
423 if (status != 0) { |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
424 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
|
425 SDL_free(didata->cursor); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
426 SDL_free(didata); |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
427 return -1; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
428 } |
3384
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
429 |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
430 /* Get current video mode 2D capabilities for the renderer */ |
3384
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
431 didata->mode_2dcaps=0; |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
432 if ((modeinfo.mode_capabilities2 & PgVM_MODE_CAP2_ALPHA_BLEND)==PgVM_MODE_CAP2_ALPHA_BLEND) |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
433 { |
3386
fff074de9675
Photon SDL renderer almost finished, the double/tripple buffering is left only.
Mike Gorchak <lestat@i.com.ua>
parents:
3384
diff
changeset
|
434 didata->mode_2dcaps|=SDL_VIDEO_PHOTON_CAP_ALPHA_BLEND; |
3384
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
435 } |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
436 if ((modeinfo.mode_capabilities2 & PgVM_MODE_CAP2_SCALED_BLIT)==PgVM_MODE_CAP2_SCALED_BLIT) |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
437 { |
3386
fff074de9675
Photon SDL renderer almost finished, the double/tripple buffering is left only.
Mike Gorchak <lestat@i.com.ua>
parents:
3384
diff
changeset
|
438 didata->mode_2dcaps|=SDL_VIDEO_PHOTON_CAP_SCALED_BLIT; |
3384
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
439 } |
3139 | 440 } |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
441 |
3139 | 442 /* Setup current desktop mode for SDL */ |
443 SDL_zero(current_mode); | |
444 current_mode.w = modeinfo.width; | |
445 current_mode.h = modeinfo.height; | |
446 current_mode.refresh_rate = hwcaps.current_rrate; | |
447 current_mode.format = photon_image_to_sdl_pixelformat(modeinfo.type); | |
448 current_mode.driverdata = NULL; | |
449 | |
450 /* Copy device name */ | |
451 SDL_strlcpy(didata->description, hwcaps.chip_name, | |
452 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
|
453 |
3139 | 454 /* Search device capabilities and possible workarounds */ |
455 jt = 0; | |
456 do { | |
457 if (photon_devicename[jt].name == NULL) { | |
458 break; | |
459 } | |
460 if (SDL_strncmp | |
461 (photon_devicename[jt].name, didata->description, | |
462 SDL_strlen(photon_devicename[jt].name)) == 0) { | |
463 didata->caps = photon_devicename[jt].caps; | |
464 } | |
465 jt++; | |
466 } while (1); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
467 |
3139 | 468 /* Initialize display structure */ |
469 SDL_zero(display); | |
470 display.desktop_mode = current_mode; | |
471 display.current_mode = current_mode; | |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
472 display.fullscreen_mode = current_mode; |
3139 | 473 display.driverdata = didata; |
474 didata->current_mode = current_mode; | |
475 SDL_AddVideoDisplay(&display); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
476 |
3139 | 477 /* Check for environment variables which could override some SDL settings */ |
478 didata->custom_refresh = 0; | |
479 override = SDL_getenv("SDL_VIDEO_PHOTON_REFRESH_RATE"); | |
480 if (override != NULL) { | |
481 if (SDL_sscanf(override, "%u", &didata->custom_refresh) != 1) { | |
482 didata->custom_refresh = 0; | |
483 } | |
484 } | |
485 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
486 |
3139 | 487 /* Add photon input devices */ |
488 status = photon_addinputdevices(_this); | |
489 if (status != 0) { | |
490 /* SDL error is set by photon_addinputdevices() function */ | |
491 return -1; | |
492 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
493 |
3139 | 494 /* Add photon renderer to SDL */ |
495 photon_addrenderdriver(_this); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
496 |
3139 | 497 /* video has been initialized successfully */ |
498 return 1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
499 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
500 |
3139 | 501 void |
502 photon_videoquit(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
503 { |
3139 | 504 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
505 SDL_DisplayData *didata; | |
506 uint32_t it; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
507 |
3139 | 508 /* SDL will restore our desktop mode on exit */ |
509 for (it = 0; it < _this->num_displays; it++) { | |
510 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
|
511 |
3139 | 512 if (didata->cursor != NULL) { |
513 SDL_free(didata->cursor); | |
514 } | |
515 #if defined(SDL_VIDEO_OPENGL_ES) | |
516 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
|
517 /* Detach GF display */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
518 gf_display_detach(didata->display); |
3139 | 519 } |
520 #endif /* SDL_VIDEO_OPENGL_ES */ | |
521 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
522 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
523 |
3139 | 524 void |
525 photon_getdisplaymodes(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
526 { |
3139 | 527 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
528 SDL_DisplayData *didata = | |
529 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
530 SDL_DisplayMode mode; | |
531 PgVideoModes_t modes; | |
532 PgVideoModeInfo_t modeinfo; | |
533 int32_t status; | |
534 uint32_t it; | |
535 uint32_t jt; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
536 |
3139 | 537 /* Check if current device is not the same as target */ |
538 if (phdata->current_device_id != didata->device_id) { | |
539 /* Set target device as default for Pd and Pg functions */ | |
540 status = PdSetTargetDevice(NULL, phdata->rid[didata->device_id]); | |
541 if (status != 0) { | |
542 SDL_SetError("Photon: Can't set default target device\n"); | |
543 return; | |
544 } | |
545 phdata->current_device_id = didata->device_id; | |
546 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
547 |
3139 | 548 /* Get array of available video modes */ |
549 status = PgGetVideoModeList(&modes); | |
550 if (status != 0) { | |
551 SDL_SetError("Photon: Can't get video mode list"); | |
552 return; | |
553 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
554 |
3139 | 555 for (it = 0; it < modes.num_modes; it++) { |
556 status = PgGetVideoModeInfo(modes.modes[it], &modeinfo); | |
557 if (status != 0) { | |
558 /* Maybe something wrong with this particular mode, skip it */ | |
559 continue; | |
560 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
561 |
3139 | 562 jt = 0; |
563 do { | |
564 if (modeinfo.refresh_rates[jt] != 0) { | |
565 mode.w = modeinfo.width; | |
566 mode.h = modeinfo.height; | |
567 mode.refresh_rate = modeinfo.refresh_rates[jt]; | |
568 mode.format = photon_image_to_sdl_pixelformat(modeinfo.type); | |
569 mode.driverdata = NULL; | |
570 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
|
571 |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
572 /* 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
|
573 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
|
574 mode.w = modeinfo.width; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
575 mode.h = modeinfo.height; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
576 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
|
577 mode.format = SDL_PIXELFORMAT_RGB888; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
578 mode.driverdata = NULL; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
579 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
|
580 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
581 |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
582 /* 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
|
583 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
|
584 mode.w = modeinfo.width; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
585 mode.h = modeinfo.height; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
586 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
|
587 mode.format = SDL_PIXELFORMAT_RGB555; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
588 mode.driverdata = NULL; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
589 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
|
590 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
591 |
3139 | 592 jt++; |
593 } else { | |
594 break; | |
595 } | |
596 } while (1); | |
597 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
598 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
599 |
3139 | 600 int |
601 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
|
602 { |
3139 | 603 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
604 SDL_DisplayData *didata = | |
605 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
606 PgVideoModes_t modes; | |
607 PgVideoModeInfo_t modeinfo; | |
608 PgDisplaySettings_t modesettings; | |
609 uint32_t refresh_rate = 0; | |
610 int32_t status; | |
611 uint32_t it; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
612 |
3139 | 613 /* Check if current device is not the same as target */ |
614 if (phdata->current_device_id != didata->device_id) { | |
615 /* Set target device as default for Pd and Pg functions */ | |
616 status = PdSetTargetDevice(NULL, phdata->rid[didata->device_id]); | |
617 if (status != 0) { | |
618 SDL_SetError("Photon: Can't set default target device\n"); | |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
619 return -1; |
3139 | 620 } |
621 phdata->current_device_id = didata->device_id; | |
622 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
623 |
3139 | 624 /* Get array of available video modes */ |
625 status = PgGetVideoModeList(&modes); | |
626 if (status != 0) { | |
627 SDL_SetError("Photon: Can't get video mode list"); | |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
628 return -1; |
3139 | 629 } |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
630 |
3139 | 631 /* Current display dimension and bpp are no more valid */ |
632 didata->current_mode.format = SDL_PIXELFORMAT_UNKNOWN; | |
633 didata->current_mode.w = 0; | |
634 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
|
635 |
3139 | 636 /* Check if custom refresh rate requested */ |
637 if (didata->custom_refresh != 0) { | |
638 refresh_rate = didata->custom_refresh; | |
639 } else { | |
640 refresh_rate = mode->refresh_rate; | |
641 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
642 |
3139 | 643 /* Check if SDL GF driver needs to find appropriate refresh rate itself */ |
644 if (refresh_rate == 0) { | |
645 SDL_DisplayMode tempmode; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
646 |
3139 | 647 /* Clear display mode structure */ |
648 SDL_memset(&tempmode, 0x00, sizeof(SDL_DisplayMode)); | |
649 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
|
650 |
3139 | 651 /* Check if window width and height matches one of our modes */ |
652 for (it = 0; it < SDL_CurrentDisplay.num_display_modes; it++) { | |
653 if ((SDL_CurrentDisplay.display_modes[it].w == mode->w) && | |
654 (SDL_CurrentDisplay.display_modes[it].h == mode->h) && | |
655 (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
|
656 { |
3139 | 657 /* Find the lowest refresh rate available */ |
658 if (tempmode.refresh_rate > | |
659 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
660 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
661 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
662 } |
3139 | 663 } |
664 if (tempmode.refresh_rate != 0x0000FFFF) { | |
665 refresh_rate = tempmode.refresh_rate; | |
666 } else { | |
667 /* Let video driver decide what to do with this */ | |
668 refresh_rate = 0; | |
669 } | |
670 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
671 |
3139 | 672 /* Check if SDL GF driver needs to check custom refresh rate */ |
673 if (didata->custom_refresh != 0) { | |
674 SDL_DisplayMode tempmode; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
675 |
3139 | 676 /* Clear display mode structure */ |
677 SDL_memset(&tempmode, 0x00, sizeof(SDL_DisplayMode)); | |
678 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
|
679 |
3139 | 680 /* Check if window width and height matches one of our modes */ |
681 for (it = 0; it < SDL_CurrentDisplay.num_display_modes; it++) { | |
682 if ((SDL_CurrentDisplay.display_modes[it].w == mode->w) && | |
683 (SDL_CurrentDisplay.display_modes[it].h == mode->h) && | |
684 (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
|
685 { |
3139 | 686 /* Find the lowest refresh rate available */ |
687 if (tempmode.refresh_rate > | |
688 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
689 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
690 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
691 |
3139 | 692 /* Check if requested refresh rate found */ |
693 if (refresh_rate == | |
694 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
695 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
696 break; | |
697 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
698 } |
3139 | 699 } |
700 if (tempmode.refresh_rate != 0x0000FFFF) { | |
701 refresh_rate = tempmode.refresh_rate; | |
702 } else { | |
703 /* Let video driver decide what to do with this */ | |
704 refresh_rate = 0; | |
705 } | |
706 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
707 |
3139 | 708 /* Find photon's video mode number */ |
709 for (it = 0; it < modes.num_modes; it++) { | |
710 uint32_t jt; | |
711 uint32_t foundrefresh; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
712 |
3139 | 713 /* Get current video mode details */ |
714 status = PgGetVideoModeInfo(modes.modes[it], &modeinfo); | |
715 if (status != 0) { | |
716 /* Maybe something wrong with this particular mode, skip it */ | |
717 continue; | |
718 } | |
719 if ((modeinfo.width == mode->w) && (modeinfo.height == mode->h) && | |
720 (modeinfo.type == photon_sdl_to_image_pixelformat(mode->format))) | |
721 { | |
722 /* Mode is found, find requested refresh rate, this case is for */ | |
723 /* video drivers, which provide non-generic video modes. */ | |
724 jt = 0; | |
725 foundrefresh = 0; | |
726 do { | |
727 if (modeinfo.refresh_rates[jt] != 0) { | |
728 if (modeinfo.refresh_rates[jt] == refresh_rate) { | |
729 foundrefresh = 1; | |
730 break; | |
731 } | |
732 jt++; | |
733 } else { | |
734 break; | |
735 } | |
736 } while (1); | |
737 if (foundrefresh != 0) { | |
738 break; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
739 } |
3139 | 740 } |
741 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
742 |
3139 | 743 /* Check if video mode has not been found */ |
744 if (it == modes.num_modes) { | |
745 SDL_SetError("Photon: Can't find appropriate video mode"); | |
746 return -1; | |
747 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
748 |
3139 | 749 /* Fill mode settings */ |
750 modesettings.flags = 0x00000000; | |
751 modesettings.mode = modes.modes[it]; | |
752 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
|
753 |
3139 | 754 /* Finally set new video mode */ |
755 status = PgSetVideoMode(&modesettings); | |
756 if (status != 0) { | |
757 SDL_SetError("Photon: Can't set new video mode"); | |
758 return -1; | |
759 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
760 |
3139 | 761 /* Store new video mode parameters */ |
762 didata->current_mode = *mode; | |
763 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
|
764 |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
765 /* Get current video mode 2D capabilities for the renderer */ |
3384
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
766 didata->mode_2dcaps=0; |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
767 if ((modeinfo.mode_capabilities2 & PgVM_MODE_CAP2_ALPHA_BLEND)==PgVM_MODE_CAP2_ALPHA_BLEND) |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
768 { |
3386
fff074de9675
Photon SDL renderer almost finished, the double/tripple buffering is left only.
Mike Gorchak <lestat@i.com.ua>
parents:
3384
diff
changeset
|
769 didata->mode_2dcaps|=SDL_VIDEO_PHOTON_CAP_ALPHA_BLEND; |
3384
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
770 } |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
771 if ((modeinfo.mode_capabilities2 & PgVM_MODE_CAP2_SCALED_BLIT)==PgVM_MODE_CAP2_SCALED_BLIT) |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
772 { |
3386
fff074de9675
Photon SDL renderer almost finished, the double/tripple buffering is left only.
Mike Gorchak <lestat@i.com.ua>
parents:
3384
diff
changeset
|
773 didata->mode_2dcaps|=SDL_VIDEO_PHOTON_CAP_SCALED_BLIT; |
3384
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
774 } |
04af265172f9
Continue working on 2D support in Photon.
Mike Gorchak <lestat@i.com.ua>
parents:
3383
diff
changeset
|
775 |
3139 | 776 return 0; |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
777 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
778 |
3139 | 779 int |
780 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
|
781 { |
3139 | 782 SDL_DisplayData *didata = |
783 (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
|
784 |
3139 | 785 /* Setting display palette operation has been failed */ |
786 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
787 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
788 |
3139 | 789 int |
790 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
|
791 { |
3139 | 792 SDL_DisplayData *didata = |
793 (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
|
794 |
3139 | 795 /* Getting display palette operation has been failed */ |
796 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
797 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
798 |
3139 | 799 int |
800 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
|
801 { |
3139 | 802 SDL_DisplayData *didata = |
803 (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
|
804 |
3139 | 805 /* Setting display gamma ramp operation has been failed */ |
806 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
807 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
808 |
3139 | 809 int |
810 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
|
811 { |
3139 | 812 /* Getting display gamma ramp operation has been failed */ |
813 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
814 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
815 |
3139 | 816 int |
817 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
|
818 { |
3139 | 819 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
820 SDL_DisplayData *didata = | |
821 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
822 SDL_WindowData *wdata; | |
823 PhDim_t winsize; | |
824 PhPoint_t winpos; | |
825 PtArg_t winargs[32]; | |
826 uint32_t winargc = 0; | |
827 int32_t status; | |
828 PhRegion_t wregion; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
829 |
3139 | 830 /* Allocate window internal data */ |
831 wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); | |
832 if (wdata == NULL) { | |
833 SDL_OutOfMemory(); | |
834 return -1; | |
835 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
836 |
3139 | 837 /* Setup driver data for this window */ |
838 window->driverdata = wdata; | |
839 | |
840 /* Set initial window title */ | |
841 if (window->title != NULL) { | |
842 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_TITLE, window->title, 0); | |
843 } else { | |
3383
90935231e9b6
Continue working on 2D support in Photon
Mike Gorchak <lestat@i.com.ua>
parents:
3375
diff
changeset
|
844 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_TITLE, "SDL unnamed application", 0); |
3139 | 845 } |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
846 |
3139 | 847 /* TODO: handle SDL_WINDOW_INPUT_GRABBED */ |
848 | |
849 /* Disable default window filling on redraw */ | |
850 PtSetArg(&winargs[winargc++], Pt_ARG_BASIC_FLAGS, Pt_TRUE, | |
851 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
|
852 |
3139 | 853 /* Reset default managed flags to disabled state */ |
854 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, | |
855 Ph_WM_APP_DEF_MANAGED); | |
856 /* Set which events we will not handle, let WM to handle them */ | |
857 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_TRUE, | |
858 Ph_WM_BACKDROP | Ph_WM_TOFRONT | Ph_WM_COLLAPSE | Ph_WM_FFRONT | | |
859 Ph_WM_FOCUS | Ph_WM_HELP | Ph_WM_HIDE | Ph_WM_MAX | | |
860 Ph_WM_MENU | Ph_WM_MOVE | Ph_WM_RESTORE | Ph_WM_TASKBAR | | |
861 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
|
862 |
3139 | 863 /* Reset default notify events to disable */ |
864 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_FALSE, | |
865 Ph_WM_RESIZE | Ph_WM_CLOSE | Ph_WM_HELP); | |
866 /* Set which events we will handle */ | |
867 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE, | |
868 Ph_WM_CLOSE | Ph_WM_COLLAPSE | Ph_WM_FOCUS | Ph_WM_MAX | | |
869 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
|
870 |
3139 | 871 /* Borderless window can't be resizeable */ |
872 if ((window->flags & SDL_WINDOW_BORDERLESS) == SDL_WINDOW_BORDERLESS) { | |
873 window->flags &= ~(SDL_WINDOW_RESIZABLE); | |
874 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
875 |
3139 | 876 /* Reset all default decorations */ |
877 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_FALSE, | |
878 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
|
879 |
3139 | 880 /* Fullscreen window has its own decorations */ |
881 if ((window->flags & SDL_WINDOW_FULLSCREEN) == SDL_WINDOW_FULLSCREEN) { | |
882 window->flags |= SDL_WINDOW_BORDERLESS; | |
883 window->flags &= ~(SDL_WINDOW_RESIZABLE); | |
884 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_TRUE, | |
885 Ph_WM_RENDER_CLOSE | Ph_WM_RENDER_TITLE); | |
886 } else { | |
887 uint32_t decorations = | |
888 Ph_WM_RENDER_CLOSE | Ph_WM_RENDER_MENU | Ph_WM_RENDER_MIN | | |
889 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
|
890 |
3139 | 891 if ((window->flags & SDL_WINDOW_RESIZABLE) == SDL_WINDOW_RESIZABLE) { |
892 decorations |= | |
893 Ph_WM_RENDER_BORDER | Ph_WM_RENDER_RESIZE | Ph_WM_RENDER_MAX; | |
894 PtSetArg(&winargs[winargc++], Pt_ARG_RESIZE_FLAGS, Pt_TRUE, | |
895 Pt_RESIZE_XY_AS_REQUIRED); | |
896 } | |
897 if ((window->flags & SDL_WINDOW_BORDERLESS) != SDL_WINDOW_BORDERLESS) { | |
898 decorations |= Ph_WM_RENDER_BORDER; | |
899 } | |
900 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_TRUE, | |
901 decorations); | |
902 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
903 |
3139 | 904 /* Set initial window state */ |
905 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_STATE, Pt_FALSE, | |
906 Ph_WM_STATE_ISFOCUS); | |
907 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_STATE, Pt_TRUE, | |
908 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
|
909 |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
910 /* Special case, do not handle maximize events, if window can't be resized */ |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
911 if ((window->flags & SDL_WINDOW_RESIZABLE) != SDL_WINDOW_RESIZABLE) |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
912 { |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
913 PtSetArg(&winargs[winargc++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
914 Ph_WM_MAX | Ph_WM_RESTORE | Ph_WM_RESIZE); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
915 } |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
916 |
3139 | 917 /* Set window dimension */ |
918 winsize.w = window->w; | |
919 winsize.h = window->h; | |
920 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
|
921 |
3139 | 922 /* Check if upper level requests WM to position window */ |
923 if ((window->x == SDL_WINDOWPOS_UNDEFINED) | |
924 && (window->y == SDL_WINDOWPOS_UNDEFINED)) { | |
925 /* Do not set widget position, let WM to set it */ | |
926 } else { | |
927 if (window->x == SDL_WINDOWPOS_UNDEFINED) { | |
928 window->x = 0; | |
929 } | |
930 if (window->y == SDL_WINDOWPOS_UNDEFINED) { | |
931 window->y = 0; | |
932 } | |
933 if (window->x == SDL_WINDOWPOS_CENTERED) { | |
934 window->x = (didata->current_mode.w - window->w) / 2; | |
935 } | |
936 if (window->y == SDL_WINDOWPOS_CENTERED) { | |
937 window->y = (didata->current_mode.h - window->h) / 2; | |
938 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
939 |
3139 | 940 /* Now set window position */ |
941 winpos.x = window->x; | |
942 winpos.y = window->y; | |
943 PtSetArg(&winargs[winargc++], Pt_ARG_POS, &winpos, 0); | |
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 /* Check if window must support OpenGL ES rendering */ |
947 if ((window->flags & SDL_WINDOW_OPENGL) == SDL_WINDOW_OPENGL) { | |
948 #if defined(SDL_VIDEO_OPENGL_ES) | |
949 EGLBoolean initstatus; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
950 |
3139 | 951 /* Check if GF was initialized correctly */ |
952 if (phdata->gfinitialized == SDL_FALSE) { | |
953 SDL_SetError | |
954 ("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
|
955 return -1; |
3139 | 956 } |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
957 |
3139 | 958 /* Mark this window as OpenGL ES compatible */ |
959 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
|
960 |
3139 | 961 /* Create connection to OpenGL ES */ |
962 if (phdata->egldisplay == EGL_NO_DISPLAY) { | |
963 phdata->egldisplay = eglGetDisplay(phdata->gfdev); | |
964 if (phdata->egldisplay == EGL_NO_DISPLAY) { | |
965 SDL_SetError("Photon: Can't get connection to OpenGL ES"); | |
966 return -1; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
967 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
968 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
969 /* Initialize OpenGL ES library, ignore EGL version */ |
3139 | 970 initstatus = eglInitialize(phdata->egldisplay, NULL, NULL); |
971 if (initstatus != EGL_TRUE) { | |
972 SDL_SetError("Photon: Can't init OpenGL ES library"); | |
973 return -1; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
974 } |
3139 | 975 } |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
976 |
3139 | 977 /* Increment GL ES reference count usage */ |
978 phdata->egl_refcount++; | |
979 #else | |
980 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
981 return -1; | |
982 #endif /* SDL_VIDEO_OPENGL_ES */ | |
983 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
984 |
3139 | 985 /* Finally create the window */ |
986 wdata->window = PtCreateWidget(PtWindow, Pt_NO_PARENT, winargc, winargs); | |
987 if (wdata->window == NULL) { | |
988 SDL_SetError("Photon: Can't create window widget"); | |
989 SDL_free(wdata); | |
990 return -1; | |
991 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
992 |
3139 | 993 /* Show widget */ |
994 status = PtRealizeWidget(wdata->window); | |
995 if (status != 0) { | |
996 SDL_SetError("Photon: Can't realize window widget"); | |
997 PtDestroyWidget(wdata->window); | |
998 SDL_free(wdata); | |
999 return; | |
1000 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1001 |
3139 | 1002 /* Just created SDL window always gets focus */ |
1003 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
|
1004 |
3139 | 1005 /* Create window-specific cursor after creation */ |
1006 if (didata->cursor_visible == SDL_TRUE) { | |
1007 /* Setup cursor type. shape and default color */ | |
1008 PtSetResource(wdata->window, Pt_ARG_CURSOR_COLOR, | |
1009 Ph_CURSOR_DEFAULT_COLOR, 0); | |
1010 PtSetResource(wdata->window, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_BITMAP, 0); | |
1011 PtSetResource(wdata->window, Pt_ARG_BITMAP_CURSOR, didata->cursor, | |
1012 didata->cursor->hdr.len + sizeof(PhRegionDataHdr_t)); | |
1013 } else { | |
1014 PtSetResource(wdata->window, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE, 0); | |
1015 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1016 |
3139 | 1017 /* Set window region sensible to mouse motion events */ |
1018 status = | |
1019 PhRegionQuery(PtWidgetRid(wdata->window), &wregion, NULL, NULL, 0); | |
1020 if (status != 0) { | |
1021 SDL_SetError | |
1022 ("Photon: Can't set region sensivity to mouse motion events"); | |
1023 PtDestroyWidget(wdata->window); | |
1024 SDL_free(wdata); | |
1025 return -1; | |
1026 } | |
1027 wregion.events_sense |= | |
1028 Ph_EV_PTR_MOTION_BUTTON | Ph_EV_PTR_MOTION_NOBUTTON; | |
1029 status = PhRegionChange(Ph_REGION_EV_SENSE, 0, &wregion, NULL, NULL); | |
1030 if (status < 0) { | |
1031 SDL_SetError("Photon: Can't change region sensivity"); | |
1032 PtDestroyWidget(wdata->window); | |
1033 SDL_free(wdata); | |
1034 return -1; | |
1035 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1036 |
3139 | 1037 /* Flush all widget operations again */ |
1038 PtFlush(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1039 |
3139 | 1040 /* By default last created window got a input focus */ |
1041 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
|
1042 |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
1043 /* Emit focus gained event, because photon is not sending it */ |
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
1044 SDL_OnWindowFocusGained(window); |
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
1045 |
3139 | 1046 /* Window has been successfully created */ |
1047 return 0; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1048 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1049 |
3139 | 1050 int |
1051 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
|
1052 { |
3139 | 1053 /* 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
|
1054 |
3139 | 1055 /* Failed to create window from another window */ |
1056 return -1; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1057 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1058 |
3139 | 1059 void |
1060 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
|
1061 { |
3139 | 1062 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1063 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1064 |
3139 | 1065 /* Set window title */ |
1066 if (window->title != NULL) { | |
1067 status = | |
1068 PtSetResource(wdata->window, Pt_ARG_WINDOW_TITLE, window->title, | |
1069 0); | |
1070 } else { | |
1071 status = PtSetResource(wdata->window, Pt_ARG_WINDOW_TITLE, "", 0); | |
1072 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1073 |
3139 | 1074 if (status != 0) { |
1075 SDL_SetError("Photon: Can't set window title"); | |
1076 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1077 |
3139 | 1078 /* Flush all widget operations */ |
1079 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1080 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1081 |
3139 | 1082 void |
1083 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
|
1084 { |
3139 | 1085 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1086 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1087 |
3139 | 1088 /* TODO: Use iconify ? */ |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1089 |
3139 | 1090 /* Flush all widget operations */ |
1091 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1092 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1093 |
3139 | 1094 void |
1095 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
|
1096 { |
3139 | 1097 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1098 SDL_DisplayData *didata = | |
1099 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1100 PhPoint_t winpos; | |
1101 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1102 |
3139 | 1103 /* Check if upper level requests WM to position window */ |
1104 if ((window->x == SDL_WINDOWPOS_UNDEFINED) | |
1105 && (window->y == SDL_WINDOWPOS_UNDEFINED)) { | |
1106 /* Do not set widget position, let WM to set it */ | |
1107 } else { | |
1108 if (window->x == SDL_WINDOWPOS_UNDEFINED) { | |
1109 window->x = 0; | |
1110 } | |
1111 if (window->y == SDL_WINDOWPOS_UNDEFINED) { | |
1112 window->y = 0; | |
1113 } | |
1114 if (window->x == SDL_WINDOWPOS_CENTERED) { | |
1115 window->x = (didata->current_mode.w - window->w) / 2; | |
1116 } | |
1117 if (window->y == SDL_WINDOWPOS_CENTERED) { | |
1118 window->y = (didata->current_mode.h - window->h) / 2; | |
1119 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1120 |
3139 | 1121 /* Now set window position */ |
1122 winpos.x = window->x; | |
1123 winpos.y = window->y; | |
1124 status = PtSetResource(wdata->window, Pt_ARG_POS, &winpos, 0); | |
1125 if (status != 0) { | |
1126 SDL_SetError("Photon: Can't set window position"); | |
1127 } | |
1128 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1129 |
3139 | 1130 /* Flush all widget operations */ |
1131 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1132 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1133 |
3139 | 1134 void |
1135 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
|
1136 { |
3139 | 1137 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1138 PhDim_t winsize; | |
1139 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1140 |
3139 | 1141 winsize.w = window->w; |
1142 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
|
1143 |
3139 | 1144 status = PtSetResource(wdata->window, Pt_ARG_DIM, &winsize, 0); |
1145 if (status != 0) { | |
1146 SDL_SetError("Photon: Can't set window size"); | |
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_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
|
1155 { |
3139 | 1156 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1157 int32_t status; | |
1158 | |
1159 /* Bring focus to window and put it in front of others */ | |
1160 PtWindowToFront(wdata->window); | |
1161 | |
1162 /* Flush all widget operations */ | |
1163 PtFlush(); | |
1164 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1165 |
3139 | 1166 void |
1167 photon_hidewindow(_THIS, SDL_Window * window) | |
1168 { | |
1169 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1170 PhWindowEvent_t winevent; | |
1171 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1172 |
3139 | 1173 SDL_memset(&winevent, 0x00, sizeof(PhWindowEvent_t)); |
1174 winevent.event_f = Ph_WM_HIDE; | |
1175 winevent.rid = PtWidgetRid(wdata->window); | |
1176 winevent.event_state = Ph_WM_EVSTATE_HIDE; | |
1177 | |
1178 status = PtForwardWindowEvent(&winevent); | |
1179 if (status != 0) { | |
1180 SDL_SetError("Photon: Can't hide window"); | |
1181 } | |
1182 | |
1183 /* Flush all widget operations */ | |
1184 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1185 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1186 |
3139 | 1187 void |
1188 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
|
1189 { |
3139 | 1190 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1191 PhWindowEvent_t winevent; | |
1192 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1193 |
3139 | 1194 SDL_memset(&winevent, 0x00, sizeof(PhWindowEvent_t)); |
1195 winevent.event_f = Ph_WM_HIDE; | |
1196 winevent.rid = PtWidgetRid(wdata->window); | |
1197 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
|
1198 |
3139 | 1199 status = PtForwardWindowEvent(&winevent); |
1200 if (status != 0) { | |
1201 SDL_SetError("Photon: Can't hide window"); | |
1202 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1203 |
3139 | 1204 /* Flush all widget operations */ |
1205 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1206 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1207 |
3139 | 1208 void |
1209 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
|
1210 { |
3139 | 1211 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1212 PhWindowEvent_t winevent; | |
1213 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1214 |
3139 | 1215 /* Flush all widget operations */ |
1216 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1217 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1218 |
3139 | 1219 void |
1220 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
|
1221 { |
3139 | 1222 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1223 PhWindowEvent_t winevent; | |
1224 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1225 |
3139 | 1226 SDL_memset(&winevent, 0x00, sizeof(PhWindowEvent_t)); |
1227 winevent.event_f = Ph_WM_HIDE; | |
1228 winevent.rid = PtWidgetRid(wdata->window); | |
1229 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
|
1230 |
3139 | 1231 status = PtForwardWindowEvent(&winevent); |
1232 if (status != 0) { | |
1233 SDL_SetError("Photon: Can't hide window"); | |
1234 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1235 |
3139 | 1236 /* Flush all widget operations */ |
1237 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1238 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1239 |
3139 | 1240 void |
1241 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
|
1242 { |
3139 | 1243 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1244 PhWindowEvent_t winevent; | |
1245 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1246 |
3139 | 1247 /* Flush all widget operations */ |
1248 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1249 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1250 |
3139 | 1251 void |
1252 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
|
1253 { |
3139 | 1254 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; |
1255 PhWindowEvent_t winevent; | |
1256 int32_t status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1257 |
3139 | 1258 /* Flush all widget operations */ |
1259 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1260 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1261 |
3139 | 1262 void |
1263 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
|
1264 { |
3139 | 1265 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; |
1266 SDL_DisplayData *didata = | |
1267 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1268 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1269 int32_t status; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1270 |
3139 | 1271 if (wdata != NULL) { |
1272 status = PtDestroyWidget(wdata->window); | |
1273 if (status != 0) { | |
1274 SDL_SetError("Photon: Can't destroy window widget"); | |
1275 } | |
1276 wdata->window = NULL; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1277 |
3139 | 1278 #if defined(SDL_VIDEO_OPENGL_ES) |
1279 if (phdata->gfinitialized == SDL_TRUE) { | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1280 /* Destroy photon handle to GF surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1281 if (wdata->phsurface != NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1282 PhDCRelease(wdata->phsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1283 wdata->phsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1284 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1285 |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1286 /* Destroy OpenGL ES surface if it was created */ |
3139 | 1287 if (wdata->gles_surface != EGL_NO_SURFACE) { |
1288 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
|
1289 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1290 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1291 /* Free OpenGL ES target surface */ |
3139 | 1292 if (wdata->gfsurface != NULL) { |
1293 gf_surface_free(wdata->gfsurface); | |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
1294 wdata->gfsurface=NULL; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1295 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1296 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1297 phdata->egl_refcount--; |
3139 | 1298 if (phdata->egl_refcount == 0) { |
1299 /* Terminate connection to OpenGL ES */ | |
1300 if (phdata->egldisplay != EGL_NO_DISPLAY) { | |
1301 eglTerminate(phdata->egldisplay); | |
1302 phdata->egldisplay = EGL_NO_DISPLAY; | |
1303 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1304 } |
3139 | 1305 } |
1306 #endif /* SDL_VIDEO_OPENGL_ES */ | |
1307 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1308 |
3139 | 1309 /* Flush all widget operations */ |
1310 PtFlush(); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1311 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1312 |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1313 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1314 /* SDL Window Manager function */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1315 /*****************************************************************************/ |
3139 | 1316 SDL_bool |
1317 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
|
1318 { |
3139 | 1319 if (info->version.major <= SDL_MAJOR_VERSION) { |
1320 return SDL_TRUE; | |
1321 } else { | |
1322 SDL_SetError("application not compiled with SDL %d.%d\n", | |
1323 SDL_MAJOR_VERSION, SDL_MINOR_VERSION); | |
1324 return SDL_FALSE; | |
1325 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1326 |
3139 | 1327 /* Failed to get window manager information */ |
1328 return SDL_FALSE; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1329 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1330 |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1331 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1332 /* SDL OpenGL/OpenGL ES functions */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1333 /*****************************************************************************/ |
3139 | 1334 int |
1335 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
|
1336 { |
3139 | 1337 #if defined(SDL_VIDEO_OPENGL_ES) |
1338 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
|
1339 |
3139 | 1340 if (phdata->gfinitialized != SDL_TRUE) { |
1341 SDL_SetError | |
1342 ("Photon: GF initialization failed, no OpenGL ES support"); | |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
1343 return -1; |
3139 | 1344 } |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1345 |
3139 | 1346 /* Check if OpenGL ES library is specified for GF driver */ |
1347 if (path == NULL) { | |
1348 path = SDL_getenv("SDL_OPENGL_LIBRARY"); | |
1349 if (path == NULL) { | |
1350 path = SDL_getenv("SDL_OPENGLES_LIBRARY"); | |
1351 } | |
1352 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1353 |
3139 | 1354 /* Check if default library loading requested */ |
1355 if (path == NULL) { | |
1356 /* Already linked with GF library which provides egl* subset of */ | |
1357 /* functions, use Common profile of OpenGL ES library by default */ | |
1358 path = "/usr/lib/libGLES_CM.so.1"; | |
1359 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1360 |
3139 | 1361 /* Load dynamic library */ |
1362 _this->gl_config.dll_handle = SDL_LoadObject(path); | |
1363 if (!_this->gl_config.dll_handle) { | |
1364 /* Failed to load new GL ES library */ | |
1365 SDL_SetError("Photon: Failed to locate OpenGL ES library"); | |
1366 return -1; | |
1367 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1368 |
3139 | 1369 /* Store OpenGL ES library path and name */ |
1370 SDL_strlcpy(_this->gl_config.driver_path, path, | |
1371 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
|
1372 |
3139 | 1373 /* New OpenGL ES library is loaded */ |
1374 return 0; | |
1375 #else | |
1376 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1377 return -1; | |
1378 #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
|
1379 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1380 |
3139 | 1381 void * |
1382 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
|
1383 { |
3139 | 1384 #if defined(SDL_VIDEO_OPENGL_ES) |
1385 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1386 void *function_address; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1387 |
3139 | 1388 if (phdata->gfinitialized != SDL_TRUE) { |
1389 SDL_SetError | |
1390 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1391 return NULL; | |
1392 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1393 |
3139 | 1394 /* Try to get function address through the egl interface */ |
1395 function_address = eglGetProcAddress(proc); | |
1396 if (function_address != NULL) { | |
1397 return function_address; | |
1398 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1399 |
3139 | 1400 /* Then try to get function in the OpenGL ES library */ |
1401 if (_this->gl_config.dll_handle) { | |
1402 function_address = | |
1403 SDL_LoadFunction(_this->gl_config.dll_handle, proc); | |
1404 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
|
1405 return function_address; |
3139 | 1406 } |
1407 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1408 |
3139 | 1409 /* Add emulated OpenGL ES 1.1 functions */ |
1410 if (SDL_strcmp(proc, "glTexParameteri") == 0) { | |
1411 return glTexParameteri; | |
1412 } | |
1413 if (SDL_strcmp(proc, "glTexParameteriv") == 0) { | |
1414 return glTexParameteriv; | |
1415 } | |
1416 if (SDL_strcmp(proc, "glColor4ub") == 0) { | |
1417 return glColor4ub; | |
1418 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1419 |
3139 | 1420 /* Failed to get GL ES function address pointer */ |
1421 SDL_SetError("Photon: Cannot locate OpenGL ES function name"); | |
1422 return NULL; | |
1423 #else | |
1424 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1425 return NULL; | |
1426 #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
|
1427 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1428 |
3139 | 1429 void |
1430 photon_gl_unloadlibrary(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1431 { |
3139 | 1432 #if defined(SDL_VIDEO_OPENGL_ES) |
1433 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
|
1434 |
3139 | 1435 if (phdata->gfinitialized == SDL_TRUE) { |
1436 /* Unload OpenGL ES library */ | |
1437 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
|
1438 SDL_UnloadObject(_this->gl_config.dll_handle); |
3139 | 1439 _this->gl_config.dll_handle = NULL; |
1440 } | |
1441 } else { | |
1442 SDL_SetError | |
1443 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1444 } | |
1445 #else | |
1446 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1447 return; | |
1448 #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
|
1449 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1450 |
3139 | 1451 SDL_GLContext |
1452 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
|
1453 { |
3139 | 1454 #if defined(SDL_VIDEO_OPENGL_ES) |
1455 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1456 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1457 SDL_DisplayData *didata = | |
1458 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1459 EGLBoolean status; | |
1460 int32_t gfstatus; | |
1461 EGLint configs; | |
1462 uint32_t attr_pos; | |
1463 EGLint attr_value; | |
1464 EGLint cit; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1465 |
3139 | 1466 /* Check if GF was initialized */ |
1467 if (phdata->gfinitialized != SDL_TRUE) { | |
1468 SDL_SetError | |
1469 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1470 return NULL; | |
1471 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1472 |
3139 | 1473 /* Prepare attributes list to pass them to OpenGL ES */ |
1474 attr_pos = 0; | |
1475 wdata->gles_attributes[attr_pos++] = EGL_NATIVE_VISUAL_ID; | |
1476 wdata->gles_attributes[attr_pos++] = | |
1477 qnxgf_sdl_to_gf_pixelformat(didata->current_mode.format); | |
1478 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE; | |
1479 wdata->gles_attributes[attr_pos++] = _this->gl_config.red_size; | |
1480 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE; | |
1481 wdata->gles_attributes[attr_pos++] = _this->gl_config.green_size; | |
1482 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE; | |
1483 wdata->gles_attributes[attr_pos++] = _this->gl_config.blue_size; | |
1484 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
|
1485 |
3139 | 1486 /* Setup alpha size in bits */ |
1487 if (_this->gl_config.alpha_size) { | |
1488 wdata->gles_attributes[attr_pos++] = _this->gl_config.alpha_size; | |
1489 } else { | |
1490 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1491 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1492 |
3139 | 1493 /* Setup color buffer size */ |
1494 if (_this->gl_config.buffer_size) { | |
1495 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE; | |
1496 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size; | |
1497 } else { | |
1498 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE; | |
1499 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1500 } | |
1501 | |
1502 /* Setup depth buffer bits */ | |
1503 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; | |
1504 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
|
1505 |
3139 | 1506 /* Setup stencil bits */ |
1507 if (_this->gl_config.stencil_size) { | |
1508 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1509 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size; | |
1510 } else { | |
1511 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1512 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1513 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1514 |
3139 | 1515 /* Set number of samples in multisampling */ |
1516 if (_this->gl_config.multisamplesamples) { | |
1517 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES; | |
1518 wdata->gles_attributes[attr_pos++] = | |
1519 _this->gl_config.multisamplesamples; | |
1520 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1521 |
3139 | 1522 /* Multisample buffers, OpenGL ES 1.0 spec defines 0 or 1 buffer */ |
1523 if (_this->gl_config.multisamplebuffers) { | |
1524 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS; | |
1525 wdata->gles_attributes[attr_pos++] = | |
1526 _this->gl_config.multisamplebuffers; | |
1527 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1528 |
3139 | 1529 /* Finish attributes list */ |
1530 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
|
1531 |
3139 | 1532 /* Request first suitable framebuffer configuration */ |
1533 status = eglChooseConfig(phdata->egldisplay, wdata->gles_attributes, | |
1534 wdata->gles_configs, SDL_VIDEO_GF_OPENGLES_CONFS, | |
1535 &configs); | |
1536 if (status != EGL_TRUE) { | |
1537 SDL_SetError | |
1538 ("Photon: Can't find closest configuration for OpenGL ES"); | |
1539 return NULL; | |
1540 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1541 |
3139 | 1542 /* Check if nothing has been found, try "don't care" settings */ |
1543 if (configs == 0) { | |
1544 int32_t it; | |
1545 int32_t jt; | |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
1546 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
|
1547 |
3139 | 1548 for (it = 0; it < 4; it++) { |
1549 for (jt = 16; jt >= 0; jt--) { | |
1550 /* Don't care about color buffer bits, use what exist */ | |
1551 /* Replace previous set data with EGL_DONT_CARE */ | |
1552 attr_pos = 0; | |
1553 wdata->gles_attributes[attr_pos++] = EGL_NATIVE_VISUAL_ID; | |
1554 wdata->gles_attributes[attr_pos++] = | |
1555 qnxgf_sdl_to_gf_pixelformat(didata->current_mode.format); | |
1556 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE; | |
1557 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1558 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE; | |
1559 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1560 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE; | |
1561 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1562 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE; | |
1563 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1564 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE; | |
1565 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
|
1566 |
3139 | 1567 /* Try to find requested or smallest depth */ |
1568 if (_this->gl_config.depth_size) { | |
1569 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; | |
1570 wdata->gles_attributes[attr_pos++] = depthbits[it]; | |
1571 } else { | |
1572 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; | |
1573 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1574 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1575 |
3139 | 1576 if (_this->gl_config.stencil_size) { |
1577 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1578 wdata->gles_attributes[attr_pos++] = jt; | |
1579 } else { | |
1580 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1581 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1582 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1583 |
3139 | 1584 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES; |
1585 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1586 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS; | |
1587 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1588 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
|
1589 |
3139 | 1590 /* Request first suitable framebuffer configuration */ |
1591 status = | |
1592 eglChooseConfig(phdata->egldisplay, | |
1593 wdata->gles_attributes, | |
1594 wdata->gles_configs, | |
1595 SDL_VIDEO_GF_OPENGLES_CONFS, &configs); | |
1596 if (status != EGL_TRUE) { | |
1597 SDL_SetError | |
1598 ("Photon: Can't find closest configuration for OpenGL ES"); | |
1599 return NULL; | |
1600 } | |
1601 if (configs != 0) { | |
1602 break; | |
1603 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1604 } |
3139 | 1605 if (configs != 0) { |
1606 break; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1607 } |
3139 | 1608 } |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1609 |
3139 | 1610 /* No available configs */ |
1611 if (configs == 0) { | |
1612 SDL_SetError | |
1613 ("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
|
1614 return NULL; |
3139 | 1615 } |
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 /* Initialize config index */ |
1619 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
|
1620 |
3139 | 1621 /* Now check each configuration to find out the best */ |
1622 for (cit = 0; cit < configs; cit++) { | |
1623 uint32_t stencil_found; | |
1624 uint32_t depth_found; | |
1625 | |
1626 stencil_found = 0; | |
1627 depth_found = 0; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1628 |
3139 | 1629 if (_this->gl_config.stencil_size) { |
1630 status = | |
1631 eglGetConfigAttrib(phdata->egldisplay, | |
1632 wdata->gles_configs[cit], EGL_STENCIL_SIZE, | |
1633 &attr_value); | |
1634 if (status == EGL_TRUE) { | |
1635 if (attr_value != 0) { | |
1636 stencil_found = 1; | |
1637 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1638 } |
3139 | 1639 } else { |
1640 stencil_found = 1; | |
1641 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1642 |
3139 | 1643 if (_this->gl_config.depth_size) { |
1644 status = | |
1645 eglGetConfigAttrib(phdata->egldisplay, | |
1646 wdata->gles_configs[cit], EGL_DEPTH_SIZE, | |
1647 &attr_value); | |
1648 if (status == EGL_TRUE) { | |
1649 if (attr_value != 0) { | |
1650 depth_found = 1; | |
1651 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1652 } |
3139 | 1653 } else { |
1654 depth_found = 1; | |
1655 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1656 |
3139 | 1657 /* Exit from loop if found appropriate configuration */ |
1658 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
|
1659 break; |
3139 | 1660 } |
1661 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1662 |
3139 | 1663 /* If best could not be found, use first */ |
1664 if (cit == configs) { | |
1665 cit = 0; | |
1666 } | |
1667 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
|
1668 |
3139 | 1669 /* Create OpenGL ES context */ |
1670 wdata->gles_context = | |
1671 eglCreateContext(phdata->egldisplay, | |
1672 wdata->gles_configs[wdata->gles_config], | |
1673 EGL_NO_CONTEXT, NULL); | |
1674 if (wdata->gles_context == EGL_NO_CONTEXT) { | |
1675 SDL_SetError("Photon: OpenGL ES context creation has been failed"); | |
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 |
3139 | 1679 /* Check if surface is exist */ |
1680 if (wdata->gfsurface != NULL) { | |
1681 gf_surface_free(wdata->gfsurface); | |
1682 wdata->gfsurface = NULL; | |
1683 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1684 |
3139 | 1685 /* Create GF surface */ |
1686 gfstatus = | |
1687 gf_surface_create(&wdata->gfsurface, phdata->gfdev, window->w, | |
1688 window->h, | |
1689 qnxgf_sdl_to_gf_pixelformat(didata->current_mode. | |
1690 format), NULL, | |
1691 GF_SURFACE_CREATE_2D_ACCESSIBLE | | |
1692 GF_SURFACE_CREATE_3D_ACCESSIBLE | | |
1693 GF_SURFACE_CREATE_SHAREABLE); | |
1694 if (gfstatus != GF_ERR_OK) { | |
1695 eglDestroyContext(phdata->egldisplay, wdata->gles_context); | |
1696 wdata->gles_context = EGL_NO_CONTEXT; | |
1697 SDL_SetError("Photon: Can't create GF 3D surface (%08X)", gfstatus); | |
1698 return NULL; | |
1699 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1700 |
3139 | 1701 /* Create pixmap 3D target surface */ |
1702 wdata->gles_surface = | |
1703 eglCreatePixmapSurface(phdata->egldisplay, | |
1704 wdata->gles_configs[wdata->gles_config], | |
1705 wdata->gfsurface, NULL); | |
1706 if (wdata->gles_surface == EGL_NO_SURFACE) { | |
1707 gf_surface_free(wdata->gfsurface); | |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
1708 wdata->gfsurface=NULL; |
3139 | 1709 eglDestroyContext(phdata->egldisplay, wdata->gles_context); |
1710 wdata->gles_context = EGL_NO_CONTEXT; | |
1711 SDL_SetError("Photon: Can't create EGL pixmap surface"); | |
1712 return NULL; | |
1713 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1714 |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1715 /* Store last used context and surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1716 phdata->lgles_surface=wdata->gles_surface; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1717 phdata->lgles_context=wdata->gles_context; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1718 |
3139 | 1719 /* Make just created context current */ |
1720 status = | |
1721 eglMakeCurrent(phdata->egldisplay, wdata->gles_surface, | |
1722 wdata->gles_surface, wdata->gles_context); | |
1723 if (status != EGL_TRUE) { | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1724 /* Reset last used context and surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1725 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1726 phdata->lgles_context=EGL_NO_CONTEXT; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1727 |
3139 | 1728 /* Destroy OpenGL ES surface */ |
1729 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
|
1730 wdata->gles_surface=EGL_NO_SURFACE; |
3139 | 1731 gf_surface_free(wdata->gfsurface); |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
1732 wdata->gfsurface=NULL; |
3139 | 1733 eglDestroyContext(phdata->egldisplay, wdata->gles_context); |
1734 wdata->gles_context = EGL_NO_CONTEXT; | |
1735 SDL_SetError("Photon: Can't set OpenGL ES context on creation"); | |
1736 return NULL; | |
1737 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1738 |
3139 | 1739 /* Setup into SDL internals state of OpenGL ES: */ |
1740 /* it is accelerated or not */ | |
1741 if ((didata->caps & SDL_PHOTON_ACCELERATED_3D) == | |
1742 SDL_PHOTON_ACCELERATED_3D) { | |
1743 _this->gl_config.accelerated = 1; | |
1744 } else { | |
1745 _this->gl_config.accelerated = 0; | |
1746 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1747 |
3139 | 1748 /* Always clear stereo enable, since OpenGL ES do not supports stereo */ |
1749 _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
|
1750 |
3139 | 1751 /* Get back samples and samplebuffers configurations. Rest framebuffer */ |
1752 /* parameters could be obtained through the OpenGL ES API */ | |
1753 status = | |
1754 eglGetConfigAttrib(phdata->egldisplay, | |
1755 wdata->gles_configs[wdata->gles_config], | |
1756 EGL_SAMPLES, &attr_value); | |
1757 if (status == EGL_TRUE) { | |
1758 _this->gl_config.multisamplesamples = attr_value; | |
1759 } | |
1760 status = | |
1761 eglGetConfigAttrib(phdata->egldisplay, | |
1762 wdata->gles_configs[wdata->gles_config], | |
1763 EGL_SAMPLE_BUFFERS, &attr_value); | |
1764 if (status == EGL_TRUE) { | |
1765 _this->gl_config.multisamplebuffers = attr_value; | |
1766 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1767 |
3139 | 1768 /* Get back stencil and depth buffer sizes */ |
1769 status = | |
1770 eglGetConfigAttrib(phdata->egldisplay, | |
1771 wdata->gles_configs[wdata->gles_config], | |
1772 EGL_DEPTH_SIZE, &attr_value); | |
1773 if (status == EGL_TRUE) { | |
1774 _this->gl_config.depth_size = attr_value; | |
1775 } | |
1776 status = | |
1777 eglGetConfigAttrib(phdata->egldisplay, | |
1778 wdata->gles_configs[wdata->gles_config], | |
1779 EGL_STENCIL_SIZE, &attr_value); | |
1780 if (status == EGL_TRUE) { | |
1781 _this->gl_config.stencil_size = attr_value; | |
1782 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1783 |
3139 | 1784 /* Under Photon OpenGL ES output can't be double buffered */ |
1785 _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
|
1786 |
3139 | 1787 /* Check if current device is not the same as target */ |
1788 if (phdata->current_device_id != didata->device_id) { | |
1789 /* Set target device as default for Pd and Pg functions */ | |
1790 status = PdSetTargetDevice(NULL, phdata->rid[didata->device_id]); | |
1791 if (status != 0) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1792 /* Destroy OpenGL ES surface */ |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1793 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
|
1794 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
|
1795 gf_surface_free(wdata->gfsurface); |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
1796 wdata->gfsurface=NULL; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1797 eglDestroyContext(phdata->egldisplay, wdata->gles_context); |
3139 | 1798 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
|
1799 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
|
1800 return NULL; |
3139 | 1801 } |
1802 phdata->current_device_id = didata->device_id; | |
1803 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1804 |
3139 | 1805 wdata->phsurface = PdCreateOffscreenContextGF(wdata->gfsurface); |
1806 if (wdata->phsurface == NULL) { | |
1807 /* Destroy OpenGL ES surface */ | |
1808 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
|
1809 wdata->gles_surface=EGL_NO_SURFACE; |
3139 | 1810 gf_surface_free(wdata->gfsurface); |
3399
f96615051c8c
Working on fullscreen video modes support
Mike Gorchak <lestat@i.com.ua>
parents:
3387
diff
changeset
|
1811 wdata->gfsurface=NULL; |
3139 | 1812 eglDestroyContext(phdata->egldisplay, wdata->gles_context); |
1813 wdata->gles_context = EGL_NO_CONTEXT; | |
1814 SDL_SetError("Photon: Can't bind GF surface to Photon\n"); | |
1815 return NULL; | |
1816 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1817 |
3139 | 1818 /* GL ES context was successfully created */ |
1819 return wdata->gles_context; | |
1820 #else | |
1821 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1822 return NULL; | |
1823 #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
|
1824 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1825 |
3139 | 1826 int |
1827 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
|
1828 { |
3139 | 1829 #if defined(SDL_VIDEO_OPENGL_ES) |
1830 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1831 SDL_WindowData *wdata; | |
1832 EGLBoolean status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1833 |
3139 | 1834 if (phdata->gfinitialized != SDL_TRUE) { |
1835 SDL_SetError | |
1836 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1837 return -1; | |
1838 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1839 |
3139 | 1840 if ((window == NULL) && (context == NULL)) { |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1841 /* Reset last used context and surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1842 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1843 phdata->lgles_context=EGL_NO_CONTEXT; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1844 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1845 /* Unset current context */ |
3139 | 1846 status = |
1847 eglMakeCurrent(phdata->egldisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, | |
1848 EGL_NO_CONTEXT); | |
1849 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
|
1850 /* 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
|
1851 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
|
1852 return -1; |
3139 | 1853 } |
1854 } else { | |
1855 wdata = (SDL_WindowData *) window->driverdata; | |
1856 if (wdata->gles_surface == EGL_NO_SURFACE) { | |
1857 SDL_SetError | |
1858 ("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
|
1859 return -1; |
3139 | 1860 } |
1861 if (wdata->gles_context == EGL_NO_CONTEXT) { | |
1862 SDL_SetError | |
1863 ("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
|
1864 return -1; |
3139 | 1865 } |
1866 if (wdata->gles_context != context) { | |
1867 SDL_SetError | |
1868 ("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
|
1869 return -1; |
3139 | 1870 } |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1871 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1872 /* Store last set surface and context */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1873 phdata->lgles_surface=wdata->gles_surface; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1874 phdata->lgles_context=wdata->gles_context; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1875 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1876 /* Set new current context */ |
3139 | 1877 status = |
1878 eglMakeCurrent(phdata->egldisplay, wdata->gles_surface, | |
1879 wdata->gles_surface, wdata->gles_context); | |
1880 if (status != EGL_TRUE) { | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1881 /* Reset last used context and surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1882 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1883 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
|
1884 /* 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
|
1885 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
|
1886 return -1; |
3139 | 1887 } |
1888 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1889 |
3139 | 1890 return 0; |
1891 #else | |
1892 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1893 return -1; | |
1894 #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
|
1895 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1896 |
3139 | 1897 int |
1898 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
|
1899 { |
3139 | 1900 #if defined(SDL_VIDEO_OPENGL_ES) |
1901 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1902 EGLBoolean status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1903 |
3139 | 1904 if (phdata->gfinitialized != SDL_TRUE) { |
1905 SDL_SetError | |
1906 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1907 return -1; | |
1908 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1909 |
3139 | 1910 /* Check if OpenGL ES connection has been initialized */ |
1911 if (phdata->egldisplay != EGL_NO_DISPLAY) { | |
1912 /* Set swap OpenGL ES interval */ | |
1913 status = eglSwapInterval(phdata->egldisplay, interval); | |
1914 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
|
1915 /* Return success to upper level */ |
3139 | 1916 phdata->swapinterval = interval; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1917 return 0; |
3139 | 1918 } |
1919 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1920 |
3139 | 1921 /* Failed to set swap interval */ |
1922 SDL_SetError("Photon: Cannot set swap interval"); | |
1923 return -1; | |
1924 #else | |
1925 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1926 return -1; | |
1927 #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
|
1928 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1929 |
3139 | 1930 int |
1931 photon_gl_getswapinterval(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1932 { |
3139 | 1933 #if defined(SDL_VIDEO_OPENGL_ES) |
1934 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
|
1935 |
3139 | 1936 if (phdata->gfinitialized != SDL_TRUE) { |
1937 SDL_SetError | |
1938 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1939 return -1; | |
1940 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1941 |
3139 | 1942 /* Return default swap interval value */ |
1943 return phdata->swapinterval; | |
1944 #else | |
1945 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
1946 return -1; | |
1947 #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
|
1948 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1949 |
3139 | 1950 void |
1951 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
|
1952 { |
3139 | 1953 #if defined(SDL_VIDEO_OPENGL_ES) |
1954 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
1955 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1956 SDL_DisplayData *didata = | |
1957 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1958 PhRect_t dst_rect; | |
1959 PhRect_t src_rect; | |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
1960 int32_t status; |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1961 |
3139 | 1962 if (phdata->gfinitialized != SDL_TRUE) { |
1963 SDL_SetError | |
1964 ("Photon: GF initialization failed, no OpenGL ES support"); | |
1965 return; | |
1966 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1967 |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1968 if (wdata->phsurface==NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1969 SDL_SetError |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1970 ("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
|
1971 return; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1972 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1973 |
3139 | 1974 /* Many applications do not uses glFinish(), so we call it for them */ |
1975 glFinish(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1976 |
3139 | 1977 /* Wait until OpenGL ES rendering is completed */ |
1978 eglWaitGL(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
1979 |
3139 | 1980 /* Wait for VSYNC manually, if it was enabled */ |
1981 if (phdata->swapinterval != 0) { | |
1982 /* Wait for VSYNC, we use GF function, since Photon requires */ | |
1983 /* to enter to the Direct mode to call PgWaitVSync() */ | |
1984 gf_display_wait_vsync(didata->display); | |
1985 } | |
1986 | |
1987 /* Set blit area */ | |
1988 dst_rect = *PtGetCanvas(wdata->window); | |
1989 src_rect.ul.x = 0; | |
1990 src_rect.ul.y = 0; | |
1991 src_rect.lr.x = window->w - 1; | |
1992 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
|
1993 |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
1994 /* Check if current device is not the same as target */ |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
1995 if (phdata->current_device_id != didata->device_id) { |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
1996 /* Set target device as default for Pd and Pg functions */ |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
1997 status = PdSetTargetDevice(NULL, phdata->rid[didata->device_id]); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
1998 if (status != 0) { |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
1999 SDL_SetError("Photon: Can't set default target device\n"); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2000 return; |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2001 } |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2002 phdata->current_device_id = didata->device_id; |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2003 } |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2004 |
3139 | 2005 /* Blit OpenGL ES pixmap surface directly to window region */ |
2006 PgFFlush(Ph_START_DRAW); | |
2007 PgSetRegionCx(PhDCGetCurrent(), PtWidgetRid(wdata->window)); | |
2008 PgClearTranslationCx(PgGetGCCx(PhDCGetCurrent())); | |
2009 PgContextBlit(wdata->phsurface, &src_rect, NULL, &dst_rect); | |
2010 PgFFlush(Ph_DONE_DRAW); | |
2011 PgWaitHWIdle(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2012 |
3139 | 2013 eglSwapBuffers(phdata->egldisplay, wdata->gles_surface); |
2014 #else | |
2015 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
2016 return; | |
2017 #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
|
2018 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2019 |
3139 | 2020 void |
2021 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
|
2022 { |
3139 | 2023 #if defined(SDL_VIDEO_OPENGL_ES) |
2024 SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; | |
2025 EGLBoolean status; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2026 |
3139 | 2027 if (phdata->gfinitialized != SDL_TRUE) { |
2028 SDL_SetError | |
2029 ("Photon: GF initialization failed, no OpenGL ES support"); | |
2030 return; | |
2031 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2032 |
3139 | 2033 /* Check if OpenGL ES connection has been initialized */ |
2034 if (phdata->egldisplay != EGL_NO_DISPLAY) { | |
2035 if (context != EGL_NO_CONTEXT) { | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2036 /* 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
|
2037 if (phdata->lgles_context==context) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2038 /* Release current context */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2039 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
|
2040 phdata->lgles_context=EGL_NO_CONTEXT; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2041 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2042 } |
3139 | 2043 status = eglDestroyContext(phdata->egldisplay, context); |
2044 if (status != EGL_TRUE) { | |
2045 /* Error during OpenGL ES context destroying */ | |
2046 SDL_SetError("Photon: OpenGL ES context destroy error"); | |
2047 return; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2048 } |
3139 | 2049 } |
2050 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2051 |
3139 | 2052 return; |
2053 #else | |
2054 SDL_SetError("Photon: OpenGL ES support is not compiled in"); | |
2055 return; | |
2056 #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
|
2057 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2058 |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2059 /* 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
|
2060 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
|
2061 { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2062 #if defined(SDL_VIDEO_OPENGL_ES) |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2063 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
|
2064 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
|
2065 SDL_DisplayData *didata = |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2066 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2067 SDL_bool makecurrent=SDL_FALSE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2068 int32_t gfstatus; |
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 /* Check if context has been initialized */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2071 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
|
2072 /* If no, abort surface re-creating */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2073 return -1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2074 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2075 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2076 /* 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
|
2077 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
|
2078 makecurrent=SDL_TRUE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2079 /* Flush all current drawings */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2080 glFinish(); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2081 /* 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
|
2082 eglWaitGL(); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2083 /* Release current context */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2084 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
|
2085 phdata->lgles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2086 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2087 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2088 /* 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
|
2089 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
|
2090 /* Destroy photon handle to GF surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2091 if (wdata->phsurface != NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2092 PhDCRelease(wdata->phsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2093 wdata->phsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2094 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2095 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2096 /* Destroy previous surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2097 eglDestroySurface(phdata->egldisplay, wdata->gles_surface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2098 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2099 /* Set surface to uninitialized */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2100 wdata->gles_surface = EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2101 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2102 if (wdata->gfsurface!=NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2103 gf_surface_free(wdata->gfsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2104 wdata->gfsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2105 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2106 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2107 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2108 /* Create new GF surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2109 gfstatus = |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2110 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
|
2111 height, |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2112 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
|
2113 format), NULL, |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2114 GF_SURFACE_CREATE_2D_ACCESSIBLE | |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2115 GF_SURFACE_CREATE_3D_ACCESSIBLE | |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2116 GF_SURFACE_CREATE_SHAREABLE); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2117 if (gfstatus != GF_ERR_OK) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2118 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
|
2119 return -1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2120 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2121 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2122 /* Create new pixmap 3D target surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2123 wdata->gles_surface = |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2124 eglCreatePixmapSurface(phdata->egldisplay, |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2125 wdata->gles_configs[wdata->gles_config], |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2126 wdata->gfsurface, NULL); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2127 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
|
2128 gf_surface_free(wdata->gfsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2129 wdata->gfsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2130 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
|
2131 return -1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2132 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2133 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2134 wdata->phsurface = PdCreateOffscreenContextGF(wdata->gfsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2135 if (wdata->phsurface == NULL) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2136 /* Destroy OpenGL ES surface */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2137 eglDestroySurface(phdata->egldisplay, wdata->gles_surface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2138 wdata->gles_surface=EGL_NO_SURFACE; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2139 gf_surface_free(wdata->gfsurface); |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2140 wdata->gfsurface=NULL; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2141 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
|
2142 return -1; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2143 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2144 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2145 /* 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
|
2146 if (makecurrent == SDL_TRUE) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2147 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
|
2148 } else { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2149 return 0; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2150 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2151 #else |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2152 /* 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
|
2153 return 0; |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2154 #endif /* SDL_VIDEO_OPENGL_ES */ |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2155 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2156 |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2157 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2158 /* SDL Event handling function */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2159 /*****************************************************************************/ |
3139 | 2160 void |
2161 photon_pumpevents(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2162 { |
3139 | 2163 uint8_t eventbuffer[SDL_VIDEO_PHOTON_EVENT_SIZE]; |
2164 PhEvent_t *event = (PhEvent_t *) eventbuffer; | |
2165 int32_t status; | |
2166 uint32_t finish = 0; | |
2167 uint32_t it; | |
2168 SDL_Window *window; | |
2169 SDL_WindowData *wdata; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2170 |
3139 | 2171 do { |
2172 status = PhEventPeek(event, SDL_VIDEO_PHOTON_EVENT_SIZE); | |
2173 switch (status) { | |
2174 case Ph_RESIZE_MSG: | |
2175 { | |
2176 SDL_SetError("Photon: Event size too much for buffer"); | |
2177 return; | |
2178 } | |
2179 break; | |
2180 case Ph_EVENT_MSG: | |
2181 { | |
2182 /* Find a window, to which this handle destinated */ | |
2183 status = 0; | |
2184 for (it = 0; it < SDL_CurrentDisplay.num_windows; it++) { | |
2185 wdata = | |
2186 (SDL_WindowData *) SDL_CurrentDisplay.windows[it]. | |
2187 driverdata; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2188 |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2189 /* Find the proper window */ |
3139 | 2190 if (wdata->window != NULL) { |
2191 if (PtWidgetRid(wdata->window) == | |
2192 event->collector.rid) { | |
2193 window = | |
2194 (SDL_Window *) & SDL_CurrentDisplay. | |
2195 windows[it]; | |
2196 status = 1; | |
2197 break; | |
2198 } | |
2199 } else { | |
2200 continue; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2201 } |
3139 | 2202 } |
2203 if (status == 0) { | |
2204 window = NULL; | |
2205 wdata = NULL; | |
2206 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2207 |
3139 | 2208 /* Event is ready */ |
2209 switch (event->type) { | |
2210 case Ph_EV_BOUNDARY: | |
2211 { | |
2212 switch (event->subtype) { | |
2213 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
|
2214 { |
3139 | 2215 /* Mouse cursor over handled window */ |
2216 if (window != NULL) { | |
2217 SDL_SendWindowEvent(window->id, | |
2218 SDL_WINDOWEVENT_ENTER, | |
2219 0, 0); | |
2220 SDL_SetMouseFocus(0, window->id); | |
2221 } | |
2222 } | |
2223 break; | |
2224 case Ph_EV_PTR_LEAVE: | |
2225 { | |
2226 /* Mouse cursor out of handled window */ | |
2227 if (window != NULL) { | |
2228 SDL_SendWindowEvent(window->id, | |
2229 SDL_WINDOWEVENT_LEAVE, | |
2230 0, 0); | |
2231 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2232 } |
3139 | 2233 break; |
2234 } | |
2235 } | |
2236 break; | |
2237 case Ph_EV_PTR_MOTION_BUTTON: | |
2238 case Ph_EV_PTR_MOTION_NOBUTTON: | |
2239 { | |
2240 PhPointerEvent_t *pevent = NULL; | |
2241 PhRect_t *prects = NULL; | |
2242 | |
2243 /* Get event data */ | |
2244 pevent = PhGetData(event); | |
2245 /* Get associated event rectangles */ | |
2246 prects = PhGetRects(event); | |
2247 if ((pevent != NULL) && (prects != NULL)) { | |
2248 SDL_SendMouseMotion(0, 0, prects->ul.x, | |
2249 prects->ul.y, 0); | |
2250 } | |
2251 } | |
2252 break; | |
2253 case Ph_EV_BUT_PRESS: | |
2254 { | |
2255 /* Button press event */ | |
2256 PhPointerEvent_t *pevent = NULL; | |
2257 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
|
2258 |
3139 | 2259 /* Get event data */ |
2260 pevent = PhGetData(event); | |
2261 if (pevent != NULL) { | |
2262 for (it = 0; it < sizeof(pevent->buttons) * 8; | |
2263 it++) { | |
2264 if ((pevent->buttons & (0x0001 << it)) == | |
2265 (0x0001 << it)) { | |
2266 switch (it) { | |
2267 case 0: | |
2268 { | |
2269 sdlbutton = SDL_BUTTON_RIGHT; | |
2270 } | |
2271 break; | |
2272 case 1: | |
2273 { | |
2274 sdlbutton = SDL_BUTTON_MIDDLE; | |
2275 } | |
2276 break; | |
2277 case 2: | |
2278 { | |
2279 sdlbutton = SDL_BUTTON_LEFT; | |
2280 } | |
2281 break; | |
2282 default: | |
2283 { | |
2284 sdlbutton = it + 1; | |
2285 } | |
2286 break; | |
2287 } | |
2288 SDL_SendMouseButton(0, SDL_PRESSED, | |
2289 sdlbutton); | |
2290 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2291 } |
3139 | 2292 } |
2293 } | |
2294 break; | |
2295 case Ph_EV_BUT_RELEASE: | |
2296 { | |
2297 /* Button press event */ | |
2298 PhPointerEvent_t *pevent = NULL; | |
2299 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
|
2300 |
3139 | 2301 /* Get event data */ |
2302 pevent = PhGetData(event); | |
2303 if (pevent != NULL) { | |
2304 for (it = 0; it < sizeof(pevent->buttons) * 8; | |
2305 it++) { | |
2306 if ((pevent->buttons & (0x0001 << it)) == | |
2307 (0x0001 << it)) { | |
2308 switch (it) { | |
2309 case 0: | |
2310 { | |
2311 sdlbutton = SDL_BUTTON_RIGHT; | |
2312 } | |
2313 break; | |
2314 case 1: | |
2315 { | |
2316 sdlbutton = SDL_BUTTON_MIDDLE; | |
2317 } | |
2318 break; | |
2319 case 2: | |
2320 { | |
2321 sdlbutton = SDL_BUTTON_LEFT; | |
2322 } | |
2323 break; | |
2324 default: | |
2325 { | |
2326 sdlbutton = it + 1; | |
2327 } | |
2328 break; | |
2329 } | |
2330 } | |
2331 } | |
2332 } | |
2333 | |
2334 switch (event->subtype) { | |
2335 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
|
2336 { |
3139 | 2337 /* Real release button event */ |
2338 SDL_SendMouseButton(0, SDL_RELEASED, | |
2339 sdlbutton); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2340 } |
3139 | 2341 break; |
2342 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
|
2343 { |
3139 | 2344 /* We will get phantom button release */ |
2345 /* event in case if it was unpressed */ | |
2346 /* outside of window */ | |
2347 if (window != NULL) { | |
2348 if ((window-> | |
2349 flags & SDL_WINDOW_MOUSE_FOCUS) != | |
2350 SDL_WINDOW_MOUSE_FOCUS) { | |
2351 /* Send phantom button release */ | |
2352 SDL_SendMouseButton(0, SDL_RELEASED, | |
2353 sdlbutton); | |
2354 } | |
2355 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2356 } |
3139 | 2357 break; |
2358 } | |
2359 } | |
2360 break; | |
2361 case Ph_EV_EXPOSE: | |
2362 { | |
2363 switch (event->subtype) { | |
2364 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
|
2365 { |
3139 | 2366 PhRect_t *rects = NULL; |
2367 | |
2368 /* Get array of rectangles to be updated */ | |
2369 rects = PhGetRects(event); | |
2370 if (rects == NULL) { | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2371 break; |
3139 | 2372 } |
2373 | |
2374 /* Check if expose come to one of the our windows */ | |
2375 if ((wdata != NULL) && (window != NULL)) { | |
2376 /* Check if window uses OpenGL ES */ | |
2377 if (wdata->uses_gles == SDL_TRUE) { | |
2378 /* Cycle through each rectangle */ | |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2379 for (it = 0; it < event->num_rects; it++) { |
3139 | 2380 /* Blit OpenGL ES pixmap surface directly to window region */ |
2381 PgFFlush(Ph_START_DRAW); | |
2382 PgSetRegionCx(PhDCGetCurrent(), | |
2383 PtWidgetRid(wdata-> | |
2384 window)); | |
2385 PgClearTranslationCx(PgGetGCCx | |
2386 (PhDCGetCurrent | |
2387 ())); | |
2388 PgContextBlit(wdata->phsurface, | |
2389 &rects[it], NULL, | |
2390 &rects[it]); | |
2391 PgFFlush(Ph_DONE_DRAW); | |
2392 PgWaitHWIdle(); | |
2393 } | |
2394 } else { | |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2395 /* Cycle through each rectangle */ |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2396 for (it = 0; it < event->num_rects; |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2397 it++) { |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2398 /* Blit 2D pixmap surface directly to window region */ |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2399 _photon_update_rectangles(window->renderer, &rects[it]); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2400 } |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2401 PgFlush(); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2402 PgWaitHWIdle(); |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2403 } |
3139 | 2404 } |
2405 | |
2406 /* Flush all blittings */ | |
2407 PgFlush(); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2408 } |
3139 | 2409 break; |
2410 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
|
2411 { |
3139 | 2412 /* Check if expose come to one of the our windows */ |
2413 if ((wdata != NULL) && (window != NULL)) { | |
2414 /* Check if window uses OpenGL ES */ | |
2415 if (wdata->uses_gles == SDL_TRUE) { | |
2416 PhRect_t dst_rect; | |
2417 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
|
2418 |
3139 | 2419 /* Set blit area */ |
2420 dst_rect = | |
2421 *PtGetCanvas(wdata->window); | |
2422 src_rect.ul.x = 0; | |
2423 src_rect.ul.y = 0; | |
2424 src_rect.lr.x = window->w - 1; | |
2425 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
|
2426 |
3139 | 2427 /* We need to redraw entire window */ |
2428 PgFFlush(Ph_START_DRAW); | |
2429 PgSetRegionCx(PhDCGetCurrent(), | |
2430 PtWidgetRid(wdata-> | |
2431 window)); | |
2432 PgClearTranslationCx(PgGetGCCx | |
2433 (PhDCGetCurrent | |
2434 ())); | |
2435 PgContextBlit(wdata->phsurface, | |
2436 &src_rect, NULL, | |
2437 &dst_rect); | |
2438 PgFFlush(Ph_DONE_DRAW); | |
2439 PgWaitHWIdle(); | |
2440 } else { | |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2441 PhRect_t rect; |
3115
1102a3305928
Added handler for all window events.
Mike Gorchak <lestat@i.com.ua>
parents:
3108
diff
changeset
|
2442 |
3139 | 2443 /* We need to redraw entire window */ |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2444 rect.ul.x = 0; |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2445 rect.ul.y = 0; |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2446 rect.lr.x = window->w - 1; |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2447 rect.lr.y = window->h - 1; |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2448 |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2449 /* Blit 2D pixmap surface directly to window region */ |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2450 PgFFlush(Ph_START_DRAW); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2451 _photon_update_rectangles(window->renderer, &rect); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2452 PgFFlush(Ph_DONE_DRAW); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2453 PgWaitHWIdle(); |
3139 | 2454 } |
2455 } | |
2456 } | |
2457 break; | |
2458 case Ph_GRAPHIC_EXPOSE: | |
2459 { | |
2460 /* TODO: What this event means ? */ | |
2461 } | |
2462 break; | |
2463 } | |
2464 } | |
2465 break; | |
2466 case Ph_EV_INFO: | |
2467 { | |
3387
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2468 switch (event->subtype) |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2469 { |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2470 case Ph_OFFSCREEN_INVALID: |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2471 { |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2472 uint32_t* type; |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2473 |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2474 type = PhGetData(event); |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2475 switch (*type) |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2476 { |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2477 case Pg_VIDEO_MODE_SWITCHED: |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2478 case Pg_ENTERED_DIRECT: |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2479 case Pg_EXITED_DIRECT: |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2480 case Pg_DRIVER_STARTED: |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2481 { |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2482 /* TODO: */ |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2483 /* We must tell the renderer, that it have */ |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2484 /* to recreate all surfaces */ |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2485 } |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2486 break; |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2487 default: |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2488 { |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2489 } |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2490 break; |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2491 } |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2492 } |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2493 break; |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2494 default: |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2495 break; |
05499ec8c022
Initial support for fullscreen application modes.
Mike Gorchak <lestat@i.com.ua>
parents:
3386
diff
changeset
|
2496 } |
3139 | 2497 } |
2498 break; | |
2499 case Ph_EV_KEY: | |
2500 { | |
2501 PhKeyEvent_t *keyevent = NULL; | |
2502 SDL_scancode scancode = SDL_SCANCODE_UNKNOWN; | |
2503 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
|
2504 |
3139 | 2505 keyevent = PhGetData(event); |
2506 if (keyevent == NULL) { | |
2507 break; | |
2508 } | |
2509 | |
2510 /* Check if key is repeated */ | |
2511 if ((keyevent->key_flags & Pk_KF_Key_Repeat) == | |
2512 Pk_KF_Key_Repeat) { | |
2513 /* Ignore such events */ | |
2514 break; | |
2515 } | |
2516 | |
2517 /* Check if key has its own scancode */ | |
2518 if ((keyevent->key_flags & Pk_KF_Scan_Valid) == | |
2519 Pk_KF_Scan_Valid) { | |
2520 if ((keyevent->key_flags & Pk_KF_Key_Down) == | |
2521 Pk_KF_Key_Down) { | |
2522 pressed = SDL_TRUE; | |
2523 } else { | |
2524 pressed = SDL_FALSE; | |
2525 } | |
2526 scancode = | |
2527 photon_to_sdl_keymap(keyevent->key_scan); | |
2528 | |
2529 /* Add details for the pressed key */ | |
2530 if ((keyevent->key_flags & Pk_KF_Cap_Valid) == | |
2531 Pk_KF_Cap_Valid) { | |
2532 switch (keyevent->key_cap) { | |
2533 case Pk_Hyper_R: /* Right windows flag key */ | |
2534 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
|
2535 break; |
3139 | 2536 case Pk_Control_R: /* Right Ctrl key */ |
2537 scancode = SDL_SCANCODE_RCTRL; | |
2538 break; | |
2539 case Pk_Alt_R: /* Right Alt key */ | |
2540 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
|
2541 break; |
3139 | 2542 case Pk_Up: /* Up key but with invalid scan */ |
2543 if (scancode != SDL_SCANCODE_UP) { | |
2544 /* This is a mouse wheel event */ | |
2545 SDL_SendMouseWheel(0, 0, 1); | |
2546 return; | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2547 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2548 break; |
3139 | 2549 case Pk_KP_8: /* Up arrow or 8 on keypad */ |
2550 scancode = SDL_SCANCODE_KP_8; | |
2551 break; | |
2552 case Pk_Down: /* Down key but with invalid scan */ | |
2553 if (scancode != SDL_SCANCODE_DOWN) { | |
2554 /* This is a mouse wheel event */ | |
2555 SDL_SendMouseWheel(0, 0, -1); | |
2556 return; | |
2557 } | |
2558 break; | |
2559 case Pk_KP_2: /* Down arrow or 2 on keypad */ | |
2560 scancode = SDL_SCANCODE_KP_2; | |
2561 break; | |
2562 case Pk_Left: /* Left arrow key */ | |
2563 scancode = SDL_SCANCODE_LEFT; | |
2564 break; | |
2565 case Pk_KP_4: /* Left arrow or 4 on keypad */ | |
2566 scancode = SDL_SCANCODE_KP_4; | |
2567 break; | |
2568 case Pk_Right: /* Right arrow key */ | |
2569 scancode = SDL_SCANCODE_RIGHT; | |
2570 break; | |
2571 case Pk_KP_6: /* Right arrow or 6 on keypad */ | |
2572 scancode = SDL_SCANCODE_KP_6; | |
2573 break; | |
2574 case Pk_Insert: /* Insert key */ | |
2575 scancode = SDL_SCANCODE_INSERT; | |
2576 break; | |
2577 case Pk_KP_0: /* Insert or 0 on keypad */ | |
2578 scancode = SDL_SCANCODE_KP_0; | |
2579 break; | |
2580 case Pk_Home: /* Home key */ | |
2581 scancode = SDL_SCANCODE_HOME; | |
2582 break; | |
2583 case Pk_KP_7: /* Home or 7 on keypad */ | |
2584 scancode = SDL_SCANCODE_KP_7; | |
2585 break; | |
2586 case Pk_Pg_Up: /* PageUp key */ | |
2587 scancode = SDL_SCANCODE_PAGEUP; | |
2588 break; | |
2589 case Pk_KP_9: /* PgUp or 9 on keypad */ | |
2590 scancode = SDL_SCANCODE_KP_9; | |
2591 break; | |
2592 case Pk_Delete: /* Delete key */ | |
2593 scancode = SDL_SCANCODE_DELETE; | |
2594 break; | |
2595 case Pk_KP_Decimal: /* Del or . on keypad */ | |
2596 scancode = SDL_SCANCODE_KP_PERIOD; | |
2597 break; | |
2598 case Pk_End: /* End key */ | |
2599 scancode = SDL_SCANCODE_END; | |
2600 break; | |
2601 case Pk_KP_1: /* End or 1 on keypad */ | |
2602 scancode = SDL_SCANCODE_KP_1; | |
2603 break; | |
2604 case Pk_Pg_Down: /* PageDown key */ | |
2605 scancode = SDL_SCANCODE_PAGEDOWN; | |
2606 break; | |
2607 case Pk_KP_3: /* PgDn or 3 on keypad */ | |
2608 scancode = SDL_SCANCODE_KP_3; | |
2609 break; | |
2610 case Pk_KP_5: /* 5 on keypad */ | |
2611 scancode = SDL_SCANCODE_KP_5; | |
2612 break; | |
2613 case Pk_KP_Enter: | |
2614 scancode = SDL_SCANCODE_KP_ENTER; | |
2615 break; | |
2616 case Pk_KP_Add: | |
2617 scancode = SDL_SCANCODE_KP_PLUS; | |
2618 break; | |
2619 case Pk_KP_Subtract: | |
2620 scancode = SDL_SCANCODE_KP_MINUS; | |
2621 break; | |
2622 case Pk_KP_Multiply: | |
2623 scancode = SDL_SCANCODE_KP_MULTIPLY; | |
2624 break; | |
2625 case Pk_KP_Divide: | |
2626 scancode = SDL_SCANCODE_KP_DIVIDE; | |
2627 break; | |
2628 case Pk_Pause: | |
2629 scancode = SDL_SCANCODE_PAUSE; | |
2630 break; | |
2631 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2632 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2633 |
3139 | 2634 /* Finally check if scancode has been decoded */ |
2635 if (scancode == SDL_SCANCODE_UNKNOWN) { | |
2636 /* Something was pressed, which is not supported */ | |
2637 break; | |
2638 } | |
2639 | |
2640 /* Report pressed/released key to SDL */ | |
2641 if (pressed == SDL_TRUE) { | |
2642 SDL_SendKeyboardKey(0, SDL_PRESSED, scancode); | |
2643 } else { | |
2644 SDL_SendKeyboardKey(0, SDL_RELEASED, | |
2645 scancode); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2646 } |
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2647 |
3139 | 2648 /* Photon doesn't send a release event for PrnScr key */ |
2649 if ((scancode == SDL_SCANCODE_PRINTSCREEN) | |
2650 && (pressed)) { | |
2651 SDL_SendKeyboardKey(0, SDL_RELEASED, | |
2652 scancode); | |
2653 } | |
2654 } | |
2655 } | |
2656 break; | |
2657 case Ph_EV_SERVICE: | |
2658 { | |
2659 } | |
2660 break; | |
2661 case Ph_EV_SYSTEM: | |
2662 { | |
2663 } | |
2664 break; | |
2665 case Ph_EV_WM: | |
2666 { | |
2667 PhWindowEvent_t *wmevent = NULL; | |
2668 | |
2669 /* Get associated event data */ | |
2670 wmevent = PhGetData(event); | |
2671 if (wmevent == NULL) { | |
2672 break; | |
2673 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2674 |
3139 | 2675 switch (wmevent->event_f) { |
2676 case Ph_WM_CLOSE: | |
2677 { | |
2678 if (window != NULL) { | |
2679 SDL_SendWindowEvent(window->id, | |
2680 SDL_WINDOWEVENT_CLOSE, | |
2681 0, 0); | |
2682 } | |
2683 } | |
2684 break; | |
2685 case Ph_WM_FOCUS: | |
2686 { | |
2687 if (wmevent->event_state == | |
2688 Ph_WM_EVSTATE_FOCUS) { | |
2689 if (window != NULL) { | |
2690 PhRegion_t wregion; | |
2691 | |
2692 SDL_SendWindowEvent(window->id, | |
2693 SDL_WINDOWEVENT_FOCUS_GAINED, | |
2694 0, 0); | |
2695 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
|
2696 |
3139 | 2697 /* Set window region sensible to mouse motion events */ |
2698 PhRegionQuery(PtWidgetRid | |
2699 (wdata->window), | |
2700 &wregion, NULL, NULL, | |
2701 0); | |
2702 wregion.events_sense |= | |
2703 Ph_EV_PTR_MOTION_BUTTON | | |
2704 Ph_EV_PTR_MOTION_NOBUTTON; | |
2705 PhRegionChange(Ph_REGION_EV_SENSE, 0, | |
2706 &wregion, NULL, NULL); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2707 |
3139 | 2708 /* If window got a focus, the it is visible */ |
2709 SDL_SendWindowEvent(window->id, | |
2710 SDL_WINDOWEVENT_SHOWN, | |
2711 0, 0); | |
2712 } | |
2713 } | |
2714 if (wmevent->event_state == | |
2715 Ph_WM_EVSTATE_FOCUSLOST) { | |
2716 if (window != NULL) { | |
2717 PhRegion_t wregion; | |
2718 | |
2719 SDL_SendWindowEvent(window->id, | |
2720 SDL_WINDOWEVENT_FOCUS_LOST, | |
2721 0, 0); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2722 |
3139 | 2723 /* Set window region ignore mouse motion events */ |
2724 PhRegionQuery(PtWidgetRid | |
2725 (wdata->window), | |
2726 &wregion, NULL, NULL, | |
2727 0); | |
2728 wregion.events_sense &= | |
2729 ~(Ph_EV_PTR_MOTION_BUTTON | | |
2730 Ph_EV_PTR_MOTION_NOBUTTON); | |
2731 PhRegionChange(Ph_REGION_EV_SENSE, 0, | |
2732 &wregion, NULL, NULL); | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2733 } |
3139 | 2734 } |
2735 } | |
2736 break; | |
2737 case Ph_WM_MOVE: | |
2738 { | |
2739 if (window != NULL) { | |
2740 SDL_SendWindowEvent(window->id, | |
2741 SDL_WINDOWEVENT_MOVED, | |
2742 wmevent->pos.x, | |
2743 wmevent->pos.y); | |
2744 } | |
2745 } | |
2746 break; | |
2747 case Ph_WM_RESIZE: | |
2748 { | |
2749 if (window != NULL) { | |
2750 /* Set new window position after resize */ | |
2751 SDL_SendWindowEvent(window->id, | |
2752 SDL_WINDOWEVENT_MOVED, | |
2753 wmevent->pos.x, | |
2754 wmevent->pos.y); | |
3193
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2755 |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2756 /* 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
|
2757 if (wdata->uses_gles == SDL_TRUE) { |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2758 /* 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
|
2759 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
|
2760 } |
64e4442676a6
Fixed problems with OpenGL ES window resizing.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
2761 |
3139 | 2762 /* Set new window size after resize */ |
2763 SDL_SendWindowEvent(window->id, | |
2764 SDL_WINDOWEVENT_RESIZED, | |
2765 wmevent->size.w, | |
2766 wmevent->size.h); | |
2767 } | |
2768 } | |
2769 break; | |
2770 case Ph_WM_HIDE: | |
2771 { | |
2772 if (window != NULL) { | |
2773 /* Send new window state: minimized */ | |
2774 SDL_SendWindowEvent(window->id, | |
2775 SDL_WINDOWEVENT_MINIMIZED, | |
2776 0, 0); | |
2777 /* In case window is minimized, then it is hidden */ | |
2778 SDL_SendWindowEvent(window->id, | |
2779 SDL_WINDOWEVENT_HIDDEN, | |
2780 0, 0); | |
2781 } | |
3108
aa1897bee1e9
Continue working on QNX Photon with OpenGL ES support
Mike Gorchak <lestat@i.com.ua>
parents:
3092
diff
changeset
|
2782 } |
3139 | 2783 break; |
2784 case Ph_WM_MAX: | |
2785 { | |
2786 if (window != NULL) { | |
3375
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2787 if ((window->flags & SDL_WINDOW_RESIZABLE)==SDL_WINDOW_RESIZABLE) |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2788 { |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2789 SDL_SendWindowEvent(window->id, |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2790 SDL_WINDOWEVENT_MAXIMIZED, |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2791 0, 0); |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2792 } |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2793 else |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2794 { |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2795 /* otherwise ignor the resize events */ |
dd105b317335
Continue working on 2D support for Photon/QNX.
Mike Gorchak <lestat@i.com.ua>
parents:
3193
diff
changeset
|
2796 } |
3139 | 2797 } |
2798 } | |
2799 break; | |
2800 case Ph_WM_RESTORE: | |
2801 { | |
2802 if (window != NULL) { | |
2803 SDL_SendWindowEvent(window->id, | |
2804 SDL_WINDOWEVENT_RESTORED, | |
2805 0, 0); | |
2806 } | |
2807 } | |
2808 break; | |
2809 } | |
2810 } | |
2811 break; | |
2812 } | |
2813 PtEventHandler(event); | |
2814 } | |
2815 break; | |
2816 case 0: | |
2817 { | |
2818 /* All events are read */ | |
2819 finish = 1; | |
2820 break; | |
2821 } | |
2822 case -1: | |
2823 { | |
2824 /* Error occured in event reading */ | |
2825 SDL_SetError("Photon: Can't read event"); | |
2826 return; | |
2827 } | |
2828 break; | |
2829 } | |
2830 if (finish != 0) { | |
2831 break; | |
2832 } | |
2833 } while (1); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2834 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2835 |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2836 /*****************************************************************************/ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2837 /* SDL screen saver related functions */ |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2838 /*****************************************************************************/ |
3139 | 2839 void |
2840 photon_suspendscreensaver(_THIS) | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2841 { |
3139 | 2842 /* There is no screensaver in pure console, it may exist when running */ |
2843 /* 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
|
2844 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
2845 |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2846 /* vi: set ts=4 sw=4 expandtab: */ |