среда, 24 ноября 2010 г.

Корпоратив

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


понедельник, 22 ноября 2010 г.

DX9 game port

Вот и обещанный порт маленькой DX-игры:


Она использует минимум фич рендера, понадобилось реализовать только интерфейс ID3DXSprite. Его реализацию я нагло выдрал из Wine, сверяясь с описанием в DirectX SDK. Не реализован lockable back buffer, в который рисуются звёзды и выхлопы двигателя корабля, т. к. в OpenGL отсутствуют lockable buffers. Позже, думаю, для развлечения можно будет использовать pixel buffer object, но это полумеры, да и в крупных проектах не используется (разве что для редактора).

Также сделал наброски pure device, в виде наследника основного device. В pure device отсутствуют проверки на возможные ошибки в time-critical частях кода, чем сейчас изобилует основой device.

P. S. Wine штука интересная, время от времени я буду сверяться с ним в случае затруднений при портировании.

Update

Реализовал lockable back buffer. Для этого пришлось написать класс swap chain-а и усложнить логику создания render target - теперь он может быть текстурой, если lockable, и рендербуфером, если нет (а если задан мультисемплинг - только им). На ATI опять отгрёб проблемы, на этот раз с PBO - первый lock/unlock работает только первые три кадра, затем текстура не обновляется. Повторный даёт результат, поэтому я пока вставил затычку с пустым первым lock/unlock. На GeForce этой проблемы, как и ожидалось, нет.

Также заработал мультисемплинг и переход в fullscreen режим.

четверг, 18 ноября 2010 г.

DirectGL progress

Спортировал ещё несколько демок. С ростом codebase это становится всё проще и проще.


Следующий шаг - портирование на OpenGL небольшой DX9-игры с codesampler.com. Также я взял на вооружение исходники Wine, интересно посмотреть, как они реализовали некоторый функционал.

Затем в качестве пробы пера - компоновка с игровым проектом, над которым мы работаем сейчас. Попробуем хотя бы собраться, а дальше - попытка инициализация device, переход в fullscreen, создание ресурсов. Этого будет достаточно, чтобы признать задумку годной к использованию в следующем проекте.

суббота, 13 ноября 2010 г.

DirectGL progress

Спортировал ещё одну демку, которая показывает принцип фильтрации MIP-уровней видеокартой:


На codesampler.com есть OpenGL аналог этой D3D9-демки. Там mip-уровни загружаются через glTexImage2D(). Мне необходимо было спортировать функцию D3DXLoadSurfaceFromSurface(), которая, как я подозреваю, вызывает внутри ::StretchRect(). Этот API может нести на себе расширение GL_EXT_framebuffer_blit, которое я и использовал при портировании. Но что-то не заладилось у меня на ноутбуке: нулевые MIP-уровни source текстур не хотели блититься в подходящие MIP-уровни dest текстуры. Вернее, blit шёл всегда в нулевой MIP, как будто бы параметер level игнорируется. Я долго провозился с кодом, но так ничего толкового и не придумал. 

Сегодня решил для пробы проверить на стационарном PC с GTX 260 - и всё заработало как надо. Это опять глючит GlukoGL, теперь на ATI :(.

Update

Нашёл причину бага на ATI: нужно включить mipmap фильтрацию для текстуры, если хотим блитить в mip-уровень больше 0. Маразм.

среда, 10 ноября 2010 г.

Atonement

Вчера посмотрел этот фильм.

Удивительно, как я его пропустил и не посмотрел раньше. Это фильм о 13-летней девочке, которая из-за своей глупости и ревности не могла (или не хотела) отличить похоть от любви, а пошлость от страсти, и этим разрушила счастье двух молодых людей. Когда девочка стала 18-летней девушкой, она осознала, что натворила, но ничего исправить уже было нельзя. Она дожила до глубокой старости, неся эту боль внутри и не имея возможности избавиться от неё...

понедельник, 8 ноября 2010 г.

DirectGL progress

Заставил рисоваться несколько Direct3D 9  fixed-function демок через свой враппер: 5-й тутор из SDK и три демки с codesampler.com. Последние используются потому, что SDK бесстыжим образом использует во всю разные LPD3DXMESH и т. д., портирование которых не планируется. Только Core интерфейсы + небольшая часть D3DX (математика, загрузка текстур).


Исходный код демок никак не менялся, за исключением include-ов и lib.

воскресенье, 7 ноября 2010 г.

Рыба гниёт с головы

Я заметил, что утром, по пути на работу, я стал часто останавливаться в метро возле этого плаката:


Там ещё по-немецки Lebensqualitat beginnt im Kopf. Мне нравится стоять возле него и размышлять...