We recently released our game on Google Play, and it is going great.
Though on devices with Mali T628 (Galaxy Tab S, Galaxy Note 3) there is an issue with texture coordinates..
Works fine on all other platforms.
I found a post here about there being an issue with mediump, but we are using highp in our shader.
I'm attaching a screen shot here, and the relevant shaders.
Any ideas what could go wrong?
This shader is for the environment (not working):
+++
Loaded vertex shader: bmxshaders/MultiTextureT0T2.vsh - ID: 4
precision highp float;
attribute vec4 a_position;
attribute vec2 a_texCoord0;
attribute vec2 a_texCoord2;
varying vec2 v_texCoord0;
varying vec2 v_texCoord2;
uniform mat4 u_matWVP;
void main()
{
gl_Position = u_matWVP * a_position;
v_texCoord0 = a_texCoord0;
v_texCoord2 = a_texCoord2;
}
---
Loaded pixel shader bmxshaders/MultiTextureT0s1d0T2s2d0.fsh - ID: 5
uniform sampler2D s_texture0;
uniform sampler2D s_texture2;
vec4 color0;
vec4 color1;
color0 = texture2D(s_texture0, v_texCoord0);
color1 = texture2D(s_texture2, v_texCoord2);
gl_FragColor = color0 * color1;
This shader is for the bike (seems to work fine):
Loaded vertex shader: bmxshaders/LightingSimpleDirNoScaleNormals.vsh - ID: 16
struct light
vec3 position;
vec4 ambient;
vec4 diffuse;
vec4 specular;
// only directional light is supported
};
const float c_zero = 0.0;
const float c_one = 1.0;
uniform light u_light0;
attribute vec3 a_normal;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
varying vec4 v_color;
uniform mat3 u_matWVNormals;
float ndotl;
vec3 n;
n = u_matWVNormals * a_normal;
v_color = vec4(0,0,0,1);
v_color += u_light0.ambient;
ndotl = max(dot(u_light0.position.xyz,n), c_zero);
v_color += (ndotl * u_light0.diffuse);
v_texCoord = a_texCoord;
Loaded pixel shader bmxshaders/Lighting.fsh - ID: 17
gl_FragColor = texture2D(s_texture0, v_texCoord) * v_color;
Hi Olof,
My initial thoughts are this doesn’t look like there is anything in the shader code that could cause an issue with the texture co-ordinates. It looks more like the incorrect texture data is being used for some reason. Are all of the object subject to this drawn using a single texture atlas and draw call? Or is it made up of a number of drawcalls and textures?
Do you see similar issues if you make a small stand-alone test case that just renders the objects from the scene that demonstrate the issue? If so is it possible to supply us the test case so we can have a look at what is going on?
Thanks,
Mark
> Are all of the object subject to this drawn using a single texture atlas and draw call?
Yes, its a single draw call with a color map and a light map. Looks to me like they both get weird texture coordinates.
> Do you see similar issues if you make a small stand-alone test case that just renders the objects from the scene that demonstrate the issue?
I'll see what I can do, unfortunately I do not have a device to test on at the moment...
Thanks for helping!
Olof