Был две недели в командировке в Samsung Ukraine.
Они арендовали 15000 кв. м в новом бизнес-центре Tower 101. Эксперты называют эту сделку крупнейшей на рынке офисной недвижимости Украины. Офисы у Самсунга просторные, четыре этажа (у меня доступ был только на один этаж). Скоростные лифты, бесплатные обеды, нормальное железо :)
среда, 12 сентября 2012 г.
среда, 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 г.
среда, 1 августа 2012 г.
понедельник, 9 июля 2012 г.
Подписаться на:
Сообщения (Atom)
