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中積極的改進能夠讓使用者定製各類細節需求來知足深度和更靈活渲染要求.但願之後進一步開放各類參數定製的接口來知足更多的開發者需求.

相關文章
相關標籤/搜索