Cg (lenguaje de programación)

Cg (lenguaje de programación)

Cg o C for Graphics es un lenguaje de alto nivel desarrollado por Nvidia en colaboración con Microsoft[1] [2] para la programación de vertex y pixel shaders. Es similar al lenguaje de Microsoft HLSL.

El lenguaje está basado en lenguaje de programación C y comparte varias de sus características aunque existen diferencias notables y elementos añadidos para adaptarlos a cuestiones concretas y especiales de la programación de las GPU (Graphics Processing Unit o Unidad de Procesamiento de Gráfico).

Este lenguaje fue diseñado específicamente para las acelaradoras y API gráficas, no pretende ser utilizado como lenguaje de propósito general. Por el contrario, el lenguaje CUDA (también orientado a programación de GPU) si puede ser utilizado para aplicaciones de propósito general.

Contenido

Descripción general

En un primer momento, las aceleradoras se programaban en bajo nivel, utilizando directamente el repertorio de instrucciones de los procesadores de GPU. Cg surge como alternativa para facilitar la labor al programador.

El lenguaje suele consistir de dos tipos de programas completamente diferentes que interactúan entre sí. El primero es un programa de manipulación de vértices (modificar el modelo tridimensional) directamente desde la aceleradora, sin gastar recursos de la CPU principal. Por otra parte, la función del segundo tipo de programa es especificar el color de cada píxel en función de múltiples factores.

Algunas de las ventajas de usar Cg son:

  • Un lenguaje de alto nivel es más fácil de programar, aprender, leer y mantener
  • Es fácil para depurar errores.
  • Puede funcionar en un amplio rango de hardware y plataformas (Es menos dependiente del hardware concreto y sus versiones que el lenguaje assembler)
  • El compilador de Cg puede optimizar el código en función de la versión de hardware concreta y otras características disponibles en el momento de ejecutar el programa.

Detalle

Perfiles

En el lenguaje utiliza la noción de perfiles (Cg Profiles) para facilitar la portabilidad. Cada uno de ellos establece capacidades mínimas y requisitos. De esta forma, un programador puede desarrollar un programa (o varias versiones) con la seguridad de que se ejecutará correctamente en aquellos sistemas que acepten ese perfil.

El establecimiento de los perfiles es una forma de asegurar la compatibilidad sin tener que implementar estrategias más complejas como la Compatibilidad hacia atrás.

Los Tipos de datos, operadores, funciones, estructuras, entre otros varían de acuerdo al perfil que se en el que se trabaje.

Tipos de datos

C for Graphics tiene seis tipos básicos de datos, algunos específicos para la programación de las GPU:

  • float - número de 32bit en coma flotante
  • half - número de 16bit en coma flotante
  • int - número de 32bit entero
  • fixed - número de 12bit en coma fija
  • bool - valor booleano
  • sampler* - un objeto de textura

También existen algunos tipos compuestos como vectores de 3 floats y matrices como 4x4 float.

Operadores

Cg soporta un conjunto limitado de operadores comparado con C/C++ sin embargo extiende algunos de ellos para realizar operaciones entre vectores.

Funciones

Cg admite crear funciones de manera similar que en C.

Control de flujo

Se admite estructuras de control como bucles y control de flujo. En muchos casos, es condición necesaria que los ciclos sean desenrollables (para esto se debe conocer de antemano el número de veces que se ejecutará). Por otra parte, se pide que las secuencias de control estén limitadas en cuanto a niveles de anidamiento o bien que el predicado esté formado por variables globales a todo el programa (es decir dentro del programa se sepa ya si el predicado es cierto o falso).

La biblioteca estándar Cg

Esta biblioteca contiene muchas funciones útiles para la manipulación de números en coma flotante, vectores, matrices y texturas de tal forma que operaciones relativamente complejas (desde el punto de vista de un procesador) como el cálculo de la iluminación de un punto se resuelven con sólo unas pocas operaciones.

La biblioteca Cg de ejecución

Cg tiene un amplio repertorio de funciones para interactuar con el sistema Cg dentro de la biblioteca gráfica que se esté utilizando, esta sea DirectX u OpenGL.

Un ejemplo de Cg vertex shader

 // input vertex
 struct VertIn {
     float4 pos   : POSITION;
     float4 color : COLOR0;
 };
 
 // output vertex
 struct VertOut {
     float4 pos   : POSITION;
     float4 color : COLOR0;
 };
 
 // vertex shader main entry
 VertOut main(VertIn IN, uniform float4x4 modelViewProj) {
     VertOut OUT;
     OUT.pos     = mul(modelViewProj, IN.pos); // calculate output coords
     OUT.color   = IN.color; // copy input color to output
     OUT.color.z = 1.0f; // blue component of color = 1.0f
     return OUT;
 }

Aplicaciones y juegos que usan Cg

Otras lecturas

Véase también

Enlaces externos

References


Wikimedia foundation. 2010.

Игры ⚽ Поможем написать курсовую

Mira otros diccionarios:

  • Lenguaje de programación C — Saltar a navegación, búsqueda C Paradigma: Imperativo (Procedural) Apareció en: 1972 Diseñado por: Dennis M. Ritchie Tipo de dato: Débil, Estático Implementaciones …   Wikipedia Español

  • Lenguaje de programación Java — Saltar a navegación, búsqueda Java Paradigma: Orientado a objetos Apareció en: 1991 Diseñado por: Sun Microsystems Tipo de dato: Fuerte, Estático Implementacion …   Wikipedia Español

  • Lenguaje de programación Pascal — Saltar a navegación, búsqueda Pascal Paradigma: imperativo (estructurado) Apareció en: 1970 Diseñado por: Niklaus Wirth Implementaciones: Múltiples Dialectos …   Wikipedia Español

  • Lenguaje de programación J — Saltar a navegación, búsqueda El lenguaje de programación J, diseñado por Kenneth Iverson y Roger Hui en los 90, es una síntesis de los lenguajes de programación APL (diseñado también por Iverson) y los lenguajes funcionales FP y FL creados por… …   Wikipedia Español

  • Lenguaje de programación Oz — Saltar a navegación, búsqueda Oz es un lenguaje de programación multi paradigma y lenguaje de programación esotérico. Oz fue originalmente desarrollado en el laboratorio de Programación de Sistemas en la Universidad de Saarland por Gert Smolka y… …   Wikipedia Español

  • Lenguaje de programación Limbo — Saltar a navegación, búsqueda Limbo Paradigma: Concurrente Apareció en: 1995 Diseñado por: Sean Dorward, Phil Winterbottom, and Rob Pike Desarrollador: Bell Labs/Vita Nuova …   Wikipedia Español

  • Lenguaje de programación fuertemente tipado — Saltar a navegación, búsqueda Un lenguaje de programación es fuertemente tipado si no se permiten violaciones de los tipos de datos, es decir, dado una variable de un tipo concreto, no se puede usar como si fuera una variable de otro tipo… …   Wikipedia Español

  • Lenguaje de programación Miranda — Saltar a navegación, búsqueda Miranda fue desarrollado entre los años 1985 y 1986 por David Turner. Se trata de un lenguaje de programación funcional sucesor de SASL y KRC. El principal objetivo de este lenguaje era el desarrollar una versión… …   Wikipedia Español

  • Lenguaje de programación Scala — Saltar a navegación, búsqueda Este artículo es acerca del Lenguaje de Programación. Para otros usos, ver Scala. Scala Paradigma: [ functional, orientado a objetos Apareció en: 2003 Diseñado por: Martin Odersky …   Wikipedia Español

  • Lenguaje de programación B — Saltar a navegación, búsqueda B Paradigma: imperativo (procedural) Apareció en: 1969 Diseñado por: Kenneth L. Thompson, Dennis M. Ritchie Tipo de dato: lenguaje sin tipos …   Wikipedia Español

  • Lenguaje de programación D — Saltar a navegación, búsqueda D Paradigma: multiparadigma: orientado a objetos, imperativo Apareció en: 1995 Diseñado por: Walter Bright Última versión: 1.050(estable) 2.035(inestable) (14 de octubre de 2009 …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”