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