cocos2dx面试总结
1.安卓和ios纹理压缩
安卓:etc 部分pvrtc
ios : pvrtc
2.etc1 和 etc2的区别
ect2相对于etc1 有更高的压缩比和展现,需要设备支持OpenGL es 3.0 ,目前大部分手机只支持OpenGLes2.0
3.etc纹理不支持alpha通道,需要进行拼图,只支持1024x1024以内的
4.cocos3.0什么样的渲染命令可以合并
3.0之后绘制:从主循环分离,图元拼接阶段丢掉不用渲染的,自动批处理绘制,更简单的自定义绘制
渲染过程:生成命令->放入栈:如果相邻使用相同纹理、着色器->自动批绘制,命令排序:先按globalOrder再按ui遍历顺序,命令执行->自动批绘制
相邻相同纹理的使用自动批绘制
5.openGL渲染管线
记忆:片渲染,顶点着色,图元装配,光栅化,绘制
渲染管线:定点数组-》定点着色器-》图元装配-》光栅化-》片段着色器-》片段操作-》帧缓冲。
可操作部分
OpenGL es 版本:1.0固定管线,2.0可编程管线,3.0对2.0进行优化修改了固定参数为可传入参数
6.jpg和png的区别
7.监测内存
3.0版本使用getCachedTextureInfo() 获取纹理内存信息,也可以打印ui树的方式查未释放内存
8.openGL drawcall 次数
默认调用一次glDraw函数一次drawcall,这样 绘制三个点可以用glDrawArrays,传入三个顶点的数组,同理,绘制n个不重复数组可以使用索引模式GL_TRIANGLE_FAN只有一次drawcall, 有重复点则不能用索引模式,需要多次
9.cocos2d中 OpenGL渲染过程
cocos2.0版本在draw函数中进行绘制,3.0版本在draw函数中生成绘制命令,
整个流程:
director->drawScence() => node->visit()=>node->draw() =>render->addCommand()=>command->sort()