2017-09-30 7 views
1

J'écris un programme OpenGL C++ très basique (Linux 64 bits).Qui exécute les shaders OpenGL s'il n'y a pas de carte vidéo

En fait, j'ai 3 programmes:

  • un principal programme C++
  • un shader vertex
  • un fragment shader

Les 2 shaders sont compilés à l'exécution. Je suppose que ces programmes sont exécutés en parallèle sur carte vidéo par le GPU.

Ma question est ce qui se passe si mon ordinateur contient une carte vidéo très basique sans GPU?

J'ai essayé d'exécuter mon programme sur VirtualBox avec « accélération 3d » travaux handicapés et le programme!

Est-ce que cela signifie opengl détecte la carte vidéo et exécuter automatiquement sur le processeur shader s'il n'y a pas GPU?

+0

probablement liés [logiciels OpenGL rendu alternatives] (https://stackoverflow.com/questions/10431591/opengl-software-rendering-alternatives). – VTT

Répondre

1

Normalement, vous dépendez de l'implémentation fournie par votre pilote graphique, qui va évidemment utiliser le GPU.

Cependant, la plupart des distributions Linux de bureau comprennent également une implémentation logicielle OpenGL, appelé Mesa, qui est ce que vous habituer si vous ne disposez pas de pilotes vidéo installés qui supportent OpenGL. (Il est très rare ces derniers temps de trouver du matériel vidéo, même intégré sur le CPU, qui ne supporte pas les shaders OpenGL, mais sur les drivers Linux, cela peut être un problème et dans ce cas la VM ne rend pas l'accélération matérielle disponible. Donc, la réponse courte est oui, vos shaders peuvent fonctionner sur le processeur, mais cela peut arriver ou non, et cela peut être automatique ou non, cela dépend de quels pilotes vidéo (ou autre implémentation OpenGL) ont installé.

+0

Et comment est-il possible de voir les limitations de la mémoire GPU (ou des ressources de calcul)? Que se passe-t-il si une instance de plusieurs instances d'un programme qui nécessite beaucoup de sommets par exemple? – Bob5421

+0

Malheureusement, OpenGL ne permet pas d'interroger la mémoire GPU disponible. Ce qui se passe exactement lorsque vous atteignez la limite de la RAM vidéo dépend de la méthode que vous utilisez pour charger les sommets. Il est possible d'avoir automatiquement la page GPU de la RAM normale si la RAM vidéo est pleine, mais c'est sa propre discussion séparée. – matthewscottgordon

+0

Il existe des fonctions permettant d'interroger des paramètres d'implémentation variés, par exemple, glGetIntegerv (GL_MAX_VERTEX_ATTRIBS, ...) vous dira combien d'attributs chacun des vertex peut avoir dans votre implémentation.Malheureusement, ces paramètres ne vous disent que ce dont la mise en œuvre est capable, et souvent les implémentations seront ** massivement ** meilleures si vous restez dans certaines limites ou structurez les choses d'une certaine manière. Le test sur différents matériels est le seul moyen infaillible de savoir comment fonctionnera votre programme OpenGL. – matthewscottgordon

0

sur tout ordinateur personnel moderne il y a une GPU. Si vous n'avez pas de carte GPU dédiée de la part de fournisseurs comme NVidia ou AMD, vous aurez probablement ce que l'on appelle un "on-board", ou integrated video chip par Intel ou un autre fabricant de matériel informatique. La bonne chose est que même les GPU embarqués sont plutôt bons (Intel a finalement fait du bon travail) et qu'il y a de fortes chances qu'un tel matériel sur votre PC supporte déjà une version OpenGL programmable. Eh bien, peut-être pas le dernier, mais d'après mon expérience personnelle, la plupart des GPU embarqués d'Intel il y a 2-3 ans devraient supporter jusqu'à OpenGL 4.1/4.2. Aussi longtemps que vous n'utilisez pas de matériel très ancien, vous devrait avoir un accès complet aux API accélérées par gpu. Sinon, vous avez Mesa library qui vient avec l'implémentation logicielle (non GPU accélérée) de l'API OpenGL. OpenGL est juste une norme, et cette norme a des implémentations différentes.