Я создаю мультиплатформенный игровой движок (с открытым исходным кодом в будущем), и я делаю игру на его основе.При тестировании на Samsung Galaxy S2 (I9100B) он работает отлично, но когда я попытался запустить его на другом телефоне (Samsung Galaxy S), все становится грязно.
Вот скриншот при работе на Galaxy S2:
А вот когда я бегу на Galaxy S:
Мне удалось уменьшить количество треугольниковв сцене тоже, но даже с 50 треугольниками на экране я получил ту же проблему.Отключение освещения уменьшает проблему, но не устраняет ее.Я думал, что это проблема с памятью на моем телефоне, поэтому я попробовал на другом Galaxy S, но такая же проблема возникает.
Кто-то знает, где я могу начать искать?Автоматический ГХ не часто (примерно 2 раза в 5 секунд).
Samsung Galaxy S2: версия Android 2.3.4 для Android: 2.6.35.7-I9100UHKI2-CL553601 se.infra@SEI-07 # 2
Samsung Galaxy S: версия Android 2.3.3 Kernek: 2.6.35.7-I9000BVJJW4-CL240848 pescio @ bldhp-4 # 28
Код шейдера фрагмента: точность с плавающей точкой;
uniform sampler2D uSampler;
uniform float uIsPoint;
uniform float uEnableLight;
uniform float uDisableTexture;
varying vec4 vColor;
varying vec2 vTextureCoord;
varying vec4 vPosition;
uniform vec3 uPointLightingColor;
varying vec3 vColorWeight;
void main(){
if(uIsPoint >= 2.0) {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}else{
vec4 calcColor;
if(uEnableLight >= 2.0)
calcColor = vec4(vColor.rgb * vColorWeight, vColor.a);
else
calcColor = vColor;
vec4 texColor = vec4(1.0,1.0,1.0,1.0);
if(uDisableTexture < 2.0)
texColor = texture2D(uSampler, vTextureCoord);
gl_FragColor = vec4(texColor.rgb * calcColor.rgb, texColor.a*calcColor.a);
}
}
Код вершинного шейдера:
//Atributos
uniform mat4 uMVMatrix; //Model/View Matrix
uniform mat4 uPMatrix; //Model/View/Projection Matrix
uniform mat3 uNMatrix; //Normal Matrix
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
attribute vec2 aTextureCoord;
attribute vec3 aNormal;
varying vec4 vColor;
varying vec2 vTextureCoord;
varying vec3 vNormal;
varying vec4 vPosition;
//Lighting
uniform vec3 uAmbientColor;
uniform vec3 uLightDir;
uniform vec3 uLightColor;
uniform vec3 uSpecLightColor;
uniform float uShine;
varying vec3 vColorWeight;
void main(){
//Lighting
vec3 normal = normalize(uNMatrix * aNormal);
vec3 lightNorm = normalize(uLightDir);
float lightWeight = max(dot(aNormal,lightNorm),0.0);
vec3 halfVec = normalize(uLightDir - gl_Position.xyz);
float specWeight = pow(max(dot(normal,halfVec),0.0),uShine);
vColorWeight = uAmbientColor + (lightWeight * uLightColor) + (uSpecLightColor*specWeight);
//Others
vNormal = uNMatrix * aNormal;
vPosition = uMVMatrix * vec4(aVertexPosition,1.0);
gl_Position = uPMatrix * vPosition;
vColor = aVertexColor;
gl_PointSize = 2.0;
vTextureCoord = aTextureCoord;
}