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