comparison engine/core/video/devicecaps.cpp @ 636:f7863bfa92cd

* Changed the way screen resolutions are detected * Added the ability to query the video driver name
author prock@33b003aa-7bff-0310-803a-e67f0ece8222
date Wed, 06 Oct 2010 20:54:28 +0000
parents 3094988564d5
children 3822b30fd98c
comparison
equal deleted inserted replaced
635:3094988564d5 636:f7863bfa92cd
55 55
56 DeviceCaps::~DeviceCaps() { 56 DeviceCaps::~DeviceCaps() {
57 } 57 }
58 58
59 void DeviceCaps::fillDeviceCaps() { 59 void DeviceCaps::fillDeviceCaps() {
60 int bufferSize = 256;
61 char buffer[bufferSize];
62
60 int numBPP = 1; 63 int numBPP = 1;
61 int bpps[numBPP]; 64 int bpps[numBPP];
62 65
63 int numResolutions = 15; 66 SDL_Rect **modes;
64 67
65 //FLAGS 68 //FLAGS
66 #ifdef HAVE_OPENGL 69 #ifdef HAVE_OPENGL
67 int numFlags = 4; 70 int numFlags = 4;
68 Uint32 flags[numFlags]; 71 Uint32 flags[numFlags];
86 #endif 89 #endif
87 //BITS PER PIXEL 90 //BITS PER PIXEL
88 91
89 bpps[0] = 32; 92 bpps[0] = 32;
90 93
94 for (int i = 0; i < numBPP; ++i){
95 for (int j = 0; j < numFlags; ++j) {
96 modes = SDL_ListModes(NULL, flags[j]);
91 97
92 //RESOLUTIONS 98 if (modes == (SDL_Rect**)-1) {
93 int resolutions[15][2] = { 99 //All screen modes are available with the specified flags (a windowed mode most likely)
94 {640, 480}, 100 ScreenMode mode = ScreenMode(0, 0, bpps[i], flags[j]);
95 {800, 600}, 101 m_screenModes.push_back(mode);
96 {1024, 768}, 102 continue;
97 {1152, 864}, 103 }
98 {1280, 768},
99 {1280, 800},
100 {1280, 960},
101 {1280, 1024},
102 {1366, 768},
103 {1440, 900},
104 {1600, 900},
105 {1600, 1200},
106 {1680, 1050},
107 {1920, 1080},
108 {1920, 1200}
109 };
110 104
111 int bpp; 105 for (int k = 0; modes[k]; ++k) {
112 106 int bpp = SDL_VideoModeOK(modes[k]->w, modes[k]->h, bpps[i], flags[j]);
113 for (int i = 0; i < numBPP; i++){
114 for (int j = 0; j < numFlags; j++) {
115 for (int k = 0; k < numResolutions; k++) {
116 bpp = SDL_VideoModeOK(resolutions[k][0], resolutions[k][1], bpps[i], flags[j]);
117 if (bpp > 0) { 107 if (bpp > 0) {
118 // std::cout << resolutions[k][0] << "x" << resolutions[k][1] << ":" << bpp << std::endl; 108 ScreenMode mode = ScreenMode(modes[k]->w, modes[k]->h, bpps[i], flags[j]);
119 ScreenMode mode = ScreenMode(resolutions[k][0], resolutions[k][1], bpps[i], flags[j]);
120 m_screenModes.push_back(mode); 109 m_screenModes.push_back(mode);
121 } 110 }
122 } 111 }
123 } 112 }
124 } 113 }
125 114
115 if(SDL_VideoDriverName(buffer, bufferSize) != NULL) {
116 m_driverName = std::string(buffer);
117 }
118 else {
119 m_driverName = "Unknown";
120 }
121
126 } 122 }
127 123
128 } //FIFE 124 } //FIFE