设为首页 加入收藏

TOP

OpenGL错误和性能Tips
2014-11-24 00:58:12 来源: 作者: 【 】 浏览:0
Tags:OpenGL 错误 性能 Tips

1. 接口使用不当


1)GLES中的glAAx 形式的接口使用,glTranslatex,glRotatex,glScalex等函数。


float posx = 100.0f, posy = 100.0f, posz = 100.0f;
glTranslatef(posx, posy, posz);
//等价于
int fpX = (int)(posx * 65536), fpY = (int)(posy * 65536), fpZ = (int)(posz * 65536);
glTranslatex(fpX, fpY, fpZ);


public void setRenderer(Renderer renderer) {
checkRenderThreadState();
if (mEGLConfigChooser == null) { // here
mEGLConfigChooser = new SimpleEGLConfigChooser(true);
}
if (mEGLContextFactory == null) {
mEGLContextFactory = new DefaultContextFactory();
}
if (mEGLWindowSurfaceFactory == null) {
mEGLWindowSurfaceFactory = new DefaultWindowSurfaceFactory();
}
mGLThread = new GLThread(renderer);
mGLThread.start();
}

/**
* This class will choose a RGB_565 surface with
* or without a depth buffer.
*
*/
private class SimpleEGLConfigChooser extends ComponentSizeChooser {
public SimpleEGLConfigChooser(boolean withDepthBuffer) {
super(5, 6, 5, 0, withDepthBuffer 16 : 0, 0);
}
}


1)上次适配AntTweakBar GLES时,它库中EndDraw函数结束绘制时将当前矩阵堆栈设为TEXTURE_MATRIX,下次进入渲染函数时在BeginDraw中各种尝试修改模型视图失效实际修改的都是纹理矩阵,glGetError返回也为0。


// 所有item同步做动画
glScale(scalex, scaley, scalez);
batch_draw_100_itmes();


// 不同步动画


// V1 通过opengl做动画
for (int cursor = 0; cursor < 100; cursor++)
{
glScale3fv(items[cursor].scaleVar);
items[cursor].single_draw_item();
}

// V2 CPU对顶点进行计算,然后批量绘制
for (int cursor = 0; cursor < 100; cursor++)
{
cpu_scale_vertices(items[cursor].scaleVar);
}
batch_draw_100_items();


当每个item动画个异步执行时,V1的实现item缩放过度依赖于opengl,而且没法实现批处理! V2牺牲点CPU计算性能换来GPU的批量绘制。


相关阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenGL绘制矢量路径的思路 下一篇OpenGL错误总结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: