2017-04-14 1 views
-1

Je pense que c'est un problème très intéressant qui m'a ennuyé depuis des lustres, mais pour une raison quelconque, je n'ai jamais réussi à trouver une réponse directe. Voyons voir si je peux obtenir quelque chose ici. Je voudrais construire mon propre rendu graphique et afficher le moteur à partir de poussière atomique absolue. Je parle d'E/S directes.Comment écrire mon propre moteur d'affichage graphique à partir de zéro?

Je veux injecter le tableau de valeurs de couleur directement dans mon moniteur!

J'ai besoin de conseils pour savoir par où commencer. Mon but est de créer un programme simple qui produira au moins 120 images de données d'image codées en dur sur la surface du moniteur par seconde (ou quel que soit le taux de rafraîchissement maximum du moniteur) de la manière la plus efficace possible.

De quoi ai-je besoin pour cela?

Windows prend-il en charge cela avec l'une des bibliothèques C/C++? Dois-je passer au niveau inférieur et écrire mon propre pilote pour la carte graphique ou AMD/nVidia fournira-t-il ces API?

Aidez-nous s'il vous plaît.

+0

vous devriez jeter un oeil à libagg: http://www.antigrain.com/ – sailfish009

+0

Trop une question trop large pour SO, mais continuez. Qui peut dire que vous n'êtes pas le prochain John Carmack? "Windows supporte-t-il cela avec n'importe quelle bibliothèque C/C++?" Oui. Direct X. Sinon, Windows vous empêche de manipuler directement le matériel. – user4581301

+0

Vous pouvez regarder comment Wayland le fait. Mais même Wayland n'est pas fait à partir de zéro. –

Répondre

1

Alomost tous les ordinateurs modernes n'ont pas le cpu conduire le moniteur directement.

Il existe à la place un GPU. Ce GPU a sa propre mémoire et processeurs (ans, pluriel). Les fabricants de GPU écrivent des pilotes qui interagissent avec le système d'exploitation et d'autres abstractions pour vous permettre de dire au GPU quoi faire.

Écrire vos propres pilotes n'est pas très pratique, car les fabricants de GPU ne fournissent pas assez d'informations pour vous permettre de le faire. Dans la plupart des cas, il s'agirait d'un code machine, ou de l'écriture de vos propres compilateurs (ou backends de compilation) pour générer ledit code machine pour la famille de GPUs en question.

Maintenant, tout n'est pas perdu. Vulkan et divers langages de shader fournissent des moyens d'obtenir du "code brut" dans votre GPU et de modifier ce qui est affiché sur le moniteur. Ces fonctionnalités sont fournies par le pilote. Généralement, les langages "shader languages" sont des variantes C ou C++ avec une interface "réelle" C (parfois avec des wrappers C++) du côté de la CPU.

Il existe également la méthode old school, dans laquelle vous manipulez des formes (triangles) et leur appliquez des textures à l'aide d'API C. Cela manque de la puissance et de la flexibilité de la nouvelle approche «envoyez votre propre code au GPU».

Les GPU sont des processeurs relativement faibles et massivement parallèles avec une mémoire rapide hautement couplée. Cela leur permet de faire certains types d'opérations beaucoup plus efficacement que les processeurs; avoir 100s de noyaux compense beaucoup de péchés. Des problèmes tels que le pixellisation des polygones ou le redimensionnement des textures sont hérités de manière parallèle, et les GPU sont conçus pour résoudre ces problèmes en temps réel. Ensuite, un matériel spécial sur le GPU envoie les résultats au moniteur.