opengles3.0 基础学习(三)

opengles3.0(三)

 

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

 

#include <android/native_window.h>

 

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

由资深OpenGL技术专家亲笔撰写,全面介绍OpenGL ES 3.0的各种特性及新增功能,通过大量已经编译和测试过的实例,详细讲解OpenGL ES 3.0中的应用程序接口(API)和图形管线,既涵盖简单图形的渲染方法,又深入介绍逐像素照明和粒子系统等高级渲染技术,并且包含大量有效使用API和硬件的实用技巧,为手持设备的各种高性能3D应用开发提供翔实指导。 《华章 OpenGL ES 3.0编程指南(原书第2版)》共16章:第1章简单介绍OpenGL ES ,并概述OpenGL ES 3.0图形管线;第2章通过绘制一个角形的简单OpenGL ES 3.0示例程序,讲解一些API概念,并说明如何构建和运行OpenGL ES示例程序;第3章讲述为OpenGL ES 3.0创建表面和渲染上下文的API——EGL;第4章讨论创建着色器对象、编译着色器和检查编译错误的方法;第5章讲解编写着色器所需的着色语言基本知识;第6章详细介绍几何形状输入图形管线的方法,包含对顶点属性、顶点数组和缓冲区对象的讨论;第7章讨论几何形状如何装配成图元,介绍OpenGL ES 3.0中所有可用图元类型,包括点精灵、直线、角形、角形条带和角扇形;第8章概述顶点着色器如何融入管线,以及OpenGL ES 着色语言中可用于顶点着色器的特殊变量;第9章和第10章介绍片段着色器,包括多重纹理、雾化、Alpha测试和用户裁剪平面等;第11章讨论片段操作,包括剪裁测试、模板测试、深度测试、多重采样、混合和抖动;第12章介绍使用帧缓冲区对象渲染屏幕外表面;第13章讨论同步对象和栅栏的使用方法;第14章介绍OpenGL ES 3.0高级编程,包含使用法线贴图的逐像素照明、环境贴图、粒子系统、图像后处理、程序纹理、阴影贴图、地形渲染和投影纹理等渲染技术。;第15章提供OpenGL ES 3.0中各种可用状态查询的参考;第16章讨论如何为iOS 7、Android 4.3 NDK、Android 4.3 SDK、Windows和Linux构建OpenGL ES样板代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值