Răsfoiți Sursa

Some fixes for shaders and WebGL2

Add padding to UBO data to be multiple of 16 bytes
Add precision definition for samplers
Replace texture2D (deprecated) with texture in shaders
Fabio Alessandrelli 8 ani în urmă
părinte
comite
9b9a723c77

+ 2 - 0
drivers/gles3/rasterizer_canvas_gles3.h

@@ -42,6 +42,7 @@ public:
 
 		float projection_matrix[16];
 		float time;
+		uint8_t padding[12];
 	};
 
 	RasterizerSceneGLES3 *scene_render;
@@ -102,6 +103,7 @@ public:
 			float light_height;
 			float light_outside_alpha;
 			float shadow_distance_mult;
+			uint8_t padding[4];
 		} ubo_data;
 
 		GLuint ubo;

+ 2 - 0
drivers/gles3/rasterizer_scene_gles3.h

@@ -141,6 +141,7 @@ public:
 			float fog_height_min;
 			float fog_height_max;
 			float fog_height_curve;
+			uint8_t padding[8];
 
 		} ubo_data;
 
@@ -150,6 +151,7 @@ public:
 
 			float transform[16];
 			float ambient_contribution;
+			uint8_t padding[12];
 
 		} env_radiance_data;
 

+ 6 - 0
drivers/gles3/shader_gles3.cpp

@@ -273,6 +273,9 @@ ShaderGLES3::Version *ShaderGLES3::get_current_version() {
 	//vertex precision is high
 	strings.push_back("precision highp float;\n");
 	strings.push_back("precision highp int;\n");
+	strings.push_back("precision highp sampler2D;\n");
+	strings.push_back("precision highp samplerCube;\n");
+	strings.push_back("precision highp sampler2DArray;\n");
 
 #if 0
 	if (cc) {
@@ -371,6 +374,9 @@ ShaderGLES3::Version *ShaderGLES3::get_current_version() {
 	//fragment precision is medium
 	strings.push_back("precision highp float;\n");
 	strings.push_back("precision highp int;\n");
+	strings.push_back("precision highp sampler2D;\n");
+	strings.push_back("precision highp samplerCube;\n");
+	strings.push_back("precision highp sampler2DArray;\n");
 
 #if 0
 	if (cc) {

+ 2 - 2
drivers/gles3/shaders/canvas.glsl

@@ -532,11 +532,11 @@ FRAGMENT_SHADER_CODE
 
 #ifdef USE_RGBA_SHADOWS
 
-#define SHADOW_DEPTH(m_tex,m_uv) dot(texture2D((m_tex),(m_uv)),vec4(1.0 / (256.0 * 256.0 * 256.0),1.0 / (256.0 * 256.0),1.0 / 256.0,1)  )
+#define SHADOW_DEPTH(m_tex,m_uv) dot(texture((m_tex),(m_uv)),vec4(1.0 / (256.0 * 256.0 * 256.0),1.0 / (256.0 * 256.0),1.0 / 256.0,1)  )
 
 #else
 
-#define SHADOW_DEPTH(m_tex,m_uv) (texture2D((m_tex),(m_uv)).r)
+#define SHADOW_DEPTH(m_tex,m_uv) (texture((m_tex),(m_uv)).r)
 
 #endif