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.

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

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

Saved successfully!

Ooh no, something went wrong!