Untitled - Departamento de Ciencias e Ingeniería de la Computación
Untitled - Departamento de Ciencias e Ingeniería de la Computación
Untitled - Departamento de Ciencias e Ingeniería de la Computación
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Variables Globales<br />
Funciones<br />
Técnicas<br />
Pasadas<br />
Estados <strong>de</strong>l efecto<br />
Especificación <strong>de</strong> que funciones calcu<strong>la</strong>ran los vertex y pixel sha<strong>de</strong>rs.<br />
Variables globales: son seteadas por el efecto o por <strong>la</strong> aplicación, y su alcance abarca a todo el efecto.<br />
Funciones: <strong>la</strong>s funciones pue<strong>de</strong>n escribirse tanto en HLSL como en lenguaje ensamb<strong>la</strong>dor.<br />
Estados <strong>de</strong>l efecto: especifican <strong>la</strong>s condiciones <strong>de</strong> ren<strong>de</strong>rizado <strong>de</strong>l pipeline. En otras pa<strong>la</strong>bras, indican al<br />
pipeline como procesar <strong>la</strong> información. Muchas veces, algunos <strong>de</strong> estos estados se suelen setear para lograr<br />
un comportamiento particu<strong>la</strong>r y es por eso que su importancia es gran<strong>de</strong>. Podrían indicar, por ejemplo, que<br />
se <strong>de</strong>shabilite el Z-Buffer, o especificar que <strong>la</strong>s caras <strong>de</strong> un objeto poligonal se armen <strong>de</strong> cierta forma (cull<br />
mo<strong>de</strong>). Para ver <strong>la</strong> lista completa <strong>de</strong> estados <strong>de</strong>l efecto ver:<br />
http://msdn2.microsoft.com/en-us/library/bb173347.aspx#Light_States<br />
Técnicas: básicamente, una técnica nos dice funciones vamos a utilizar a <strong>la</strong> hora <strong>de</strong> ren<strong>de</strong>rizar cada pasada<br />
<strong>de</strong> un sha<strong>de</strong>r, especificando a su vez <strong>la</strong>s condiciones <strong>de</strong> ren<strong>de</strong>rizado <strong>de</strong>l pipeline. Las técnicas permiten a los<br />
<strong>de</strong>sarrol<strong>la</strong>dores agrupar distintas versiones <strong>de</strong> un mismo sha<strong>de</strong>r. Estas versiones contendrán distintos<br />
niveles <strong>de</strong>l sha<strong>de</strong>r, variando <strong>de</strong>s<strong>de</strong> un sha<strong>de</strong>r más potente y costoso, a sha<strong>de</strong>rs <strong>de</strong> menor calidad. Cada<br />
técnica pue<strong>de</strong> <strong>de</strong>finir una o más pasadas. Cada pasada especificara variables globales (para esa pasada),<br />
estados <strong>de</strong>l efecto y también especificará que funciones calcu<strong>la</strong>rán los vertex y pixel sha<strong>de</strong>rs. El estado <strong>de</strong>l<br />
pipeline se restablecerán a su estado anterior cada vez que una técnica finalice.<br />
3.4 Cg<br />
Su nombre proviene <strong>de</strong> “C for Graphics” y fue <strong>de</strong>sarrol<strong>la</strong>do por NVIDIA. Cg estuvo disponible antes que HLSL y GLSL.<br />
Es muy simi<strong>la</strong>r a HLSL y <strong>de</strong> acuerdo a sus características se lo podría consi<strong>de</strong>rar un super conjunto <strong>de</strong>l lenguaje HLSL.<br />
Esto convierte a Cg y HLSL compatibles a nivel condigo fuente. De esta manera, solo <strong>de</strong>scribiremos <strong>la</strong>s diferencias<br />
entre ambos lenguajes, en vez <strong>de</strong> enumerar todas sus características.<br />
Su característica c<strong>la</strong>ve y única es su in<strong>de</strong>pen<strong>de</strong>ncia a <strong>la</strong> API gráfica elegida, dado que es posible utilizar código escrito<br />
en Cg tanto en OpenGL como en DirectX. Es más, el código <strong>de</strong>l compi<strong>la</strong>dor Cg es abierto, permitiendo a un tercero<br />
<strong>de</strong>sarrol<strong>la</strong>r un compi<strong>la</strong>dor con el objetivo <strong>de</strong> brindar soporte a una nueva p<strong>la</strong>taforma <strong>de</strong> software y/o hardware.<br />
También <strong>de</strong> esta manera po<strong>de</strong>mos asegurarnos <strong>la</strong> calidad <strong>de</strong> <strong>la</strong> compi<strong>la</strong>ción, si encontramos ineficiencias o bugs<br />
po<strong>de</strong>mos corregirlos sin necesidad <strong>de</strong> <strong>de</strong>pen<strong>de</strong>r <strong>de</strong>l ven<strong>de</strong>dor.<br />
A<strong>de</strong>más, Cg utiliza el concepto <strong>de</strong> perfiles. Un perfil <strong>de</strong>fine <strong>la</strong>s capacida<strong>de</strong>s y restricciones particu<strong>la</strong>res <strong>de</strong> un sha<strong>de</strong>r<br />
mo<strong>de</strong>l, <strong>de</strong> una GPU y <strong>de</strong> una API gráfica. Al momento <strong>de</strong> compi<strong>la</strong>r el sha<strong>de</strong>r, po<strong>de</strong>mos especificar el perfil <strong>de</strong>l sistema<br />
en el que se ejecutara el sha<strong>de</strong>r y <strong>de</strong> esta manera obtener portabilidad y una mejor compi<strong>la</strong>ción para esa<br />
configuración particu<strong>la</strong>r <strong>de</strong> software y hardware. Notemos que <strong>la</strong> especificación <strong>de</strong>l perfil es un comando al<br />
compi<strong>la</strong>dor Cg, no forma parte <strong>de</strong>l código escrito en Cg.<br />
Página 59