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
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