如何对各向异性过滤支持进行硬件级别检查?

时间:2015-06-27 18:56:48

标签: c++

我刚刚在我的游戏中完成了各向异性过滤支持,但是我不太确定如何进行硬件级别检查以查看用户硬件是否支持该方法。有没有办法使用CheckDeviceFormat来查看硬件是否支持它,或者如果硬件不支持各向异性过滤,设备是否会自动默认为三线性?在此先感谢:)

更新:新问题,我刚做了一些测试以确认是否正在使用x16 af,显然它不是,它只是一个x1 af。也许我错过了什么?我应用了samplerstates并将maxanisotropy设置为16.这里的代码显示了我如何设置采样器状态:

        // 0 = textures
        pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
        pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER , D3DTEXF_ANISOTROPIC);
        pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, bTrilinear ? D3DTEXF_LINEAR : D3DTEXF_NONE);
        pd3dDevice->SetSamplerState(0, D3DSAMP_MAXANISOTROPY, 16);

        // 1 = lightmaps
        pd3dDevice->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
        pd3dDevice->SetSamplerState( 1, D3DSAMP_MINFILTER , D3DTEXF_ANISOTROPIC);
        pd3dDevice->SetSamplerState(1, D3DSAMP_MIPFILTER, bTrilinear ? D3DTEXF_LINEAR : D3DTEXF_NONE);
        pd3dDevice->SetSamplerState(1, D3DSAMP_MAXANISOTROPY, 16);

更新2: 此图显示了您离相机越远时出现的模糊程度:

http://i.imgur.com/Q6ap1zZ.png

2 个答案:

答案 0 :(得分:0)

您的图形库应该实现如下功能:

magic::supports(magic::anistropic_filtering)     //say magic is the name of your library

返回一个具有明显含义的bool。

取决于您的图形库。

答案 1 :(得分:0)

正如我之前发布的那样,您可以通过调用IDirect3D9 :: GetDeviceCaps()来检查D3D设备的硬件功能。您需要将apointer传递给D3DCAPS9结构,然后填充所收集的信息。其中的信息是" TextureFilterCaps"和" MaxAnisotropy"这可以告诉你是否以及如何支持各向异性过滤。

关于你的第二个问题,我不确定,但我认为你还必须将D3DSAMP_MIPFILTER设置为D3DTEXF_ANISOTROPIC以使其正常工作。

您如何测试使用哪种程度的各向同性?