diff --git a/00/README.md b/00/README.md index 0c9fe7b..e2b680d 100644 --- a/00/README.md +++ b/00/README.md @@ -38,7 +38,7 @@ Not much! If you have a modern browser that can do WebGL (like Chrome, Firefox o Alternatively, based on what you have or what you need from this book you can: -- [Make a off-line version of this book](http://thebookofshaders.com/appendix/) +- [Make an off-line version of this book](http://thebookofshaders.com/appendix/) - [Run the examples on a RaspberryPi without a browser](http://thebookofshaders.com/appendix/) diff --git a/02/README.md b/02/README.md index d09ec57..fb2bc2e 100644 --- a/02/README.md +++ b/02/README.md @@ -12,7 +12,7 @@ Although these simple lines of code don't look like a lot, we can infer substant 1. Shader Language has a single ```main``` function that returns a color at the end. This is similar to C. -2. The final pixel color is assigned to the reserve global variable ```gl_FragColor```. +2. The final pixel color is assigned to the reserved global variable ```gl_FragColor```. 3. This C-flavored language has built in *variables* (like ```gl_FragColor```), *functions* and *types*. In this case we've just been introduced to ```vec4``` that stands for a four dimensional vector of floating point precision. Later we will see more types like ```vec3``` and ```vec2``` together with the popular: ```float```, ```int``` and ```bool```. @@ -20,7 +20,7 @@ Although these simple lines of code don't look like a lot, we can infer substant 5. Another important *C feature* we can see in this example is the presence of preprocessor macros. Macros are part of a pre-compilation step. With them it is possible to ```#define``` global variables and do some basic conditional operation ( with ```#ifdef``` and ```#endif```). All the macro comands begin with a hashtag (```#```). Pre-compilation happens right before compiling and copies all the calls to ```#defines``` and check ```#ifdef``` (is defined) and ```#ifndef``` (is not defined) conditionals. In our "hello world!" example above, we only insert the line 2 if ```GL_ES``` is defined, which mostly happens when the code is compiled on mobile devices and browsers. -6. Float types are vital in shaders, so the level of *precision* is crucial. Lower precision means faster rendering, but on behalf of quality. You can be picky and specify the precision of each variable that uses floating point. In the first line (```precision mediump float;```) we are setting all floats to medium precision. But we can choose to set them to low (```precision lowp float;```) or high (```precision highp float;```). +6. Float types are vital in shaders, so the level of *precision* is crucial. Lower precision means faster rendering, but at the cost of quality. You can be picky and specify the precision of each variable that uses floating point. In the first line (```precision mediump float;```) we are setting all floats to medium precision. But we can choose to set them to low (```precision lowp float;```) or high (```precision highp float;```). 7. The last, and maybe most important, detail is that GLSL specs don’t guarantee that variables will be automatically casted. What does that mean? Manufacturers have different approaches to accelerate graphic card processes but they are forced to guarantee minimum specs. Automatic casting is not one of them. In our “hello world!” example ```vec4``` has floating point precision and for that it expects to be assigned with ```floats```. If you want to make good consistent code and not spend hours debugging white screens, get used to putting the point ( ```.``` ) in your floats. This kind of code will not always work: