Сразу хочу извинить, если по этому вопросу уже есть темы. Я тут новенький...
Я познакомился с проектом Free Pascal совсем недавно, а когда увидел Lazarus, то понял что про Delphi можно забыть... Последнее время писал графические приложения DirectX на Delphi с использованием компонент Jedi. Но поскольку в них форма по большому счёту ненужна, то решил попробовать перенести свой проект на FPC. Однако у меня появилось несколько вопросов:
1. Возможно ли импортировать компоненты Jedi (directx8) на FPC?
2. При D3D.CreateDevice нужно указывать параметр "handle", который, насколько я понял, означает ссылку на основное окно приложения. А как быть, если окна нет?
3. Что делать с таймером?
1. Возможно
2. Без окна нельзя создать устройство. Если приложение в оконном режиме(не fullscreen) то можно указать вместо ссылки на окно nil только если структура D3DPRESENT_PARAMETERS содержит все-таки указатель на окно
3. А что с таймером не так? И каким?
1. А он поймёт если просто скопировать все *.pas в папку с UNITS-ами?
2. Буду пробовать...
3. Чтобы прорисовывать каждый кадр, я пользовался таймером (причём от DelphiX, потому как стандартный сильно тормознутый . Могу предположить, что тут можно будет делать это в пределах самого кода программы, давая процу небольшие передышки (sleep или delay). Но возможно что все эти предположения - полная чушь! ?
1. Надо скачать с http://www.clootie.ru свежие хедеры. Есть и для FPC. У меня еще для DX8 компилировалось без вопросов.
3. Есть виндовый таймер, работающий через очередь сообщений (именно он используется VCLовским), есть виндовая функция из MMSystem, которая будет запускать коллбак раз в n миллисекунд. Есть timeGetTime и GetTickCount в конце концов. Про QPF уже сказали, хоть он может глючить на некоторых системах.
Появились перве успехи (он нашёл unit-ы ) !
Но поставить "nil" вместо "handle" не прокатило, выдаёт что ему нужет longword, а не pointer. Не подскажите ещё какие-либо варианты?
Может ему как-то можно подсунуть другое окно (например панель задач? )
И ещё. Какой unit надо подключить, чтобы работать с TBitmap?
Да вот тож, а FP о таком не слышал, есть только graph, но такая помоему в TP была...
Качаю сейчас какую-то графическую библиотеку с freepascal.org, а она на сервере www.*.lv - ужас: за 4 минуты уже скачал аж 35 Кб Ладно, буду продолжать поиски...
Вообще-то DX сам умеет грузить и .bmp и .tga и еще кучу графических форматов...
Смотреть d3dx8.pas если не ошибаюсь и справку в MS SDK по функциям из этой библиотеки...
Может, но для этого ему нужна отельная DLL-шка, весом 400 Кб и к тому же он грузит их непосредственно в IDirect3dTexture8, а мне нужно ещё чуть обработать картинки: разбить шрифт на отдельные буквы, расставить альфу и т. п.
Но вобщем у меня появилась новая идея насчёт создания своего формата текстур, точнее говоря я хочу попробовать записать всю дату текстуры в zip-архив, потому как для её копирования из загруженного bmp у проца уходит много времени. А конвертор наверное сделаю в Лазаре. Но это так, "мысли вслух"...
Есть ещё один вопрос, наверное ламерский, но всё же:
Весь мой проект уже на данный проект разбит более чем на 30 процедур и несколько функций. В Delphi весь их список был задан ещё в описании формы, но сейчас, когда ничего этого не стало, компилятор стал выдавать ошибки, связанные с тем, что некоторые процедуры обращаются к другим, которые описаны после них и как-бы не видны. Я уже давно не сталкивался с этим и помню только что на C++ можно было задать подобный список в начале кода, а затем описывать их в произвольном порядке, но компилятор уже будет знать, что они существуют. Проделал примерно тоже самое:
procedure ...;
procedure ...;
function ... : ...;
procedure...;
Потом попробовал вставить весь этот список после глобального var-а, компилятор сказал примерно так: "function nesting >31". Попробовал сразу после uses, тоже самое...
Это что ему количество не нравится, что ли? Или это я всё по поросячьи сделал?
Предварительное объявление ф-ций и процедур нужно делать в секции interface, а собственно реализацию - в секции implementation.
Или же, если не хочется выносить ф-цию в интерфейс - после предварительного объявления писать слово forward.