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