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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

La función pue<strong>de</strong> prefijarse con uno o más <strong>de</strong> <strong>la</strong>s siguientes pa<strong>la</strong>bras reservadas:<br />

Prefijo Significado<br />

Static Indica que <strong>la</strong> función existirá <strong>de</strong>ntro <strong>de</strong>l alcance <strong>de</strong>l sha<strong>de</strong>r actual y no será compartida.<br />

Inline Indica que <strong>la</strong>s instrucciones <strong>de</strong> <strong>la</strong> función serán copiadas <strong>de</strong>ntro <strong>de</strong>l código l<strong>la</strong>mador en<br />

vez <strong>de</strong> usar una verda<strong>de</strong>ra l<strong>la</strong>mada a función. Esto en realidad es una sugerencia al<br />

compi<strong>la</strong>dor, nada garantiza ese funcionamiento. En ciertos sha<strong>de</strong>r mo<strong>de</strong>ls, <strong>de</strong>bido a sus<br />

limitaciones, esta es <strong>la</strong> única opción.<br />

Target Indica en que versión <strong>de</strong> pixel o vertex sha<strong>de</strong>r se pensara usar esta función. Esto permite<br />

al compi<strong>la</strong>dor tomar mejores <strong>de</strong>cisiones cuando construye el código. Notemos que no<br />

escribiremos <strong>la</strong> pa<strong>la</strong>bra “target” en nuestro sha<strong>de</strong>r, en cambio, usaremos un nombre que<br />

<strong>de</strong>nota <strong>la</strong> versión que queremos usar. Por ejemplo, usaremos ps_3_0 si preten<strong>de</strong>mos que<br />

va a correr usando pixel sha<strong>de</strong>r 3.0.<br />

A<strong>de</strong>más, todos los parámetros <strong>de</strong>c<strong>la</strong>rados pue<strong>de</strong>n prefijarse con <strong>la</strong>s siguientes pa<strong>la</strong>bras reservadas:<br />

Prefijo Significado<br />

In Es el comportamiento por <strong>de</strong>fecto e indica que el parámetro será usado solo para lectura.<br />

Out Indica que el parámetro será usado para retornar un valor.<br />

Inout Combina el comportamiento <strong>de</strong> In y Out.<br />

Uniform Indica que el valor proviene <strong>de</strong> un registro constante. Generalmente, <strong>la</strong>s variables globales<br />

se almacenan en registros constantes. Los valores <strong>de</strong> estas variables globales muchas veces<br />

se setean en <strong>la</strong>s l<strong>la</strong>madas <strong>de</strong> ren<strong>de</strong>rizado <strong>de</strong>l objeto, o mantienen el valor inicial asignado<br />

en el código <strong>de</strong>l sha<strong>de</strong>r.<br />

Cada sha<strong>de</strong>r <strong>de</strong>be contener al menos una función que sirva como punto <strong>de</strong> partida <strong>de</strong>l sha<strong>de</strong>r. A<strong>de</strong>más, <strong>la</strong>s funciones<br />

pue<strong>de</strong>n sobrecargarse <strong>de</strong> manera simi<strong>la</strong>r a C++, es <strong>de</strong>cir, <strong>la</strong> función pue<strong>de</strong> tener el mismo nombre pero <strong>de</strong>be diferir<br />

en el número y/o tipo <strong>de</strong> sus parámetros. Las funciones no pue<strong>de</strong>n l<strong>la</strong>marse recursivamente, esto se <strong>de</strong>be a <strong>la</strong><br />

manera en <strong>la</strong> cual <strong>la</strong>s funciones son procesadas, compi<strong>la</strong>das y ejecutadas por el hardware.<br />

Para una <strong>de</strong>scripción <strong>de</strong> <strong>la</strong>s funciones incluidas en HLSL consultar:<br />

3.3.9 Effect framework<br />

http://msdn2.microsoft.com/en-us/library/bb509611.aspx<br />

El Effects framework permite agrupar sha<strong>de</strong>rs (o efectos, término que le gusta usar mucho a Microsoft) y otros<br />

datos re<strong>la</strong>cionados en una unidad lógica. Los dos effects frameworks más popu<strong>la</strong>res son DirectX FX (o DXFX) y CgFX<br />

los cuales son una extensión <strong>de</strong>l los lenguajes HLSL y Cg, respectivamente. Por cuestiones <strong>de</strong> simplicidad<br />

consi<strong>de</strong>raremos a estos frameworks como parte <strong>de</strong> ambos lenguajes, dado su importancia y su amplio uso. Y es por<br />

eso que en este caso lo <strong>de</strong>scribiremos como parte <strong>de</strong> HLSL.<br />

Los archivos <strong>de</strong> efectos usan <strong>la</strong> extensión .fx, y se los <strong>de</strong>nomina comúnmente como archivos fx. Muchas veces<br />

l<strong>la</strong>memos efecto a esta unidad lógica. La estructura <strong>de</strong> un archivo fx es simi<strong>la</strong>r a <strong>la</strong> siguiente:<br />

Página 58

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

Saved successfully!

Ooh no, something went wrong!