Привет! Захотелось мне поковырять ЕАХ.
Нашел пример на noeska.com но он выдает ошибку "Acces Violation at 00000000".
А именно это он делает в этом месте :
//set the effect Env := EAX_ENVIRONMENT_HANGAR; eaxSet(DSPROPSETID_EAX20_ListenerProperties, DSPROPERTY_EAXLISTENER_ENVIRONMENT or DSPROPERTY_EAXLISTENER_DEFERRED, 0, @Env, sizeof(TALuint)); // Commit settings on source 0 eaxSet(DSPROPSETID_EAX20_BufferProperties, DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS, source, nil, 0); // Commit Listener settings eaxSet(DSPROPSETID_EAX20_ListenerProperties, DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS, 0, nil, 0);
У людей была похожая проблема с этим кодом, и там помог совет в модуле EAX для функций eaxSet,eaxGet поставить не stdcall a cdecl
EAXSet: Function(const Guid: TGUID; ALuint1: TALuint; ALuint2: TALuint; point: Pointer; ALuint3: TALuint): TALenum; stdcall; {$EXTERNALSYM EAXSet}
EAXGet: Function(const Guid: TGUID; ALuint1: TALuint; ALuint2: TALuint; point: Pointer; ALuint3: TALuint): TALenum; stdcall; {$EXTERNALSYM EAXGet}
но у меня по прежнему ошибка :(
Проверь не равны ли nil указатели eaxGet и eaxSet.
YarUnderoaker
Я копал этот движок, но дока по нему нету.. как с ним работать непонятно... да и у меня в принципе реализованно все что мне нужно, вот только хотелось пару ЕАХ эффектов докрутить и все.
kipar
А как мне это сделать?.. При дебаге если на них навести курсор они не выбрасывают хинт со значением(.
Run->Inspect
или
Ctrl+Левая кнопка на переменной
Для функции введи в инспект @Имя_функции например @IntToStr
niello
Спасибо. Да. Действительно nil. и.... И что теперь делать? :(
а еах с какой библиотеки грузится, она у тебя есть в каталоге с программой или зарегистрирована в системе?
случайно не забыл?
alIsExtensionPresent('EAX2.0'); FnName := 'EAXSet'; eaxSet := alGetProcAddress( FnName); FnName := 'EAXGet'; eaxGet := alGetProcAddress( FnName);
Еще проверь что возвращает alIsExtensionPresent('EAX2.0'): должно быть true
kipar
Блин alIsExtensionPresent('EAX2.0') возвращает false!
niello
EAX у меня в виде eax.pas модуля, в каталоге с программой. Брал из тех же примеров noeska.com
Так что же мне делать? Пробывал вкинуть в папку с прогой eax.dll но не получилось.
Spike
> Блин alIsExtensionPresent('EAX2.0') возвращает false!
Видимо у тебя не поддерживаются расширения версии 2.0 :)
Может, поискать новые драйвера? Я вообще не в курсе что это за расширения.
Есть ли люди у которых этот 12 пример из noeska.com работает?
Duncon
У меня стояло и cdecl и stdcall все равно ошибка остается.
kipar
Пробывла на двух машинах. На обоих не поддерживаюется?
Кстати нужна не eax.dll, а OpenAL.dll. Правда в ней EAXGet действительно нет.
В движке из #3 есть библиотека bin\soundlib\wrap_oal.dll, в которой EAXGet есть и все работает. Так что берешь эту библиотеку и все ОК.
Тема в архиве.