PMG

Форумы по созданию игр
Текущее время: 15 июл 2026 22:51

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по полноэкранному режиму.
СообщениеДобавлено: 30 янв 2006 23:33 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 янв 2006 23:22
Сообщения: 19
Откуда: Санкт-Петербург
Когда я создаю полноэкранный режим разрешением 800x600 и более частота обновления монитора падает до минимума - 60 Гц. Соответственно вопрос, можно ли регулировать частоту, если да, то как не превысить максимум монитора. Полноэкранный режим делаю по первому уроку NeHe. Частоту при 640x480 определить не смог, ибо монитор пишет какую-то другую информацию вместо частоты, но по ощущениям выше чем 60 Гц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 янв 2006 14:27 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Вот пример:

Код:
int COpenGL_Win::change_video_mode ()
{

  DEVMODE dmScreenSettings;

  EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm_old);

  yes_change_video_mode = 0;
  memset(&dmScreenSettings,0,sizeof(dmScreenSettings));
  dmScreenSettings.dmSize = sizeof(dmScreenSettings);
  dmScreenSettings.dmPelsWidth = os.width;
  dmScreenSettings.dmPelsHeight = os.height;
  dmScreenSettings.dmBitsPerPel = os.color_bits;
  dmScreenSettings.dmDisplayFrequency = os.frequency;
  dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH |
                              DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;

  if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
    return return_error(IS_ERROR,"%s","change_video_mode -> ChangeDisplaySettings");
  Sleep(100);

  yes_change_video_mode = 1;

  return IS_OK;
 
}


Вот пример перечисления всех режимов:

Код:
/*  wglQueryDisplayModes
*
*  Query display modes
*
*/
static GLvoid wglQueryDisplayModes(DEVMODE **ppmode, GLint *pNumModes)
{
   GLint n = 0;
   DEVMODE  devmode;
   devmode.dmSize = sizeof(DEVMODE);

   while (EnumDisplaySettings(NULL, n, &devmode))
      n++;

   if (pNumModes)
      *pNumModes = n;

   /* fill an array with all the devmodes so we don't have to keep
      grabbing 'em. */
   if (ppmode)
   {
      DEVMODE * p = (DEVMODE*)malloc(sizeof(DEVMODE) * (n + 1));
      n = 0;
      p[n].dmSize = sizeof(DEVMODE);

      while (EnumDisplaySettings(NULL, n, p + n))
      {
         n++;
         p[n].dmSize = sizeof(DEVMODE);
      }
      *ppmode = p;
   }   
   return;
}

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 фев 2006 20:33 
Не в сети
Любитель

Зарегистрирован: 15 авг 2005 21:32
Сообщения: 46
Откуда: NSK
Код:
LONG SetDisplayMode(int x, int y, BYTE cbit,long freq){
DEVMODE DM;
//freq=NULL значит частоту неизменять
DM.dmSize = sizeof(DEVMODE);
DM.dmBitsPerPel = cbit; // глубина цвета, бит на пиксель
DM.dmPelsWidth = x; // разрешение по горизонтали
DM.dmPelsHeight = y; // разрешение по вертикали
if (freq!=NULL)
{DM.dmDisplayFrequency = freq; // частота обновления экрана
freq=DM_DISPLAYFREQUENCY;
}else freq=0;
DM.dmFields = DM_BITSPERPEL + DM_PELSWIDTH + DM_PELSHEIGHT + freq;

return ChangeDisplaySettings(&DM, 0);
};

в качестве параметра freq установи например 100, установится режим с максимально доступной частстой. (у меня так работает).

_________________
Хочу иметь.... много компьютеров, много денег, и быть известным. Но я не Гилл Бетс =))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 фев 2006 19:20 
Не в сети
Любитель

Зарегистрирован: 21 ноя 2005 19:12
Сообщения: 12
Откуда: rv.ua
В случае с ГЛУТом можно сделать так:
Код:
glutGameModeString("800x600:32@100");
glutEnterGameMode();

формат строки:
widthxheigth:bitsperpixel@frequency


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2006 01:55 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 янв 2006 23:22
Сообщения: 19
Откуда: Санкт-Петербург
Спасибо! С GLUT у меня были какие-то глюки, поэтому ограничился стандартным, кстати при завышенном значении частоты прога отказывалась работать полноэкранно, типа ошибка создания окна, я сделал создание окна в цикле, где постепенно уменьшается частота, помогло, но при запуске монитор мерцает, пока прогоняет завышенные частоты...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 фев 2006 22:06 
Не в сети
Постоянный
Аватара пользователя

Зарегистрирован: 02 сен 2005 22:34
Сообщения: 98
Откуда: Питер
Woland ты экстримал =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 сен 2006 14:12 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 19 май 2006 22:24
Сообщения: 16
Откуда: Belgorodskaja obl.
Максимально доступную частоту можно найти так :

Код:
int GetMaxFreq(int width, int height, int bits)
{
    DEVMODE dm;
    int i = 0;
    int max = 0;
    while(EnumDisplaySettings(0, i, &dm))
    {
        if(width == dm.dmPelsWidth && height == dm.dmPelsHeight && bits == dm.dmBitsPerPel)
            if(max < dm.dmDisplayFrequency) max = dm.dmDisplayFrequency;
        i++;
    }
    return max;
}


но одно но - мой монитор поддерживает не все эти частоты из за горизонтальной частоты развертки монитора.
Может кто нибудь поможет, как мне узнать и сравнить эти самые частоты.

З.Ы.
А при 640, 480, 32 - на мониторе вижу следующее :

Вне рабочей частоты
Гориз. : 73.0 kHz
Верт. : 140.0 Hz
Рабочяя частота
Гориз. : 30.0 - 71.0 kHz
Верт. : 50.0 - 160.0 Hz

_________________
Глнваое - поанимние.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 сен 2006 09:21 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Скорее всего у тебя настроена видеокарта так, что она выдает все возможные частоты, даже которые не поддерживаются монитором, поэтому, надо указать тип монитора, и убрать все режимы которые не поодерживает монитор.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 сен 2006 14:57 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 19 май 2006 22:24
Сообщения: 16
Откуда: Belgorodskaja obl.
Но как ???

_________________
Глнваое - поанимние.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2006 13:59 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Надо поставить драйвер монитора, вернее указать его тип.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 сен 2006 17:21 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 19 май 2006 22:24
Сообщения: 16
Откуда: Belgorodskaja obl.
Поставнено. Указано.

В свойствах экрана, на вкладке GeForce разработчики дров убеждают меня что монитор моддерживает 640x480x32@140 - но это не так ( из-за горизонтальной частоты )

Гориз. : 73.0 kHz
Рабочяя частота
Гориз. : 30.0 - 71.0 kHz


И всё таки, как узнать горизонтальную частоту монитора( например при 640x480x32@140 ).
В EnumDisplaySettings ничего подобного не нашел(может плохо искал?)
:no:

З.Ы.
monitor LG FLATRON F720B - дрова родные.

_________________
Глнваое - поанимние.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 сен 2006 10:41 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Ну это из-за дров, с этим ничего не поделать, так для каждого монитора, свой список рабочих частот не составить ;(.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 сен 2006 11:04 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 19 май 2006 22:24
Сообщения: 16
Откуда: Belgorodskaja obl.
Неужели это значит что нельзя быть уверенным в том, что найденная max. частота будет поддерживаться монотором. Не Может Быть :censore: !

Кстати EnumDisplaySettings возвращает DISP_CHANGE_SUCCESSFUL.

_________________
Глнваое - поанимние.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB