Zoeken…
Syntaxis
- #version version_number // Welke GLSL-versie we gebruiken
- void main () {/ * Code * /} // Hoofdfunctie van Shader
- in typenaam; // Specificeert een invoerparameter - GLSL 1.30
- typ naam; // Specificeert een uitvoerparameter - GLSL 1.30
- inout type naam; // Parameter voor zowel invoer als uitvoer - GLSL 1.30
parameters
Parameter | Details |
---|---|
type | Het type van de parameter, het moet een ingebouwd type GLSL zijn. |
Opmerkingen
Om aan te geven welke versie van GLSL moet worden gebruikt om een arcering te compileren, gebruikt u de versie preprocessor, bijvoorbeeld #version 330
. Elke versie van OpenGL is vereist om specifieke versies van GLSL te ondersteunen. Als een #version
preprocessor niet boven aan een arcering is gedefinieerd, wordt de standaardversie 1.10 gebruikt.
Shader voor het renderen van een gekleurde rechthoek
Een shader-programma, in de OpenGL- zin, bevat een aantal verschillende shaders. Elk arceringprogramma moet ten minste een hoekpunt- arcering hebben, die de positie van de punten op het scherm berekent, en een fragment- arcering, die de kleur van elke pixel berekent. (Eigenlijk is het verhaal langer en complexer, maar hoe dan ook ...)
De volgende shaders zijn voor #version 110
, maar zouden enkele punten moeten illustreren:
Vertex shader:
#version 110
// x and y coordinates of one of the corners
attribute vec2 input_Position;
// rgba colour of the corner. If all corners are blue,
// the rectangle is blue. If not, the colours are
// interpolated (combined) towards the center of the rectangle
attribute vec4 input_Colour;
// The vertex shader gets the colour, and passes it forward
// towards the fragment shader which is responsible with colours
// Must match corresponding declaration in the fragment shader.
varying vec4 Colour;
void main()
{
// Set the final position of the corner
gl_Position = vec4(input_Position, 0.0f, 1.0f);
// Pass the colour to the fragment shader
UV = input_UV;
}
Fragment shader:
#version 110
// Must match declaration in the vertex shader.
varying vec4 Colour;
void main()
{
// Set the fragment colour
gl_FragColor = vec4(Colour);
}