Mercurial > sdl-ios-xcode
annotate src/video/qnxgf/SDL_qnxgf.c @ 3461:87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
author | Mike Gorchak <lestat@i.com.ua> |
---|---|
date | Fri, 20 Nov 2009 07:06:50 +0000 |
parents | fe9c8a5cab51 |
children | 4b594623401b |
rev | line source |
---|---|
3083
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 Copyright (C) 1997-2009 Sam Lantinga |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +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 Graphics Framework 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) |
3083
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 */ |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 #include "SDL_config.h" |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include "../SDL_sysvideo.h" |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
30 #include "SDL_version.h" |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
31 #include "SDL_syswm.h" |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
32 #include "SDL_loadso.h" |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
33 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
34 /* Include QNX Graphics Framework declarations */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
35 #include <gf/gf.h> |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
36 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
37 #include "SDL_qnxgf.h" |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
38 #include "SDL_gf_render.h" |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
39 #include "SDL_gf_pixelfmt.h" |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
40 #include "SDL_gf_opengles.h" |
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
41 #include "SDL_gf_input.h" |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
42 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
43 /******************************************************************************/ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
44 /* SDL Generic video modes, which could provide GF */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
45 /* This is real pain in the ass. GF is just wrapper around a selected driver */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
46 /* some drivers could support double scan modes, like 320x200, 512x384, etc */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
47 /* but some drivers are not. Later we can distinguish one driver from another */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
48 /* Feel free to add any new custom graphics mode */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
49 /******************************************************************************/ |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
50 static const SDL_DisplayMode generic_mode[] = { |
3139 | 51 {0, 320, 200, 70, NULL}, /* 320x200 modes are 70Hz and 85Hz */ |
52 {0, 320, 200, 85, NULL}, | |
53 {0, 320, 240, 70, NULL}, /* 320x240 modes are 70Hz and 85Hz */ | |
54 {0, 320, 240, 85, NULL}, | |
55 {0, 400, 300, 60, NULL}, /* 400x300 mode is 60Hz only */ | |
56 {0, 480, 360, 60, NULL}, /* 480x360 mode is 60Hz only */ | |
57 {0, 512, 384, 60, NULL}, /* 512x384 modes are 60Hz and 70Hz */ | |
58 {0, 512, 384, 70, NULL}, | |
59 {0, 640, 480, 60, NULL}, /* 640x480 modes are 60Hz, 75Hz, 85Hz */ | |
60 {0, 640, 480, 75, NULL}, | |
61 {0, 640, 480, 85, NULL}, | |
62 {0, 800, 600, 60, NULL}, /* 800x600 modes are 60Hz, 75Hz, 85Hz */ | |
63 {0, 800, 600, 75, NULL}, | |
64 {0, 800, 600, 85, NULL}, | |
65 {0, 800, 480, 60, NULL}, /* 800x480 mode is 60Hz only */ | |
66 {0, 848, 480, 60, NULL}, /* 848x480 mode is 60Hz only */ | |
67 {0, 960, 600, 60, NULL}, /* 960x600 mode is 60Hz only */ | |
68 {0, 1024, 640, 60, NULL}, /* 1024x640 mode is 60Hz only */ | |
69 {0, 1024, 768, 60, NULL}, /* 1024x768 modes are 60Hz, 70Hz, 75Hz */ | |
70 {0, 1024, 768, 70, NULL}, | |
71 {0, 1024, 768, 75, NULL}, | |
72 {0, 1088, 612, 60, NULL}, /* 1088x612 mode is 60Hz only */ | |
73 {0, 1152, 864, 60, NULL}, /* 1152x864 modes are 60Hz, 70Hz, 72Hz */ | |
74 {0, 1152, 864, 70, NULL}, /* 75Hz and 85Hz */ | |
75 {0, 1152, 864, 72, NULL}, | |
76 {0, 1152, 864, 75, NULL}, | |
77 {0, 1152, 864, 85, NULL}, | |
78 {0, 1280, 720, 60, NULL}, /* 1280x720 mode is 60Hz only */ | |
79 {0, 1280, 768, 60, NULL}, /* 1280x768 mode is 60Hz only */ | |
80 {0, 1280, 800, 60, NULL}, /* 1280x800 mode is 60Hz only */ | |
81 {0, 1280, 960, 60, NULL}, /* 1280x960 mode is 60Hz only */ | |
82 {0, 1280, 1024, 60, NULL}, /* 1280x1024 modes are 60Hz, 75Hz, 85Hz and */ | |
83 {0, 1280, 1024, 75, NULL}, /* 100 Hz */ | |
84 {0, 1280, 1024, 85, NULL}, /* */ | |
85 {0, 1280, 1024, 100, NULL}, /* */ | |
86 {0, 1360, 768, 60, NULL}, /* 1360x768 mode is 60Hz only */ | |
87 {0, 1400, 1050, 60, NULL}, /* 1400x1050 mode is 60Hz only */ | |
88 {0, 1440, 900, 60, NULL}, /* 1440x900 mode is 60Hz only */ | |
89 {0, 1440, 960, 60, NULL}, /* 1440x960 mode is 60Hz only */ | |
90 {0, 1600, 900, 60, NULL}, /* 1600x900 mode is 60Hz only */ | |
91 {0, 1600, 1024, 60, NULL}, /* 1600x1024 mode is 60Hz only */ | |
92 {0, 1600, 1200, 60, NULL}, /* 1600x1200 mode is 60Hz only */ | |
93 {0, 1680, 1050, 60, NULL}, /* 1680x1050 mode is 60Hz only */ | |
94 {0, 1920, 1080, 60, NULL}, /* 1920x1080 mode is 60Hz only */ | |
95 {0, 1920, 1200, 60, NULL}, /* 1920x1200 mode is 60Hz only */ | |
96 {0, 1920, 1440, 60, NULL}, /* 1920x1440 mode is 60Hz only */ | |
97 {0, 2048, 1536, 60, NULL}, /* 2048x1536 mode is 60Hz only */ | |
98 {0, 2048, 1080, 60, NULL}, /* 2048x1080 mode is 60Hz only */ | |
99 {0, 0, 0, 0, NULL} /* End of generic mode list */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
100 }; |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
101 |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
102 /* 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
|
103 static const GF_DeviceCaps gf_devicename[] = { |
3139 | 104 /* ATI Rage 128 graphics driver (devg-ati_rage128) */ |
105 {"ati_rage128", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
106 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
107 /* Fujitsu Carmine graphics driver (devg-carmine.so) */ | |
108 {"carmine", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
109 SDL_GF_ACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
110 /* C&T graphics driver (devg-chips.so) */ | |
111 {"chips", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
112 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
113 /* Fujitsu Coral graphics driver (devg-coral.so) */ | |
114 {"coral", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
115 SDL_GF_ACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
116 /* Intel integrated graphics driver (devg-extreme2.so) */ | |
117 {"extreme2", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
118 SDL_GF_ACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
119 /* Unaccelerated FB driver (devg-flat.so) */ | |
120 {"flat", SDL_GF_UNACCELERATED | SDL_GF_LOWRESOLUTION | | |
121 SDL_GF_UNACCELERATED_3D | SDL_GF_NOVIDEOMEMORY}, | |
122 /* NS Geode graphics driver (devg-geode.so) */ | |
123 {"geode", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
124 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
125 /* Geode LX graphics driver (devg-geodelx.so) */ | |
126 {"geodelx", SDL_GF_ACCELERATED | SDL_GF_LOWRESOLUTION | | |
127 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
128 /* Intel integrated graphics driver (devg-gma9xx.so) */ | |
129 {"gma", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
130 SDL_GF_ACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
131 /* Intel integrated graphics driver (devg-i810.so) */ | |
132 {"i810", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
133 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
134 /* Intel integrated graphics driver (devg-i830.so) */ | |
135 {"i830", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
136 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
137 /* Geode LX graphics driver (devg-lx800.so) */ | |
138 {"lx800", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
139 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
140 /* Matrox Gxx graphics driver (devg-matroxg.so) */ | |
141 {"matroxg", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
142 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
143 /* Intel Poulsbo graphics driver (devg-poulsbo.so) */ | |
144 {"poulsbo", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
145 SDL_GF_ACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
146 /* ATI Radeon driver (devg-radeon.so) */ | |
147 {"radeon", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
148 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
149 /* ATI Rage driver (devg-rage.so) */ | |
150 {"rage", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
151 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
152 /* S3 Savage graphics driver (devg-s3_savage.so) */ | |
153 {"s3_savage", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
154 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
155 /* SiS630 integrated graphics driver (devg-sis630.so) */ | |
156 {"sis630", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
157 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
158 /* PowerVR SGX 535 graphics driver (devg-poulsbo.so) */ | |
159 {"sgx", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
160 SDL_GF_ACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
161 /* SM Voyager GX graphics driver (devg-smi5xx.so) */ | |
162 {"smi5xx", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
163 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
164 /* Silicon Motion graphics driver (devg-smi7xx.so) */ | |
165 {"smi7xx", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
166 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
167 /* SVGA unaccelerated gfx driver (devg-svga.so) */ | |
168 {"svga", SDL_GF_UNACCELERATED | SDL_GF_LOWRESOLUTION | | |
169 SDL_GF_UNACCELERATED_3D | SDL_GF_NOVIDEOMEMORY}, | |
170 /* nVidia TNT graphics driver (devg-tnt.so) */ | |
171 {"tnt", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
172 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
173 /* VIA integrated graphics driver (devg-tvia.so) */ | |
174 {"tvia", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
175 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
176 /* VIA UniChrome graphics driver (devg-unichrome.so) */ | |
177 {"unichrome", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | | |
178 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
179 /* VESA unaccelerated gfx driver (devg-vesa.so) */ | |
180 {"vesa", SDL_GF_UNACCELERATED | SDL_GF_LOWRESOLUTION | | |
181 SDL_GF_UNACCELERATED_3D | SDL_GF_NOVIDEOMEMORY}, | |
182 /* VmWare graphics driver (devg-volari.so) */ | |
183 {"vmware", SDL_GF_ACCELERATED | SDL_GF_LOWRESOLUTION | | |
184 SDL_GF_UNACCELERATED_3D | SDL_GF_NOVIDEOMEMORY}, | |
185 /* XGI XP10 graphics driver (devg-volari.so) */ | |
186 {"volari", SDL_GF_ACCELERATED | SDL_GF_LOWRESOLUTION | | |
187 SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, | |
188 /* End of list */ | |
189 {NULL, 0x00000000} | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
190 }; |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
191 |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
192 /*****************************************************************************/ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
193 /* SDL Video Device initialization functions */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
194 /*****************************************************************************/ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
195 |
3139 | 196 static int |
197 qnxgf_available(void) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
198 { |
3139 | 199 gf_dev_t gfdev; |
200 gf_dev_info_t gfdev_info; | |
201 int status; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
202 |
3139 | 203 /* Try to attach to graphics device driver */ |
204 status = gf_dev_attach(&gfdev, GF_DEVICE_INDEX(0), &gfdev_info); | |
205 if (status != GF_ERR_OK) { | |
206 return 0; | |
207 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
208 |
3139 | 209 /* Detach from graphics device driver for now */ |
210 gf_dev_detach(gfdev); | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
211 |
3139 | 212 return 1; |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
213 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
214 |
3139 | 215 static void |
216 qnxgf_destroy(SDL_VideoDevice * device) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
217 { |
3139 | 218 SDL_VideoData *gfdata = (SDL_VideoData *) device->driverdata; |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
219 |
3139 | 220 /* Detach from graphics device driver, if it was initialized */ |
221 if (gfdata->gfinitialized != SDL_FALSE) { | |
222 gf_dev_detach(gfdata->gfdev); | |
223 gfdata->gfdev = NULL; | |
224 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
225 |
3139 | 226 if (device->driverdata != NULL) { |
227 device->driverdata = NULL; | |
228 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
229 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
230 |
3139 | 231 static SDL_VideoDevice * |
232 qnxgf_create(int devindex) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
233 { |
3139 | 234 SDL_VideoDevice *device; |
235 SDL_VideoData *gfdata; | |
236 int status; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
237 |
3139 | 238 /* Initialize SDL_VideoDevice structure */ |
239 device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); | |
240 if (device == NULL) { | |
241 SDL_OutOfMemory(); | |
242 return NULL; | |
243 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
244 |
3139 | 245 /* Initialize internal GF specific data */ |
246 gfdata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData)); | |
247 if (gfdata == NULL) { | |
248 SDL_OutOfMemory(); | |
249 SDL_free(device); | |
250 return NULL; | |
251 } | |
252 device->driverdata = gfdata; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
253 |
3461
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
254 /* By default GF is not initialized */ |
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
255 gfdata->gfinitialized = SDL_FALSE; |
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
256 |
3139 | 257 /* Try to attach to graphics device driver */ |
258 status = | |
259 gf_dev_attach(&gfdata->gfdev, GF_DEVICE_INDEX(devindex), | |
260 &gfdata->gfdev_info); | |
261 if (status != GF_ERR_OK) { | |
262 SDL_OutOfMemory(); | |
263 SDL_free(gfdata); | |
264 SDL_free(device); | |
265 return NULL; | |
266 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
267 |
3139 | 268 if (gfdata->gfdev_info.description == NULL) { |
269 gf_dev_detach(gfdata->gfdev); | |
270 SDL_SetError("GF: Failed to initialize graphics driver"); | |
271 return NULL; | |
272 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
273 |
3139 | 274 /* Setup amount of available displays and current display */ |
275 device->num_displays = 0; | |
276 device->current_display = 0; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
277 |
3139 | 278 /* Setup device shutdown function */ |
279 gfdata->gfinitialized = SDL_TRUE; | |
280 device->free = qnxgf_destroy; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
281 |
3139 | 282 /* Setup all functions which we can handle */ |
283 device->VideoInit = qnxgf_videoinit; | |
284 device->VideoQuit = qnxgf_videoquit; | |
285 device->GetDisplayModes = qnxgf_getdisplaymodes; | |
286 device->SetDisplayMode = qnxgf_setdisplaymode; | |
287 device->SetDisplayPalette = qnxgf_setdisplaypalette; | |
288 device->GetDisplayPalette = qnxgf_getdisplaypalette; | |
289 device->SetDisplayGammaRamp = qnxgf_setdisplaygammaramp; | |
290 device->GetDisplayGammaRamp = qnxgf_getdisplaygammaramp; | |
291 device->CreateWindow = qnxgf_createwindow; | |
292 device->CreateWindowFrom = qnxgf_createwindowfrom; | |
293 device->SetWindowTitle = qnxgf_setwindowtitle; | |
294 device->SetWindowIcon = qnxgf_setwindowicon; | |
295 device->SetWindowPosition = qnxgf_setwindowposition; | |
296 device->SetWindowSize = qnxgf_setwindowsize; | |
297 device->ShowWindow = qnxgf_showwindow; | |
298 device->HideWindow = qnxgf_hidewindow; | |
299 device->RaiseWindow = qnxgf_raisewindow; | |
300 device->MaximizeWindow = qnxgf_maximizewindow; | |
301 device->MinimizeWindow = qnxgf_minimizewindow; | |
302 device->RestoreWindow = qnxgf_restorewindow; | |
303 device->SetWindowGrab = qnxgf_setwindowgrab; | |
304 device->DestroyWindow = qnxgf_destroywindow; | |
305 device->GetWindowWMInfo = qnxgf_getwindowwminfo; | |
306 device->GL_LoadLibrary = qnxgf_gl_loadlibrary; | |
307 device->GL_GetProcAddress = qnxgf_gl_getprocaddres; | |
308 device->GL_UnloadLibrary = qnxgf_gl_unloadlibrary; | |
309 device->GL_CreateContext = qnxgf_gl_createcontext; | |
310 device->GL_MakeCurrent = qnxgf_gl_makecurrent; | |
311 device->GL_SetSwapInterval = qnxgf_gl_setswapinterval; | |
312 device->GL_GetSwapInterval = qnxgf_gl_getswapinterval; | |
313 device->GL_SwapWindow = qnxgf_gl_swapwindow; | |
314 device->GL_DeleteContext = qnxgf_gl_deletecontext; | |
315 device->PumpEvents = qnxgf_pumpevents; | |
316 device->SuspendScreenSaver = qnxgf_suspendscreensaver; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
317 |
3139 | 318 return device; |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
319 } |
3083
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 |
3139 | 321 VideoBootStrap qnxgf_bootstrap = { |
322 "qnxgf", | |
323 "SDL QNX Graphics Framework (GF) video driver", | |
324 qnxgf_available, | |
325 qnxgf_create | |
3083
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 }; |
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
328 /*****************************************************************************/ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
329 /* SDL Video and Display initialization/handling functions */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
330 /*****************************************************************************/ |
3139 | 331 int |
332 qnxgf_videoinit(_THIS) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
333 { |
3139 | 334 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; |
335 uint32_t it; | |
336 uint32_t jt; | |
337 char *override; | |
338 int32_t status; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
339 |
3139 | 340 /* By default GF uses buffer swap on vsync */ |
341 gfdata->swapinterval = 1; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
342 |
3139 | 343 /* Add each detected output to SDL */ |
344 for (it = 0; it < gfdata->gfdev_info.ndisplays; it++) { | |
345 SDL_VideoDisplay display; | |
346 SDL_DisplayMode current_mode; | |
347 SDL_DisplayData *didata; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
348 |
3139 | 349 didata = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData)); |
350 if (didata == NULL) { | |
351 /* memory allocation problem */ | |
352 SDL_OutOfMemory(); | |
353 return -1; | |
354 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
355 |
3139 | 356 /* Set default cursor settings, maximum 128x128 cursor */ |
357 didata->cursor_visible = SDL_FALSE; | |
358 didata->cursor.type = GF_CURSOR_BITMAP; | |
359 didata->cursor.hotspot.x = 0; | |
360 didata->cursor.hotspot.y = 0; | |
361 didata->cursor.cursor.bitmap.w = SDL_VIDEO_GF_MAX_CURSOR_SIZE; | |
362 didata->cursor.cursor.bitmap.h = SDL_VIDEO_GF_MAX_CURSOR_SIZE; | |
363 didata->cursor.cursor.bitmap.stride = | |
364 (didata->cursor.cursor.bitmap.w + 7) / (sizeof(uint8_t) * 8); | |
365 didata->cursor.cursor.bitmap.color0 = 0x00000000; | |
366 didata->cursor.cursor.bitmap.color1 = 0x00000000; | |
367 didata->cursor.cursor.bitmap.image0 = | |
368 SDL_calloc(sizeof(uint8_t), | |
369 (didata->cursor.cursor.bitmap.w + | |
370 7) * didata->cursor.cursor.bitmap.h / | |
371 (sizeof(uint8_t) * 8)); | |
372 if (didata->cursor.cursor.bitmap.image0 == NULL) { | |
373 SDL_free(didata); | |
374 SDL_OutOfMemory(); | |
375 return -1; | |
376 } | |
377 didata->cursor.cursor.bitmap.image1 = | |
378 SDL_calloc(sizeof(uint8_t), | |
379 (didata->cursor.cursor.bitmap.w + | |
380 7) * didata->cursor.cursor.bitmap.h / | |
381 (sizeof(uint8_t) * 8)); | |
382 if (didata->cursor.cursor.bitmap.image1 == NULL) { | |
383 SDL_OutOfMemory(); | |
384 SDL_free((void *) didata->cursor.cursor.bitmap.image0); | |
385 SDL_free(didata); | |
386 return -1; | |
387 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
388 |
3139 | 389 /* Query current display settings */ |
390 status = gf_display_query(gfdata->gfdev, it, &didata->display_info); | |
391 if (status == GF_ERR_OK) { | |
392 SDL_zero(current_mode); | |
393 current_mode.w = didata->display_info.xres; | |
394 current_mode.h = didata->display_info.yres; | |
395 current_mode.refresh_rate = didata->display_info.refresh; | |
396 current_mode.format = | |
397 qnxgf_gf_to_sdl_pixelformat(didata->display_info.format); | |
398 current_mode.driverdata = NULL; | |
399 } else { | |
400 /* video initialization problem */ | |
401 SDL_free((void *) didata->cursor.cursor.bitmap.image0); | |
402 SDL_free((void *) didata->cursor.cursor.bitmap.image1); | |
403 SDL_free(didata); | |
404 SDL_SetError("GF: Display query failed"); | |
405 return -1; | |
406 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
407 |
3139 | 408 /* Attach GF to selected display */ |
409 status = gf_display_attach(&didata->display, gfdata->gfdev, it, NULL); | |
410 if (status != GF_ERR_OK) { | |
411 /* video initialization problem */ | |
412 SDL_free((void *) didata->cursor.cursor.bitmap.image0); | |
413 SDL_free((void *) didata->cursor.cursor.bitmap.image1); | |
414 SDL_free(didata); | |
415 SDL_SetError("GF: Couldn't attach to display"); | |
416 return -1; | |
417 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
418 |
3139 | 419 /* Initialize status variables */ |
420 didata->layer_attached = SDL_FALSE; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
421 |
3139 | 422 /* Attach to main display layer */ |
423 status = | |
424 gf_layer_attach(&didata->layer, didata->display, | |
425 didata->display_info.main_layer_index, 0); | |
426 if (status != GF_ERR_OK) { | |
427 /* Failed to attach to main layer */ | |
428 SDL_free((void *) didata->cursor.cursor.bitmap.image0); | |
429 SDL_free((void *) didata->cursor.cursor.bitmap.image1); | |
430 SDL_free(didata); | |
431 SDL_SetError | |
432 ("GF: Couldn't attach to main layer, it could be busy"); | |
433 return -1; | |
434 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
435 |
3139 | 436 /* Mark main display layer is attached */ |
437 didata->layer_attached = SDL_TRUE; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
438 |
3139 | 439 /* Set layer source and destination viewport */ |
440 gf_layer_set_src_viewport(didata->layer, 0, 0, current_mode.w - 1, | |
441 current_mode.h - 1); | |
442 gf_layer_set_dst_viewport(didata->layer, 0, 0, current_mode.w - 1, | |
443 current_mode.h - 1); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
444 |
3139 | 445 /* Create main visible on display surface */ |
446 status = gf_surface_create_layer(&didata->surface[0], &didata->layer, | |
447 1, 0, current_mode.w, current_mode.h, | |
448 qnxgf_sdl_to_gf_pixelformat | |
449 (current_mode.format), NULL, | |
450 GF_SURFACE_CREATE_2D_ACCESSIBLE | | |
451 GF_SURFACE_CREATE_3D_ACCESSIBLE | | |
452 GF_SURFACE_CREATE_SHAREABLE); | |
453 if (status != GF_ERR_OK) { | |
454 gf_layer_disable(didata->layer); | |
455 gf_layer_detach(didata->layer); | |
456 didata->layer_attached = SDL_FALSE; | |
457 SDL_free((void *) didata->cursor.cursor.bitmap.image0); | |
458 SDL_free((void *) didata->cursor.cursor.bitmap.image1); | |
459 SDL_free(didata); | |
460 SDL_SetError("GF: Can't create main layer surface at init (%d)\n", | |
461 status); | |
462 return -1; | |
463 } | |
464 | |
465 /* Set just created surface as main visible on the layer */ | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
466 // gf_layer_set_surfaces(didata->layer, &didata->surface[0], 1); |
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
467 |
3139 | 468 /* Update layer parameters */ |
469 status = gf_layer_update(didata->layer, GF_LAYER_UPDATE_NO_WAIT_IDLE); | |
470 if (status != GF_ERR_OK) { | |
471 /* Free allocated surface */ | |
472 gf_surface_free(didata->surface[0]); | |
473 didata->surface[0] = NULL; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
474 |
3139 | 475 /* Disable and detach from layer */ |
476 gf_layer_disable(didata->layer); | |
477 gf_layer_detach(didata->layer); | |
478 didata->layer_attached = SDL_FALSE; | |
479 SDL_free((void *) didata->cursor.cursor.bitmap.image0); | |
480 SDL_free((void *) didata->cursor.cursor.bitmap.image1); | |
481 SDL_free(didata); | |
482 SDL_SetError("GF: Can't update layer parameters\n"); | |
483 return -1; | |
484 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
485 |
3139 | 486 /* Enable layer in case if hardware supports layer enable/disable */ |
487 gf_layer_enable(didata->layer); | |
488 | |
489 /* Copy device name for each display */ | |
490 SDL_strlcpy(didata->description, gfdata->gfdev_info.description, | |
491 SDL_VIDEO_GF_DEVICENAME_MAX - 1); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
492 |
3139 | 493 /* Search device capabilities and possible workarounds */ |
494 jt = 0; | |
495 do { | |
496 if (gf_devicename[jt].name == NULL) { | |
497 break; | |
498 } | |
499 if (SDL_strncmp | |
500 (gf_devicename[jt].name, didata->description, | |
501 SDL_strlen(gf_devicename[jt].name)) == 0) { | |
502 didata->caps = gf_devicename[jt].caps; | |
503 } | |
504 jt++; | |
505 } while (1); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
506 |
3139 | 507 /* Initialize display structure */ |
508 SDL_zero(display); | |
509 display.desktop_mode = current_mode; | |
510 display.current_mode = current_mode; | |
511 display.driverdata = didata; | |
512 didata->current_mode = current_mode; | |
513 SDL_AddVideoDisplay(&display); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
514 |
3139 | 515 /* Check for environment variables which could override some SDL settings */ |
516 didata->custom_refresh = 0; | |
517 override = SDL_getenv("SDL_VIDEO_GF_REFRESH_RATE"); | |
518 if (override != NULL) { | |
519 if (SDL_sscanf(override, "%u", &didata->custom_refresh) != 1) { | |
520 didata->custom_refresh = 0; | |
521 } | |
522 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
523 |
3139 | 524 /* Get all display modes for this display */ |
525 _this->current_display = it; | |
526 qnxgf_getdisplaymodes(_this); | |
527 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
528 |
3139 | 529 /* Restore default display */ |
530 _this->current_display = 0; | |
531 | |
532 /* Add GF renderer to SDL */ | |
533 gf_addrenderdriver(_this); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
534 |
3139 | 535 /* Add GF input devices */ |
536 status = gf_addinputdevices(_this); | |
537 if (status != 0) { | |
538 /* SDL error is set by gf_addinputdevices() function */ | |
539 return -1; | |
540 } | |
541 | |
542 /* video has been initialized successfully */ | |
543 return 1; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
544 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
545 |
3139 | 546 void |
547 qnxgf_videoquit(_THIS) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
548 { |
3461
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
549 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; |
3139 | 550 SDL_DisplayData *didata = NULL; |
551 uint32_t it; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
552 |
3461
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
553 /* Check if GF was initialized before */ |
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
554 if ((gfdata == NULL) || (gfdata->gfinitialized != SDL_TRUE)) |
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
555 { |
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
556 /* If not, do not deinitialize */ |
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
557 return; |
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
558 } |
87182c69e080
Deinitialization fixes, in case if QNXGF driver is not initialized properly.
Mike Gorchak <lestat@i.com.ua>
parents:
3412
diff
changeset
|
559 |
3139 | 560 /* Stop collecting mouse events */ |
561 hiddi_disable_mouse(); | |
562 /* Delete GF input devices */ | |
563 gf_delinputdevices(_this); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
564 |
3139 | 565 /* SDL will restore old desktop mode on exit */ |
566 for (it = 0; it < _this->num_displays; it++) { | |
567 didata = _this->displays[it].driverdata; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
568 |
3139 | 569 /* Free cursor image */ |
570 if (didata->cursor.cursor.bitmap.image0 != NULL) { | |
571 SDL_free((void *) didata->cursor.cursor.bitmap.image0); | |
572 didata->cursor.cursor.bitmap.image0 = NULL; | |
573 } | |
574 if (didata->cursor.cursor.bitmap.image1 != NULL) { | |
575 SDL_free((void *) didata->cursor.cursor.bitmap.image1); | |
576 didata->cursor.cursor.bitmap.image1 = NULL; | |
577 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
578 |
3139 | 579 /* Free main surface */ |
580 if (didata->surface[0] != NULL) { | |
581 gf_surface_free(didata->surface[0]); | |
582 didata->surface[0] = NULL; | |
583 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
584 |
3139 | 585 /* Free back surface */ |
586 if (didata->surface[1] != NULL) { | |
587 gf_surface_free(didata->surface[1]); | |
588 didata->surface[1] = NULL; | |
589 } | |
590 | |
591 /* Free second back surface */ | |
592 if (didata->surface[2] != NULL) { | |
593 gf_surface_free(didata->surface[2]); | |
594 didata->surface[2] = NULL; | |
595 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
596 |
3139 | 597 /* Detach layer before quit */ |
598 if (didata->layer_attached == SDL_TRUE) { | |
599 /* Disable layer if hardware supports this */ | |
600 gf_layer_disable(didata->layer); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
601 |
3139 | 602 /* Detach from layer, free it for others */ |
603 gf_layer_detach(didata->layer); | |
604 didata->layer = NULL; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
605 |
3139 | 606 /* Mark it as detached */ |
607 didata->layer_attached = SDL_FALSE; | |
608 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
609 |
3139 | 610 /* Detach from selected display */ |
611 gf_display_detach(didata->display); | |
612 didata->display = NULL; | |
613 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
614 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
615 |
3139 | 616 void |
617 qnxgf_getdisplaymodes(_THIS) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
618 { |
3139 | 619 SDL_DisplayData *didata = |
620 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
621 SDL_DisplayMode mode; | |
622 gf_modeinfo_t modeinfo; | |
623 uint32_t it = 0; | |
624 uint32_t jt = 0; | |
625 uint32_t kt = 0; | |
626 int status; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
627 |
3139 | 628 do { |
629 status = gf_display_query_mode(didata->display, it, &modeinfo); | |
630 if (status == GF_ERR_OK) { | |
631 /* Parsing current mode */ | |
632 if ((modeinfo.flags & GF_MODE_GENERIC) == GF_MODE_GENERIC) { | |
633 /* This mode is generic, so we can add to SDL our resolutions */ | |
634 /* Only pixel format is fixed, refresh rate could be any */ | |
635 jt = 0; | |
636 do { | |
637 if (generic_mode[jt].w == 0) { | |
638 break; | |
639 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
640 |
3139 | 641 /* Check if driver do not supports doublescan video modes */ |
642 if ((didata->caps & SDL_GF_LOWRESOLUTION) != | |
643 SDL_GF_LOWRESOLUTION) { | |
644 if (generic_mode[jt].w < 640) { | |
645 jt++; | |
646 continue; | |
647 } | |
648 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
649 |
3139 | 650 mode.w = generic_mode[jt].w; |
651 mode.h = generic_mode[jt].h; | |
652 mode.refresh_rate = generic_mode[jt].refresh_rate; | |
653 mode.format = | |
654 qnxgf_gf_to_sdl_pixelformat(modeinfo.primary_format); | |
655 mode.driverdata = NULL; | |
656 SDL_AddDisplayMode(_this->current_display, &mode); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
657 |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
658 /* If mode is RGBA8888, add the same mode as RGBx888 */ |
3186 | 659 if (modeinfo.primary_format == GF_FORMAT_BGRA8888) { |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
660 mode.w = generic_mode[jt].w; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
661 mode.h = generic_mode[jt].h; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
662 mode.refresh_rate = generic_mode[jt].refresh_rate; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
663 mode.format = SDL_PIXELFORMAT_RGB888; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
664 mode.driverdata = NULL; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
665 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
|
666 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
667 /* If mode is RGBA1555, add the same mode as RGBx555 */ |
3186 | 668 if (modeinfo.primary_format == GF_FORMAT_PACK_ARGB1555) { |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
669 mode.w = generic_mode[jt].w; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
670 mode.h = generic_mode[jt].h; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
671 mode.refresh_rate = generic_mode[jt].refresh_rate; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
672 mode.format = SDL_PIXELFORMAT_RGB555; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
673 mode.driverdata = NULL; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
674 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
|
675 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
676 |
3139 | 677 jt++; |
678 } while (1); | |
679 } else { | |
680 /* Add this display mode as is in case if it is non-generic */ | |
681 /* But go through the each refresh rate, supported by gf */ | |
682 jt = 0; | |
683 do { | |
684 if (modeinfo.refresh[jt] != 0) { | |
685 mode.w = modeinfo.xres; | |
686 mode.h = modeinfo.yres; | |
687 mode.refresh_rate = modeinfo.refresh[jt]; | |
688 mode.format = | |
689 qnxgf_gf_to_sdl_pixelformat(modeinfo. | |
690 primary_format); | |
691 mode.driverdata = NULL; | |
692 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
|
693 |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
694 /* If mode is RGBA8888, add the same mode as RGBx888 */ |
3186 | 695 if (modeinfo.primary_format == GF_FORMAT_BGRA8888) { |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
696 mode.w = modeinfo.xres; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
697 mode.h = modeinfo.yres; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
698 mode.refresh_rate = modeinfo.refresh[jt]; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
699 mode.format = SDL_PIXELFORMAT_RGB888; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
700 mode.driverdata = NULL; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
701 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
|
702 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
703 /* If mode is RGBA1555, add the same mode as RGBx555 */ |
3186 | 704 if (modeinfo.primary_format == |
705 GF_FORMAT_PACK_ARGB1555) { | |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
706 mode.w = modeinfo.xres; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
707 mode.h = modeinfo.yres; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
708 mode.refresh_rate = modeinfo.refresh[jt]; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
709 mode.format = SDL_PIXELFORMAT_RGB555; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
710 mode.driverdata = NULL; |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
711 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
|
712 } |
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
713 |
3139 | 714 jt++; |
715 } else { | |
716 break; | |
717 } | |
718 } while (1); | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
719 } |
3139 | 720 } else { |
721 if (status == GF_ERR_PARM) { | |
722 /* out of available modes, all are listed */ | |
723 break; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
724 } |
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
725 |
3139 | 726 /* Error occured during mode listing */ |
727 break; | |
728 } | |
729 it++; | |
730 } while (1); | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
731 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
732 |
3139 | 733 int |
734 qnxgf_setdisplaymode(_THIS, SDL_DisplayMode * mode) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
735 { |
3139 | 736 SDL_DisplayData *didata = |
737 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
738 uint32_t refresh_rate = 0; | |
739 int status; | |
740 | |
741 /* Current display dimensions and bpp are no more valid */ | |
742 didata->current_mode.format = SDL_PIXELFORMAT_UNKNOWN; | |
743 didata->current_mode.w = 0; | |
744 didata->current_mode.h = 0; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
745 |
3139 | 746 /* Check if custom refresh rate requested */ |
747 if (didata->custom_refresh != 0) { | |
748 refresh_rate = didata->custom_refresh; | |
749 } else { | |
750 refresh_rate = mode->refresh_rate; | |
751 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
752 |
3139 | 753 /* Check if SDL GF driver needs to find appropriate refresh rate itself */ |
754 if (refresh_rate == 0) { | |
755 uint32_t it; | |
756 SDL_DisplayMode tempmode; | |
757 | |
758 /* Clear display mode structure */ | |
759 SDL_memset(&tempmode, 0x00, sizeof(SDL_DisplayMode)); | |
760 tempmode.refresh_rate = 0x0000FFFF; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
761 |
3139 | 762 /* Check if window width and height matches one of our modes */ |
763 for (it = 0; it < SDL_CurrentDisplay.num_display_modes; it++) { | |
764 if ((SDL_CurrentDisplay.display_modes[it].w == mode->w) && | |
765 (SDL_CurrentDisplay.display_modes[it].h == mode->h) && | |
766 (SDL_CurrentDisplay.display_modes[it].format == mode->format)) | |
767 { | |
768 /* Find the lowest refresh rate available */ | |
769 if (tempmode.refresh_rate > | |
770 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
771 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
772 } | |
773 } | |
774 } | |
775 if (tempmode.refresh_rate != 0x0000FFFF) { | |
776 refresh_rate = tempmode.refresh_rate; | |
777 } else { | |
778 /* Let video driver decide what to do with this */ | |
779 refresh_rate = 0; | |
780 } | |
781 } | |
782 | |
783 /* Check if SDL GF driver needs to check custom refresh rate */ | |
784 if (didata->custom_refresh != 0) { | |
785 uint32_t it; | |
786 SDL_DisplayMode tempmode; | |
787 | |
788 /* Clear display mode structure */ | |
789 SDL_memset(&tempmode, 0x00, sizeof(SDL_DisplayMode)); | |
790 tempmode.refresh_rate = 0x0000FFFF; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
791 |
3139 | 792 /* Check if window width and height matches one of our modes */ |
793 for (it = 0; it < SDL_CurrentDisplay.num_display_modes; it++) { | |
794 if ((SDL_CurrentDisplay.display_modes[it].w == mode->w) && | |
795 (SDL_CurrentDisplay.display_modes[it].h == mode->h) && | |
796 (SDL_CurrentDisplay.display_modes[it].format == mode->format)) | |
797 { | |
798 /* Find the lowest refresh rate available */ | |
799 if (tempmode.refresh_rate > | |
800 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
801 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
802 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
803 |
3139 | 804 /* Check if requested refresh rate found */ |
805 if (refresh_rate == | |
806 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
807 tempmode = SDL_CurrentDisplay.display_modes[it]; | |
808 break; | |
809 } | |
810 } | |
811 } | |
812 if (tempmode.refresh_rate != 0x0000FFFF) { | |
813 refresh_rate = tempmode.refresh_rate; | |
814 } else { | |
815 /* Let video driver decide what to do with this */ | |
816 refresh_rate = 0; | |
817 } | |
818 } | |
819 | |
820 /* Free main surface */ | |
821 if (didata->surface[0] != NULL) { | |
822 gf_surface_free(didata->surface[0]); | |
823 didata->surface[0] = NULL; | |
824 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
825 |
3139 | 826 /* Free back surface */ |
827 if (didata->surface[1] != NULL) { | |
828 gf_surface_free(didata->surface[1]); | |
829 didata->surface[1] = NULL; | |
830 } | |
831 | |
832 /* Free second back surface */ | |
833 if (didata->surface[2] != NULL) { | |
834 gf_surface_free(didata->surface[2]); | |
835 didata->surface[2] = NULL; | |
836 } | |
837 | |
838 /* Detach layer before switch to new graphics mode */ | |
839 if (didata->layer_attached == SDL_TRUE) { | |
840 /* Disable layer if hardware supports this */ | |
841 gf_layer_disable(didata->layer); | |
842 | |
843 /* Detach from layer, free it for others */ | |
844 gf_layer_detach(didata->layer); | |
845 | |
846 /* Mark it as detached */ | |
847 didata->layer_attached = SDL_FALSE; | |
848 } | |
849 | |
850 /* Set new display video mode */ | |
851 status = | |
852 gf_display_set_mode(didata->display, mode->w, mode->h, refresh_rate, | |
853 qnxgf_sdl_to_gf_pixelformat(mode->format), 0); | |
854 if (status != GF_ERR_OK) { | |
855 /* Display mode/resolution switch has been failed */ | |
856 SDL_SetError("GF: Mode is not supported by graphics driver"); | |
857 return -1; | |
858 } else { | |
859 didata->current_mode = *mode; | |
860 didata->current_mode.refresh_rate = refresh_rate; | |
861 } | |
862 | |
863 /* Attach to main display layer */ | |
864 status = | |
865 gf_layer_attach(&didata->layer, didata->display, | |
866 didata->display_info.main_layer_index, 0); | |
867 if (status != GF_ERR_OK) { | |
868 SDL_SetError("GF: Couldn't attach to main layer, it could be busy"); | |
869 | |
870 /* Failed to attach to main displayable layer */ | |
871 return -1; | |
872 } | |
873 | |
874 /* Mark main display layer is attached */ | |
875 didata->layer_attached = SDL_TRUE; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
876 |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
877 /* Set layer source and destination viewports */ |
3139 | 878 gf_layer_set_src_viewport(didata->layer, 0, 0, mode->w - 1, mode->h - 1); |
879 gf_layer_set_dst_viewport(didata->layer, 0, 0, mode->w - 1, mode->h - 1); | |
880 | |
881 /* Create main visible on display surface */ | |
882 status = | |
883 gf_surface_create_layer(&didata->surface[0], &didata->layer, 1, 0, | |
884 mode->w, mode->h, | |
885 qnxgf_sdl_to_gf_pixelformat(mode->format), | |
886 NULL, | |
887 GF_SURFACE_CREATE_2D_ACCESSIBLE | | |
888 GF_SURFACE_CREATE_3D_ACCESSIBLE | | |
889 GF_SURFACE_CREATE_SHAREABLE); | |
890 if (status != GF_ERR_OK) { | |
891 gf_layer_disable(didata->layer); | |
892 gf_layer_detach(didata->layer); | |
893 didata->layer_attached = SDL_FALSE; | |
894 SDL_SetError | |
895 ("GF: Can't create main layer surface at modeswitch (%d)\n", | |
896 status); | |
897 return -1; | |
898 } | |
899 | |
900 /* Set just created surface as main visible on the layer */ | |
901 gf_layer_set_surfaces(didata->layer, &didata->surface[0], 1); | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
902 |
3139 | 903 /* Update layer parameters */ |
904 status = gf_layer_update(didata->layer, GF_LAYER_UPDATE_NO_WAIT_IDLE); | |
905 if (status != GF_ERR_OK) { | |
906 /* Free main surface */ | |
907 gf_surface_free(didata->surface[0]); | |
908 didata->surface[0] = NULL; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
909 |
3139 | 910 /* Detach layer */ |
911 gf_layer_disable(didata->layer); | |
912 gf_layer_detach(didata->layer); | |
913 didata->layer_attached = SDL_FALSE; | |
914 SDL_SetError("GF: Can't update layer parameters\n"); | |
915 return -1; | |
916 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
917 |
3139 | 918 /* Restore cursor if it was visible */ |
919 if (didata->cursor_visible == SDL_TRUE) { | |
920 gf_cursor_set(didata->display, 0, &didata->cursor); | |
921 gf_cursor_enable(didata->display, 0); | |
922 } | |
923 | |
924 /* Enable layer in case if hardware supports layer enable/disable */ | |
925 gf_layer_enable(didata->layer); | |
926 | |
927 return 0; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
928 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
929 |
3139 | 930 int |
931 qnxgf_setdisplaypalette(_THIS, SDL_Palette * palette) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
932 { |
3139 | 933 SDL_DisplayData *didata = |
934 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
935 | |
936 /* QNX GF doesn't have support for global palette changing, but we */ | |
937 /* could store it for usage in future */ | |
938 | |
939 /* Setting display palette operation has been failed */ | |
940 return -1; | |
941 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
942 |
3139 | 943 int |
944 qnxgf_getdisplaypalette(_THIS, SDL_Palette * palette) | |
945 { | |
946 SDL_DisplayData *didata = | |
947 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
948 | |
949 /* We can't provide current palette settings and looks like SDL */ | |
950 /* do not call this function also, in such case this function returns -1 */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
951 |
3139 | 952 /* Getting display palette operation has been failed */ |
953 return -1; | |
954 } | |
955 | |
956 int | |
957 qnxgf_setdisplaygammaramp(_THIS, Uint16 * ramp) | |
958 { | |
959 SDL_DisplayData *didata = | |
960 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
961 int status; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
962 |
3139 | 963 /* Setup gamma ramp, for each color channel */ |
964 status = | |
965 gf_display_set_color_lut16(didata->display, (uint16_t *) ramp, | |
966 (uint16_t *) ramp + 256, | |
967 (uint16_t *) ramp + 512); | |
968 if (status != GF_ERR_OK) { | |
969 /* Setting display gamma ramp operation has been failed */ | |
970 return -1; | |
971 } | |
972 | |
973 return 0; | |
974 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
975 |
3139 | 976 int |
977 qnxgf_getdisplaygammaramp(_THIS, Uint16 * ramp) | |
978 { | |
979 /* TODO: We need to return previous gamma set */ | |
980 /* Also we need some initial fake gamma to return */ | |
981 | |
982 /* Getting display gamma ramp operation has been failed */ | |
983 return -1; | |
984 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
985 |
3139 | 986 int |
987 qnxgf_createwindow(_THIS, SDL_Window * window) | |
988 { | |
989 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; | |
990 SDL_DisplayData *didata = | |
991 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
992 SDL_WindowData *wdata; | |
993 int32_t status; | |
994 | |
995 /* QNX GF supports fullscreen window modes only */ | |
996 if ((window->flags & SDL_WINDOW_FULLSCREEN) != SDL_WINDOW_FULLSCREEN) { | |
997 uint32_t it; | |
998 SDL_DisplayMode mode; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
999 |
3139 | 1000 /* Clear display mode structure */ |
1001 SDL_memset(&mode, 0x00, sizeof(SDL_DisplayMode)); | |
1002 mode.refresh_rate = 0x0000FFFF; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1003 |
3139 | 1004 /* Check if window width and height matches one of our modes */ |
1005 for (it = 0; it < SDL_CurrentDisplay.num_display_modes; it++) { | |
1006 if ((SDL_CurrentDisplay.display_modes[it].w == window->w) && | |
1007 (SDL_CurrentDisplay.display_modes[it].h == window->h) && | |
1008 (SDL_CurrentDisplay.display_modes[it].format == | |
1009 SDL_CurrentDisplay.desktop_mode.format)) { | |
1010 /* Find the lowest refresh rate available */ | |
1011 if (mode.refresh_rate > | |
1012 SDL_CurrentDisplay.display_modes[it].refresh_rate) { | |
1013 mode = SDL_CurrentDisplay.display_modes[it]; | |
1014 } | |
1015 } | |
1016 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1017 |
3139 | 1018 /* Check if end of display list has been reached */ |
1019 if (mode.refresh_rate == 0x0000FFFF) { | |
1020 SDL_SetError("GF: Desired video mode is not supported"); | |
1021 | |
1022 /* Failed to create new window */ | |
1023 return -1; | |
1024 } else { | |
1025 /* Tell to the caller that mode will be fullscreen */ | |
1026 window->flags |= SDL_WINDOW_FULLSCREEN; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1027 |
3139 | 1028 /* Setup fullscreen mode, bpp used from desktop mode in this case */ |
1029 status = qnxgf_setdisplaymode(_this, &mode); | |
1030 if (status != 0) { | |
1031 /* Failed to swith fullscreen video mode */ | |
1032 return -1; | |
1033 } | |
1034 } | |
1035 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1036 |
3139 | 1037 /* Setup our own window decorations and states, which are depend on fullscreen mode */ |
1038 window->flags |= SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS | | |
1039 SDL_WINDOW_MAXIMIZED | SDL_WINDOW_INPUT_GRABBED | | |
1040 SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS; | |
1041 window->flags &= ~(SDL_WINDOW_RESIZABLE | SDL_WINDOW_MINIMIZED); | |
1042 | |
1043 /* Ignore any window position settings */ | |
1044 window->x = SDL_WINDOWPOS_UNDEFINED; | |
1045 window->y = SDL_WINDOWPOS_UNDEFINED; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1046 |
3139 | 1047 /* Allocate window internal data */ |
1048 wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); | |
1049 if (wdata == NULL) { | |
1050 SDL_OutOfMemory(); | |
1051 return -1; | |
1052 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1053 |
3139 | 1054 /* Setup driver data for this window */ |
1055 window->driverdata = wdata; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1056 |
3139 | 1057 /* Check if window must support OpenGL ES rendering */ |
1058 if ((window->flags & SDL_WINDOW_OPENGL) == SDL_WINDOW_OPENGL) { | |
1059 #if defined(SDL_VIDEO_OPENGL_ES) | |
1060 EGLBoolean initstatus; | |
1061 | |
1062 /* Mark this window as OpenGL ES compatible */ | |
1063 wdata->uses_gles = SDL_TRUE; | |
1064 | |
1065 /* Create connection to OpenGL ES */ | |
1066 if (gfdata->egldisplay == EGL_NO_DISPLAY) { | |
1067 gfdata->egldisplay = eglGetDisplay(gfdata->gfdev); | |
1068 if (gfdata->egldisplay == EGL_NO_DISPLAY) { | |
1069 SDL_SetError("GF: Can't get connection to OpenGL ES"); | |
1070 return -1; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1071 } |
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1072 |
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1073 /* Initialize OpenGL ES library, ignore EGL version */ |
3139 | 1074 initstatus = eglInitialize(gfdata->egldisplay, NULL, NULL); |
1075 if (initstatus != EGL_TRUE) { | |
1076 SDL_SetError("GF: Can't init OpenGL ES library"); | |
1077 return -1; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1078 } |
3139 | 1079 } |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1080 |
3139 | 1081 /* Increment GL ES reference count usage */ |
1082 gfdata->egl_refcount++; | |
1083 #else | |
1084 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1085 return -1; | |
1086 #endif /* SDL_VIDEO_OPENGL_ES */ | |
1087 } | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1088 |
3139 | 1089 /* Enable mouse event collecting */ |
1090 hiddi_enable_mouse(); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1091 |
3139 | 1092 /* By default last created window got a input focus */ |
1093 SDL_SetKeyboardFocus(0, window->id); | |
1094 SDL_SetMouseFocus(0, window->id); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1095 |
3139 | 1096 /* Window has been successfully created */ |
1097 return 0; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1098 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1099 |
3139 | 1100 int |
1101 qnxgf_createwindowfrom(_THIS, SDL_Window * window, const void *data) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1102 { |
3139 | 1103 /* Failed to create window from another window */ |
1104 return -1; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1105 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1106 |
3139 | 1107 void |
1108 qnxgf_setwindowtitle(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1109 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1110 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1111 |
3139 | 1112 void |
1113 qnxgf_setwindowicon(_THIS, SDL_Window * window, SDL_Surface * icon) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1114 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1115 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1116 |
3139 | 1117 void |
1118 qnxgf_setwindowposition(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1119 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1120 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1121 |
3139 | 1122 void |
1123 qnxgf_setwindowsize(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1124 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1125 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1126 |
3139 | 1127 void |
1128 qnxgf_showwindow(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1129 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1130 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1131 |
3139 | 1132 void |
1133 qnxgf_hidewindow(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1134 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1135 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1136 |
3139 | 1137 void |
1138 qnxgf_raisewindow(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1139 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1140 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1141 |
3139 | 1142 void |
1143 qnxgf_maximizewindow(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1144 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1145 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1146 |
3139 | 1147 void |
1148 qnxgf_minimizewindow(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1149 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1150 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1151 |
3139 | 1152 void |
1153 qnxgf_restorewindow(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1154 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1155 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1156 |
3139 | 1157 void |
1158 qnxgf_setwindowgrab(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1159 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1160 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1161 |
3139 | 1162 void |
1163 qnxgf_destroywindow(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1164 { |
3139 | 1165 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; |
1166 SDL_DisplayData *didata = | |
1167 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1168 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1169 |
3139 | 1170 if (wdata != NULL) { |
1171 #if defined(SDL_VIDEO_OPENGL_ES) | |
1172 /* Destroy OpenGL ES surface if it was created */ | |
1173 if (wdata->gles_surface != EGL_NO_SURFACE) { | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1174 eglDestroySurface(gfdata->egldisplay, wdata->gles_surface); |
3139 | 1175 } |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1176 |
3139 | 1177 /* Free any 3D target if it was created before */ |
1178 if (wdata->target_created == SDL_TRUE) { | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1179 gf_3d_target_free(wdata->target); |
3139 | 1180 wdata->target_created == SDL_FALSE; |
1181 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1182 |
3139 | 1183 gfdata->egl_refcount--; |
1184 if (gfdata->egl_refcount == 0) { | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1185 /* Terminate connection to OpenGL ES */ |
3139 | 1186 if (gfdata->egldisplay != EGL_NO_DISPLAY) { |
1187 eglTerminate(gfdata->egldisplay); | |
1188 gfdata->egldisplay = EGL_NO_DISPLAY; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1189 } |
3139 | 1190 } |
1191 #endif /* SDL_VIDEO_OPENGL_ES */ | |
1192 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1193 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1194 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1195 /*****************************************************************************/ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1196 /* SDL Window Manager function */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1197 /*****************************************************************************/ |
3139 | 1198 SDL_bool |
1199 qnxgf_getwindowwminfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1200 { |
3139 | 1201 /* QNX GF do not operates at window level, this means we are have no */ |
1202 /* Window Manager available, no specific data in SDL_SysWMinfo too */ | |
3092
cad1aefa2ed9
Date: Thu, 12 Mar 2009 15:14:38 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3087
diff
changeset
|
1203 |
3139 | 1204 if (info->version.major <= SDL_MAJOR_VERSION) { |
1205 return SDL_TRUE; | |
1206 } else { | |
1207 SDL_SetError("Application not compiled with SDL %d.%d\n", | |
1208 SDL_MAJOR_VERSION, SDL_MINOR_VERSION); | |
1209 return SDL_FALSE; | |
1210 } | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1211 |
3139 | 1212 /* Failed to get window manager information */ |
1213 return SDL_FALSE; | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1214 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1215 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1216 /*****************************************************************************/ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1217 /* SDL OpenGL/OpenGL ES functions */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1218 /*****************************************************************************/ |
3139 | 1219 int |
1220 qnxgf_gl_loadlibrary(_THIS, const char *path) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1221 { |
3139 | 1222 #if defined(SDL_VIDEO_OPENGL_ES) |
1223 /* Check if OpenGL ES library is specified for GF driver */ | |
1224 if (path == NULL) { | |
1225 path = SDL_getenv("SDL_OPENGL_LIBRARY"); | |
1226 if (path == NULL) { | |
1227 path = SDL_getenv("SDL_OPENGLES_LIBRARY"); | |
1228 } | |
1229 } | |
1230 | |
1231 /* Check if default library loading requested */ | |
1232 if (path == NULL) { | |
1233 /* Already linked with GF library which provides egl* subset of */ | |
1234 /* functions, use Common profile of OpenGL ES library by default */ | |
1235 path = "/usr/lib/libGLES_CM.so.1"; | |
1236 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1237 |
3139 | 1238 /* Load dynamic library */ |
1239 _this->gl_config.dll_handle = SDL_LoadObject(path); | |
1240 if (!_this->gl_config.dll_handle) { | |
1241 /* Failed to load new GL ES library */ | |
1242 SDL_SetError("GF: Failed to locate OpenGL ES library"); | |
1243 return -1; | |
1244 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1245 |
3139 | 1246 /* Store OpenGL ES library path and name */ |
1247 SDL_strlcpy(_this->gl_config.driver_path, path, | |
1248 SDL_arraysize(_this->gl_config.driver_path)); | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1249 |
3139 | 1250 /* New OpenGL ES library is loaded */ |
1251 return 0; | |
1252 #else | |
1253 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1254 return -1; | |
1255 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1256 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1257 |
3139 | 1258 void * |
1259 qnxgf_gl_getprocaddres(_THIS, const char *proc) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1260 { |
3139 | 1261 #if defined(SDL_VIDEO_OPENGL_ES) |
1262 void *function_address; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1263 |
3139 | 1264 /* Try to get function address through the egl interface */ |
1265 function_address = eglGetProcAddress(proc); | |
1266 if (function_address != NULL) { | |
1267 return function_address; | |
1268 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1269 |
3139 | 1270 /* Then try to get function in the OpenGL ES library */ |
1271 if (_this->gl_config.dll_handle) { | |
1272 function_address = | |
1273 SDL_LoadFunction(_this->gl_config.dll_handle, proc); | |
1274 if (function_address != NULL) { | |
1275 return function_address; | |
1276 } | |
1277 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1278 |
3139 | 1279 /* Add emulated OpenGL ES 1.1 functions */ |
1280 if (SDL_strcmp(proc, "glTexParameteri") == 0) { | |
1281 return glTexParameteri; | |
1282 } | |
1283 if (SDL_strcmp(proc, "glTexParameteriv") == 0) { | |
1284 return glTexParameteriv; | |
1285 } | |
1286 if (SDL_strcmp(proc, "glColor4ub") == 0) { | |
1287 return glColor4ub; | |
1288 } | |
1289 | |
1290 /* Failed to get GL ES function address pointer */ | |
1291 SDL_SetError("GF: Cannot locate OpenGL ES function name"); | |
1292 return NULL; | |
1293 #else | |
1294 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1295 return NULL; | |
1296 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1297 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1298 |
3139 | 1299 void |
1300 qnxgf_gl_unloadlibrary(_THIS) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1301 { |
3139 | 1302 #if defined(SDL_VIDEO_OPENGL_ES) |
1303 /* Unload OpenGL ES library */ | |
1304 if (_this->gl_config.dll_handle) { | |
1305 SDL_UnloadObject(_this->gl_config.dll_handle); | |
1306 _this->gl_config.dll_handle = NULL; | |
1307 } | |
1308 #else | |
1309 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1310 return; | |
1311 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1312 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1313 |
3139 | 1314 SDL_GLContext |
1315 qnxgf_gl_createcontext(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1316 { |
3139 | 1317 #if defined(SDL_VIDEO_OPENGL_ES) |
1318 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; | |
1319 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
1320 SDL_DisplayData *didata = | |
1321 (SDL_DisplayData *) SDL_CurrentDisplay.driverdata; | |
1322 EGLBoolean status; | |
1323 int32_t gfstatus; | |
1324 EGLint configs; | |
1325 uint32_t surfaces; | |
1326 uint32_t attr_pos; | |
1327 EGLint attr_value; | |
1328 EGLint cit; | |
1329 | |
1330 /* Choose buffeingr scheme */ | |
1331 if (!_this->gl_config.double_buffer) { | |
1332 surfaces = 1; | |
1333 } else { | |
1334 surfaces = 2; | |
1335 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1336 |
3139 | 1337 /* If driver has no support of video memory allocation, then */ |
1338 /* disable double buffering, use single buffer present copy */ | |
1339 if ((didata->caps & SDL_GF_VIDEOMEMORY) != SDL_GF_VIDEOMEMORY) { | |
1340 surfaces = 1; | |
1341 } | |
1342 | |
1343 /* Free main surface */ | |
1344 if (didata->surface[0] != NULL) { | |
1345 gf_surface_free(didata->surface[0]); | |
1346 didata->surface[0] = NULL; | |
1347 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1348 |
3139 | 1349 /* Free back surface */ |
1350 if (didata->surface[1] != NULL) { | |
1351 gf_surface_free(didata->surface[1]); | |
1352 didata->surface[1] = NULL; | |
1353 } | |
3116
b17f1ae7ad66
Added support for single buffering, if double buffering is not available.
Mike Gorchak <lestat@i.com.ua>
parents:
3109
diff
changeset
|
1354 |
3139 | 1355 /* Free second back surface */ |
1356 if (didata->surface[2] != NULL) { | |
1357 gf_surface_free(didata->surface[2]); | |
1358 didata->surface[2] = NULL; | |
1359 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1360 |
3139 | 1361 /* Detach layer before switch to new graphics mode */ |
1362 if (didata->layer_attached == SDL_TRUE) { | |
1363 /* Disable layer if hardware supports this */ | |
1364 gf_layer_disable(didata->layer); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1365 |
3139 | 1366 /* Detach from layer, free it for others */ |
1367 gf_layer_detach(didata->layer); | |
1368 | |
1369 /* Mark it as detached */ | |
1370 didata->layer_attached = SDL_FALSE; | |
1371 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1372 |
3139 | 1373 /* Attach to main display layer */ |
1374 gfstatus = | |
1375 gf_layer_attach(&didata->layer, didata->display, | |
1376 didata->display_info.main_layer_index, 0); | |
1377 if (gfstatus != GF_ERR_OK) { | |
1378 SDL_SetError("GF: Couldn't attach to main layer, it could be busy"); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1379 |
3139 | 1380 /* Failed to attach to main displayable layer */ |
1381 return NULL; | |
1382 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1383 |
3139 | 1384 /* Mark main display layer is attached */ |
1385 didata->layer_attached = SDL_TRUE; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1386 |
3139 | 1387 /* Set layer source and destination viewport */ |
1388 gf_layer_set_src_viewport(didata->layer, 0, 0, didata->current_mode.w - 1, | |
1389 didata->current_mode.h - 1); | |
1390 gf_layer_set_dst_viewport(didata->layer, 0, 0, didata->current_mode.w - 1, | |
1391 didata->current_mode.h - 1); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1392 |
3139 | 1393 /* Create main visible on display surface */ |
1394 gfstatus = | |
1395 gf_surface_create_layer(&didata->surface[0], &didata->layer, 1, 0, | |
1396 didata->current_mode.w, | |
1397 didata->current_mode.h, | |
1398 qnxgf_sdl_to_gf_pixelformat(didata-> | |
1399 current_mode. | |
1400 format), NULL, | |
1401 GF_SURFACE_CREATE_2D_ACCESSIBLE | | |
1402 GF_SURFACE_CREATE_3D_ACCESSIBLE | | |
1403 GF_SURFACE_CREATE_SHAREABLE); | |
1404 if (gfstatus != GF_ERR_OK) { | |
1405 gf_layer_disable(didata->layer); | |
1406 gf_layer_detach(didata->layer); | |
1407 didata->layer_attached = SDL_FALSE; | |
1408 SDL_SetError("GF: Can't create main layer surface at glctx (%d)\n", | |
1409 gfstatus); | |
1410 return NULL; | |
1411 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1412 |
3139 | 1413 /* Set just created surface as main visible on the layer */ |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1414 // gf_layer_set_surfaces(didata->layer, &didata->surface[0], 1); |
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1415 |
3139 | 1416 if (surfaces > 1) { |
1417 /* Create back display surface */ | |
1418 gfstatus = | |
1419 gf_surface_create_layer(&didata->surface[1], &didata->layer, 1, 0, | |
1420 didata->current_mode.w, | |
1421 didata->current_mode.h, | |
1422 qnxgf_sdl_to_gf_pixelformat(didata-> | |
1423 current_mode. | |
1424 format), NULL, | |
1425 GF_SURFACE_CREATE_2D_ACCESSIBLE | | |
1426 GF_SURFACE_CREATE_3D_ACCESSIBLE | | |
1427 GF_SURFACE_CREATE_SHAREABLE); | |
1428 if (gfstatus != GF_ERR_OK) { | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1429 gf_surface_free(didata->surface[0]); |
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1430 gf_layer_disable(didata->layer); |
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1431 gf_layer_detach(didata->layer); |
3139 | 1432 didata->layer_attached = SDL_FALSE; |
1433 SDL_SetError | |
1434 ("GF: Can't create main layer surface at glctx (%d)\n", | |
1435 gfstatus); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1436 return NULL; |
3139 | 1437 } |
1438 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1439 |
3139 | 1440 /* Update layer parameters */ |
1441 gfstatus = gf_layer_update(didata->layer, GF_LAYER_UPDATE_NO_WAIT_IDLE); | |
1442 if (gfstatus != GF_ERR_OK) { | |
1443 /* Free main and back surfaces */ | |
1444 gf_surface_free(didata->surface[1]); | |
1445 didata->surface[1] = NULL; | |
1446 gf_surface_free(didata->surface[0]); | |
1447 didata->surface[0] = NULL; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1448 |
3139 | 1449 /* Detach layer */ |
1450 gf_layer_disable(didata->layer); | |
1451 gf_layer_detach(didata->layer); | |
1452 didata->layer_attached = SDL_FALSE; | |
1453 SDL_SetError("GF: Can't update layer parameters\n"); | |
1454 return NULL; | |
1455 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1456 |
3139 | 1457 /* Enable layer in case if hardware supports layer enable/disable */ |
1458 gf_layer_enable(didata->layer); | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1459 |
3139 | 1460 /* Prepare attributes list to pass them to OpenGL ES */ |
1461 attr_pos = 0; | |
1462 wdata->gles_attributes[attr_pos++] = EGL_NATIVE_VISUAL_ID; | |
1463 wdata->gles_attributes[attr_pos++] = | |
1464 qnxgf_sdl_to_gf_pixelformat(didata->current_mode.format); | |
1465 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE; | |
1466 wdata->gles_attributes[attr_pos++] = _this->gl_config.red_size; | |
1467 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE; | |
1468 wdata->gles_attributes[attr_pos++] = _this->gl_config.green_size; | |
1469 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE; | |
1470 wdata->gles_attributes[attr_pos++] = _this->gl_config.blue_size; | |
1471 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE; | |
1472 if (_this->gl_config.alpha_size) { | |
1473 wdata->gles_attributes[attr_pos++] = _this->gl_config.alpha_size; | |
1474 } else { | |
1475 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1476 } | |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1477 |
3139 | 1478 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1479 if (_this->gl_config.depth_size) { |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1480 wdata->gles_attributes[attr_pos++] = _this->gl_config.depth_size; |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1481 } else { |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1482 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1483 } |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1484 |
3139 | 1485 if (_this->gl_config.buffer_size) { |
1486 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE; | |
1487 wdata->gles_attributes[attr_pos++] = _this->gl_config.buffer_size; | |
1488 } | |
1489 if (_this->gl_config.stencil_size) { | |
1490 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1491 wdata->gles_attributes[attr_pos++] = _this->gl_config.stencil_size; |
3139 | 1492 } |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1493 |
3139 | 1494 /* Set number of samples in multisampling */ |
1495 if (_this->gl_config.multisamplesamples) { | |
1496 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES; | |
1497 wdata->gles_attributes[attr_pos++] = | |
1498 _this->gl_config.multisamplesamples; | |
1499 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1500 |
3139 | 1501 /* Multisample buffers, OpenGL ES 1.0 spec defines 0 or 1 buffer */ |
1502 if (_this->gl_config.multisamplebuffers) { | |
1503 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS; | |
1504 wdata->gles_attributes[attr_pos++] = | |
1505 _this->gl_config.multisamplebuffers; | |
1506 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1507 |
3139 | 1508 /* Finish attributes list */ |
1509 wdata->gles_attributes[attr_pos] = EGL_NONE; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1510 |
3139 | 1511 /* Request first suitable framebuffer configuration */ |
1512 status = eglChooseConfig(gfdata->egldisplay, wdata->gles_attributes, | |
1513 wdata->gles_configs, SDL_VIDEO_GF_OPENGLES_CONFS, | |
1514 &configs); | |
1515 if (status != EGL_TRUE) { | |
1516 SDL_SetError("GF: Can't find closest configuration for OpenGL ES"); | |
1517 return NULL; | |
1518 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1519 |
3139 | 1520 /* Check if nothing has been found, try "don't care" settings */ |
1521 if (configs == 0) { | |
1522 int32_t it; | |
1523 int32_t jt; | |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
1524 static const GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE }; |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1525 |
3139 | 1526 for (it = 0; it < 4; it++) { |
1527 for (jt = 16; jt >= 0; jt--) { | |
1528 /* Don't care about color buffer bits, use what exist */ | |
1529 /* Replace previous data set with EGL_DONT_CARE */ | |
1530 attr_pos = 0; | |
1531 wdata->gles_attributes[attr_pos++] = EGL_NATIVE_VISUAL_ID; | |
1532 wdata->gles_attributes[attr_pos++] = | |
1533 qnxgf_sdl_to_gf_pixelformat(didata->current_mode.format); | |
1534 wdata->gles_attributes[attr_pos++] = EGL_RED_SIZE; | |
1535 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1536 wdata->gles_attributes[attr_pos++] = EGL_GREEN_SIZE; | |
1537 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1538 wdata->gles_attributes[attr_pos++] = EGL_BLUE_SIZE; | |
1539 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1540 wdata->gles_attributes[attr_pos++] = EGL_ALPHA_SIZE; | |
1541 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1542 wdata->gles_attributes[attr_pos++] = EGL_BUFFER_SIZE; | |
1543 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1544 |
3139 | 1545 /* Try to find requested or smallest depth */ |
1546 if (_this->gl_config.depth_size) { | |
1547 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; | |
1548 wdata->gles_attributes[attr_pos++] = depthbits[it]; | |
1549 } else { | |
1550 wdata->gles_attributes[attr_pos++] = EGL_DEPTH_SIZE; | |
1551 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1552 } | |
1553 | |
1554 if (_this->gl_config.stencil_size) { | |
1555 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1556 wdata->gles_attributes[attr_pos++] = jt; | |
1557 } else { | |
1558 wdata->gles_attributes[attr_pos++] = EGL_STENCIL_SIZE; | |
1559 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1560 |
3139 | 1561 /* exit from stencil loop */ |
1562 jt = 0; | |
1563 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1564 |
3139 | 1565 /* Don't care about antialiasing */ |
1566 wdata->gles_attributes[attr_pos++] = EGL_SAMPLES; | |
1567 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1568 wdata->gles_attributes[attr_pos++] = EGL_SAMPLE_BUFFERS; | |
1569 wdata->gles_attributes[attr_pos++] = EGL_DONT_CARE; | |
1570 wdata->gles_attributes[attr_pos] = EGL_NONE; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1571 |
3139 | 1572 /* Request first suitable framebuffer configuration */ |
1573 status = | |
1574 eglChooseConfig(gfdata->egldisplay, | |
1575 wdata->gles_attributes, | |
1576 wdata->gles_configs, | |
1577 SDL_VIDEO_GF_OPENGLES_CONFS, &configs); | |
1578 if (status != EGL_TRUE) { | |
1579 SDL_SetError | |
3185
44d5474c2c8a
Continue working on QNX GF and Photon support.
Mike Gorchak <lestat@i.com.ua>
parents:
3139
diff
changeset
|
1580 ("GF: Can't find closest configuration for OpenGL ES"); |
3139 | 1581 return NULL; |
1582 } | |
1583 if (configs != 0) { | |
1584 break; | |
1585 } | |
1586 } | |
1587 if (configs != 0) { | |
1588 break; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1589 } |
3139 | 1590 } |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1591 |
3139 | 1592 /* No available configs */ |
1593 if (configs == 0) { | |
3186 | 1594 SDL_SetError("GF: Can't find any configuration for OpenGL ES"); |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1595 return NULL; |
3139 | 1596 } |
1597 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1598 |
3139 | 1599 /* Initialize config index */ |
1600 wdata->gles_config = 0; | |
1601 | |
1602 /* Now check each configuration to find out the best */ | |
1603 for (cit = 0; cit < configs; cit++) { | |
1604 uint32_t stencil_found; | |
1605 uint32_t depth_found; | |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1606 EGLint cur_depth; |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1607 EGLint cur_stencil; |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1608 |
3139 | 1609 stencil_found = 0; |
1610 depth_found = 0; | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1611 |
3139 | 1612 if (_this->gl_config.stencil_size) { |
1613 status = | |
1614 eglGetConfigAttrib(gfdata->egldisplay, | |
1615 wdata->gles_configs[cit], EGL_STENCIL_SIZE, | |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1616 &cur_stencil); |
3139 | 1617 if (status == EGL_TRUE) { |
1618 if (attr_value != 0) { | |
1619 stencil_found = 1; | |
1620 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1621 } |
3139 | 1622 } else { |
1623 stencil_found = 1; | |
1624 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1625 |
3139 | 1626 if (_this->gl_config.depth_size) { |
1627 status = | |
1628 eglGetConfigAttrib(gfdata->egldisplay, | |
1629 wdata->gles_configs[cit], EGL_DEPTH_SIZE, | |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1630 &cur_depth); |
3139 | 1631 if (status == EGL_TRUE) { |
1632 if (attr_value != 0) { | |
1633 depth_found = 1; | |
1634 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1635 } |
3139 | 1636 } else { |
1637 depth_found = 1; | |
1638 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1639 |
3139 | 1640 /* Exit from loop if found appropriate configuration */ |
1641 if ((depth_found != 0) && (stencil_found != 0)) { | |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1642 /* Store last satisfied configuration id */ |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1643 wdata->gles_config = cit; |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1644 |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1645 if (cur_depth==_this->gl_config.depth_size) |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1646 { |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1647 /* Exact match on depth bits */ |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1648 if (!_this->gl_config.stencil_size) |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1649 { |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1650 /* Stencil is not required */ |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1651 break; |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1652 } |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1653 else |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1654 { |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1655 if (cur_stencil==_this->gl_config.stencil_size) |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1656 { |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1657 /* Exact match on stencil bits */ |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1658 break; |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1659 } |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1660 } |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1661 } |
3139 | 1662 } |
1663 } | |
1664 | |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1665 /* If best could not be found, use first or last satisfied */ |
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1666 if ((cit == configs) && (wdata->gles_config==0)) { |
3139 | 1667 cit = 0; |
3412
fe9c8a5cab51
Fixes in GLES configuration selection.
Mike Gorchak <lestat@i.com.ua>
parents:
3186
diff
changeset
|
1668 wdata->gles_config = cit; |
3139 | 1669 } |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1670 |
3139 | 1671 /* Create OpenGL ES context */ |
1672 wdata->gles_context = | |
1673 eglCreateContext(gfdata->egldisplay, | |
1674 wdata->gles_configs[wdata->gles_config], | |
1675 EGL_NO_CONTEXT, NULL); | |
1676 if (wdata->gles_context == EGL_NO_CONTEXT) { | |
1677 SDL_SetError("GF: OpenGL ES context creation has been failed"); | |
1678 return NULL; | |
1679 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1680 |
3139 | 1681 /* Free any 3D target if it was created before */ |
1682 if (wdata->target_created == SDL_TRUE) { | |
1683 gf_3d_target_free(wdata->target); | |
1684 wdata->target_created == SDL_FALSE; | |
1685 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1686 |
3139 | 1687 /* Create surface(s) target for OpenGL ES */ |
1688 gfstatus = | |
1689 gf_3d_target_create(&wdata->target, didata->layer, | |
1690 &didata->surface[0], surfaces, | |
1691 didata->current_mode.w, didata->current_mode.h, | |
1692 qnxgf_sdl_to_gf_pixelformat(didata->current_mode. | |
1693 format)); | |
1694 if (gfstatus != GF_ERR_OK) { | |
1695 /* Destroy just created context */ | |
1696 eglDestroyContext(gfdata->egldisplay, wdata->gles_context); | |
1697 wdata->gles_context = EGL_NO_CONTEXT; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1698 |
3139 | 1699 /* Mark 3D target as unallocated */ |
1700 wdata->target_created = SDL_FALSE; | |
1701 SDL_SetError("GF: OpenGL ES target could not be created"); | |
1702 return NULL; | |
1703 } else { | |
1704 wdata->target_created = SDL_TRUE; | |
1705 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1706 |
3139 | 1707 /* Create target rendering surface on whole screen */ |
1708 wdata->gles_surface = | |
1709 eglCreateWindowSurface(gfdata->egldisplay, | |
1710 wdata->gles_configs[wdata->gles_config], | |
1711 wdata->target, NULL); | |
1712 if (wdata->gles_surface == EGL_NO_SURFACE) { | |
1713 /* Destroy 3d target */ | |
1714 gf_3d_target_free(wdata->target); | |
1715 wdata->target_created = SDL_FALSE; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1716 |
3139 | 1717 /* Destroy OpenGL ES context */ |
1718 eglDestroyContext(gfdata->egldisplay, wdata->gles_context); | |
1719 wdata->gles_context = EGL_NO_CONTEXT; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1720 |
3139 | 1721 SDL_SetError("GF: OpenGL ES surface could not be created"); |
1722 return NULL; | |
1723 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1724 |
3139 | 1725 /* Make just created context current */ |
1726 status = | |
1727 eglMakeCurrent(gfdata->egldisplay, wdata->gles_surface, | |
1728 wdata->gles_surface, wdata->gles_context); | |
1729 if (status != EGL_TRUE) { | |
1730 /* Destroy OpenGL ES surface */ | |
1731 eglDestroySurface(gfdata->egldisplay, wdata->gles_surface); | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1732 |
3139 | 1733 /* Destroy 3d target */ |
1734 gf_3d_target_free(wdata->target); | |
1735 wdata->target_created = SDL_FALSE; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1736 |
3139 | 1737 /* Destroy OpenGL ES context */ |
1738 eglDestroyContext(gfdata->egldisplay, wdata->gles_context); | |
1739 wdata->gles_context = EGL_NO_CONTEXT; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1740 |
3139 | 1741 /* Failed to set current GL ES context */ |
1742 SDL_SetError("GF: Can't set OpenGL ES context on creation"); | |
1743 return NULL; | |
1744 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1745 |
3139 | 1746 /* Setup into SDL internals state of OpenGL ES: */ |
1747 /* it is accelerated or not */ | |
1748 if ((didata->caps & SDL_GF_ACCELERATED_3D) == SDL_GF_ACCELERATED_3D) { | |
1749 _this->gl_config.accelerated = 1; | |
1750 } else { | |
1751 _this->gl_config.accelerated = 0; | |
1752 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1753 |
3139 | 1754 /* Always clear stereo enable, since OpenGL ES do not supports stereo */ |
1755 _this->gl_config.stereo = 0; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1756 |
3139 | 1757 /* Get back samples and samplebuffers configurations. Rest framebuffer */ |
1758 /* parameters could be obtained through the OpenGL ES API */ | |
1759 status = | |
1760 eglGetConfigAttrib(gfdata->egldisplay, | |
1761 wdata->gles_configs[wdata->gles_config], | |
1762 EGL_SAMPLES, &attr_value); | |
1763 if (status == EGL_TRUE) { | |
1764 _this->gl_config.multisamplesamples = attr_value; | |
1765 } | |
1766 status = | |
1767 eglGetConfigAttrib(gfdata->egldisplay, | |
1768 wdata->gles_configs[wdata->gles_config], | |
1769 EGL_SAMPLE_BUFFERS, &attr_value); | |
1770 if (status == EGL_TRUE) { | |
1771 _this->gl_config.multisamplebuffers = attr_value; | |
1772 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1773 |
3139 | 1774 /* Get back stencil and depth buffer sizes */ |
1775 status = | |
1776 eglGetConfigAttrib(gfdata->egldisplay, | |
1777 wdata->gles_configs[wdata->gles_config], | |
1778 EGL_DEPTH_SIZE, &attr_value); | |
1779 if (status == EGL_TRUE) { | |
1780 _this->gl_config.depth_size = attr_value; | |
1781 } | |
1782 status = | |
1783 eglGetConfigAttrib(gfdata->egldisplay, | |
1784 wdata->gles_configs[wdata->gles_config], | |
1785 EGL_STENCIL_SIZE, &attr_value); | |
1786 if (status == EGL_TRUE) { | |
1787 _this->gl_config.stencil_size = attr_value; | |
1788 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1789 |
3139 | 1790 /* Restore cursor if it was visible */ |
1791 if (didata->cursor_visible == SDL_TRUE) { | |
1792 gf_cursor_set(didata->display, 0, &didata->cursor); | |
1793 gf_cursor_enable(didata->display, 0); | |
1794 } | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1795 |
3139 | 1796 /* GL ES context was successfully created */ |
1797 return wdata->gles_context; | |
1798 #else | |
1799 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1800 return NULL; | |
1801 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1802 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1803 |
3139 | 1804 int |
1805 qnxgf_gl_makecurrent(_THIS, SDL_Window * window, SDL_GLContext context) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1806 { |
3139 | 1807 #if defined(SDL_VIDEO_OPENGL_ES) |
1808 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; | |
1809 SDL_WindowData *wdata; | |
1810 EGLBoolean status; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1811 |
3139 | 1812 if ((window == NULL) && (context == NULL)) { |
1813 status = | |
1814 eglMakeCurrent(gfdata->egldisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, | |
1815 EGL_NO_CONTEXT); | |
1816 if (status != EGL_TRUE) { | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1817 /* Failed to set current GL ES context */ |
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1818 SDL_SetError("GF: Can't set OpenGL ES context"); |
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1819 return -1; |
3139 | 1820 } |
1821 } else { | |
1822 wdata = (SDL_WindowData *) window->driverdata; | |
1823 status = | |
1824 eglMakeCurrent(gfdata->egldisplay, wdata->gles_surface, | |
1825 wdata->gles_surface, wdata->gles_context); | |
1826 if (status != EGL_TRUE) { | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1827 /* Failed to set current GL ES context */ |
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1828 SDL_SetError("GF: Can't set OpenGL ES context"); |
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1829 return -1; |
3139 | 1830 } |
1831 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1832 |
3139 | 1833 return 0; |
1834 #else | |
1835 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1836 return -1; | |
1837 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1838 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1839 |
3139 | 1840 int |
1841 qnxgf_gl_setswapinterval(_THIS, int interval) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1842 { |
3139 | 1843 #if defined(SDL_VIDEO_OPENGL_ES) |
1844 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; | |
1845 EGLBoolean status; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1846 |
3139 | 1847 /* Check if OpenGL ES connection has been initialized */ |
1848 if (gfdata->egldisplay != EGL_NO_DISPLAY) { | |
1849 /* Set swap OpenGL ES interval */ | |
1850 status = eglSwapInterval(gfdata->egldisplay, interval); | |
1851 if (status == EGL_TRUE) { | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1852 /* Return success to upper level */ |
3139 | 1853 gfdata->swapinterval = interval; |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1854 return 0; |
3139 | 1855 } |
1856 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1857 |
3139 | 1858 /* Failed to set swap interval */ |
1859 SDL_SetError("GF: Cannot set swap interval"); | |
1860 return -1; | |
1861 #else | |
1862 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1863 return -1; | |
1864 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1865 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1866 |
3139 | 1867 int |
1868 qnxgf_gl_getswapinterval(_THIS) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1869 { |
3139 | 1870 #if defined(SDL_VIDEO_OPENGL_ES) |
1871 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1872 |
3139 | 1873 /* Return default swap interval value */ |
1874 return gfdata->swapinterval; | |
1875 #else | |
1876 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1877 return -1; | |
1878 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1879 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1880 |
3139 | 1881 void |
1882 qnxgf_gl_swapwindow(_THIS, SDL_Window * window) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1883 { |
3139 | 1884 #if defined(SDL_VIDEO_OPENGL_ES) |
1885 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; | |
1886 SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1887 |
3139 | 1888 /* Finish all drawings */ |
1889 glFinish(); | |
3109
7b3a09fb9c8b
Support for HID devices (mice and keyboards only for now) has been added
Mike Gorchak <lestat@i.com.ua>
parents:
3099
diff
changeset
|
1890 |
3139 | 1891 /* Swap buffers */ |
1892 eglSwapBuffers(gfdata->egldisplay, wdata->gles_surface); | |
1893 #else | |
1894 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1895 return; | |
1896 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1897 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1898 |
3139 | 1899 void |
1900 qnxgf_gl_deletecontext(_THIS, SDL_GLContext context) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1901 { |
3139 | 1902 #if defined(SDL_VIDEO_OPENGL_ES) |
1903 SDL_VideoData *gfdata = (SDL_VideoData *) _this->driverdata; | |
1904 EGLBoolean status; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1905 |
3139 | 1906 /* Check if OpenGL ES connection has been initialized */ |
1907 if (gfdata->egldisplay != EGL_NO_DISPLAY) { | |
1908 if (context != EGL_NO_CONTEXT) { | |
1909 status = eglDestroyContext(gfdata->egldisplay, context); | |
1910 if (status != EGL_TRUE) { | |
1911 /* Error during OpenGL ES context destroying */ | |
1912 SDL_SetError("GF: OpenGL ES context destroy error"); | |
1913 return; | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1914 } |
3139 | 1915 } |
1916 } | |
3099
82e60908fab1
Date: Mon, 23 Mar 2009 09:17:24 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3092
diff
changeset
|
1917 |
3139 | 1918 return; |
1919 #else | |
1920 SDL_SetError("GF: OpenGL ES support is not compiled in"); | |
1921 return; | |
1922 #endif /* SDL_VIDEO_OPENGL_ES */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1923 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1924 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1925 /*****************************************************************************/ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1926 /* SDL Event handling function */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1927 /*****************************************************************************/ |
3139 | 1928 void |
1929 qnxgf_pumpevents(_THIS) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1930 { |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1931 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1932 |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1933 /*****************************************************************************/ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1934 /* SDL screen saver related functions */ |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1935 /*****************************************************************************/ |
3139 | 1936 void |
1937 qnxgf_suspendscreensaver(_THIS) | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1938 { |
3139 | 1939 /* There is no screensaver in pure console, it may exist when running */ |
1940 /* GF under Photon, but I do not know, how to disable screensaver */ | |
3087
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1941 } |
0b6f51c29267
Date: Wed, 4 Mar 2009 15:38:22 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
3083
diff
changeset
|
1942 |
3083
0bc41e0361d3
Date: Mon, 2 Mar 2009 16:27:42 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1943 /* vi: set ts=4 sw=4 expandtab: */ |