Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> EGL 1.0 學習筆記

EGL 1.0 學習筆記

編輯:Android開發實例

EGL Specification 1.0 的研讀筆記

我的“Android OpenGL ES 1.x 教程的Native實現”中有Android平台下EGL的創建、銷毀的代碼

基本概念

EGL是OpenGL ES與本地Window系統之間的橋梁。EGL創建渲染上下文(Rendering Context)和Surface,Rendering Context是OpenGL ES的狀態機,Surface是OpenGL ES繪圖的“畫布”

Display

Display是OpenGL ES應用運行平台的物理顯示器的抽象

Rendering Context

OpenGL ES狀態機,由EGL創建、並與Surface關聯

Rendering Context含有OpenGL ES的客戶端和服務器端狀態

Rendering Context存在於客戶端的地址空間。每個線程在同一時刻只能使用1個Rendering Context,每個Rendering Context在同一時刻只能被1個線程使用

Surface

OpenGL ES繪圖的“畫布”。EGL/OpenGL ES有3種Surface:

  • window - 用於屏上(onscreen)渲染
  • pbuffer - 用於離屏(offscreen)渲染
  • pixmap - 離屏渲染,但本地渲染API也可以訪問

OpenGL支持2種渲染模式:

  • back buffered - 繪圖的color buffer由EGL創建和管理,繪圖完成後,EGL將後台color buffer交換/拷貝到窗口上
  • single buffered - 其color buffer為本地Pixmap,EGL能使用但不維護。OpenGL ES繪圖後,像素直接在Surface上呈現

window和pbuffer Surface是back buffered模式,pixmap Surface是single buffered模式

Config

用於創建Surface,包含了Surface的各個buffer的創建參數

  • color buffer
  • depth buffer
  • multisample buffer
  • stencil buffer

相互之間的關系概括

要點:

  • 與同一Display關聯的Rendering Context和Surface,才可以相互關聯
  • 一個Rendering Context可以向多個Surface繪圖,多個Rendering Context可以向同一個Surface繪圖
  • 每個Surface有其獨立的buffers

EGL函數

Display相關

eglInitialize

對每一個Display,都要初始化EGL

eglTerminate

釋放EGL相關資源

Config相關

Config用於創建Surface

eglChooseConfig

獲取一個Display與指定屬性相匹配的Config列表

eglGetConfigs

獲取一個Display所支持的所有Config列表

常用Config屬性有:

屬性 說明

 EGL_RED_SIZE

EGL_GREEN_SIZE

EGL_BLUE_SIZE

EGL_ALPHA_SIZE

 color buffer的RGBA分量的顏色深度(位數)  EGL_BUFFER_SIZE

 color buffer 的顏色深度(bpp)

EGL_RED/GREEN/BLUE/ALPHA_SIZE之和

 EGL_SURFACE_TYPE

 Surface類型,可選值為:

  • EGL_WINDOW_BIT
  • EGL_PIXMAP_BIT
  • EGL_PBUFFER_BIT
 EGL_DEPTH_SIZE  depth buffer中Z的位數  EGL_SAMPLE_BUFFERS  multisample buffer個數,0或1  EGL_SAMPLES  number of samples per pixel  EGL_STENCIL_SIZE  stencil buffer個數    

Surface相關

eglCreateWindowSurface

創建window Surface(on-screen 渲染)

eglDestroySurface

釋放Surface相關資源

Context相關

eglCreateContext

指定Display、Config,創建一個Rendering Context

多個Rendering Context可以共享數據,eglCreateContext()有一個參數為與其共享數據的另一個Context

eglDestroyContext

釋放Context相關的資源

eglMakeCurrent

將Rendering Context綁定到當前線程,並且綁定Rendering Context與Surface

如果當前線程已經綁定了另一個Context,則原Context將解除綁定。因此可以以NULL或者EGL_NO_CONTEXT調用eglMakeCurrent來解除線程與當前Context之間的綁定關系

其他函數

eglSwapBuffers

將back buffer拷貝到窗口

eglGetError

獲取最近一次EGL函數的錯誤代碼

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved