Можно ли создать и использовать подкласс IDirect3DDevice9
? Для моего кода было бы очень удобно сделать это, но я вижу, что указатель устройства задается как выходной параметр из IDirect3D9::CreateDevice()
и я не могу просто сказать, чтобы он сделал экземпляр моего подкласса.
Я хотел бы иметь возможность сделать это так, чтобы другой код, который использует IDirect3DDevice9
не нужно будет менять, когда я захочу использовать подкласс устройства с расширенной функциональностью. В частности, подкласс должен прочитать настройки состояния рендеринга устройства и обновить переменные шейдера, чтобы они соответствовали при любом варианте IDirect3DDevice9::Draw()
вызывается, прежде чем фактическое рисование будет сделано. Опять же, я не хочу, чтобы другой код, использующий устройство d3d, менялся, потому что я хочу, чтобы он мог использовать либо обычное устройство, либо мое дополненное.
Можно ли создать экземпляр подкласса, используя экземпляр базового класса? Если так, это вызовет какие-либо проблемы, такие как Direct3D, не настроенный для использования экземпляра подкласса, или несколько экземпляров устройства в памяти и, следовательно, необходимость совместного использования ресурсов карты gfx и т. Д.? Или мне просто придумать другой способ обойти это без использования подкласса?
Я закончил тем, что сделал, как ErikEsTT предложил выше, и создал отдельный класс, который содержит указатель IDirect3DDevice9 и обеспечивает избыточную функциональность. Это не то решение, которое я хотел, потому что это не цельный интерфейс — клиентский код все еще должен явно вызывать отдельный метод. Но это работает.
Других решений пока нет …