Cg (programming language) : 3d graphics shader programming

Cg (programming language)

From Wikipedia, the free encyclopedia
 
Jump to: navigation, search

Cg (short for C for Graphics[1]) is a high-level shading language developed by Nvidia in close collaboration with Microsoft for programming vertex and pixel shaders. Cg is based on the C programming language and although they share the same syntax, some features of C were modified and new data types were added to make Cg more suitable for programming graphics processing units. This language is only suitable for GPU programming and is not a general programming language. The Cg compiler outputs DirectX or OpenGL shader programs. Since 2012, Cg was deprecated, with no additional development or support available.[2]

 

 

Background[edit]

Due to technical advances in graphics hardware, some areas of 3D graphics programming have become quite complex. To simplify the process, new features were added to graphics cards, including the ability to modify their rendering pipelines using vertex and pixel shaders.

In the beginning, vertex and pixel shaders were programmed at a very low level with only the assembly language of the graphics processing unit. Although using the assembly language gave the programmer complete control over code and flexibility, it was fairly hard to use. A portable, higher level language for programming the GPU was needed, so Cg was created to overcome these problems and make shader development easier.

Some of the benefits of using Cg over assembly are:

  • High level code is easier to learn, program, read, and maintain than assembly code.
  • Cg code is portable to a wide range of hardware and platforms, unlike assembly code, which usually depends on hardware and the platforms it's written for.
  • The Cg compiler can optimize code and do lower level tasks automatically, which are hard to do and error prone in assembly.

Details[edit]

Data types[edit]

Cg has six basic data types. Some of them are the same as in C, while others are especially added for GPU programming. These types are:

  • float - a 32bit floating point number
  • half - a 16bit floating point number
  • int - a 32bit integer
  • fixed - a 12bit fixed point number
  • bool - a boolean variable
  • sampler* - represents a texture object

Cg also features vector and matrix data types that are based on the basic data types, such as float3 and float4x4. Such data types are quite common when dealing with 3D graphics programming. Cg also has struct and array data types, which work in a similar way to their C equivalents.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

Operators[edit]

Cg supports a wide range of operators, including the common arithmetic operators from C, the equivalent arithmetic operators for vector and matrix data types, and the common logical operators.

Functions and control structures[edit]

Cg shares the basic control structures with C, like if/else, while, and for. It also has a similar way of defining functions.

The standard Cg library[edit]

As in C, Cg features a set of functions for common tasks in GPU programming. Some of the functions have equivalents in C, like the mathematical functions abs and sin, while others are specialized in GPU programming tasks, like the texture mapping functions tex1D and tex2D.

The Cg runtime library[edit]

Cg programs are merely vertex and pixel shaders, and they need supporting programs that handle the rest of the rendering process. Cg can be used with two graphics APIs: OpenGL or DirectX. Each has its own set of Cg functions to communicate with the Cg program, like setting the current Cg shader, passing parameters, and such tasks.

In addition to being able to compile Cg source to assembly code, the Cg runtime also has the ability to compile shaders during execution of the supporting program. This allows the runtime to compile the shader using the latest optimizations available for hardware that the program is currently executing on. However, this technique requires that the source code for the shader be available in plain text to the compiler, allowing the user of the program to access the source-code for the shader. Some developers view this as a major drawback of this technique.

To avoid exposing the source code of the shader, and still maintain some of the hardware specific optimizations, the concept of profiles was developed. Shaders can be compiled to suit different graphics hardware platforms (according to profiles). When executing the supporting program, the best/most optimized shader is loaded according to its profile. For instance there might be a profile for a graphics card that supports complex pixel shaders, and another profile for one that supports only minimal pixel shaders. By creating a pixel shader for each of these profiles a supporting program enlarges the number of supported hardware platforms without sacrificing picture quality on powerful systems.

A sample Cg vertex shader[edit]

 // 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;
 }

Applications and games that use Cg[edit]

[출처] https://en.wikipedia.org/wiki/Cg_(programming_language)

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
598 기계 학습을 최대한 활용할 수 있는 11가지 오픈소스 도구 file 졸리운_곰 2017.08.22 90
597 프로그래밍 언어별 딥러닝 라이브러리 정리 file 졸리운_곰 2017.08.22 107
596 What are the differences between glu, glew, glut, qt, sdl, openGL and webGL? 졸리운_곰 2017.08.19 127
595 Unable to load textured Collada exported from blender using Three.js file 졸리운_곰 2017.08.15 563
594 웹 데이터 수집의 기술 서적 부록 소스 file 졸리운_곰 2017.08.15 104
593 blender 2.78 매뉴얼 manual 블랜더 file 졸리운_곰 2017.08.13 117
» Cg (programming language) : 3d graphics shader programming 졸리운_곰 2017.08.10 117
591 wikipedia 사이트를 크롤링 할 수고를 덜어주는 wikipedia dump 사이트 졸리운_곰 2017.08.05 113
590 python and java libraries to parse wikipedia dump dataset 졸리운_곰 2017.08.05 253
589 한글 빅 데이터 분석용 : 한글 자연어 처리용 자료 사이트 졸리운_곰 2017.08.01 122
588 한국어 빅데이터 분석용 : 한국어 학습 단어 일람 (단어장) file 졸리운_곰 2017.08.01 124
587 Collada Dae file : Schema validation 졸리운_곰 2017.08.01 121
586 ow to import entire Wikipedia into your own MySQL database. Steps for creating MySQL database out of Wikipedia XML dump… file 졸리운_곰 2017.07.22 276
585 [반응형 웹] 과 [적응형 웹]을 넘어 경험을 디자인하다 file 졸리운_곰 2017.07.15 122
584 [적응형 웹 전성시대] : 스마트한 UI, 만족스런 UX 위한 웹? file 졸리운_곰 2017.07.15 92
583 [반응형 웹의 진실] 트렌드 따라가다 내실 놓친다 file 졸리운_곰 2017.07.15 97
582 스카이레이크 윈도우7 부팅 USB 만들기(기가바이트 편) file 졸리운_곰 2017.07.09 392
581 노트북 외장그래픽 사용하는법 (내장그래픽 끄기) file 졸리운_곰 2017.07.08 2262
580 dnSpy : .net 어셈블리 (바이너리) 디버깅, 소스 코딩 file 졸리운_곰 2017.07.01 1357
579 Collada란 무엇인가 졸리운_곰 2017.07.01 428
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED