简介
抗锯齿是消除“锯齿”的一种技巧,星星轨迹等线条可以显示得更加平滑。 出现锯齿的原因是,显示设备没有足够高的分辨率,而不能向人眼平滑地展示线条。 抗锯齿通过在硬线的两侧放入混合像素,来迷惑眼睛,使它认为有锯齿的边缘是平滑的。
Mali GPU 硬件上可以使用多个级别的抗锯齿功能。 可用于 Mali GPU 的选项有 0x(在源像素周围取 0 个样本来计算像素值)、4x(像素周围取 4 个样本),以及 16x(在源像素周围取 16 个样本来计算像素值)。
请注意,Mali GPU 架构提供的 4x 抗锯齿对性能的影响接近于零。 因为默认情况下图块缓存为每像素 4 个样本。 使用 16x 抗锯齿时,输出图像以更高的分辨率渲染;其副作用是利用这一级别时性能牺牲很大,但输出质量可以大大提高。 对于大多数应用程序来说,4x 就已足够;而且因为其消耗很低,因此 ARM 建议采用 4x 抗锯齿,而非0x。
启用抗锯齿
根据 EGL 规格的编写方式,0x 为默认设置,因此需要执行额外的步骤来启用它。
定义 EGL 属性:
EGLint g_aEGLAttributes[] = { EGL_SAMPLES, 0, EGL_RED_SIZE, WINDOW_RED_SIZE, EGL_GREEN_SIZE, WINDOW_GREEN_SIZE, EGL_BLUE_SIZE, WINDOW_BLUE_SIZE, EGL_ALPHA_SIZE, 0, EGL_BUFFER_SIZE, WINDOW_BUFFER_SIZE, EGL_DEPTH_SIZE, 16, EGL_STENCIL_SIZE, 0, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NONE };
设置样本大小:
g_aEGLAttributes[1] = 4; // 4x anti-aliasing
或者
g_aEGLAttributes[1] = 16; // 16x anti-aliasing
将属性结构传递到对 eglChooseConfig 的调用。
例如
result = eglChooseConfig(pStatics->sEGLInfo.sEGLDisplay, g_aEGLAttributes, pEGLConfig, cEGLConfigs, &cEGLConfigs);
上例中的代码并不完整,需要进行额外的 EGL 设置才能正常运作。 有关其他详细信息,请参见“选择正确的 EGL Config”示例。
本示例的完整源代码列表在 OpenGL ES SDK for Linux on ARM 和 OpenGL ES 2.0 SDK for Android 中提供,其中还提供了演示其用法的许多其他示例。