gcc — переносимый способ в C ++ для получения разрешения рабочего стола

Я делаю игру на C ++ и хочу, чтобы она автоматически получала разрешение рабочего стола пользователя.

Пока я нашел решения только для Windows — есть ли способ / библиотека, чтобы найти разрешение в Windows / Mac / Linux?

9

Решение

Есть несколько библиотек, которые помогут вам в разработке низкоуровневого материала. В любом случае, на этих платформах вам, возможно, понадобится больше вещей, поэтому я перечислю некоторые:

  • SFML это Библиотека C ++ абстрагирование большей части ввода / вывода, включая управление отображением. Также поддерживает несколько платформ.
  • Классический SDL, хотя будучи C библиотека широко используется в разработке платформно-независимых игр и поддерживает несколько платформ. Как и SFML, он делает больше, чем просто управление отображением.
  • GLFW, увидеть ответ Wardds, также C библиотека а также создает уровень абстракции, но более сфокусированный на отображении и вводе / выводе клавиатуры / мыши вместо более широкого ввода / вывода (аудио и т. д.)
7

Другие решения

GLFW предоставляет кроссплатформенный (для Windows, Mac и Linux) способ перехода в режим рабочего стола. Это C api, но это будет работать в C ++. Соответствующая функция (и документация) здесь:

void glfwGetDesktopMode( GLFWvidmode *mode )

параметры

mode
Указатель на GLFWvidmode структура, которая будет заполнена функцией.

Возвращаемые значения

GLFWvidmode структура, на которую указывает режим, заполняется режимом рабочего стола.

Описание

Эта функция возвращает режим видео на рабочем столе в GLFWvidmode состав. Увидеть glfwGetVideoModes
для определения GLFWvidmode состав.

Заметки

Глубина цвета дисплея рабочего стола всегда указывается как количество бит для каждого отдельного цвета.
компонент (красный, зеленый и синий), даже если на рабочем столе не используется цветовой формат RGB или RGBA. За
Например, индексированное 256-цветное отображение может сообщать RedBits = 3, GreenBits = 3 и BlueBits = 2, что
добавляет до 8 бит в общей сложности.

Режим видео рабочего стола — это режим видео, используемый рабочим столом в то время, когда окно GLFW было
открыт, а не текущий режим видео (который может отличаться от режима рабочего стола, если GLFW
окно полноэкранное окно).

typedef struct {
int Width, Height; // Video resolution
int RedBits; // Number of red bits
int GreenBits; // Number of green bits
int BlueBits; // Number of blue bits
} GLFWvidmode;

Увидеть Джонас Велицкий ответ для альтернатив.

5

Я сделал кроссплатформенную функцию C ++:

#if WIN32
#include <windows.h>
#else
#include <X11/Xlib.h>
#endif

//...

void getScreenResolution(int &width, int &height) {
#if WIN32
width  = (int) GetSystemMetrics(SM_CXSCREEN);
height = (int) GetSystemMetrics(SM_CYSCREEN);
#else
Display* disp = XOpenDisplay(NULL);
Screen*  scrn = DefaultScreenOfDisplay(disp);
width  = scrn->width;
height = scrn->height;
#endif
}

int main() {
int width, height;
getScreenResolution(width, height);
printf("Screen resolution: %dx%d\n", width, height);
}
1
По вопросам рекламы [email protected]