Mercurial > fife-parpg
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); |