我正在制作一个多平台游戏引擎(将来会开源),并且我正在制作基于它的游戏。在三星 Galaxy S2 (I9100B) 上进行测试时,它运行良好,但是当我尝试在我的另一部手机 (Samsung Galaxy S) 上运行时,事情变得一团糟。
这是在 Galaxy S2 上运行时的屏幕截图:
这是我在 Galaxy S 上跑步的时候:
我也设法减少了场景中三角形的数量,但即使屏幕上有 50 个三角形,我也遇到了同样的问题。禁用照明可以减少问题,但不能消除问题。我认为这是我手机的内存问题,所以我尝试了另一个 Galaxy S,但出现了同样的问题。
有人知道我可以从哪里开始寻找吗?自动 GC 不频繁(大约每 5 秒 2 次)。
三星 Galaxy S2:Android 版本 2.3.4 内核:2.6.35.7-I9100UHKI2-CL553601 se.infra@SEI-07 #2
三星 Galaxy S:Android 版本 2.3.3 内核:2.6.35.7-I9000BVJJW4-CL240848 pescio@bldhp-4 #28
片段着色器代码:precision mediump float;
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;
}