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.
Los modificadores storage c<strong>la</strong>ss dan información sobre el alcance y tiempo <strong>de</strong> vida <strong>de</strong> <strong>la</strong> variable. Los modificadores<br />
static y extern no pue<strong>de</strong>n usarse en simultáneo, como tampoco uniform y vo<strong>la</strong>tile. Los tipos <strong>de</strong> modificadores son:<br />
Prefijo Significado<br />
static Para variables globales significa que el valor es interno y no pue<strong>de</strong> ser accedido por <strong>la</strong><br />
aplicación, solo por el sha<strong>de</strong>r. Para variables locales, sin embargo, indica que el valor<br />
persiste. La inicialización <strong>de</strong> variables estáticas es hecha una so<strong>la</strong> vez.<br />
extern El modificador extern pue<strong>de</strong> usarse en variables globales para indicar que pue<strong>de</strong> ser<br />
modificado a fuera <strong>de</strong>l sha<strong>de</strong>r a través <strong>de</strong> <strong>la</strong> API. Este es el comportamiento por <strong>de</strong>fecto<br />
para variables globales.<br />
uniform Las <strong>de</strong>c<strong>la</strong>raciones <strong>de</strong> variables globales con el prefijo uniform indican que no su valor no<br />
cambia, excepto entre l<strong>la</strong>madas <strong>de</strong> ren<strong>de</strong>rizado. Uniform es el comportamiento por<br />
<strong>de</strong>fecto <strong>de</strong> todas <strong>la</strong>s variables globales.<br />
vo<strong>la</strong>tile Indica que el valor <strong>de</strong> <strong>la</strong> variable cambiara frecuentemente. Este modificador solo se aplica<br />
a parámetros globales.<br />
shared Indica que <strong>la</strong> variable será compartida entre efectos (ver effect framework, sección 3.6).<br />
nointerpo<strong>la</strong>tion No interpo<strong>la</strong>r <strong>la</strong> salida <strong>de</strong> un vertex sha<strong>de</strong>r antes <strong>de</strong> pasárse<strong>la</strong> al pixel sha<strong>de</strong>r.<br />
Los modificadores <strong>de</strong> tipos (l<strong>la</strong>mados así por Microsoft) son:<br />
Prefijo Significado<br />
const Específica que el valor <strong>de</strong> <strong>la</strong> variable no cambiara. Por esta razón, el valor <strong>de</strong>be inicializarse<br />
en <strong>la</strong> <strong>de</strong>c<strong>la</strong>ración <strong>de</strong> <strong>la</strong> variable.<br />
row_major Indica que cada fi<strong>la</strong> <strong>de</strong> <strong>la</strong> matriz será almacenada en un único registro constante.<br />
colum_major Indica que cada columna será almacenada en un único registro constante. Esta<br />
organización facilita <strong>la</strong>s operaciones <strong>de</strong> matrices y por eso es <strong>la</strong> opción por <strong>de</strong>fecto.<br />
Los modificadores row_major y col_major se utilizan solo para matrices, y sirven para especificar <strong>la</strong> organización<br />
esperada <strong>de</strong> dicha matriz <strong>de</strong>ntro <strong>de</strong>l almacenamiento <strong>de</strong> hardware.<br />
La inicialización <strong>de</strong> variables es simi<strong>la</strong>r a <strong>la</strong> usada en C. Por ejemplo:<br />
float2x2 fMat = {3.0f, 5.0f, // Columna 1<br />
2.0f, 1.0f}; // Columna 2<br />
float4 vPos = {3.0f, 5.0f, 2.0f, 1.0f};<br />
float fFactor = 0.2f;<br />
También po<strong>de</strong>mos especificar a qué registro constante particu<strong>la</strong>r se mapeara <strong>la</strong> variable. Si el tipo <strong>de</strong> <strong>la</strong> variable no<br />
encaja con el tamaño <strong>de</strong> un único registró, subsecuentes registros serán usados.<br />
3.3.4 Semántica<br />
HLSL introduce un nuevo constructor, el cual especifica <strong>la</strong> semántica <strong>de</strong> una variable particu<strong>la</strong>r y/o un parámetro <strong>de</strong><br />
una función. Este constructor permite al código <strong>de</strong> un sha<strong>de</strong>r conectarse con un registro particu<strong>la</strong>r <strong>de</strong> <strong>la</strong> GPU<br />
Página 52