简介
Pixelflinger是Android系统中为OpenGL ES引擎提供的一套软件渲染器(renderer),为OpenGL ES引擎提供了一系列基础绘图功能。这些功能包括定义各种颜色格式像素位置、画点画线、绘制矩形及三角形、填充纹理等等。由于OpenGL ES相当于一个状态机,配置OpenGL ES状态的函数也均由Pixelflinger提供。
Pixelflinger的相关源码路径如下:
system/core/libpixelflinger
system/core/include/libpixelflinger
system/core/include/private/pixelflinger
Pixelflinger编译后生成:
libpixelflinger_static.a
libpixelflinger.so
主要数据结构
context_t
该结构是Pixelflinger的主结构,用来存储OpenGL ES状态及数据上下文。context_t结构体中包含GGLContext、state_t、shade_t、iterators_t、generated_vars_t等结构体。
system/core/include/private/pixelflinger/ggl_context.h
GGLContext
GGLContext结构体中包含了Pixelflinger库可提供给上层调用的一些函数接口,包括画点画线、绘制多边形、配置OpenGL ES状态机等函数接口。
state_t
state_t结构体用来描述OpenGL ES状态机的状态,包含多个子结构体,每个子结构体均负责处理一部分OpenGL ES功能,包括存储贴图及纹理、裁剪操作、光栅操作、混合操作、景深操作、雾化操作等功能。
主要接口
初始化
gglInit
直接渲染函数
pointx、linex、recti、trianglex
裁剪函数
scissor
设置纹理和色彩缓冲
activeTexture
bindTexture
colorBuffer
readBuffer
depthBuffer
bindTextureLod
功能控制开关
enable
disable
enableDisable
指定片段颜色
shadeModel
color4xv
指定颜色迭代器
colorGrad12xv
指定Z坐标迭代器
zGrad3xv
指定W坐标迭代器
wGrad3xv
指定雾迭代器与颜色
fogGrad3xv
fogColor3xv
指定混合参数
blendFunc
blendFuncSeparate
纹理环境(包括四种纹理REPLACE / MODULATE / DECAL / BLEND)
texEnvi
texEnvxv
纹理参数(包装及过滤)
texParameteri
纹理迭代器
texCoord2i
texCoord2x
为纹理ST坐标使用块浮点
texCoordGradScale8xv
texGeni
屏蔽函数
colorMask
depthMask
stencilMask
alpha函数
alphaFuncx
景深函数
depthFunc
逻辑操作接口
logicOp
清除函数
clear
clearColorx
clearDepthx
clearStencil
framebuffer操作
copyPixels
rasterPos2x
rasterPos2i
支持的颜色格式
Pixelflinger在format.cpp中定义了所支持的颜色格式及像素的位置,常用的颜色格式主要有RGBA8888、RGBX8888、RGB565、BGRA8888。从结构体中可以看出,Alpha通道位于32-24位,属于高位,可见RGBA8888使用的是大端顺序。这里定义的颜色格式只能够被Android的OpenGL ES使用,和通过Canvas绘制的图像无关。具体请查看gPixelFormatInfos[]数组。