Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

"Вертикальная синхронизация"   Найти похожие ветки 

 
grisme ©   (2006-07-18 17:52) [40]

Обычно это в настройках экрана(Правый_щелчок_на_десктопе->свойства->параметры->дополнительно) где-то там, все зависит от твоей карты..


 
Зм1й ©   (2006-07-18 17:53) [41]


> ancara ©   (18.07.06 17:48) [39]

GeForce4 Ti 4200 with AGP8X


 
ancara ©   (2006-07-18 18:06) [42]

у меня это выглядит так http://img117.imageshack.us/img117/6666/vsyncpr3.jpg


 
@!!ex ©   (2006-07-18 18:11) [43]

Зм1й
Тебе же в самом начале дали код функции.
И даже с описанием загрузки функции из dll.


 
cyborg ©   (2006-07-18 18:11) [44]

> [42] ancara ©   (18.07.06 18:06)

Совесть есть такую картинку в 183 кило выкладывать? Я её в gif спокойно в 33 килобайта сконвертил.


 
Зм1й ©   (2006-07-18 18:18) [45]

Нашёл, выключил синхронизацию, стало 400-500 fps (тоже не шибко много, но всё же :)), однако теперь хотелось бы сделать это програмно...


 
Зм1й ©   (2006-07-18 18:20) [46]


> @!!ex ©   (18.07.06 18:11) [43]

Так этот код не действует, как оказалось


 
@!!ex ©   (2006-07-18 18:32) [47]

Тааак. Что не рабоает? Дебаггером смотрел, указатели все корректные?


 
@!!ex ©   (2006-07-18 18:35) [48]

Попробуй вот в таком виде:

procedure UseVSync(ToUse: Boolean);
var
wglSwapIntervalEXT   : function(Interval: Integer) : ByteBool; stdcall;
begin
wglSwapIntervalEXT    := wglGetProcAddress("wglSwapIntervalEXT");
wglSwapIntervalEXT(ord(ToUse));
end;


 
@!!ex ©   (2006-07-18 18:37) [49]

Функция кастрированная, если все будет плохо, упадет при обращении к функции по адрес NULL, но зато есть от чего плясать.


 
@!!ex ©   (2006-07-18 18:37) [50]

Или вот в таком, чтобы не падало:

procedure UseVSync(ToUse: Boolean);
var
wglSwapIntervalEXT   : function(Interval: Integer) : ByteBool; stdcall;
begin
wglSwapIntervalEXT    := wglGetProcAddress("wglSwapIntervalEXT");
if addr(wglSwapIntervalEXT)<>nil then
wglSwapIntervalEXT(ord(ToUse));
end;


 
Зм1й ©   (2006-07-18 18:39) [51]

Нет, они равны nil


 
Зм1й ©   (2006-07-18 18:44) [52]


> procedure UseVSync(ToUse: Boolean);
> var
> wglSwapIntervalEXT   : function(Interval: Integer) : ByteBool;
>  stdcall;
> begin
> wglSwapIntervalEXT    := wglGetProcAddress("wglSwapIntervalEXT");
>
> wglSwapIntervalEXT(ord(ToUse));
> end;

Access Violation

> procedure UseVSync(ToUse: Boolean);
> var
> wglSwapIntervalEXT   : function(Interval: Integer) : ByteBool;
>  stdcall;
> begin
> wglSwapIntervalEXT    := wglGetProcAddress("wglSwapIntervalEXT");
>
> if addr(wglSwapIntervalEXT)<>nil then
> wglSwapIntervalEXT(ord(ToUse));
> end;

Не работает, потому что условие не выполняется


 
@!!ex ©   (2006-07-18 19:02) [53]

Значит у тебя по каким то причинам не доступно расширение OpenGL.
Какая Windows?


 
grisme ©   (2006-07-18 19:08) [54]

Блин, посмотрел я в книге Гайдукова...:) Он не говорил, как это обходить, он просто сказал, что драйвер карточки может игнорить твои указания насчет верт.синхронизации (если принудительно включена), поэтому программное переключение в таком случае невозможно..Пришивай на мануал-переключение(причем выводи, если невозможно выключить/включить) либо пиши собственный драйвер для видео-системы(аля Quake 3)


 
@!!ex ©   (2006-07-18 19:08) [55]

В принципе я могу выложить opengl32.dll.
Сделаешь backup, заменишь, глядишь все заработает.
Хотя, конечно, проблема может быть в другом.


 
@!!ex ©   (2006-07-18 19:10) [56]

>>Блин, посмотрел я в книге Гайдукова...:) Он не говорил, как это обходить, он просто сказал, что драйвер карточки может игнорить твои указания насчет верт.синхронизации (если принудительно включена), поэтому программное переключение в таком случае невозможно..Пришивай на мануал-переключение(причем выводи, если невозможно выключить/включить) либо пиши собственный драйвер для видео-системы(аля Quake 3)

Проблема явно не в этом.
Учитывая, что функция не грузиться.


 
Зм1й ©   (2006-07-18 19:11) [57]


> Какая Windows?

XP home sp2

> В принципе я могу выложить opengl32.dll

Выложи пожалуйста


 
@!!ex ©   (2006-07-18 19:13) [58]

http://www.afera-net.narod.ru/opengl32.rar
У тебя не старая операционка. Боюсь проблема не в этом........

проверь этот вариант, не прокатит(а он скорее всего не прокатит), подумаем, че еще может быть.


 
grisme ©   (2006-07-18 19:14) [59]

@!!ex ©   (18.07.06 19:08) [55]

Проблема у него всего лишь в том, что включена/выключена принудительно синхронизация..:) Выключить/включить ее программно невозможно, если только драйвер не надрессирован на "интимные" отношения(чай-кофе-потанцуем :0) с внешними приложениями, но это не гарантировано и не на всех дровах может быть такая багофича...Единственная альтернатива - это либо жевать бублики(читай смириться), либо писать "нечто", что напрямую будет работать с видеокартой, обходя драйвер


 
@!!ex ©   (2006-07-18 19:15) [60]

grisme ©
Проблема у него в том, что функция не грузиться из dll"ки(на это указывает нулевой указатель). А это ну никак не может зависить от настроек драйвера.


 
Зм1й ©   (2006-07-18 19:21) [61]


> @!!ex ©   (18.07.06 19:13) [58]

Не покатило.
Завтра надо подумать, но сегодня со всеми прощаюсь, т. к. надо готовиться к долбаным экзаменам :(


 
grisme ©   (2006-07-18 19:23) [62]

А может просто расширение OpenGL самой картой не поддерживается?


 
@!!ex ©   (2006-07-18 19:24) [63]

Ни пуха.
У меня тоже зватра экзамен. :)Правда экзамен по информатике. Че к нему готовиться? :)


 
@!!ex ©   (2006-07-18 19:26) [64]

grisme ©
Возможно, конечно. Но ИМХо мало вероятно.... ХОтя кто знает.

Зм1й,
проверь поддержку этого расширения.


 
KreeS ©   (2006-07-18 20:01) [65]

Может дело в дровах?


 
@!!ex ©   (2006-07-18 20:16) [66]

KreeS ©
Фича то в том, что функция с указателем не ассоциируеться.
Такое ощущение, что ее вообще нету в dll"ке....


 
grisme ©   (2006-07-18 20:17) [67]

Такое ощущение, что ее вообще нету в dll"ке....

Дык кудаж она делась-то?(:


 
Cash ©   (2006-07-18 20:24) [68]

...Можно с таймером влезти? :)
На счет GetTickCount, это бяка, я таймер сделал двояким, с одной стороны
на этом GetTickCount-е, а с другой -- на качественном таймере.
(Плюс, у меня еще проверяется поддержка Intel RDTSC, и если да, то
считается через тактовую частоту)

Дак вот, про качественный таймер:
WINAPI bool QueryPerformanceFrequency(int64);
Эта штука даст возможную частоту обновления таймера, и даст знать
возможен ли таймер вобще.

bool QueryPerformanceCounter(int64)
Эта штука даст показание качественного счетчика, и тоже даст понять
о возможности счета.

А про VSYNC -- там детонаторы стоят или ForceWare?
И, это, в оконном или полноэкранном режиме прога работает?


 
Зм1й ©   (2006-07-18 21:57) [69]

Пожалуй, пока хватит готовиться :) (ещё целых три дня)

> @!!ex ©
> У меня тоже зватра экзамен

Удачи :)

> проверь поддержку этого расширения.

Как проверить?

> Такое ощущение, что ее вообще нету в dll"ке....

Ну вот если я например пишу

function wglSwapIntervalEXT  (Interval: Integer): ByteBool; stdcall; external OpenGl32;
wglSwapIntervalEXT (0);


то точка входа в процедуру не найдена...


> в оконном или полноэкранном режиме прога работает?

в оконном


 
Cash ©   (2006-07-18 22:53) [70]

> в оконном

Ах, ты, блин, онаж в оконном то не должна вааще реагировать! Этож только
в полноэкранном режиме должно работать!!!


 
MeF Dei Corvi ©   (2006-07-18 23:02) [71]


> Ну вот если я например пишу

А ты пиши

var wglSwapIntervalEXT: function(interval: TGLint): Boolean; stdcall;
...
wglSwapIntervalEXT := wglGetProcAddress("wglSwapIntervalEXT");


> Этож тольков полноэкранном режиме должно работать!!!

А что такое полноэкранный режим? По сути это же то же окошко, просто на весь экран? :)


 
grisme ©   (2006-07-18 23:36) [72]

Ну вот если я например пишу

function wglSwapIntervalEXT  (Interval: Integer): ByteBool; stdcall; external OpenGl32;
wglSwapIntervalEXT (0);


Не надо так писать(даже например).(: потому что эта функция входит в расширение OpenGL) и в библиотеке ее нет.) Если ты внимательно читал хэлп по ф-ии wglGetProcAddress, то не шайтанил бы так..:)

Cash ©   (18.07.06 22:53) [70]
Бред, доказательства в студию...:)


 
@!!ex ©   (2006-07-19 12:26) [73]

>>Ах, ты, блин, онаж в оконном то не должна вааще реагировать! Этож только в полноэкранном режиме должно работать!!!

Почему? Не вижу причин. Что мешает синхронизить отрисовку окна? Это раз.

В OpenGL, на скока я знаю, в отличие от DX нет отличия между FullScreen и Window.


 
Зм1й ©   (2006-07-19 12:51) [74]


> Ах, ты, блин, онаж в оконном то не должна вааще реагировать!
>  Этож только
> в полноэкранном режиме должно работать!!!

Причём тут это? Функция не выполняется, она вообще не грузится из библиотеки...

> @!!ex ©

А как проверить поддержку расширения? :)


 
@!!ex ©   (2006-07-19 13:50) [75]

Зм1й ©
StrPas (PChar(glGetString(GL_EXTENSIONS)))
Результат - строка со всеми поддерживаемыми расширениями.

Нужное, насколько я помню называеться:
WGL_EXT_swap_control


 
Зм1й ©   (2006-07-19 13:55) [76]

Возвращает пустую строку...


 
@!!ex ©   (2006-07-19 13:58) [77]

Я надеюсь, ты его всунул после инициализации рендеринг контекста?
Это такая же GL функция, как, например,  glClear. И без контекста работать не будет.


 
Зм1й ©   (2006-07-19 14:03) [78]

Ступил, бывает :)
А расширение-то есть


 
ancara ©   (2006-07-19 14:05) [79]

попробуй сделать свой rendering context текущим,
wglMakeCurrent(..., ...);
а затем вызови wglGetProcAdress


 
@!!ex ©   (2006-07-19 14:05) [80]

>>А расширение-то есть

Ну собственно я так и думал.

Потому что даже если бы расширения не было бы, функция должна была бы загружаться. Просто возвращала бы Fail и все....

Выложи весь код своего юнита. С Uses и т.д.



Страницы: 1 2 3 вся ветка

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.029 c
15-1178788010
elserpiente
2007-05-10 13:06
2007.06.10
Профайлер под BDS2006


15-1179440350
РТР
2007-05-18 02:19
2007.06.10
Зеленый чай


2-1179676353
BaseMaker
2007-05-20 19:52
2007.06.10
Не показывать удаленные поля!


2-1179470344
FIL-23
2007-05-18 10:39
2007.06.10
функция или процедура проверяющая правельность введеной даты


2-1179826391
alles
2007-05-22 13:33
2007.06.10
Работа с Array of Char