Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > HRESULT D3DXCreateFont


Автор: Gremlin 15.10.2007, 12:13
В книжке написано что есть такая функция
HRESULT D3DXCreateFont(
  LPDIRECT3DDEVICE9 pDevice,
  HFONT * hFont,
  LPD3DXFONT * ppFont
);
но у меня она выглядит так
HRESULT D3DXCreateFont(
  LPDIRECT3DDEVICE9 pDevice,
  INT Height,
  UINT Width,
  UINT Weight,
  UINT MipLevels,
  BOOL Italic,
  DWORD CharSet,
  DWORD OutputPrecision,
  DWORD Quality,
  DWORD PitchAndFamily,
  LPCTSTR pFacename,
  LPD3DXFONT * ppFont
);
и у LPD3DXFONT нету Begin(), End(). Неужели в разных версиях DirectX9 SDK разные функции????

я сделал 
D3DXCreateFont(pDirect3DDevice, 30, 10, FW_NORMAL, 0, false, 1, 0, 0, DEFAULT_PITCH|FF_MODERN, "Arial", &pFont);
pFont->DrawText(NULL, StrokaTexta, -1, &Rec, DT_WORDBREAK, MyColor);
текст появляется но через какоето время исчезает и машина начинает тормозить >_<


зы в книге описана работа с DirectX9b, а у меня SDK апрельская! 

Автор: WERITAS 15.10.2007, 18:38
 smile 
Последним предложением вы сами ответили на свой вопрос....
Цитата
в книге описана работа с DirectX9b, а у меня SDK апрельская!

... эта дополнительная библиотека написана левой пяткой. Ребята из M$ и не собираются  делать совместимость этой библы с разными версиями D3D.

P.S.
Я лично против этой дополнительной библиотеки - можно и нужно обойтись и без нее!

Автор: Gremlin 15.10.2007, 19:39
не понял про какую дополнительную библиотеку речь )
Код

D3DXCreateFont(pDirect3DDevice, 30, 10, FW_NORMAL, 0, false, 1, 0, 0, DEFAULT_PITCH|FF_MODERN, "Arial", &pFont);
pFont->DrawText(NULL, StrokaTexta, -1, &Rec, DT_WORDBREAK, MyColor);

Это правильный код???? у меня память куда то утекает и текст пропадает И изображение дергается, что сдесь не так??? а когда я коментирую вторую строчку то все норм тока текста нет ))) меня смущает что нету Begin(), End() тока не понимаю чем это заменяется!!! Подскажите плиз!

Автор: WERITAS 16.10.2007, 18:41
Цитата(Gremlin @ 15.10.2007,  19:39)
не понял про какую дополнительную библиотеку речь )

А вы не знали, что юзаете не D3D, а её  дополнительную библиотеку со вспомогательными функциями, которые начинаются с D3DX**** ?!  smile 

Автор: sanches80 17.9.2009, 20:02
Может уже не актуально, но все равно скажу.

Почему нет Begin, End вам уже объяснили. Дастаточно, чтобы текст отрисовывался между операциями BeginScene - EndScene.

Память утекает потому, что вы каждый раз при прорисовке очередного кадра, создаете новый объект pFont, предыдущий соответственно не удаляется. Тормозит, вероятно потому что зациклинное создание строки, есть суть нетривиальная операция, требующая ресурсов. Ваш код, очень похож на код из книги Горнакова С, я сам по ней делал примеры и нарвался на такую же проблему. У меня когда кончилась память, а я не успел выключить приложение, машина накрылась медным тазом с блю скрином. Но выжила вроде, без последствий.

Вообщем я создал шрифт в отдельном методе, в момент инициализации основных интерфейсов DirectX, это происходит один раз как вы понимаете, за всю жизнь приложения.

А непосредственно сам вывод текста, оставил между  BeginScene - EndScene. Память перестала утекать и тормозить перестало.

Удачи.

PS. Прикрепил исходник.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)