среда, 12 мая 2010 г.

Профайлер для DX приложений

Наткнулся на профайлер для приложений под DX9-11. Возможно кому окажется полезен. Есть некоторые баги, но с ними можно жить :-).

http://busyray.com/dxprof/index.html

воскресенье, 25 апреля 2010 г.

Visual Leak Detector for Visual C++ 2008/2010

Поиск утечек памяти порой очень непростая задача, а стандартная CRT функциональность для их поиска (Memory Leak Detection Enabling) часто не дает полезной информации.

Из бесплатных средств я нашел для Visual C++ только Visual Leak Detector.

Основные его плюсы:
* Поиск утечек памяти и в сторонних библиотеках
* Вывод стека программы для каждой утечки памяти с указанием имени файла и номера строки

Но VLD к сожалению не поддерживал 64-битные приложения и Visual Studio 2010.

Я добавил поддержку 64-битных приложений и Visual Studio 2010, но автор VLD, Dan Moulding, не ответил на мои письма и решил самостоятельно выпустить версию 2.0 на новом сайте http://vld.codeplex.com/ с Wiki и баг трекером. Пользуйтесь :-).

понедельник, 22 марта 2010 г.

Подсчет ссылок в D3D8 и D3D9

Казалось бы что может быть сложного, на AddRef() увеличиваем кол-во ссылок, в Release() уменьшаем. Но в Diretct3D 8 и 9, как обычно, не все так просто и чтобы создать полноценный Direct3D Wrapper необходимо это все учитывать, иначе некоторые игры начнут с ни падать.

Вот некоторые особенности:
  • Автоматически созданные IDirect3DDevice9 ресурсы (BackBuffer, автоматически созданный depth-stencil surface, основной SwapChain) нельзя удалить, т.е. Release() можно вызывать хоть до бесконечности он будет возвращать кол-во ссылок 0 и не удалит ресурс.
  • Само устройство не увеличивает кол-во ссылок на автоматически созданные ресурсы.
  • Пока ресурс забинджен в устройство (с помощью SetTexture, SetRenderTarget или SetDepthStencilSurface) его нельзя удалить, при попытке удалить его счетчик ссылок не будет опускать ниже 0. После того устройство освободит ресурс если кол-во ссылок ресурса равно нулю он будет удален.
  • У текстуры и её поверхностей общий счетчик ссылок.
Вот так то :-)

воскресенье, 22 ноября 2009 г.

Переход с Direct3D9 на Direct3D9Ex

Была необходимость воспользоваться Shared ресурсами в D3D9 под Vist'ой/Win 7, для этого решили переписать приложение чтобы оно вместо интерфейса IDirect3DDevice9 стало использовать IDirect3DDevice9Ex. Казалось бы что может быть проще, у IDirect3DDevice9Ex родительский интерфейс IDirect3DDevice9.

Но как всегда всплыли некоторые подводные камни:

Под D3D9Ex не поддерживаются Pool Managed для ресурсов, поэтому пришлось их все перевести в Pool Default. Так как ресурсы в Pool Default можно лочить только установить Usage Dynamic, пришлось его установить у соответствующих ресурсов.

  • Так как для Managed ресурсов LockRect всегда возвращал Pitch равный ширине поверхности в байтах, т.е. строки не выравниваются, а строки в динамических ресурсах в Pool Default наоборот всегда выравниваются до следующего значения кратно степени двойки. Поэтому пришлось переписать места где текстуры заливались одним memcpy без учета Pitch, так чтобы они корректно работали с выравненными строками.
  • Выяснилось ещё для Volume текстур в Pool Default в LockBox есть баг в Direct3D9 и Direct3D9Ex, он напрочь игнорирует параметры Front, Back и всегда лочит весь объем полностью. Для Volume текстур в Pool Managed все работает правильно в Direct3D9. Переписали код чтоб обновляли содержимое объема всегда полностью.


Может кому будет интересен или даже полезен этот опыт.

пятница, 20 ноября 2009 г.

пятница, 21 августа 2009 г.

Упрощение отладки в Visual Studio - autoexp.dat



Собрал/написал самые полезные для меня визуализаторы: Boost (для самых популярных классов) и TinyXML. А также там добавлены коды ошибок Direct3D.

Для установки, следует заменить файл в "%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\" файлом из архива.

Ссылки по теме:
 

Update: для Visual Studio 2012 теперь можно установить extension со всеми визуализаторами перечисленными выше и даже больше http://bit.ly/Mn73hE

пятница, 26 июня 2009 г.

iZ3D монитор в России

Вот и приехали мониторы. Можно приобрести у нас в офисе или прямо на сайте http://shop.neurok.ru/ (сайт пока к сожалению в плане дизайна ещё не доделан). В комплекте 3-ое очков, если надо можно докупить в офисе еще какое то количество.

Цена: 555$.
Гарантия: 1 год.