Throughout the book you'll see plenty of examples of how we can creatively manage vectors. Vectors are thus a flexible datatype that we can use for all kinds of input and output. Vec4 otherResult = vec4(result.xyz, 1.0) We can also pass vectors as arguments to different vector constructor calls, reducing the number of arguments required: You can use any combination of up to 4 letters to create a new vector (of the same type) as long as the original vector has those components it is not allowed to access the. Vec4 otherVec = someVec.xxxx + anotherVec.yxzy Swizzling allows us to use syntax like this: The vector datatype allows for some interesting and flexible component selection called swizzling. GLSL also allows you to use rgba for colors or stpq for texture coordinates, accessing the same components. w to access their first, second, third and fourth component respectively. Most of the time we will be using the basic vecn since floats are sufficient for most of our purposes.Ĭomponents of a vector can be accessed via vec.x where x is the first component of the vector. dvecn: a vector of n double components.uvecn: a vector of n unsigned integers.They can take the following form ( n represents the number of components): We'll discuss matrices in a later chapter.Ī vector in GLSL is a 2,3 or 4 component container for any of the basic types just mentioned. GLSL also features two container types that we'll be using a lot, namely vectors and matrices. GLSL has most of the default basic types we know from languages like C: int, float, double, uint and bool. GLSL has, like any other programming language, data types for specifying what kind of variable we want to work with. This often returns the minimum of 16 which should be more than enough for most purposes. Std::cout << "Maximum nr of vertex attributes supported: " << nrAttributes << std::endl GlGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes) OpenGL guarantees there are always at least 16 4-component vertex attributes available, but some hardware may allow for more which you can retrieve by querying GL_MAX_VERTEX_ATTRIBS: There is a maximum number of vertex attributes we're allowed to declare limited by the hardware. When we're talking specifically about the vertex shader each input variable is also known as a vertex attribute. Out_variable_name = weird_stuff_we_processed output processed stuff to output variable process input(s) and do some weird graphics stuff Don't worry if you don't know what uniforms are, we'll get to those shortly.Ī shader typically has the following structure: Each shader's entry point is at its main function where we process any input variables and output the results in its output variables. Shaders always begin with a version declaration, followed by a list of input and output variables, uniforms and its main function. GLSL is tailored for use with graphics and contains useful features specifically targeted at vector and matrix manipulation. Shaders are written in the C-like language GLSL. We will now explain shaders, and specifically the OpenGL Shading Language, in a more general fashion. In the previous chapter we briefly touched the surface of shaders and how to properly use them. Shaders are also very isolated programs in that they're not allowed to communicate with each other the only communication they have is via their inputs and outputs. In a basic sense, shaders are nothing more than programs transforming inputs to outputs. These programs are run for each specific section of the graphics pipeline. As mentioned in the Hello Triangle chapter, shaders are little programs that rest on the GPU.
0 Comments
Leave a Reply. |