Cg (lyhenne sanoista C Graphics [1] ) on korkean tason ohjelmointikieli , jonka Nvidia on kehittänyt läheisessä yhteistyössä Microsoftin kanssa Shader -ohjelmointiin . Cg perustuu C - ohjelmointikieleen . Vaikka niillä on sama syntaksi , joitain C-funktioita on muutettu ja uusia tietotyyppejä lisätty, jotta Cg soveltuu paremmin GPU -ohjelmointiin . Tämä kieli on erikoistunut GPU-ohjelmointiin, eikä sitä käytetä GPGPU :ssa . Cg- kääntäjä tulostaa Shader-ohjelmatDirectX tai OpenGL . Vuodesta 2012 lähtien Cg on poistettu käytöstä ilman lisätukea. [2]
Tietokonegrafiikan teknologisen kehityksen vuoksi joistakin 3D-grafiikkaohjelmoinnin alueista on tullut varsin monimutkaisia. Prosessin yksinkertaistamiseksi näytönohjainkortteihin on lisätty uusia ominaisuuksia, mukaan lukien mahdollisuus muuttaa niiden renderöintiputkia varjostimien avulla.
Alussa varjostimet ohjelmoitiin erittäin alhaisella tasolla ja vain assembly-kielellä . Vaikka asennuskielen käyttö antoi ohjelmoijalle täydellisen koodin hallinnan ja joustavuuden, sen käyttö oli melko vaikeaa. GPU-ohjelmointiin tarvittiin kätevämpi korkean tason kieli, joten Cg luotiin ratkaisemaan nämä ongelmat ja helpottamaan Shader-kehitystä.
Jotkut Cg:n eduista:
Cg:llä on kuusi perustietotyyppiä . Jotkut niistä ovat samoja kuin C:ssä, mutta toiset on lisätty erityisesti GPU-ohjelmointia varten. Nämä tyypit ovat:
Cg sisältää myös vektori- ja matriisitietotyyppejä, jotka perustuvat perustietotyyppeihin, kuten float3ja float4x4. Nämä tietotyypit ovat melko yleisiä 3D-ohjelmoinnin kanssa. Cg:llä on myös rakenne- ja taulukkotietotyypit, jotka toimivat samalla tavalla kuin C-vastineet.
Cg tukee monenlaisia operaattoreita, mukaan lukien yleiset aritmeettiset operaattorit C:stä, vastaavat aritmeettiset operaattorit vektori- ja matriisitietotyypeille sekä yleiset loogiset operaattorit.
Cg tukee perus C-ohjausrakenteita, kuten if ... else, whileja for. Sillä on myös samanlainen tapa määrittää toimintoja.
Kuten C, Cg:ssä on joukko toimintoja yleisiä GPU-ohjelmointitehtäviä varten. Joillakin funktioilla on C-vastineet, kuten matemaattiset funktiot absja sin, kun taas toiset ovat erikoistuneet grafiikkaohjelmointitehtäviin, kuten pintakuviokartoitusfunktiot tex1Dja tex2D.
Cg-ohjelmat ovat vain varjostimia, ja ne tarvitsevat tukiohjelmia, jotka hoitavat muun renderöintiprosessin. Cg:tä voidaan käyttää kahden grafiikkasovellusliittymän kanssa : OpenGL tai DirectX . Jokaisella niistä on omat toiminnot Cg-ohjelman kanssa viestimiseen, kuten nykyisen Cg-varjostimen asettaminen, parametrien välitys jne.
Sen lisäksi, että Cg-ajoaika pystyy kääntämään Cg- lähdekoodia kokoonpanoa varten, se pystyy myös kääntämään varjostimia tukiohjelman ajon aikana. Tämä mahdollistaa Shaderin kääntämisen uusimmilla optimoinnilla, jotka ovat saatavilla laitteistolle , jossa ohjelma parhaillaan on käynnissä. Tämä menetelmä edellyttää kuitenkin, että varjostimen lähdekoodi on kääntäjän saatavilla pelkkänä tekstinä, jolloin ohjelman käyttäjä pääsee käsiksi Shaderin lähdekoodiin. Jotkut kehittäjät pitävät tätä tämän tekniikan suurimmana haittana.
Jotta Shader-lähdekoodia ei paljasteta ja silti tuetaan tiettyjä laitteiston optimointeja, kehitettiin profiilien käsite. Varjostimet voidaan koota eri grafiikkalaitteistoalustojen mukaan (profiilien mukaan). Kun tukiohjelma suoritetaan, optimoitu varjostin ladataan profiilinsa mukaan. Esimerkiksi näytönohjaimelle voi olla profiili, joka tukee monimutkaisia varjostimia, ja toinen profiili, joka tukee vain minimaalisia varjostimia. Luomalla varjostimen jokaiselle näistä profiileista tukiohjelma lisää tuettujen laitteistoalustojen määrää tinkimättä kuvanlaadusta tehokkaissa järjestelmissä.
Nvidia | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
GPU ( vertailu ) _ |
| ||||||||||
Emolevyn piirisarjat ( vertailu ) _ |
| ||||||||||
Muut |
|