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