Allez-vous purement OpenGL ou GLSL? [fermé]

11

Je me suis intéressé à l'étude de la programmation graphique, donc le point d'entrée évident était d'apprendre OpenGL. Mais en rassemblant des informations éparpillées sur les forums et les sites, il semble qu'une implémentation OpenGL pure soit en train de disparaître car la plupart des choses antérieures à 3.0 sont obsolètes et citent une critique sur Amazon, "car la 3.0 est une question de shaders". De même, parmi les livres que j'ai vus, seul le superbible couvre la version la plus récente, mais seulement partiellement car une bonne partie du livre enseigne les fonctions obsolètes, et il existe des livres spécifiques à GLSL.

C'est là que j'ai rencontré mon premier problème, certains matériels ne prennent pas en charge GLSL, y compris le portable avec des graphiques intégrés Intel que j'avais prévu d'utiliser. La fonction

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

provoque une erreur de segmentation et d'après son apparence, mon pilote ne prend pas en charge les shaders

Donc ma question est, quelle est la viabilité de faire un jeu uniquement en OpenGL? vais-je manquer des fonctionnalités irremplaçables du langage shader? Et quel type de matériel (ancienne génération i3, i5, i7, anciens VGA) puis-je m'attendre à exécuter correctement un jeu avec des shaders?

ibrabeicker
la source
1
GLSL est OpenGL, je pense que votre question est de savoir si le matériel que vous comptez utiliser est compatible OpenGL 3, pas spécifiquement compatible GLSL.
deceleratedcaviar
@Daniel donc si un matériel / pilote est compatible OpenGL 3.0, est-il compatible GLSL?
ibrabeicker
1
GLSL fait partie de la spécification OpenGL 3.0, donc oui, c'est le cas.
deceleratedcaviar
1
Vous dites: "à première vue, mon pilote ne prend pas en charge les shaders". Quelle version d'OpenGL obtenez-vous? Chargez-vous correctement toutes les fonctions OpenGL disponibles?
Nicol Bolas
1
@Papavoikos: S'il renvoie NULL, vous avez des problèmes bien plus importants que l'utilisation de shaders. Créez-vous votre contexte OpenGL correctement? N'oubliez pas: vous ne pouvez appeler aucune fonction GL tant que vous n'avez pas créé et actualisé un contexte valide.
Nicol Bolas

Réponses:

9

Le code de shader est certainement plus clair et plus facile à comprendre qu'un désordre d'appels à glTexEnv, glTexGen et à la matrice de texture, et a le bonus que vous pouvez exprimer toute opération mathématique plus ou moins arbitraire en l'utilisant (ce que vous ne pouvez pas faire avec le fixe) pipeline - ce que vous appelez "Pure OpenGL"). Le seul inconvénient potentiel est que vous devez écrire une certaine quantité d'infrastructure de support dans votre code avant de pouvoir commencer à les utiliser, alors qu'avec l'ancienne méthode, vous pouvez pratiquement plonger directement. J'appelle cela un inconvénient "potentiel" parce que je pense en fait que cela vous fait préparer les choses et en apprendre un peu plus à l'avance - OpenGL a la réputation d'être "facile" et vous voyez parfois des gens se laisser berner par cela et plonger directement sans vraiment savoir ce qu'ils font en premier,

Du point de vue matériel, vous pouvez compter sur presque tout ce qui a été publié au cours des 5/6/7 dernières années pour avoir un certain niveau de prise en charge des shaders, mais - dans le cas des anciens Intels (certains de la série 9xx) - ce ne sera pas GLSL, mais ce seront plutôt les anciennes extensions GL_ARB_vertex_program et GL_ARB_fragment_program . Ceux-ci utilisent un langage de shader semblable à un langage d'assemblage, mais - le temps de la confession - je l'aime personnellement beaucoup. Il est en fait assez facile à utiliser, s'il manque de fonctionnalités plus modernes (telles que la ramification) et nécessite plus de lignes de code de shader pour faire la même chose. L'infrastructure de support requise dans votre programme principal pour ces extensions est beaucoup plus légère que pour GLSL également.

Cela ne veut pas dire que je les recommanderais cependant sur GLSL, mais ils sont une option qui est là si vous avez vraiment besoin de fonctionner sur cette classe de matériel et il est utile de savoir qu'ils existent, ce qui m'amène au dernier point . Êtes-vous vraiment certain que vous avez vraiment besoin de fonctionner sur cette classe de matériel (par exemple, dans le cas de votre ordinateur portable, vous avez peut-être simplement négligé d'obtenir les points d'entrée)?

Maximus Minimus
la source
J'ai complètement négligé le fait que Mesa3d est toujours sur la spécification opengl 2.1. Je vais arranger ça
ibrabeicker
6

Il convient également de noter qu'il n'y a plus de "OpenGL pur".

OpenGL ES 2.0 a abandonné tout ce qui n'est pas des shaders, et puisque WebGL est basé sur cela, il ne fonctionne que avec des shaders. OpenGL 3.0 a déprécié toutes les fonctions fixes et 3.1 l'a supprimé (dans les profils principaux. La plupart des implémentations prennent en charge les profils de compatibilité, mais MacOSX ne le fait pas pour leur implémentation 3.2).

Je ne suggère donc pas d'apprendre OpenGL non shader.

Nicol Bolas
la source
6

Si vous avez déjà fait de la programmation dans le passé, écrire votre propre code de shader en utilisant GLSL sera beaucoup plus agréable. J'ai d'abord essayé d'apprendre OpenGL à fonction fixe et c'était plus difficile pour moi car cela n'avait pas de sens. Ensuite, j'ai essayé d'apprendre le GLSL en utilisant le livre orange et c'était beaucoup plus facile et amélioré depuis. Juste mes 2 cents.

J'irais certainement vers GLSL à cause du pouvoir d'écrire des programmes pour le GPU.

Joey Green
la source