由于《OpenGL ES 2.0 Programming Guide》原书第11章的MultiSample示例代码是错误的,遂自己实现了一份C语言版本的,希望能够帮助到同样喜欢OpenGL ES 2.0的同学。
废话不多说,直接上代码:
第一步,修改 esCreateWindows 的 flags
int main ( int argc, char *argv[] ) { ESContext esContext; UserData userData; esInitContext ( &esContext ); esContext.userData = &userData; // ☆ esCreateWindow ( &esContext, "MipMap 2D", 640, 480, ES_WINDOW_RGB|ES_WINDOW_MULTISAMPLE); if ( !Init ( &esContext ) ) return 0; esRegisterDrawFunc ( &esContext, Draw ); esMainLoop ( &esContext ); ShutDown ( &esContext ); }
第二步,修改esUtil.c
EGLint attribList[] = { EGL_RED_SIZE, 5, EGL_GREEN_SIZE, 6, EGL_BLUE_SIZE, 5, EGL_ALPHA_SIZE, (flags & ES_WINDOW_ALPHA) ? 8 : EGL_DONT_CARE, EGL_DEPTH_SIZE, (flags & ES_WINDOW_DEPTH) ? 8 : EGL_DONT_CARE, EGL_STENCIL_SIZE, (flags & ES_WINDOW_STENCIL) ? 8 : EGL_DONT_CARE, EGL_SAMPLE_BUFFERS, (flags & ES_WINDOW_MULTISAMPLE) ? 1 : 0, EGL_SAMPLES, 4, // ☆ EGL_NONE };
第三步:在MipMap.c的 init 方法添加以下代码
//glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE); glEnable(GL_SAMPLE_COVERAGE); glSampleCoverage(.5, FALSE);
原图:
效果图: