SDL中的Anti-aliasing

  默认状况下,SDL2中默认是不启用MSAA.为了能启用,必须作些设置.若是渲染器工做在OpenGL/ES模式下,那么直接使用:windows

        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);spa

        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,n);3d

便可,若是再windows下,渲染器会自动选择D3D做为渲染接口,那么咱们要强行把渲染设备切换到OpenGL模式:接口

        SDL_SetHint(SDL_HINT_RENDER_DRIVER,"opengl");开发


可是在DirectX中如何设置MSAA呢,查看SDL2源码发现:源码

         D3DPRESENT_PARAMETERS pparams;it

         ... ...
渲染

         result = IDirect3D9_CreateDevice(data->d3d, data->adapter,方法

                                     D3DDEVTYPE_HAL,im

                                     pparams.hDeviceWindow,

                                     device_flags,

                                     &pparams, &data->device);

这是SDL2初始化D3D设备的一段代码,根据MSDN,设置D3D的MSAA,必须加上:

        pparams.MultiSampleQuality=n;

        pparams.MultiSampleType=D3DMULTISAMPLE_TYPE;

        而后初始化.

        显然SDL2的开发者没有给使用者切入这个初始化设备的手段,那么要作到通用性,咱们能够设置一个回调,回传出pparams,而后再应用中自定义,便可解决.

        MSDN中指出要使用MSAA,还必须设置渲染状态,好在SDL2中给我提供了获取DirectX内部设备接口的方法:

         IDirect3DDevice9* _d3dev = SDL_RenderGetD3D9Device();//SDL 2.0.1提供

         _d3dev->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS,TRUE);

能够看到SDL2中积极的改进能够让使用者定制各类细节需求来知足深度和更灵活渲染要求.但愿之后进一步开放各类参数定制的接口来知足更多的开发者需求.

相关文章
相关标签/搜索