Quantcast
Channel: Mali Developer Center
Viewing all articles
Browse latest Browse all 125

抗锯齿示例

$
0
0

 

简介

抗锯齿是消除“锯齿”的一种技巧,星星轨迹等线条可以显示得更加平滑。 出现锯齿的原因是,显示设备没有足够高的分辨率,而不能向人眼平滑地展示线条。 抗锯齿通过在硬线的两侧放入混合像素,来迷惑眼睛,使它认为有锯齿的边缘是平滑的。

抗锯齿(使用和不使用)

Mali GPU 硬件上可以使用多个级别的抗锯齿功能。 可用于 Mali GPU 的选项有 0x(在源像素周围取 0 个样本来计算像素值)、4x(像素周围取 4 个样本),以及 16x(在源像素周围取 16 个样本来计算像素值)。

请注意,Mali GPU 架构提供的 4x 抗锯齿对性能的影响接近于零。 因为默认情况下图块缓存为每像素 4 个样本。 使用 16x 抗锯齿时,输出图像以更高的分辨率渲染;其副作用是利用这一级别时性能牺牲很大,但输出质量可以大大提高。 对于大多数应用程序来说,4x 就已足够;而且因为其消耗很低,因此 ARM 建议采用 4x 抗锯齿,而非0x。

禁用抗锯齿

4x 抗锯齿

16x 抗锯齿

启用抗锯齿

根据 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 中提供,其中还提供了演示其用法的许多其他示例。

OpenGL ES SDK


Viewing all articles
Browse latest Browse all 125

Trending Articles