GDI, GDI+ et OpenGL sont-ils vraiment obsolètes/dépréciés? [fermé]
Si vous ouvrez la page "Graphiques et des Jeux (Windows)" à la microsoft.com
la dernière catégorie est décrite comme
graphiques traditionnels: Technologies qui sont obsolètes et ne devraient pas être utilisées dans de nouveaux application.
cette catégorie comprend (entre autres) les IPA suivants:
- GDI
- GDI+
- OpenGL
Quel est votre avis? Si je veux rouler aujourd'hui, un nouveau logiciel doit prendre en charge Windows XP (encore environ 50% de tous les systèmes installés). Direct2D nécessite Windows 7 / Vista. Ce qui reste doit être utilisé?
6 réponses
je soupçonne que la définition de Microsoft de "legacy" a peu à voir avec ce que tout développeur sensé devrait faire, et est à la place basée sur une certaine réécriture grande de L'API Windows.
à partir de Windows Vista, Microsoft a redessiné beaucoup de leurs API. Nous avons maintenant MMDevAPI comme la seule vraie API de son, WIC est la seule vraie API de fichier Image,etc. D'après ce que j'ai vu/entendu, ces nouvelles API sont bien meilleures que les anciennes, et les" anciens " systèmes fonctionnent tous sur la base la de nouveaux. Dans Windows Vista et plus tard, DirectSound est entièrement basé sur MMDevAPI, et les composants qui ont besoin de lire des fichiers image le font via WIC.
Windows 8 aura une version ARM, qui semble ne prendre en charge qu'un sous-ensemble de L'API Windows actuelle. Nous n'en serons pas sûrs tant que Windows on ARM ne sera pas sorti, mais, basé sur les bibliothèques incluses pour la plate-forme ARM dans Visual Studio 11 (réf:http://www.winehq.org/pipermail/wine-devel/2012-March/094559.html), on dirait que GDI+ et OpenGL ne seront pas disponibles. GDI est disponible pour les liens, mais cela ne signifie pas nécessairement qu'il est intact.
cette nouvelle API vient de Vista et correspond plus tard à peu près aux bibliothèques de la cible ARM VS11. Je suppose que tout ce qui est sur cette liste est là parce que c'est soit la dernière et la meilleure façon de faire ce qu'elle fait, ou c'est techniquement trop important de jeter (pour l'instant). Ainsi, "l'héritage" est tout ce qui n'est pas la dernière et la meilleure façon de le faire à moins une chose.
Je ne suis pas sûr de savoir quelle est la véritable API graphique. Nous avons déjà Direct2D, Direct3D, DirectComposition (qui, soit dit en passant, n'est pas disponible avant Windows 8), DirectWrite, et DXGI. DXGI semble le plus proche, mais je n'ai pas une compréhension assez profonde de l'API graphique pour le dire. Je pense que gdi32 est techniquement très difficile à éliminer. Comment les applications non traditionnelles sont-elles destinées à savoir quand une partie d'une fenêtre a été révélée et doit donc être peinte?, sans utiliser WM_PAINT, qui implique un HDC, et comment une bibliothèque pourrait-elle faire cela au nom d'une application sans remplacer sa procédure de fenêtre? Comment sommes-nous censés faire des fenêtres semi-transparentes sans utiliser UpdateLayeredWindow, qui nécessite un HDC? Combien user32 dépendent gdi32, et peuvent-ils être séparés?
D'un point de vue technique, Windows peut facilement se débarrasser de GDI+ et OpenGL, mais je ne suis pas convaincu que se débarrasser D'OpenGL va fonctionner, même sur un nouveau une plate-forme qui ne promet aucune rétrocompatibilité. Il semble trop précieux pour les développeurs. GDI+ n'est pas si important, mais il est très facile pour un tiers de fournir un remplacement.
je dirais d'utiliser n'importe laquelle des API que vous avez listées, et le pire qui est susceptible de se produire est que vous devez réécrire votre UI si vous voulez porter votre application à metro ou Windows on ARM. GDI est un bon choix si vos besoins sont simples et que vous coderez directement pour L'API Windows. Il n'y a pas beaucoup de situations où je recommande GDI+ sur OpenGL comme API de dessin. GDI+ est lent, limité, et seulement disponible sur Windows. L'API GDI+ est plus simple parce qu'elle est 2D, donc peut-être que cela vaut la peine si vous avez besoin de faire quelque chose de très simple mais avec l'anti-aliasing.
OpenGL n'est pas obsolète, L'implémentation de Microsoft est. L'implémentation de Microsoft est bloquée à la version 1.1, qui vieux. La version actuelle de la norme est la version antérieure 4. Si vous voulez utiliser OpenGL, il est entièrement supporté par NVidia,ATI et Intel cartes graphiques sur le bureau de Windows, mais pas dans Métro Windows Moderne, l'INTERFACE utilisateur des applications, est une norme de l'industrie, et aussi fonctionne sur Mac et Linux. Si vous avez besoin d'un logiciel de secours de la mise en œuvre, Mesa a pensé à vous, et il fonctionne même sur DOS. (depuis Mesa peut rendre dans les tampons de mémoire, il n'y a aucune raison qu'il ne fonctionne pas dans les applications D'interface utilisateur modernes, mais vous ne voulez probablement pas le faire parce que cela peut être lent.) Une chose à noter est que WGL, L'API pour accéder à la fonctionnalité OpenGL sur le bureau Windows, dépend de GDI (qui dépréciée) donc vous probablement besoin d'utiliser quelque chose comme FreeGLUT ou SDL au lieu de cela si vous voulez à l'avenir-mettre à l'épreuve votre application, qui vous nets aussi l'indépendance de la plate-forme.
OpenGL ES est une variante D'OpenGL qui fonctionne sur Android et Apple iOS. il est également accessible en JavaScript via WebGL,Internet Explorer 11 sera support (et à peu près tous les autres navigateur faire.) ANGLE fournit une implémentation hardware-accelerated de GLES pour Windows qui se connecte à DirectX (version 9 ou 11) et devrait donc fonctionner aussi dans les applications D'interface utilisateur modernes. encore une fois, Mesa s'occupe de l'implémentation du logiciel.
TL;DR: OpenGL n'est pas seulement pas déprécié, il est multiplateformes, standard, et a un énorme élan dans l'industrie. GDI et GDI+, enfin, pas tant que ça.
si vous voulez supporter Windows XP, alors vous supportez un système d'exploitation" ancien", et en tant que tel, utiliser un cadre graphique" ancien " est le choix logique.
même si cela n'étaient pas c'est vrai, disons simplement que je ne suis pas d'accord avec le conseil donné par L'article MSDN lié. Le statut" legacy " ici a plus à voir avec quelle technologie L'équipe de Windows pense que c'est cool cette semaine. Le statut de "obsolète" signifie simplement que le groupe responsable n' accepter ou remplir des rapports de bogue plus longtemps (sauf pour les problèmes de sécurité critiques). Ce n'est pas grand chose-ces technologies existent depuis assez longtemps pour être assez complètes et stables.
GDI ne va nulle part, donc si vous avez besoin de quelque chose de solide qui est garanti d'être supporté n'importe où et n'importe où, c'est ce que j'irais avec.
si vous avez besoin d'un peu plus de capacités 2D que les offres GDI (par exemple, la transparence du canal alpha), alors vous pouvez envisagez D'utiliser GDI+. Il est presque un ordre de grandeur plus lent que GDI, mais ce n'est pas trop grand d'un problème sur les machines modernes avec plus de puissance que vous pourriez jamais vouloir. Cela aussi va être soutenu pendant très longtemps.
cela dit, si j'avais écrit une nouvelle application aujourd'hui, j'ai probablement ne pas tracassez-vous avec OpenGL. Il y a très peu qu'il offre en avantages par rapport à Direct2D et DirectWrite, qui sont à la fois ce que Microsoft pousse comme les remplacements pour GDI / GDI+. Il pourrait y avoir un avantage à utiliser OpenGL si vous absolument Windows cible XP parce que pour autant que je puisse dire, Direct2D / DirectWrite ne sont pris en charge que sur Vista et plus tard, mais c'est parce que (comme je l'ai mentionné à l'Origine), Windows XP tombe carrément dans le camp "legacy" ou "obsolete" lui-même. Alternativement, si vous connaissez déjà bien OpenGL et n'avez pas le temps ou le désir d'apprendre Direct2D/DirectWrite, alors il pourrait être logique de continuer à l'utiliser dans un nouveau application.
ne laissez pas le verbiage de L'article du MSDN vous effrayer. Choisir la technologie la mieux adaptée à votre cas d'utilisation spécifiques compte tenu de toutes les informations disponibles. D'ici à ce que l'une de ces technologies disparaisse complètement, vous devrez réécrire l'application complètement pour une douzaine d'autres raisons.
Edit: Hmm, on dirait que DirectWrite a aussi été déclaré (par certaines personnes au moins) "obsolète" aussi, ayant été remplacé par Direct2D. C'est drôle, il n'est pas là depuis assez longtemps pour que je me donne la peine de l'apprendre. Je suppose que cela va seulement à l'appui de mon argument précédent que "obsolète" désigne simplement qu'une technologie particulière n'est pas ce qui est actuellement considéré comme en vogue par le Microsoft devs.
j'attends personnellement que tous les bugs soient résolus (et nous décidons d'un standard semi-permanent) avant de faire le commutateur pour l'une de mes applications. Tout ce que j'ai vu écrit dans DirectDraw ou Direct2D a eu de sérieux bugs de rendu et est un cauchemar de performance, même sur les machines raisonnablement compétentes. Bien sûr, ils ne s'affiche parfois, dans de bonnes conditions, mais c'est trop pour moi. Et je vous jure, le texte flou montre tout le temps. Ne pas être capable de lire ce qui est à l'écran est un tueur de deal pour moi et mes utilisateurs. GDI n'a pas ce problème, et il n'ira nulle part.
GDI, GDI+ et OpenGL sont-ils vraiment obsolètes/dépréciés?
ce n'est pas vrai pour OpenGL. OpenGL 4 vous permet d'utiliser des shaders de géométrie sur winxp. Ce qui n'est pas possible avec DirectX (DirectX 10 et plus n'est pas supporté sur WInXP). C'est aussi l'une des seules API 3D multiplateformes.
D'un point de vue commercial MS est intéressé par la promotion de DirectX car C'est leur technologie qui enferme le développeur dans la Plateforme windows (ils sont également intéressé à rendre DirectX plus attrayant pour les développeurs, mais c'est une autre histoire). Il est donc logique qu'ils ne soient pas désireux de promouvoir OpenGL.
Que Faut-il utiliser d'autre?
je vous conseille d'arrêter d'utiliser des technologies spécifiques à la plate-forme lorsque c'est possible. Saisissez le cadre multiplateforme et utilisez-le pour votre application. Il y a Qt, GTK, wxWidgets et autres toolkits pour les applications GUI, et SDL(et alternatives) pour les jeux. De cette façon, lorsque le développeur de plateforme décider pour prendre une décision ridicule (comme ne pas supporter DX10 sur WinXP) que vous n'aimez pas, vous serez en mesure de vous déplacer ailleurs avec un coût de développement minimum. Qt est aussi ridiculement puissant et pour le moment je n'ai aucune raison d'utiliser quelque chose d'autre pour le développement de GUI. Pourtant, la situation peut changer à l'avenir.
en bref, tout en développant pour certaines plate-formes, vous devriez garder à l'esprit que le développeur de plate-forme pourrait avoir leurs objectifs qui ne sont pas compatibles avec vos souhaits. Découvrir que votre source s'est enfermé dans une plate-forme unique n'est pas une expérience très agréable. Vos propres objectifs devraient être la première priorité, et si le développeur d'os essaie de vous faire utiliser certaines technologies que vous n'aimez pas, alors vous ne devriez pas prendre en charge cette technologie.
parce Qu'OpenGL est un standard, il doit être considéré comme tout aussi déprécié que C ou C++ donc c'est une question de temps avant que L'API Windows entière -- qui est aujourd'hui devenue une compilation une fois exécutée sur chaque API de machine x86 grâce à Wine -- soit considérée comme dépréciée en faveur de .NET et C#.
j'utilise GDI pour des graphismes simples et OpenGL, quand j'ai besoin de 3d accélérée.
un autre aspect est que L'implémentation de Microsoft dans OpenGL doit certainement être considérée comme déprécié car il ne s'agit que de la version 1.1 ou quelque chose comme ça, mais cela fait longtemps.
Oui, à propos D'OpenGL, il surpasse en fait DirectX à bien des égards à la fois sur le plan des ressources et de l'affichage. Il ne sera jamais promu par Microsoft parce qu'il ne peut pas posséder OpenGL, sans mentionner que la plupart des gens ne font pas leurs recherches et Microsoft peut prétendre qu'il est vieux. La vérité est opengl est opensource standard et évolue à un rythme beaucoup plus rapide que fermé ne le fait parce qu'il est plus d'une salle de développeurs payés pour travailler sur elle. Microsoft a également des contrats avec de nombreuses entreprises à publier en utilisant seulement Microsoft logiciels, cela provoque plus d'affaires pour Microsoft et moins d'utiliser le standard OpenGL plus avancé. C'est un verrouillage intéressant si vous voulez, Microsoft crée ces contrats de sorte que de nombreux programmes sont écrits dans DirectX pour garder les affaires pour Microsoft, et aucune entreprise ne le refusera parce que Microsoft a environ 80%+ marché de l'utilisateur à domicile.