opengles3.0 基础学习(三)

opengles3.0(三)

 

#elif defined(__ANDROID__) || defined(ANDROID)

 

#include

 

struct egl_native_pixmap_t;

 

typedef struct ANativeWindow*           EGLNativeWindowType;

typedef struct egl_native_pixmap_t*     EGLNativePixmapType;

typedef void*                           EGLNativeDisplayType;

 

 

 

这个是andrioid的EGLNativeWindowType

 

 

创建屏幕上的渲染区域:

           // Create a surface

   esContext->eglSurface = eglCreateWindowSurface ( esContext->eglDisplay, config,

                                                    esContext->eglNativeWindow, NULL );

 

 

创建屏幕外的渲染区域:

eglCreatePbufferSurface

Pbuffer常用于生成纹理贴图,如果你想要做的是渲染到一个纹理,哪么我们建议使用帧缓冲区对象代替Pbuffer.在某些帧缓冲区无法使用的情况下,Pbuffer任然可以使用。

 

EGLint ATTRIBlIST[] = {

   EGL_WIDTH, 512,

EGL_HEIGHT,512,

EGL_LARGEST_PBUFFER,EGL_TRUE,

EGL_NONE

eglCreatePbufferSurface(DISPLAY,CONFIG,ATTRIBlIST)

 

不像窗口中那样交换缓冲区,而是从Pbuffer中将数值复制到应用程序,或者绑定pbuffer更新为纹理。

 

 

 

创建一个渲染上下文:

 

    // Create a GL context

 

   esContext->eglContext = eglCreateContext ( esContext->eglDisplay, config,

 

                                              EGL_NO_CONTEXT, contextAttribs );

 

 

 

   if ( esContext->eglContext == EGL_NO_CONTEXT )

 

   {

 

      return GL_FALSE;

 

  }

 

 

 

   // Make the context current

 

   if ( !eglMakeCurrent ( esContext->eglDisplay, esContext->eglSurface,

 

                          esContext->eglSurface, esContext->eglContext ) )

 

   {

 

      return GL_FALSE;

 

   }

 

 

 因为一个应用程序有多个EGLContext用于不同的用途,因此我们需要指定一个Context于EGLSurface绑定。

 

 

 

同步渲染:

 

你可能会碰到一些情况,即需要协调多个图形API再单个窗口中的渲染,例如,你可能发现使用OpenVG更容易找到比Opengles 更适于在窗口中绘制字符的原生窗口系统字体渲染函数。

    eglWaitClient

   这个函数跟glFinish类似,但是不管当前操作的是哪个API 均有效。

 

如果你需要保证原生窗口系统的渲染完成,可以调用eglWaitNative

你可能感兴趣的:(OPENGLES)