Je développe un système composé de nombreux sous-systèmes indépendants. Deux de ces sous-systèmes sont le sous-système Window et le sous-système GraphicsAdapter. GraphicsAdapter requiert un handle de fenêtre de bas niveau (HWND ou X11 Window Handle, selon le système d'exploitation), et le sous-système Window est un moyen de résumer ces API spécifiques au système d'exploitation.Comment encapsuler au mieux les poignées de fenêtre?
Si le sous-système Window donnait accès à des poignées d'API de bas niveau, l'encapsulation risquait fort d'être interrompue. Et si cela permettait aux fenêtres de passer en plein écran et de revenir en arrière, mais qu'elles devaient déclencher des événements avertissant le système de ces changements, et que la poignée de bas niveau était utilisée pour passer en plein écran à son insu? Comment puis-je m'assurer que le handle sera transporté du sous-système Window vers GraphicsAdapter sans être abusé, tout en étant suffisamment flexible pour permettre l'ajout ultérieur d'autres sous-systèmes comme GraphicsAdapter, tout en conservant la sécurité du type ?
Existe-t-il un moyen d'encapsuler les handles d'une manière que Direct3D et OpenGL peuvent accéder juste assez de la poignée pour fonctionner correctement?
- modifier
En plus de poignées de transport en toute sécurité d'un sous-système à un autre, sachant que les sous-systèmes peuvent être écrits par une autre équipe de codeurs, par exemple, est-il un moyen de leur rappeler la façon dont la poignée est destiné à être utilisé?
Les commentaires sont le choix évident, mais quelque chose imposé par le compilateur est ce que je regarde vraiment ...
Je l'encapsulerais dans wxWidgets ou Qt ou GTK ou ... –
Pourquoi est-ce que j'utiliserais wxWidgets, Qt ou GTK ou n'importe quelle interface graphique à part entière si tout ce que je veux est une fenêtre vide pour afficher des choses? En outre, je devrais encore accéder à une sorte de _nativeHandle() pour choisir le handle et mettre OpenGL/D3D si je voulais rendre sur ceux-ci, donc ce n'est pas ce que je cherche. Je veux une nouvelle solution. –
À quoi le GraphicsAdapter a-t-il besoin? Et pourquoi ne pouvez-vous pas faire confiance au code GraphicsAdapter? –