comparison engine/core/video/devicecaps.cpp @ 639:685d250f2c2d

* Improvements for DeviceCaps. It now stores a list of valid SDL drivers. Currently in windows we are limited to the windows GDI (which is slow). This could mean that SDL users could benifit from hardware acceleration with directx (a valid SDL driver).
author prock@33b003aa-7bff-0310-803a-e67f0ece8222
date Thu, 07 Oct 2010 16:44:44 +0000
parents 3822b30fd98c
children 6e2151325017
comparison
equal deleted inserted replaced
638:980c02db2f56 639:685d250f2c2d
48 m_bpp = rhs.getBPP(); 48 m_bpp = rhs.getBPP();
49 m_SDLFlags = rhs.getSDLFlags(); 49 m_SDLFlags = rhs.getSDLFlags();
50 } 50 }
51 51
52 DeviceCaps::DeviceCaps() : 52 DeviceCaps::DeviceCaps() :
53 m_driverName("Invalid"),
53 m_hwAvailable(false), 54 m_hwAvailable(false),
54 m_wmAvailable(false), 55 m_wmAvailable(false),
55 m_hwBlitAccel(false), 56 m_hwBlitAccel(false),
56 m_hwCCBlitAccel(false), 57 m_hwCCBlitAccel(false),
57 m_hwToHwAlphaBlitAccel(false), 58 m_hwToHwAlphaBlitAccel(false),
58 m_swToHwBlitAccel(false), 59 m_swToHwBlitAccel(false),
59 m_swToHwCCBlistAccel(false), 60 m_swToHwCCBlistAccel(false),
60 m_swToHwAlphaBlitAccel(false), 61 m_swToHwAlphaBlitAccel(false),
61 m_BlitFillAccel(false), 62 m_BlitFillAccel(false),
62 m_videoMem(0) { 63 m_videoMem(0) {
64
65 fillAvailableDrivers();
63 } 66 }
64 67
65 68
66 DeviceCaps::~DeviceCaps() { 69 DeviceCaps::~DeviceCaps() {
70 }
71
72 void DeviceCaps::reset() {
73 m_screenModes.clear();
74 m_driverName = "Invalid";
75 m_hwAvailable = false;
76 m_wmAvailable = false;
77 m_hwBlitAccel = false;
78 m_hwCCBlitAccel = false;
79 m_hwToHwAlphaBlitAccel = false;
80 m_swToHwBlitAccel = false;
81 m_swToHwCCBlistAccel = false;
82 m_swToHwAlphaBlitAccel = false;
83 m_BlitFillAccel = false;
84 m_videoMem = 0;
85 }
86
87
88 void DeviceCaps::fillAvailableDrivers() {
89 m_availableDrivers.clear();
90 #if defined( __unix__ )
91 m_availableDrivers.push_back("x11");
92 m_availableDrivers.push_back("nanox");
93 m_availableDrivers.push_back("qtopia");
94 m_availableDrivers.push_back("fbcon");
95 m_availableDrivers.push_back("directfb");
96 m_availableDrivers.push_back("svgalib");
97 #endif
98
99 // Win32
100 #if defined( WIN32 )
101 m_availableDrivers.push_back("directx");
102 m_availableDrivers.push_back("windib");
103 #endif
104
105 // Macintosh
106 #if defined( __APPLE_CC__ )
107 m_availableDrivers.push_back("Quartz");
108 m_availableDrivers.push_back("x11");
109 #endif
67 } 110 }
68 111
69 void DeviceCaps::fillDeviceCaps() { 112 void DeviceCaps::fillDeviceCaps() {
70 int bufferSize = 256; 113 int bufferSize = 256;
71 char buffer[bufferSize]; 114 char buffer[bufferSize];
72 115
73 int numBPP = 1; 116 int numBPP = 1;
74 int bpps[numBPP]; 117 int bpps[numBPP];
75 118
76 SDL_Rect **modes; 119 SDL_Rect **modes;
120
121 //clear in case this is called twice
122 reset();
77 123
78 //FLAGS 124 //FLAGS
79 #ifdef HAVE_OPENGL 125 #ifdef HAVE_OPENGL
80 int numFlags = 4; 126 int numFlags = 4;
81 Uint32 flags[numFlags]; 127 Uint32 flags[numFlags];
103 149
104 for (int i = 0; i < numBPP; ++i){ 150 for (int i = 0; i < numBPP; ++i){
105 for (int j = 0; j < numFlags; ++j) { 151 for (int j = 0; j < numFlags; ++j) {
106 modes = SDL_ListModes(NULL, flags[j]); 152 modes = SDL_ListModes(NULL, flags[j]);
107 153
154 if (modes == (SDL_Rect**)0) {
155 //no modes found
156 break;
157 }
158
108 if (modes == (SDL_Rect**)-1) { 159 if (modes == (SDL_Rect**)-1) {
109 //All screen modes are available with the specified flags (a windowed mode most likely) 160 //All screen modes are available with the specified flags (a windowed mode most likely)
110 ScreenMode mode = ScreenMode(0, 0, bpps[i], flags[j]); 161 ScreenMode mode = ScreenMode(0, 0, bpps[i], flags[j]);
111 m_screenModes.push_back(mode); 162 m_screenModes.push_back(mode);
112 continue; 163 continue;
117 if (bpp > 0) { 168 if (bpp > 0) {
118 ScreenMode mode = ScreenMode(modes[k]->w, modes[k]->h, bpps[i], flags[j]); 169 ScreenMode mode = ScreenMode(modes[k]->w, modes[k]->h, bpps[i], flags[j]);
119 m_screenModes.push_back(mode); 170 m_screenModes.push_back(mode);
120 } 171 }
121 } 172 }
173 modes = (SDL_Rect**)0;
122 } 174 }
123 } 175 }
124 176
125 if(SDL_VideoDriverName(buffer, bufferSize) != NULL) { 177 if(SDL_VideoDriverName(buffer, bufferSize) != NULL) {
126 m_driverName = std::string(buffer); 178 m_driverName = std::string(buffer);