PIMPL
Дело было вечером, делать было нечего : ) Почитал об этой идиоме (pointer to implementation). Мне как-то раньше объясняли что это такое! Да так объяснили, что я чуть не поседел, решив, что это что-то мегозаумное, жёсткое в реализации и вообще только для программеров over9000 уровня )
Погуглил, прочитал за пару минут первую попавшуюся статью и.. ОМГ, дак тут то идея, которая будет понятна любому школьнику ))) Оказалось – мне СЛИШКОМ извращённо объясняли и ещё я сам идею юзал уже давно, правда слегка не так, а по-своему :3
Переписал систему ввода с каноничной идеей PIMPL ) Впринципе чуть-чуть красивше смотрится, чем раньше ^__^
А, кстати, обновил железо чуть-чуть : ) Заменил видеокарту! Раньше стояла gf 8600 gts, а теперь купил и поставил gf GTX 550 Ti ! Жырнота! Разница огромная!! Особенно это заметно при массивной выборке текстур – так в 8600 скорость выборки была примерно 8 гигатекселей в секунду, теперь же 28 гигатекселей : ) И те тяжёлые места в моих сценах, где ФПС падал до 30 теперь выдают не меньше 250 ФПС!
Блин, такая видяха расслабляет : Как бы не наговнокодить с ней 😀 Что ещё радует кроме высокой производительности – полная аппаратная поддержка DirectX11! О да!! Можно пощупать тесселяцию и динамическую линковку шейдеров ^^ Да и собсно писать полноценный именно DX11 рендерер для движка : )
Ах да, насчёт рендеров. У меня в движке реализован мультирендеринг. Тоесть могу рендерить сцену хоть через DX9-11, хоть через OpenGl, да хоть через софтварный рендерер : )) 9кстати новая версия софтрендера сейчас в разработке – юзаю блочную растеризацию и MMX). Но есть тут мааааленькая проблема – линковка gAPI библиотек :
В поле Additional dependencies настроек линковки проекта я прописываю нужные lib-ы, они линкуются к библиотеке проекта и всё прекрасно работает! НО! Представим ситуацию, когда у меня реализован рендеринг на DX9 и глупо запрещать запуск на Windows XP. Как, собсно, запускать на XP мой проект?? Когда он слинкован с DX11 либами. которых в XP может и не быть! о_О
Раньше я юзал M$-only фичу #pragma comment (lib, “blablabla.lib”) и, впринципе, указав дефайнами набор рендереров можно было отключить какую угодно версию DX и для XP собрать версию без DX11. Но это смотрится больше как костыль : (
Единственным годным решением пока вижу вынесение рендереров в отдельные DLL как плагины и подгрузку нужной библиотеки уже во время зщапуска руками : ) Кстати, так у меня было изначально! И систему плагинов я НЕ удалил ; )
Но, думаю, пока рано над этим заморачиваться! Рендереры описаны в отдельных классах в отдельных файлах ) Поэтому перенести в DLL – не составит особого труда.
The end. Ушёл дальше покорять мир!
Unknown
Мне кажется горячая смена ГАПИ довольно бесполезная фича, которая к тому же порождает кучи костылей в архитектуре, типа определение в каком гапи создана конкретная текстура. да и сама подмена гапи в рантайме выглядит как-то глупо, учитывая что, выбор делают разработчики еще на стадии разработки.
поэтому ИМХО, для мультигапи нужно использовать только статическую типизацию, чтоб после компиляции гапи уже нельзя было сменить, это удобно если есть сервер и клиент которые используют один и тот же код, но разница в том что серверу не нужно выводить ничего на экран, поэтому его нужно компилить с NULL девайзом.
поэтому подумай, действительно ли это все нужно и будет ли использоваться, так как перформанс оно будет хавать (виртуальные вызовы, невозможность инлайна)