четверг, 13 сентября 2012 г.
iPhone 5
To use a car analogy, six years ago the iPhone was like a sexy new flagship model from BMW or Porsche. Today it's a Toyota Camry. Safe, reliable, boring. The car your mom drives. The car that's so popular that its maker doesn't dare mess with the formula.
среда, 12 сентября 2012 г.
Tower 101
Был две недели в командировке в Samsung Ukraine.
Они арендовали 15000 кв. м в новом бизнес-центре Tower 101. Эксперты называют эту сделку крупнейшей на рынке офисной недвижимости Украины. Офисы у Самсунга просторные, четыре этажа (у меня доступ был только на один этаж). Скоростные лифты, бесплатные обеды, нормальное железо :)
Они арендовали 15000 кв. м в новом бизнес-центре Tower 101. Эксперты называют эту сделку крупнейшей на рынке офисной недвижимости Украины. Офисы у Самсунга просторные, четыре этажа (у меня доступ был только на один этаж). Скоростные лифты, бесплатные обеды, нормальное железо :)
среда, 22 августа 2012 г.
Driving Licence
Ну вот, после 5-ти месяцев мучений я стал обладателем водительских прав:
В начале обучения я решил сдавать на права "по-честному", но после того, как насмотрелся на цирк со сдачей экзамена по вождению в автошколе с участием пацанвы и студентоты, осознал что эта коррупционная схема приведёт только к потере личного времени и нервов, а они мне дороже "зелёнки". В итоге решил закрыть вопрос с преподавателем по-быстрому. Кстати, вот интересная статья от овечки, которая решила отбиться от стада и сдавать на права отдельно:
Осторожно – автошкола! или Как получают права
И вот ещё:
Автошкола
В самом конце, после оплаты 249 грн (~30$) в кассе МРЭО (а в прошлом году было дороже!), мне выдали:
Учите билеты!
И не ждите "покращень", а готовьте трактор :)
В начале обучения я решил сдавать на права "по-честному", но после того, как насмотрелся на цирк со сдачей экзамена по вождению в автошколе с участием пацанвы и студентоты, осознал что эта коррупционная схема приведёт только к потере личного времени и нервов, а они мне дороже "зелёнки". В итоге решил закрыть вопрос с преподавателем по-быстрому. Кстати, вот интересная статья от овечки, которая решила отбиться от стада и сдавать на права отдельно:
Осторожно – автошкола! или Как получают права
И вот ещё:
Автошкола
В самом конце, после оплаты 249 грн (~30$) в кассе МРЭО (а в прошлом году было дороже!), мне выдали:
- Водительское удостоверение
- Экзаменационную карточку водителя
- Свидетельство об окончании автошколы
- Копию мед. справки
Учите билеты!
И не ждите "покращень", а готовьте трактор :)
пятница, 10 августа 2012 г.
понедельник, 6 августа 2012 г.
Direct2D interop
Всё началось с того, что из Direct3D 11 исключили классы наподобии ID3DXFont для работы с текстом. Это очень неудобно для маленьких приложений, когда некогда писать собственный фреймворк для текстурных шрифтов, а вывести простейший текст надо.
Как быстрое решение, можно выводить текст, используя старый добрый software GDI API, указав флаг DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE при создании swap chain-а, но это решение серьёзно роняет fps - чем больше размеры бэк-буфера, тем дольше выполняются методы GetDC/ReleaseDC, т. к. происходит трансфер буфера из видеопамяти.
С выходом DirectX 11 Microsoft представила новые API на замену GDI/GDI+ - это Direct2D и DirectWrite, которые подразумевалось использовать в том числе и для вывода текста. Эти API используют преимущества аппаратного ускорения, но беда в том, что сами они были написаны на базе Direct3D 10.x, и поэтому несовместимы с интерфейсами Direct3D 11. Подробнее об этом можно прочитать здесь: Hacking Direct2D to use directly Direct3D 11 instead of Direct3D 10.1 API.
Решение этой проблемы, представленное там, мне понравилось, но я был не удовлетворён его реализацией - она написана на скорую руку, как proof of concept. Решение построено на оборачивании интерфейса IDXGISurface в промежуточную оболочку, которая подставляется вместо реального интерфейса. Я решил займствовать идею, и создал свою реализацию proxy-интерфейсов, заключив всё в отдельную dll. Чтобы понять, какие вызовы Direct3D делаются из Direct2D, каждый метод логируется и проверяются коды возврата (HRESULT).
Это решение отлично работает в независимом приложении, но при попытке отладить его в PIX происходит крэш (на вызове D3D10CreateStateBlocks). Сложно сказать, из-за чего именно - возможно, на уровне d3d10.dll используются какие-то недокументированные особенности COM-интерфейсов Direct3D 10, которые не учитываются в proxy-интерфейсах. Также грядущий DirectX 11.1 содержит обновление Direct2D 1.1, которое работает с последней версией Direct3D API, делая хак несколько устаревшим. Впрочем, если приложение должно работать на чистой Windows 7 (которая будет жить ещё долго и счастливо), решение может оказаться очень полезным.
Update Aug 21, 2012
Обнаружил, что использование библиотеки приводит к утечке памяти - не все созданные объекты корректно удаляются, поэтому Direct3D debug layer рапортует о "live objects" после удаления устройства. Проанализировал код и дописал ->Release() к некоторым объектам. Также от меня ускользнуло то, что Direct2D пытается запросить интерфейс ID3D10InfoQueue, поэтому добавил обёртку и для него (хотя это не обязательно). В конце упростил функцию D2DXCreateInteroperableSurface() - теперь она принимает всего два параметра, а интерфейсы устройства и контекста получает через методы API. Поправил инкапсуляцию в классе-обёртке устройства Direct3D.
Ссылки на исходный код на Google Code:
d2dx.zip
d2d_interop.zip
Как быстрое решение, можно выводить текст, используя старый добрый software GDI API, указав флаг DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE при создании swap chain-а, но это решение серьёзно роняет fps - чем больше размеры бэк-буфера, тем дольше выполняются методы GetDC/ReleaseDC, т. к. происходит трансфер буфера из видеопамяти.
С выходом DirectX 11 Microsoft представила новые API на замену GDI/GDI+ - это Direct2D и DirectWrite, которые подразумевалось использовать в том числе и для вывода текста. Эти API используют преимущества аппаратного ускорения, но беда в том, что сами они были написаны на базе Direct3D 10.x, и поэтому несовместимы с интерфейсами Direct3D 11. Подробнее об этом можно прочитать здесь: Hacking Direct2D to use directly Direct3D 11 instead of Direct3D 10.1 API.
Решение этой проблемы, представленное там, мне понравилось, но я был не удовлетворён его реализацией - она написана на скорую руку, как proof of concept. Решение построено на оборачивании интерфейса IDXGISurface в промежуточную оболочку, которая подставляется вместо реального интерфейса. Я решил займствовать идею, и создал свою реализацию proxy-интерфейсов, заключив всё в отдельную dll. Чтобы понять, какие вызовы Direct3D делаются из Direct2D, каждый метод логируется и проверяются коды возврата (HRESULT).
Это решение отлично работает в независимом приложении, но при попытке отладить его в PIX происходит крэш (на вызове D3D10CreateStateBlocks). Сложно сказать, из-за чего именно - возможно, на уровне d3d10.dll используются какие-то недокументированные особенности COM-интерфейсов Direct3D 10, которые не учитываются в proxy-интерфейсах. Также грядущий DirectX 11.1 содержит обновление Direct2D 1.1, которое работает с последней версией Direct3D API, делая хак несколько устаревшим. Впрочем, если приложение должно работать на чистой Windows 7 (которая будет жить ещё долго и счастливо), решение может оказаться очень полезным.
Update Aug 21, 2012
Обнаружил, что использование библиотеки приводит к утечке памяти - не все созданные объекты корректно удаляются, поэтому Direct3D debug layer рапортует о "live objects" после удаления устройства. Проанализировал код и дописал ->Release() к некоторым объектам. Также от меня ускользнуло то, что Direct2D пытается запросить интерфейс ID3D10InfoQueue, поэтому добавил обёртку и для него (хотя это не обязательно). В конце упростил функцию D2DXCreateInteroperableSurface() - теперь она принимает всего два параметра, а интерфейсы устройства и контекста получает через методы API. Поправил инкапсуляцию в классе-обёртке устройства Direct3D.
Ссылки на исходный код на Google Code:
d2dx.zip
d2d_interop.zip
пятница, 3 августа 2012 г.
Подписаться на:
Сообщения (Atom)

