OpenGL и SDL, изменение размера окна при сохранении внутреннего разрешения без изменений? - PullRequest
2 голосов
/ 27 августа 2011

Я делаю игру в OpenGL и использую SDL для управления окном, установки значков и всего такого.Теперь, когда я установил рендеринг сцены в кадровый буфер, я подумал, могу ли я изменить размер окна SDL, сохраняя мои начальные настройки GL (я пытаюсь эмулировать точное разрешение, чтобы изменение размера окна было масштабированием кадрового буфера до размера окна)

Я попытался дать окну SDL двойное разрешение по сравнению с разрешением, которое я передаю glortho, но оно дает неожиданные результаты ©.Это вообще возможно, или мне нужно постоянно адаптировать свое рабочее разрешение к разрешению экрана?Я использую этот код для инициализации видео

SDL_SetVideoMode(XRES, YRES, bpp, SDL_OPENGL | SDL_HWPALETTE);
gl_init(XRES,YRES);

И в gl_init я устанавливаю glortho на glOrtho (0, width, 0, height, -1, 1), а затем кадровый буфер "очищает" текстуру от ширины иВысота в размере, а также.

Когда функция вызывается, как указано выше, все хорошо.Но если я попробую что-то вроде

SDL_SetVideoMode(XRES*2, YRES*2, bpp, SDL_OPENGL | SDL_HWPALETTE);
gl_init(XRES,YRES);

Вместо того, чтобы получить ожидаемые результаты (масштабированный вывод), я обнаружу, что вывод находится где-то в крайнем левом положении на оси X и где-то в середине оси Y,как если бы размер GL был даже больше, чем экран, а остальное было вырезано.Я что-то пропустил?

Ответы [ 3 ]

2 голосов
/ 27 августа 2011

Попробуйте просто установить размер текстуры FBO равным 1/4 размера окна (1/2 длины его ребер), а затем визуализировать текстуру цветового буфера FBO для всего окна SDL.

1 голос
/ 05 июля 2017

Я знаю, что это старый вопрос, но он лучший результат в Google и не имеет ответа.

Вам нужно будет позвонить glViewport(). Предположим, вы хотите, чтобы ваше внутреннее разрешение было 1024x768, а разрешение вашего окна - windowWidth и windowHeight. Прежде чем писать в свой FBO, позвоните glViewport(0, 0, 1024, 768). Затем, прежде чем записать свой FBO в окно, позвоните glViewport(0, 0, windowWidth, windowHeight).

0 голосов
/ 14 марта 2018

Вы используете этот код в игровом цикле

int w, h;
SDL_GetWindowSize(Window, &w, &h);
glViewport(0, 0, w, h);
...