Подкласс IDirect3DDevice9?

Можно ли создать и использовать подкласс IDirect3DDevice9? Для моего кода было бы очень удобно сделать это, но я вижу, что указатель устройства задается как выходной параметр из IDirect3D9::CreateDevice()и я не могу просто сказать, чтобы он сделал экземпляр моего подкласса.

Я хотел бы иметь возможность сделать это так, чтобы другой код, который использует IDirect3DDevice9 не нужно будет менять, когда я захочу использовать подкласс устройства с расширенной функциональностью. В частности, подкласс должен прочитать настройки состояния рендеринга устройства и обновить переменные шейдера, чтобы они соответствовали при любом варианте IDirect3DDevice9::Draw() вызывается, прежде чем фактическое рисование будет сделано. Опять же, я не хочу, чтобы другой код, использующий устройство d3d, менялся, потому что я хочу, чтобы он мог использовать либо обычное устройство, либо мое дополненное.

Можно ли создать экземпляр подкласса, используя экземпляр базового класса? Если так, это вызовет какие-либо проблемы, такие как Direct3D, не настроенный для использования экземпляра подкласса, или несколько экземпляров устройства в памяти и, следовательно, необходимость совместного использования ресурсов карты gfx и т. Д.? Или мне просто придумать другой способ обойти это без использования подкласса?

0

Решение

Я закончил тем, что сделал, как ErikEsTT предложил выше, и создал отдельный класс, который содержит указатель IDirect3DDevice9 и обеспечивает избыточную функциональность. Это не то решение, которое я хотел, потому что это не цельный интерфейс — клиентский код все еще должен явно вызывать отдельный метод. Но это работает.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]