История изменений
Исправление Deleted, (текущая версия) :
Касательно возможности исправления этого со стороны SDL...
Фикс из первого поста некорректен. Вот этот код -
if ( !shadow_fb &&
ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo) < 0 ) {
vinfo.yres_virtual = height;
if ( ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo) < 0 ) {
SDL_SetError("Couldn't set console screen info");
return(NULL);
}
}
Вообще, в SDL какой-то жуткий говнокод вот в этой части, которая выбирает правильные параметры для передачи в FBIOPUT_VSCREENINFO. Иногда он берёт захардкоженные значения, иногда читает /etc/fb.modes и как-то хитро перерабатывает(???). Если SDL считает, что текущий режим уже правильный, то FBIOPUT_VSCREENINFO похоже просто не вызывается.
Я, честно говоря, не понял до конца как это работает. И не могу посоветовать как это исправить со стороны SDL 1.2 так, чтобы гарантированно не сломалось что-то другое.
Касательно сегфолов: если код, вызывающий функции SDL не проверяет возвращаемые значения и из-за этого сегфолтится, то чинить надо и его тоже.
Исходная версия Deleted, :
Касательно возможности исправления этого со стороны SDL...
Фикс из первого поста некорректен. Вот этот код -
if ( !shadow_fb &&
ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo) < 0 ) {
vinfo.yres_virtual = height;
if ( ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo) < 0 ) {
SDL_SetError("Couldn't set console screen info");
return(NULL);
}
}
Вообще, в SDL какой-то жуткий говнокод вот в этой части, которая выбирает правильные параметры для передачи в FBIOPUT_VSCREENINFO. Иногда он берёт захардкоженные значения, иногда читает /etc/fb.modes и как-то хитро перерабатывает(???). Если SDL считает, что текущий режим уже правильный, то FBIOPUT_VSCREENINFO похоже просто не вызывается.
Я, честно говоря, не понял до конца как это работает. И не могу посоветовать как это исправить со стороны SDL 1.2 так, чтобы гарантированно не сломалось что-то другое.