Alors que NVidia ne fournit pas encore
de pilote pour DirectX 10 (donc windows Vista, seul système à supporter cette
version de DirectX qui introduit l’ensemble des nouvelles fonctionnalités), il
propose déjà une série d’extensions OpenGL exposant toutes les nouvelles
capacités du GPU.
Je
vais décrire rapidement ce qui me semble intéressant dans ce que j’ai lu de ces
extensions dans les specs de NVidia (http://developer.nvidia.com/ object/nvidia_opengl_specs.html ).
Geometry Shader.
L’architecture G80 fournit l’ajout au
pipeline 3D (devenu virtuel) d’une nouvelle étape programmable : Le
Geometry Shader. Cette étape se situe après le vertex shader et avant le
clipping, l’assemblage puis la rasterisation. Elle prend en entrée les
primitives (point, ligne triangle) pour lesquelles elle peut accéder aux
informations de sommets pour fournir en sortie un ensemble de nouvelles
primitives. De nouveaux types de primitives ont été introduits permettant de
passer au shader les sommets adjacents d’une primitive afin de les utiliser
pour générer les nouvelles primitives.
L’extension EXT_geometry_shader4 ajoute cette fonctionnalité à GLSL alors que
l’extension NV_geometry_program4 la
fournit via un langage assembleur similaire à celui employé par ARB_vertex_program et ARB_fragment_program.
Shaders Model 4.
La révision 4 du modèle des shaders
telle qu’elle est décrite dans Direct X 10 et implémentée sur le G80 est
exposée dans OpenGL via les extensions EXT_gpu_shader4
(pour le GLSL) et NV_gpu_program4
(pour l’assembleur NVidia). Elles fournissent ainsi un jeu d’instructions unifiées
pour l’ensemble des shaders qui supportent maintenant tous totalement les
branchements dynamiques par exemple ou l’accès aux textures sans restrictions.
Cette
révision ajoute principalement la gestion totale des entiers pour les
opérations arithmétiques et logiques, les attributs, ainsi que pour l’adressage
dans les textures et l’accès aux valeurs stockées en entiers (gestion via
l’extension EXT_texture_integer).
Un
nombre plus important d’attributs peuvent être passés entre vertex shader et
fragment shader. Le fragment shader a maintenant également la possibilité de
choisir le mode d’interpolation des attributs qu’il reçoit.
Transform Feedback.
(NV_transform_feedback)
Il s’agit de l’implémentation OpenGL de
la fonction de stream output de DirectX 10. Elle permet de récupérer (dans un
buffer object) les attributs de sommets générés par le vertex shader ou le
geometry shader plutôt que ceux-ci soient envoyés pour assemblage et
rasterisation. Elle permet ainsi de désactiver l’étape de rasterisation du
pipeline. Les données une fois dans un buffer object peuvent être réutilisés
comme vertex buffer, pixel buffer, texture buffer ou parameter buffer object
(cf. plus loin).
Texture Array.
(EXT_texture_array)
Cette extension introduit la notion de
tableau ou empilement de textures 1D et 2D. Un tableau de texture est accédé
comme une unique unité de texture dans un shader via un vecteur à 2 ou 3
composantes. Pour un tableau de textures 2D, la coordonnée "r"
correspond ainsi au niveau de la texture désirée dans l’empilement et
"s"-"t" à la coordonnée 2D du pixel dans la texture. La
différence entre un tableau de textures 2D et une texture 3D est que le tableau
ne supporte pas le filtrage trilinéaire entre couches mais supporte par contre,
au contraire des textures 3D, le rendu vers une couche (via framebuffer
object). Ceci est du au mode de stockage interne des tableaux optimisées pour
être une cible de rendu efficace qui diffère de celui des textures 3D qui sont
optimisées pour un accès et un filtrage efficace.
Texture Buffer Object.
(EXT_texture_buffer_object)
Ce buffer object (sur le même modèle
que Vertex et Pixel Buffer Object) fournit un nouveau binding/type de texture
appelé TEXTURE_BUFFER_EXT qui vient s’ajouter aux textures 1D, 2D, 3D, CUBE et
rectangles. Ce type permet d’utiliser sans recopie un buffer object (vertex,
pixel, transform feedback) attaché au binding en spécifiant le format à
utiliser pour en interpréter les données. Il comprend par contre un grand
nombre de restrictions : pas de mipmapping, pas d’accès via des
coordonnées normalisées, pas de filtrage. Il ne peut pas non plus être utilisé
par les fonctions fixes de traitement de fragments. Il est accédé via un
nouveau type de sampler dans les shaders.
Ce
buffer est donc principalement dédié à faire du calcul générique.
Parameter Buffer Object.
(NV_parameter_buffer_object)
Ce buffer object fournit un nouveau
type de paramètres constants pour les shaders. Ces paramètres similaires aux
paramètres uniformes peuvent ainsi etre spécifiés par lots à partir de
n’importe quel buffer object et interprétés dans le shaders comme une suite de
mots 32bits ou de vecteurs à 4 composantes. Le nombre de paramètre pouvant être
spécifié est sans doute limité par contre (je n’ai pas encore trouvé de
chiffre) et il va falloir voir ce que ca donne niveau efficacité.
Instanciation de Vertex
Array.
(EXT_draw_instanced)
Permet de rendre plusieurs fois le même
vertex array en un seul appel. Un identifiant d’instance est ajouté et permet
au vertex et geometry shader de savoir de quelle instance est issue la
primitive reçue.
Extension des Draw
Buffers (MRT)
(GL_EXT_draw_buffers2)
Permet d’activer et de désactiver le
blending et de choisir un color mask indépendamment pour l’ensemble des buffers
utilisés simultanément.
Nouveaux formats de
textures et de framebuffers
- Format RGB flottant compact (de
taille totale 32bits) avec exposant partagé (EXT_texture_shared_exponent).
- Format RGB flottant 32bits compact (EXT_packed_float)
- Formats de compression de textures (EXT_texture_compression_latc et EXT_texture_compression_rgtc)
- Format de depth buffer et depth
textures flottants (NV_depth_buffer_float).
- Format de framebuffer IEC sRGB (EXT_framebuffer_sRGB)
- Extension du multi-sampling pour le
contrôle du multi-sampling de primitives blendées (GL_NV_framebuffer_multisample_coverage). Je n’ai pas encore bien vu
comment ça marche ni a quoi ça sert vraiment.
|
Written by Visiteur on 2007-01-05 12:12:38 | bouti Written by Visiteur on 2008-01-25 18:54:41 je veux récuperer les vertix d'un objet 3d avec java et opengl |
Powered by AkoComment 2.0! |