Текущий архив: 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