For faster navigation, this Iframe is preloading the Wikiwand page for Cg.

Cg

Материал из Википедии — свободной энциклопедии

Cg (сокращение от C for Graphics[1]) — высокоуровневый язык программирования, разработанный Nvidia в тесном сотрудничестве с Microsoft для программирования шейдеров. Cg основан на языке программирования C. Несмотря на то, что они имеют один и тот же синтаксис, некоторые функции C были изменены и добавлены новые типы данных, чтобы сделать Cg более подходящим для программирования графических процессоров. Этот язык специализирован для программирования графического процессора и не используется для GPGPU. Компилятор Cg выводит программы шейдеров DirectX или OpenGL. С 2012 года Cg устарела, без дополнительной поддержки.[2]

Общие сведения

[править | править код]

Из-за технических достижений в компьютерной графике некоторые области программирования 3D-графики стали довольно сложными. Чтобы упростить процесс, к графическим картам были добавлены новые функции, в том числе возможность изменять свои конвейеры рендеринга с использованием шейдеров.

Вначале шейдеры программировались на очень низком уровне и только на языке ассемблера. Хотя использование языка ассемблера дало программисту полный контроль над кодом и гибкостью, его было довольно сложно использовать. Был необходим более удобный язык высокого уровня для программирования графического процессора, поэтому Cg был создан для решения этих проблем и упрощения разработки шейдеров.

Некоторые из преимуществ Cg:

  • Код высокого уровня легче читать и редактировать, чем код ассемблера.
  • Код Cg переносится на широкий спектр аппаратных средств и платформ, в отличие от ассемблерного кода, который обычно зависит от оборудования и платформ, для которых он написан.
  • Компилятор Cg может оптимизировать код и выполнять задачи более низкого уровня автоматически.

Подробности

[править | править код]

Типы данных

[править | править код]

Cg имеет шесть основных типов данных. Некоторые из них такие же, как в C, но есть и другие, специально добавленные для программирования графического процессора. Эти типы:

  • float — 32-битное число с плавающей запятой
  • half — 16-битное число с плавающей запятой
  • int — 32-битное целое число
  • fixed — 12-битное число с фиксированной запятой
  • bool — логическая переменная
  • sampler* — представляет собой объект текстуры

Cg также содержит векторные и матричные типы данных, основанные на базовых типах данных, такие как float3 и float4x4. Такие типы данных довольно распространены при работе с 3D программированием. Cg также имеет типы данных структуры и массива, которые работают аналогично их C-эквивалентам.

Cg поддерживает широкий диапазон операторов, включая общие арифметические операторы из C, эквивалентные арифметические операторы для векторных и матричных типов данных и общие логические операторы.

Функции и структуры управления

[править | править код]

Cg поддерживает основные структуры управления из C, такие как if ... else, while и for. Он также имеет аналогичный способ определения функций.

Стандартная библиотека Cg

[править | править код]

Как и в C, Cg имеет набор функций для общих задач программирования графического процессора. Некоторые из функций имеют эквиваленты в C, как математические функции abs и sin, в то время как другие специализируются на задачах графического программирования, такие как функции отображения текстуры tex1D и tex2D.

Библиотека времени выполнения Cg

[править | править код]

Программы Cg — это только шейдеры, и им нужны поддерживающие программы, которые обрабатывают остальную часть процесса рендеринга. Cg можно использовать с двумя графическими API: OpenGL или DirectX. Каждый из них имеет свой собственный набор функций для связи с программой Cg, например, с установкой текущего шейдера Cg, передачей параметров и т. п.

Помимо возможности скомпилировать исходный код Cg для сборки, время выполнения Cg также имеет возможность компилировать шейдеры во время выполнения поддерживающей программы. Это позволяет компиляции шейдера с помощью последних оптимизаций, доступных для аппаратного обеспечения, на котором в данный момент выполняется программа. Однако для этого метода требуется, чтобы исходный код для шейдера был доступен в виде обычного текста компилятору, позволяя пользователю программы получить доступ к исходному коду для шейдера. Некоторые разработчики рассматривают это как главный недостаток этой техники.

Чтобы избежать раскрытия исходного кода шейдера и по-прежнему поддерживать некоторые из конкретных аппаратных оптимизаций, была разработана концепция профилей. Шейдеры могут быть скомпилированы в соответствии с различными графическими аппаратными платформами (в соответствии с профилями). При выполнении поддерживающей программы наиболее оптимизированный шейдер загружается в соответствии с его профилем. Например, может быть профиль для видеокарты, поддерживающей сложные шейдеры, и другой профиль, который поддерживает только минимальные шейдеры. Создавая шейдер для каждого из этих профилей, поддерживающая программа увеличивает количество поддерживаемых платформ, не жертвуя качеством изображения на мощных системах.

Пример шейдера Cg

[править | править код]
 // 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;
 }

Примечания

[править | править код]
  1. Cg FAQ. Дата обращения: 7 сентября 2018. Архивировано 7 сентября 2018 года.
  2. Cg Toolkit | NVIDIA Developer. Дата обращения: 7 сентября 2018. Архивировано 7 сентября 2018 года.
{{bottomLinkPreText}} {{bottomLinkText}}
Cg
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?