Direct3D 8 (переход от Delphi)

Модератор: Модераторы

Direct3D 8 (переход от Delphi)

Сообщение @lex » 20.06.2006 17:29:45

Сразу хочу извинить, если по этому вопросу уже есть темы. Я тут новенький...

Я познакомился с проектом Free Pascal совсем недавно, а когда увидел Lazarus, то понял что про Delphi можно забыть... :wink:
Последнее время писал графические приложения DirectX на Delphi с использованием компонент Jedi. Но поскольку в них форма по большому счёту ненужна, то решил попробовать перенести свой проект на FPC. Однако у меня появилось несколько вопросов:

1. Возможно ли импортировать компоненты Jedi (directx8) на FPC?
2. При D3D.CreateDevice нужно указывать параметр "handle", который, насколько я понял, означает ссылку на основное окно приложения. А как быть, если окна нет?
3. Что делать с таймером?
@lex
постоялец
 
Сообщения: 180
Зарегистрирован: 19.06.2006 13:16:29
Откуда: Невинномысск

Сообщение IUnknown » 20.06.2006 18:19:09

1. Возможно
2. Без окна нельзя создать устройство. Если приложение в оконном режиме(не fullscreen) то можно указать вместо ссылки на окно nil только если структура D3DPRESENT_PARAMETERS содержит все-таки указатель на окно
3. А что с таймером не так? И каким?
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение @lex » 21.06.2006 08:30:03

1. А он поймёт если просто скопировать все *.pas в папку с UNITS-ами?
2. Буду пробовать...
3. Чтобы прорисовывать каждый кадр, я пользовался таймером (причём от DelphiX, потому как стандартный сильно тормознутый :) . Могу предположить, что тут можно будет делать это в пределах самого кода программы, давая процу небольшие передышки (sleep или delay). Но возможно что все эти предположения - полная чушь! ?

З.Ы.: Спасибо за отзыв!
@lex
постоялец
 
Сообщения: 180
Зарегистрирован: 19.06.2006 13:16:29
Откуда: Невинномысск

Сообщение IUnknown » 21.06.2006 18:02:03

Может и не понять, желательно ему подсунуть свежий jedi.inc в котором директивы для FP есть.

Надо копать в сторону QueryPerformanceCounter, в нынешнем DX SDK есть кажется даже какой-то класс на основе этой функции, использующийся как таймер
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение Mirage » 21.06.2006 18:43:05

1. Надо скачать с http://www.clootie.ru свежие хедеры. Есть и для FPC. У меня еще для DX8 компилировалось без вопросов.
3. Есть виндовый таймер, работающий через очередь сообщений (именно он используется VCLовским), есть виндовая функция из MMSystem, которая будет запускать коллбак раз в n миллисекунд. Есть timeGetTime и GetTickCount в конце концов. Про QPF уже сказали, хоть он может глючить на некоторых системах.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Сообщение @lex » 21.06.2006 21:21:00

Да нехотелось бы подкладывать новый, просто в DX9 многое что поменялось, а проект под DX8... ну ладно буду разбираться, всем спасибо за ответы :)
@lex
постоялец
 
Сообщения: 180
Зарегистрирован: 19.06.2006 13:16:29
Откуда: Невинномысск

Сообщение @lex » 22.06.2006 15:48:38

Появились перве успехи (он нашёл unit-ы :lol: ) !
Но поставить "nil" вместо "handle" не прокатило, выдаёт что ему нужет longword, а не pointer. Не подскажите ещё какие-либо варианты?
Может ему как-то можно подсунуть другое окно (например панель задач? :) )
И ещё. Какой unit надо подключить, чтобы работать с TBitmap?
@lex
постоялец
 
Сообщения: 180
Зарегистрирован: 19.06.2006 13:16:29
Откуда: Невинномысск

Сообщение IUnknown » 22.06.2006 16:47:31

Попробуй вместо nil написать 0, все время забываю NULL - это по сути 0 в С++, а паскалю это похоже не нравится
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение @lex » 23.06.2006 10:07:24

Компилятор вроде принял, а вот что выдаст программа - посмотрим.
А что насчёт TBitmap?
@lex
постоялец
 
Сообщения: 180
Зарегистрирован: 19.06.2006 13:16:29
Откуда: Невинномысск

Сообщение @lex » 23.06.2006 10:32:39

Если конкретнее, то FPC не видит у TBitmap методов Create и LoadFromFile, которые есть у Delphi. А сам тип вроде знает...
@lex
постоялец
 
Сообщения: 180
Зарегистрирован: 19.06.2006 13:16:29
Откуда: Невинномысск

Сообщение IUnknown » 23.06.2006 11:22:39

Не могу сказать как насчет модулей FPC, но в Lazarus есть модуль с нужными функциями - graphics
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение @lex » 23.06.2006 19:04:30

Да вот тож, а FP о таком не слышал, есть только graph, но такая помоему в TP была...
Качаю сейчас какую-то графическую библиотеку с freepascal.org, а она на сервере www.*.lv - ужас: за 4 минуты уже скачал аж 35 Кб :!:
Ладно, буду продолжать поиски...
@lex
постоялец
 
Сообщения: 180
Зарегистрирован: 19.06.2006 13:16:29
Откуда: Невинномысск

Сообщение Sphinx » 24.06.2006 09:31:57

Вообще-то DX сам умеет грузить и .bmp и .tga и еще кучу графических форматов...
Смотреть d3dx8.pas если не ошибаюсь и справку в MS SDK по функциям из этой библиотеки...
Sphinx
новенький
 
Сообщения: 33
Зарегистрирован: 27.09.2005 21:52:09

Сообщение @lex » 24.06.2006 10:01:40

Может, но для этого ему нужна отельная DLL-шка, весом 400 Кб и к тому же он грузит их непосредственно в IDirect3dTexture8, а мне нужно ещё чуть обработать картинки: разбить шрифт на отдельные буквы, расставить альфу и т. п.
Но вобщем у меня появилась новая идея насчёт создания своего формата текстур, точнее говоря я хочу попробовать записать всю дату текстуры в zip-архив, потому как для её копирования из загруженного bmp у проца уходит много времени. А конвертор наверное сделаю в Лазаре. Но это так, "мысли вслух"...

Есть ещё один вопрос, наверное ламерский, но всё же:
Весь мой проект уже на данный проект разбит более чем на 30 процедур и несколько функций. В Delphi весь их список был задан ещё в описании формы, но сейчас, когда ничего этого не стало, компилятор стал выдавать ошибки, связанные с тем, что некоторые процедуры обращаются к другим, которые описаны после них и как-бы не видны. Я уже давно не сталкивался с этим и помню только что на C++ можно было задать подобный список в начале кода, а затем описывать их в произвольном порядке, но компилятор уже будет знать, что они существуют. Проделал примерно тоже самое:

procedure ...;
procedure ...;
function ... : ...;
procedure...;

Потом попробовал вставить весь этот список после глобального var-а, компилятор сказал примерно так: "function nesting >31". Попробовал сразу после uses, тоже самое...
Это что ему количество не нравится, что ли? Или это я всё по поросячьи сделал?
@lex
постоялец
 
Сообщения: 180
Зарегистрирован: 19.06.2006 13:16:29
Откуда: Невинномысск

Сообщение Sergei I. Gorelkin » 24.06.2006 11:25:00

:)
Предварительное объявление ф-ций и процедур нужно делать в секции interface, а собственно реализацию - в секции implementation.
Или же, если не хочется выносить ф-цию в интерфейс - после предварительного объявления писать слово forward.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

След.

Вернуться в Графика

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru