diff --git a/developer_docs/webgl_mode_architecture.md b/developer_docs/webgl_mode_architecture.md
index c7332331fa..4232022d83 100644
--- a/developer_docs/webgl_mode_architecture.md
+++ b/developer_docs/webgl_mode_architecture.md
@@ -87,7 +87,7 @@ Provides flat shading of objects, based on the current fill color.
#### Light Shader (for lighting AND textures)
Accounts for:
* Lighting parameters set by `ambientLight()`, `directionalLight()`, and `pointLight()`
-* Material parameters set by `ambientMaterial()`, and `specularMaterial()`
+* Material parameters set by `ambientMaterial()`, `emissiveMaterial()` and `specularMaterial()`
* Texture parameters, set by `texture()`
#### Normal Shader
@@ -133,6 +133,7 @@ The normal shader is set when `normalMaterial()` is in use. It uses the surface
|`uniform vec3 uPointLightLocation[8];`| |x | | | |
|`uniform vec3 uPointLightColor[8];` | |x | | | |
|`uniform bool uSpecular;` | |x | | | |
+|`uniform bool uEmissive;` | |x | | | |
|`uniform int uShininess;` | |x | | | |
|`uniform bool uUseLighting;` | |x | | | |
|`uniform float uConstantAttenuation;` | |x | | | |
diff --git a/src/webgl/material.js b/src/webgl/material.js
index 72788f05ea..d5d52db9b3 100644
--- a/src/webgl/material.js
+++ b/src/webgl/material.js
@@ -312,6 +312,7 @@ p5.prototype.normalMaterial = function() {
p5._validateParameters('normalMaterial', arguments);
this._renderer.drawMode = constants.FILL;
this._renderer._useSpecularMaterial = false;
+ this._renderer._useEmissiveMaterial = false;
this._renderer._useNormalMaterial = true;
this._renderer.curFillColor = [1, 1, 1, 1];
this._renderer._setProperty('_doFill', true);
@@ -409,6 +410,7 @@ p5.prototype.texture = function(tex) {
this._renderer.drawMode = constants.TEXTURE;
this._renderer._useSpecularMaterial = false;
+ this._renderer._useEmissiveMaterial = false;
this._renderer._useNormalMaterial = false;
this._renderer._tex = tex;
this._renderer._setProperty('_doFill', true);
@@ -613,6 +615,59 @@ p5.prototype.ambientMaterial = function(v1, v2, v3, a) {
var color = p5.prototype.color.apply(this, arguments);
this._renderer.curFillColor = color._array;
this._renderer._useSpecularMaterial = false;
+ this._renderer._useEmissiveMaterial = false;
+ this._renderer._useNormalMaterial = false;
+ this._renderer._enableLighting = true;
+ this._renderer._tex = null;
+
+ return this;
+};
+
+/**
+ * Sets the emissive color of the material used for geometry drawn to
+ * the screen. This is a misnomer in the sense that the material does not
+ * actually emit light that effects surrounding polygons. Instead,
+ * it gives the appearance that the object is glowing. An emissive material
+ * will display at full strength even if there is no light for it to reflect.
+ * @method emissiveMaterial
+ * @param {Number} v1 gray value, red or hue value
+ * (depending on the current color mode),
+ * @param {Number} [v2] green or saturation value
+ * @param {Number} [v3] blue or brightness value
+ * @param {Number} [a] opacity
+ * @chainable
+ * @example
+ *