diff --git a/client/shaders/cloud_shader/opengl_vertex.glsl b/client/shaders/cloud_shader/opengl_vertex.glsl
index ebf4aae49..92f5de64b 100644
--- a/client/shaders/cloud_shader/opengl_vertex.glsl
+++ b/client/shaders/cloud_shader/opengl_vertex.glsl
@@ -8,11 +8,7 @@ void main(void)
 {
 	gl_Position = mWorldViewProj * inVertexPosition;
 
-#ifdef GL_ES
-	vec4 color = inVertexColor.bgra;
-#else
 	vec4 color = inVertexColor;
-#endif
 
 	color *= materialColor;
 	varColor = color;
diff --git a/client/shaders/default_shader/opengl_vertex.glsl b/client/shaders/default_shader/opengl_vertex.glsl
index a908ac953..d95a3c2d3 100644
--- a/client/shaders/default_shader/opengl_vertex.glsl
+++ b/client/shaders/default_shader/opengl_vertex.glsl
@@ -3,9 +3,5 @@ varying lowp vec4 varColor;
 void main(void)
 {
 	gl_Position = mWorldViewProj * inVertexPosition;
-#ifdef GL_ES
-	varColor = inVertexColor.bgra;
-#else
 	varColor = inVertexColor;
-#endif
 }
diff --git a/client/shaders/minimap_shader/opengl_vertex.glsl b/client/shaders/minimap_shader/opengl_vertex.glsl
index b23d27181..1a9491805 100644
--- a/client/shaders/minimap_shader/opengl_vertex.glsl
+++ b/client/shaders/minimap_shader/opengl_vertex.glsl
@@ -7,9 +7,5 @@ void main(void)
 {
 	varTexCoord = inTexCoord0.st;
 	gl_Position = mWorldViewProj * inVertexPosition;
-#ifdef GL_ES
-	varColor = inVertexColor.bgra;
-#else
 	varColor = inVertexColor;
-#endif
 }
diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl
index ba48189a5..d5d6dd59e 100644
--- a/client/shaders/nodes_shader/opengl_vertex.glsl
+++ b/client/shaders/nodes_shader/opengl_vertex.glsl
@@ -199,15 +199,11 @@ void main(void)
 	vNormal = inVertexNormal;
 
 	// Calculate color.
+	vec4 color = inVertexColor;
 	// Red, green and blue components are pre-multiplied with
 	// the brightness, so now we have to multiply these
 	// colors with the color of the incoming light.
 	// The pre-baked colors are halved to prevent overflow.
-#ifdef GL_ES
-	vec4 color = inVertexColor.bgra;
-#else
-	vec4 color = inVertexColor;
-#endif
 	// The alpha gives the ratio of sunlight in the incoming light.
 	nightRatio = 1.0 - color.a;
 	color.rgb = color.rgb * (color.a * dayLight.rgb +
diff --git a/client/shaders/object_shader/opengl_vertex.glsl b/client/shaders/object_shader/opengl_vertex.glsl
index 05134a5f6..4bb109f68 100644
--- a/client/shaders/object_shader/opengl_vertex.glsl
+++ b/client/shaders/object_shader/opengl_vertex.glsl
@@ -109,11 +109,7 @@ void main(void)
 		: directional_ambient(normalize(inVertexNormal));
 #endif
 
-#ifdef GL_ES
-	vec4 color = inVertexColor.bgra;
-#else
 	vec4 color = inVertexColor;
-#endif
 
 	color *= materialColor;
 
diff --git a/client/shaders/selection_shader/opengl_vertex.glsl b/client/shaders/selection_shader/opengl_vertex.glsl
index 39dde3056..9ca87a9cf 100644
--- a/client/shaders/selection_shader/opengl_vertex.glsl
+++ b/client/shaders/selection_shader/opengl_vertex.glsl
@@ -6,9 +6,5 @@ void main(void)
 	varTexCoord = inTexCoord0.st;
 	gl_Position = mWorldViewProj * inVertexPosition;
 
-#ifdef GL_ES
-	varColor = inVertexColor.bgra;
-#else
 	varColor = inVertexColor;
-#endif
 }
diff --git a/src/client/shader.cpp b/src/client/shader.cpp
index ad37ea4c1..c0a2f109a 100644
--- a/src/client/shader.cpp
+++ b/src/client/shader.cpp
@@ -561,7 +561,7 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
 
 	// Create shaders header
 	bool fully_programmable = driver->getDriverType() == video::EDT_OGLES2 || driver->getDriverType() == video::EDT_OPENGL3;
-	std::stringstream shaders_header;
+	std::ostringstream shaders_header;
 	shaders_header
 		<< std::noboolalpha
 		<< std::showpoint // for GLSL ES
@@ -588,10 +588,14 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
 			attribute mediump vec4 inVertexTangent;
 			attribute mediump vec4 inVertexBinormal;
 		)";
+		// Our vertex color has components reversed compared to what OpenGL
+		// normally expects, so we need to take that into account.
+		vertex_header += "#define inVertexColor (inVertexColor.bgra)\n";
 		fragment_header = R"(
 			precision mediump float;
 		)";
 	} else {
+		/* legacy OpenGL driver */
 		shaders_header << R"(
 			#version 120
 			#define lowp