【发布时间】:2014-10-16 15:41:04
【问题描述】:
我正在为 android 开发 OpenGL 2.0 动态壁纸,但渲染速度很慢 (~11fps)。我绝不是专家,但我找不到任何在线资源来回答我的问题。基准测试,我发现'onDrawFrame(GL10 glUnused)' 因为我使用了多少对象而停止。如果我将其限制为渲染约 100 个对象,我会得到一个好的帧速率,但我的壁纸由约 1000 个三角形的光栅组成。这是问题吗?代码如下:
public void onDrawFrame(GL10 glUnused) {
if (para.xOffset > f) {
Matrix.translateM(mViewMatrix, 0, (para.xOffset - f) * 10, 0, 0);
f = para.xOffset;
} else {
Matrix.translateM(mViewMatrix, 0, (para.xOffset - f) * 10, 0, 0);
f = para.xOffset;
}
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
GLES20.glUseProgram(mPerVertexProgramHandle);
mMVPMatrixHandle = GLES20.glGetUniformLocation(mPerVertexProgramHandle,
"u_MVPMatrix");
mMVMatrixHandle = GLES20.glGetUniformLocation(mPerVertexProgramHandle,
"u_MVMatrix");
mLightPosHandle = GLES20.glGetUniformLocation(mPerVertexProgramHandle,
"u_LightPos");
mPositionHandle = GLES20.glGetAttribLocation(mPerVertexProgramHandle,
"a_Position");
mColorHandle = GLES20.glGetAttribLocation(mPerVertexProgramHandle,
"a_Color");
mNormalHandle = GLES20.glGetAttribLocation(mPerVertexProgramHandle,
"a_Normal");
Matrix.setIdentityM(mLightModelMatrix, 0);
Matrix.translateM(mLightModelMatrix, 0, 0.0f, 0.0f, -5.0f);
Matrix.translateM(mLightModelMatrix, 0, 0.0f, 0.0f, 2.0f);
Matrix.multiplyMV(mLightPosInWorldSpace, 0, mLightModelMatrix, 0,
mLightPosInModelSpace, 0);
for (newHexagon nha[] : h.hfgrd) {
for (newHexagon nh : nha) {
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.translateM(mModelMatrix, 0, nh.PosX, nh.PosY, -5);
final FloatBuffer colors;
colors = ByteBuffer
.allocateDirect(nh.colors.length * mBytesPerFloat)
.order(ByteOrder.nativeOrder()).asFloatBuffer();
colors.put(nh.colors).position(0);
drawthis(colors);
}
}
GLES20.glUseProgram(mPointProgramHandle);
h.draw(0, 0);
}
编辑:附加信息:三角形大小一致,并排列在屏幕的平面六边形平铺中。
CPU:双核 1.2 GHz Scorpion
GPU:肾上腺皮质激素 220
设备:HTC Sensation
Android v4.0.3
【问题讨论】:
-
什么 CPU、GPU 和设备?
标签: android opengl-es opengl-es-2.0