Selecting a Shading Language

From OpenGL Wiki
Revision as of 14:05, 30 March 2008 by V-man (talk | contribs)
Jump to: navigation, search

You should use GLSL, the OpenGL Shading Language. This is also called GLSlang by some people.
Currently, OpenGL is at version 2.1 and GLSL 1.20
GLSL went into the GL core since GL 2.0

In the beginning ...
Many years ago, nVidia designed the register combiners (NV_register_combiners) and implemented the technology in their TNT but I'm not sure if they became popular. Later came the TNT and then, Geforce 256. During the Geforce 256 era, nVidia wanted everyone to do bump mapping and various effects possible with RC. This wasn't stricly a shader language but it allowed programmers to setup the fragment end of the graphics pipe. You needed to make API calls to setup the GPU. nVidia later released their nvasm. Programmers wrote in a assembly language and compiled this.
ATI came up with their fragment shader (ATI_fragment_shader). This was also a powerful API to setup the GPU. ATI_fragment_shader_text (?) was available on Macs, if I'm not mistaken, which allowed programmers to write a shader. This was for the fragment pipe as well.

NV also invented NV_register_combiners2, NV_texture_shader, NV_texture_shader2, NV_texture_shader3.
All gave great access to the GPUs features. All these are for setting up the fragment pipe.

ARB_texture_env_combine and fellow extensions also made a appearance, but since this was to be available across GPUs, it was severly limited. All these are for setting up the fragment pipe.
EXT_vertex_weighting was another way to setup the GPU. Finally, an extension for the vertex pipe. Never was popular.
EXT_vertex_shader came along. Never was popular.

NV came up with NV_vertex_program. The Geforce 3 was out and people needed a way to program this VS 1.1 part. They also released NV_register_combiners2 and NV_texture_shader.

NV came up with NV_fragment_program.

ARB_vertex_program approved by ARB on June 18, 2002
An official shading language for the vertex pipe for all IHVs!
This is suitable for VS 1.1 GPUs.

ARB_fragment_program approved by ARB on September 18, 2002
An official shading language for the fragment pipe for all IHVs!
This is suitable for PS 2.0 GPUs.

ATI releases the Radeon 9700 and soon ships drivers supporting ARB_vp and ARB_fp, the first IHV to support them.

NV releases NV_vertex_program1_1 and NV_vertex_program2.
NV_vertex_program2 is for VS 3.0
NV releases NV_fragment_program2, which is for PS 3.0

In 2001, 3DLabs considers the future of GL. Calling it GL 2.0, they decide on new features and a fresh API. Older parts of the API was to be removed. GLSL was part of the proposal.
The proposal is not accepted.
There was GL 1.4 at the time. GL 1.5 came out.
During GL 1.5, GLSL becomes accepted. The first high level shading language for GL with a C like syntax.
ARB_shading_language_100, ARB_shader_objects, ARB_vertex_shader, ARB_fragment_shader define GLSL.
Approved by the ARB on June 11, 2003.
This is GLSL 1.00

September 7, 2004. GL 2.0 spec released and GLSL 1.10 becomes core

In memory of fixed pipeline. May you rest in peace. I mean, pieces.

Note: The above is not necessarily in chrono order.