如何通过Emscripten激活抗锯齿

时间:2014-04-03 19:40:49

标签: webgl sdl antialiasing emscripten asm.js

在webGL中,可以在canvas-context初始化上激活抗锯齿,如

gl = canvas.getContext("experimental-webgl", { antialias: true });

我的简单问题是:如何通过Emscripten C ++将此选项设置为asm.js编译器?我不想通过自定义着色器代码实现我自己的抗锯齿。

2 个答案:

答案 0 :(得分:2)

在SDL中,您可以通过SDL_GL_MULTISAMPLEBUFFERS设置启用抗锯齿功能。像这样:

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); // enable MULTISAMPLE
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2); // can be 2, 4, 8 or 16
SDL_SetVideoMode(...)

此本机代码将为gl上下文启用antialias。看看library_sdl.js:

// in makeSurface function
var webGLContextAttributes = {
    antialias: ((SDL.glAttributes[13 /*SDL_GL_MULTISAMPLEBUFFERS*/] != 0) && (SDL.glAttributes[14 /*SDL_GL_MULTISAMPLESAMPLES*/] > 1)),
    depth: (SDL.glAttributes[6 /*SDL_GL_DEPTH_SIZE*/] > 0),
    stencil: (SDL.glAttributes[7 /*SDL_GL_STENCIL_SIZE*/] > 0)
};

答案 1 :(得分:1)

如果使用SDL,如另一个答案所述,您只需调用以下内容:

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0 or 1);

如果使用GLUT,则必须使用/不使用glutInitDisplayMode()来调用GLUT_MULTISAMPLE

如果使用EGL,唯一的选择是强制将构建的javascript代码从_glutInitDisplayMode(146);更改为_glutInitDisplayMode(18);,因为eglCreateContext()只是在内部使用GLUT命令。