三九宝宝网宝宝教育学龄段教育

android opengl es与surfaceview什么关系

02月15日 编辑 39baobao.com

[2017 Android工程师前景如何]就目前而言Android开发工程师发展前景还是很不错的,随着Android的飞速发展,越来越多的开发人员认识到Android的优势。虽然也有人不看好Android开发工程师发展前景,毕竟竞争对手...+阅读

1.SurfaceFlinger是一个服务,主要是负责合成各窗口的Surface,然后通过OpenGLES显示到FrameBuffer上。2.DisplayHardware是对显示设备的抽象,包括FrameBuffer和Overlay。加载FrameBuffer和Overlay插件,并初始化OpenGLES:view plainmNativeWindow = new FramebufferNativeWindow(); framebuffer_device_t const * fbDev = mNativeWindow->getDevice(); if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID, &module) == 0) { overlay_control_open(module, &mOverlayEngine); } surface = eglCreateWindowSurface(display, config, mNativeWindow.get(), NULL); eglMakeCurrent(display, surface, surface, context); 3.FramebufferNativeWindow 是framebuffer 的抽象,它负责加载libgralloc,并打开framebuffer设备。

FramebufferNativeWindow并不直接使用 framebuffer,而是自己创建了两个Buffer:queueBuffer负责显示一个Buffer到屏幕上,它调用fb->post去显示。dequeueBuffer获取一个空闲的Buffer,用来在后台绘制。这两个函数由eglSwapBuffers调过来,调到view plainegl_window_surface_v2_t::swapBuffers: nativeWindow->queueBuffer(nativeWindow, buffer); nativeWindow->dequeueBuffer(nativeWindow, &buffer); 4.msm7k/liboverlay是Overlay的实现,与其它平台不同的是,高通平台上的Overlay并不是提供一个framebuffer设备,而通过fb0的ioctl来实现的,ioctl分为两类操作:OverlayControlChannel用于设置参数,比如设置Overlay的位置,宽度和高度:view plainbool OverlayControlChannel::setPosition(int x, int y, uint32_t w, uint32_t h) { ov.dst_rect.x = x; ov.dst_rect.y = y; ov.dst_rect.w = w; ov.dst_rect.h = h; ioctl(mFD, MSMFB_OVERLAY_SET, &ov); } OverlayDataChannel用于显示Overlay,其中最重要的函数就是queueBuffer:view plainbool OverlayDataChannel::queueBuffer(uint32_t offset) { mOvData.data.offset = offset; ioctl(mFD, MSMFB_OVERLAY_PLAY, odPtr)) } 5.msm7k/libgralloc 是显示缓存的抽象,包括framebuffer和普通Surface的Buffer。

framebuffer只是/dev/graphic/fb0的包 装,Surface的Buffer则是对/dev/pmem、ashmem和GPU内存(msm_hw3dm)的包装,它的目标主要是方便硬件加速,因为 DMA传输使用物理地址,要求内存在物理地址上连续。6.msm7k/libcopybit这是2D加速库,主要负责Surface的拉伸、旋转和合成等操作。它有两种实现方式:copybit.cpp: 基于fb0的ioctl(MSMFB_BLIT)的实现。copybit_c2d.cpp: 基于kgsl的实现,只是对libC2D2.so的包装,libC2D2.so应该是不开源的。

7.pmemmisc/pmem.c: 对物理内存的管理,算法和用户空间的接口。board-msm7x27.c定义了物理内存的缺省大小:view plain#define MSM_PMEM_MDP_SIZE 0x1B76000 #define MSM_PMEM_ADSP_SIZE 0xB71000 #define MSM_PMEM_AUDIO_SIZE 0x5B000 #define MSM_FB_SIZE 0x177000 #define MSM_GPU_PHYS_SIZE SZ_2M #define PMEM_KERNEL_EBI1_SIZE 0x1C00 msm_msm7x2x_allocate_memory_regions分配几大块内存用于给pmem做二次分配。8.KGSLKernel Graphics System Layer (KGSL),3D图形加速驱动程序,源代码drivers/gpu/msm目录下,它是对GPU的包装,给OpenGLES 2.0提供抽象的接口。

9.msm_hw3dm这个我在内核中没有找到相关代码。10.msm_fbmsm_fb.c: framebuffer, overlay和blit的用户接口。mdp_dma.c: 对具体显示设备的包装,提供两种framebuffer更新的方式:mdp_refresh_screen: 定时更新。mdp_dma_pan_update: 通过pan display主动更新。mdp_dma_lcdc.c:针对LCD实现的显示设备,mdp_lcdc_update用更新framebuffer。

以下为关联文档:

Android是基于Linux内核的那么Linux与Android到底是什么关系linux内核,表示。。它是基于linux的。。。表明,linux的很多东西,android是支持的。。。 但是 没有说,linux是基于android的,所以,表明。。。电脑上,不能用android程序。。。 这个内...

android混淆后错误日志怎么分析第一步: 找到混淆的mapping.txt文件 build ->outputs ->mapping ->release ->mapping.txt 或者:1项目目录的progurad下有一个mapping.txt文件 这是混淆后的名字 和原名字的映...

分析android性能测试的要点有哪些Android的app性能测试包括的测试项比如: 1、资源消耗 2、内存泄露 3、电量功耗 4、耗时 5、网络流量消耗 6、移动终端相关资源利用率 7、帧率 8、渲染内存篇内存测试中的测试...

要做好Android应用的功能测试有什么策略单元测试测试策略: 自顶向下的单元测试策略:比孤立单元测试的成本高很多,不是单元测试的一个好的选择。 自底向上的单元测试策略:比较合理的单元测试策略,但测试周期较长。 孤立...

Android安卓手机如何切换输入法手机输入法的使用频率非常高,而Android系统原生态自带输入法并不是特别给力,目前市场上流行的输入法软件非常多,在操作习惯、功能和云技术等方面的功能层出不穷,而最基本的切换...

android怎样控制输入法的弹出和隐藏android输入法1.调用显示系统默认的输入法 方法 一、 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInpu...

APK与android平台的关联或关系你好APK是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和s...

android全景图像拼接算法哪种方案最好首先介绍一下流程: 1.选图,两张图的重叠区域不能太小,我个人认为最少不少于15%,这样才能保证有足够的角点匹配。 2.角点检测。这一步OpenCV提供了很多种方法,譬如Harris角点检测,...

如何分析Android的Log首先,让我们看一看AndroidLog的格式。下面这段log是以所谓的long格式打印出来的。从前面Logcat的介绍中可以知道,long格式会把时间,标签等作为单独的一行显示。[ 12-09 21:39:3...

推荐阅读
图文推荐