Вертикальная синхронизация

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Вертикальная синхронизация

Сообщение Tarantul » 17.01.2006 (Вт) 19:13

Собственно, есть ли какая-нибуть API, позволяющая реализовать это без DirectX (в DX7 это DirectDraw->WaitForVerticalBlank()) :?:
Последний раз редактировалось Tarantul 17.01.2006 (Вт) 19:41, всего редактировалось 1 раз.

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 17.01.2006 (Вт) 19:41

Это становиться особенно актуально, учитывая что DirectDraw->WaitForVerticalBlank() попусту "съедает" все процесорное время делая загрузку ЦП 100%. Причем настолько сильно, что другие программы работают крайне тормознуто :(

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 17.01.2006 (Вт) 23:42

А зачем тебе Вертикальная синхронизация не в 3D приложении?
Если через D3D8 так:
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC
#define ROFL 0xDDDD

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 17.01.2006 (Вт) 23:58

Да вертикальную синхронизацию можно где угодно использовать, если надо добиться плавного изображения. Я ее спокойно использую перед SetDiBits().

Странно, конечно, что люди не знают таких функций. Ведь любое Windows - приложение, работающее с движущейся графикой должно ее использовать :?

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 18.01.2006 (Ср) 0:25

Да знаю я, я просто не совсем понял, что ты хотел! Думал ты на приложение без графики хочешь!
#define ROFL 0xDDDD

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 18.01.2006 (Ср) 0:34

М-да... Протоморзил конечно я конкретно :)

В SDK рядом с WaitForVerticalBlank есть функция GetVerticalBlankStatus, которая может легко заменить первую:

Код: Выделить всё
do until GetVerticalBlankStatus = 1
loop


Правда, здесь тоже цикл подвисания, но он не ест 99,999% процесорного времени, как WaitForVerticalBlank, и в таком виде вполне пригоден для использования.

Gigahard
Бывалый
Бывалый
 
Сообщения: 253
Зарегистрирован: 24.07.2002 (Ср) 11:15
Откуда: Russia

Сообщение Gigahard » 18.01.2006 (Ср) 11:35

Почему же подвисания? Добавить в тело цикла DoEvents и вуаля..
Старый глюк лучше новых двух!

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 18.01.2006 (Ср) 16:40

"Подвисания" я имел в смысле безперерывной загрузки процесора. Чтобы его не было, надо вставить в тело цикла что-то вроде Sleep(1), но тогда точной синхронизации не будет.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот и гости: 153

    TopList