14.04.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!