Как я могу решить проблему зависимости моего проекта? - PullRequest
1 голос
/ 03 ноября 2019

У меня есть 3 проекта:

  • GameEngine.Rendering
    • Содержит интерфейсы и абстрактные классы для других проектов для реализации и создания уровня абстракции API рендеринга.
  • GameEngine.Rendering.OpenGL4
    • Реализация интерфейсов в OpenGL 4.0.
  • GameEngine.Rendering.Direct3D11
    • Реализация интерфейсов Direct3D 11.

Один интерфейс GameEngine.Rendering *Проект 1030 * выглядит следующим образом:

public interface IRenderContext
{
    void SwapBuffers();
}

Для реализации OpenGL 4.0 этого интерфейса в качестве параметра требуется интерфейс IWindowInfo, а для реализации Direct3D 11 - нет. Для реализации Direct3D 11 требуется IntPtr дескриптор окна.

Я не думал, что это станет большой проблемой, пока не захотел сделать создание контекста рендеринга простым и безболезненным:

var renderContext = CreateRenderContext(DriverType.Direct3D11, windowHandle);

Единственное решение, о котором я думал, было в проекте GameEngine.Rendering для создания такой структуры, которая реализует IWindowInfo:

public struct RenderContextInfo : IWindowInfo
{
    public IntPtr OutputHandle { get; set; }
}

Однако это не такТочно хороший выбор дизайна, так как я бы предпочел, чтобы проект GameEngine.Rendering ничего не знал о каких-либо реализациях.

Мне было просто интересно, каковы мои варианты решения этой проблемы? Есть ли какая-нибудь причудливая уловка, где я могу создать экземпляр IWindowInfo интерфейса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...