当前位置: 首页 > news >正文

电子商务网站建设评价网站中 点击出现登录框怎么做

电子商务网站建设评价,网站中 点击出现登录框怎么做,seo网站托管,做网站 郑州公司哪家好OpenGL ES 之EGL(6) 简述 EGL是OpenGL ES的封装#xff0c;目的是跨设备跨平台#xff0c;隔离不同平台对窗口不同的实现。上一节我们基本没有使用到EGL#xff0c;因为GLSurfaceView帮助我们处理了相关的逻辑#xff0c;我们这一节来看一下EGL的一些概念以及接口的使用。…OpenGL ES 之EGL(6) 简述 EGL是OpenGL ES的封装目的是跨设备跨平台隔离不同平台对窗口不同的实现。上一节我们基本没有使用到EGL因为GLSurfaceView帮助我们处理了相关的逻辑我们这一节来看一下EGL的一些概念以及接口的使用。 同时我们会介绍GLSurfaceView做了什么是怎么配置EGL等。 EGL接口 1.eglGetDisplay 用于获取EGLDisplay这里会关联原生窗口,EGLDisplay是对设备的抽象。2.eglInitialize(EGLDisplay display, EGLint *majorVersion, EGLint *minorVersion) 初始化函数第一个参数是eglGetDisplay返回值。3.eglChooseConfig EGL会根据设备配置选择合适的Config4.eglCreateWindowSurface 通过前面EGLDisplay和EGLConfig创建EGLSurface5.eglCreateContext 创建EGLContext创建渲染上下文6.eglMakeCurrent 绑定EGLContextEGLSurfaceEGLDisplay之后即可调用openGL ES的api做图像渲染了。7.eglSwapBuffers 交换缓冲区调用后就会将内存中的图像显示到屏幕上。 GLSurfaceView流程 setRenderer 配置了Renderer之后GLSurfaceView启动了一个GLThread线程 public void setRenderer(Renderer renderer) {checkRenderThreadState();if (mEGLConfigChooser null) {mEGLConfigChooser new SimpleEGLConfigChooser(true);}if (mEGLContextFactory null) {mEGLContextFactory new DefaultContextFactory();}if (mEGLWindowSurfaceFactory null) {mEGLWindowSurfaceFactory new DefaultWindowSurfaceFactory();}// 构造并启动了一个GLThread线程mGLThread new GLThread(renderer);mGLThread.start(); }GLThread 调用了guardedRun。 guardedRun通过一个EglHelper来调用EGL的接口。 guardedRun在一个死循环中死循环中还有一个死循环这里会通过mEglHelper.start来初始化EGL。在EGLSurface创建好后就会跳出这个死循环在外层循环后面的逻辑首次会通过createSurface创建EGLSurface并且回调Renderer.onSurfaceCreated也会检查sizeChanged如果sizeChanged则会回调Renderer.onSurfaceChanged。 每次循环都会回调Renderer.onDrawFrame,在回调onDrawFrame之后会调用mEglHelper.swap来执行交换区。 这里EglHelper的start/createSurface/swap我们接下来看看这几个方法。 private class GLThread extends Thread {// ...public void run() {setName(GLThread getId());if (LOG_THREADS) {DebugLog.i(GLThread, starting tid getId());}try {guardedRun();} catch (InterruptedException e) {// fall thru and exit normally} finally {sGLThreadManager.threadExiting(this);}} }private void guardedRun() throws InterruptedException {mEglHelper new EglHelper();// ...try {// ...while (true) {synchronized (sGLThreadManager) {while (true) {// ...if ((! mHasSurface) (! mWaitingForSurface)) {if (LOG_SURFACE) {DebugLog.i(GLThread, noticed surfaceView surface lost tid getId());}if (mHaveEglSurface) {stopEglLocked();}mWaitingForSurface true;sGLThreadManager.notifyAll();}// ...// Ready to draw?if ((!mPaused) mHasSurface (mWidth 0) (mHeight 0) (mRequestRender || (mRenderMode RENDERMODE_CONTINUOUSLY))) {if (mHaveEglContext !mHaveEglSurface) {// 检测EGL上下文if (!mEglHelper.verifyContext()) {mEglHelper.finish();mRenderer.onSurfaceLost();mHaveEglContext false;}}if ((! mHaveEglContext) sGLThreadManager.tryAcquireEglSurfaceLocked(this)) {mHaveEglContext true;// 启动EGLHelper.start,这里会做EGL的初始化mEglHelper.start();sGLThreadManager.notifyAll();}// ...if (mHaveEglSurface) {// ... 配置宽高break;}}sGLThreadManager.wait();}} // end of synchronized(sGLThreadManager)if (event ! null) {event.run();event null;continue;}if (mHasFocus) {if (createEglSurface) {// 调用createSurface初始化EGL上下文gl (GL10) mEglHelper.createSurface(getHolder());// ...// 回调Renderer.onSurfaceCreatedmRenderer.onSurfaceCreated(gl, mEglHelper.mEglConfig);createEglSurface false;framesSinceResetHack 0;}if (sizeChanged) {// ...// 回调Renderer.onSurfaceChangedmRenderer.onSurfaceChanged(gl, w, h);sizeChanged false;}// ...mWatchDog.reset();// 回调Renderer.onDrawFramemRenderer.onDrawFrame(gl);framesSinceResetHack;// 调用eglSwapBuffers交换缓冲区上屏显示if(!mEglHelper.swap()) {// ...stopEglLocked();}}if (wantRenderNotification) {doRenderNotification true;}}} finally {// ... 释放EGL上下文} }EglHelper EglHelper就是对EGL对接口进行封装这些EGL的接口作用在前面都介绍过了。 public void start(){mEgl (EGL10) EGLContext.getEGL();// 通过eglGetDisplay获取EglDisplaymEglDisplay mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);// ...int[] version new int[2];// 调用eglInitialize进行初始化if(!mEgl.eglInitialize(mEglDisplay, version)) {throw new RuntimeException(eglInitialize failed);}// 调用eglChooseConfig获取EglConfigmEglConfig mEGLConfigChooser.chooseConfig(mEgl, mEglDisplay);// 创建EglContextmEglContext mEGLContextFactory.createContext(mEgl, mEglDisplay, mEglConfig);if (mEglContext null || mEglContext EGL10.EGL_NO_CONTEXT) {throwEglException(createContext);}mEglSurface null; }public GL createSurface(SurfaceHolder holder) {// 如果之前创建过EglSurface直接调用eglMakeCurrent进行关联if (mEglSurface ! null mEglSurface ! EGL10.EGL_NO_SURFACE) {mEgl.eglMakeCurrent(mEglDisplay, EGL10.EGL_NO_SURFACE,EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT);mEGLWindowSurfaceFactory.destroySurface(mEgl, mEglDisplay, mEglSurface);}// 调用createWindowSurface创建EglSurface mEglSurface mEGLWindowSurfaceFactory.createWindowSurface(mEgl,mEglDisplay, mEglConfig, holder);if (mEglSurface null || mEglSurface EGL10.EGL_NO_SURFACE) {throwEglException(createWindowSurface);}// 调用eglMakeCurrent关联if (!mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) {throwEglException(eglMakeCurrent);}GL gl mEglContext.getGL();if (mGLWrapper ! null) {gl mGLWrapper.wrap(gl);}// ... 配置debug相关flagreturn gl; }public boolean swap() {// 调用eglSwapBuffers交换Buffer显示mEgl.eglSwapBuffers(mEglDisplay, mEglSurface);return mEgl.eglGetError() ! EGL11.EGL_CONTEXT_LOST; }小结 EGL的接口比较简单流程也基本是固定的我们以GLSurfaceView为例介绍了它的使用流程GLSurfaceView就是启动一个线程除了处理固定的EGL上下文初始化还控制了Renderer回调的几个生命周期。 介绍完EGL后我们后面就可以专注于OpenGL ES的api使用了。
http://www.hkea.cn/news/14574856/

相关文章:

  • 山东网站开发公司安全网站开发
  • 受欢迎的网站建设教程福州有什么做网站的公司
  • 网页设计与网站制作网站宣传费用
  • 企业网站推广解决方案可视化网站模板编辑软件
  • 电子商务网站建设规划教案怎么建立图片的网站
  • 天津代理记账电商seo优化
  • 帝国建站模板易联网站建设
  • 网站建设拟解决问题自己做鞋子网站
  • 免费素材网站 可商用天元建设集团有限公司张桂玉
  • 前端兼职平台的行业前景seo系统oem
  • 网站系统分析多个wordpress站点同步
  • app开发网站建设包含项目网站开发保密合同范本
  • 涂料厂做网站有用吗怎样开通微信公众号平台
  • 长沙微交易网站建设在哪里做网站好
  • 六安网站建设招聘惠州网站建设 翻译6
  • 童程童美少儿收费价目表郑州网站及优化
  • 个人网站的备案方式app开发注意事项
  • 知道源代码如何做网站十大免费ppt课件网站
  • 哪些网站结构是不合理的服装网站开发项目计划书
  • 江门市建设工程备案网站国产做性直播视频网站
  • 如何做淘宝网网站域名网站域名如何实名认证
  • 网络 网站建设办公重庆微网站开发公司
  • 怎么把网站管理系统工业设计是干啥的
  • 深圳福田专业网站推广建设银行官方网站首页个人登录
  • 常州网络推广网站企业微信怎么注册
  • p2p网站开发费用广州市住房建设部网站
  • 广州seo网站优化培训自己建网站的优势
  • 专业做美食视频的网站用yii框架做的网站如何搭建
  • 路桥网站制作cms 企业网站
  • 六安电子商务网站建设网站建设一般报价多少钱