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.

Cg también permite <strong>la</strong> sobrecarga <strong>de</strong> funciones <strong>de</strong> acuerdo a perfiles. En otras pa<strong>la</strong>bras, permite especificar distintas<br />

versiones <strong>de</strong> una misma función para distintos perfiles. Esto pue<strong>de</strong> resultar útil <strong>de</strong>bido a que diferentes perfiles<br />

soportan diferentes subconjuntos <strong>de</strong> capacida<strong>de</strong>s <strong>de</strong>l lenguaje, y <strong>de</strong>bido a que <strong>la</strong>s implementaciones más eficientes<br />

<strong>de</strong> una función podrían ser diferentes para diferentes perfiles. El objetivo <strong>de</strong> todo esto es brindar soporte a GPUs<br />

más antiguas y limitadas.<br />

perfilA float mifunc(float x) {...};<br />

perfilB float mifunc(float x) {...};<br />

Pero tengamos en c<strong>la</strong>ro que esta última característica no es una verda<strong>de</strong>ra ventaja <strong>de</strong> Cg sobre HLSL, dado que HLSL<br />

agrega el concepto <strong>de</strong> effect framework, el cual vimos anteriormente. De hecho, <strong>la</strong>s distintas ventajas <strong>de</strong> incorporar<br />

un effect framework dieron origen a CgFX, el effect framework <strong>de</strong> Cg.<br />

Una interesante característica sacada <strong>de</strong> C++ disponible en el lenguaje Cg, es <strong>la</strong> posibilidad <strong>de</strong> agregar funciones a<br />

una estructura, convirtiendo a esa estructura en una versión limitada <strong>de</strong> una c<strong>la</strong>se. Cg también soporta un<br />

mecanismo <strong>de</strong> interfaces que es utilizado para <strong>de</strong>finir <strong>la</strong> funcionalidad general disponible en esas estructuras.<br />

3.4.1 Diferencias entre Cg y HLSL<br />

A<strong>de</strong>más <strong>de</strong> <strong>la</strong>s antes nombradas, existen otras diferencias entre ambos lenguajes. A continuación, se especificara <strong>la</strong>s<br />

diferencias <strong>de</strong> código para convertir un sha<strong>de</strong>r escrito en HLSL a Cg, y viceversa. En ambos casos, consi<strong>de</strong>raremos <strong>la</strong><br />

inclusión <strong>de</strong>l effect framework como parte <strong>de</strong>l lenguaje.<br />

La próxima es una lista utilizando solo ejemplos para enten<strong>de</strong>r <strong>la</strong>s diferencias:<br />

HLSL vsOut.Pos = mul( float4(pos,1) , Wvp );<br />

Cg vsOut.Pos = mul( Wvp, float4(pos,1) );<br />

Don<strong>de</strong> Wvp y Pos se <strong>de</strong>finen como: float4x4 Wvp : WORLDVIEWPROJECTION; float4 Pos : POSITION;<br />

HLSL VertexSha<strong>de</strong>r = compile vs_1_1 myVS();<br />

PixelSha<strong>de</strong>r = compile ps_2_0 myPS();<br />

Cg VertexProgram = compile arbvp1 myVS();<br />

FragmentProgram = compile arbfp1 myPS();<br />

HLSL Texture[0] = NULL;<br />

Cg Texture2DEnable[0] = false;<br />

HLSL LightEnable[0] = false;<br />

Cg LightingEnable = false;<br />

LightEnable[0] = false;<br />

Página 60

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

Saved successfully!

Ooh no, something went wrong!