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