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

C++ 如何对各向异性过滤支持进行硬件级检查?,c++,C++,我刚刚在游戏中实现了各向异性过滤支持,但我不太确定如何进行硬件级检查,以查看用户硬件是否支持该方法。有没有办法使用CheckDeviceFormat查看硬件是否支持它,或者如果硬件不支持各向异性过滤,设备是否自动默认为三线性?提前感谢:) 更新:新问题,我只是做了一些测试来确认是否使用了x16 af,显然不是,只是一个x1 af。也许我遗漏了什么?我应用了samplerstates并将MaxAstrophic设置为16。下面是显示如何设置采样器状态的代码: // 0 = text

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

更新:新问题,我只是做了一些测试来确认是否使用了x16 af,显然不是,只是一个x1 af。也许我遗漏了什么?我应用了samplerstates并将MaxAstrophic设置为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: 此图显示了离相机越远出现的模糊程度:


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

magic::supports(magic::anistropic_filtering)     //say magic is the name of your library
它返回一个具有明显含义的bool


但这取决于您的图形库。

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

magic::supports(magic::anistropic_filtering)     //say magic is the name of your library
它返回一个具有明显含义的bool


不过,这取决于您的图形库。

因此,正如我之前发布的,您可以通过调用IDirect3D9::GetDeviceCaps()来检查D3D设备的硬件功能。您需要将apointer传递给D3DCAPS9结构,然后该结构将填充所收集的信息。这些信息中有“TextureFilterCaps”和“MaxAstrophic”,它们可以告诉您是否支持各向异性过滤以及各向异性过滤的支持程度

至于您的第二个问题,我不确定,但我认为您还必须将D3DSAMP_MIPFILTER设置为D3DTEXF_以使其工作


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

因此,正如我之前发布的,您可以通过调用IDirect3D9::GetDeviceCaps()来检查D3D设备的硬件功能。您需要将apointer传递给D3DCAPS9结构,然后该结构将填充所收集的信息。这些信息中有“TextureFilterCaps”和“MaxAstrophic”,它们可以告诉您是否支持各向异性过滤以及各向异性过滤的支持程度

至于您的第二个问题,我不确定,但我认为您还必须将D3DSAMP_MIPFILTER设置为D3DTEXF_以使其工作



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

那么,您使用的是什么?图形API?哪一个?哦,很抱歉,我完全忘了提那件事,不是吗?我正在使用directx。我想你应该能够通过IDirect3D9::GetDeviceCaps检索信息。请参阅:。您将得到一个D3DCAPS9结构,其中包含TextureFilterCaps(Caps是capabilities的缩写)和MaxAnisortropyoh awesome,这非常有用。Ty:)只是做了更多的测试,看看我的af是否真的是x16,它是否只有1x,即使maxIstropy设置为16。知道是什么引起的吗?你在研究什么?图形API?哪一个?哦,很抱歉,我完全忘了提那件事,不是吗?我正在使用directx。我想你应该能够通过IDirect3D9::GetDeviceCaps检索信息。请参阅:。您将得到一个D3DCAPS9结构,其中包含TextureFilterCaps(Caps是capabilities的缩写)和MaxAnisortropyoh awesome,这非常有用。Ty:)只是做了更多的测试,看看我的af是否真的是x16,它是否只有1x,即使maxIstropy设置为16。知道是什么原因吗?是的,我可以使用d3dcaps9实现一个检查,但我想知道您是否碰巧知道如何实现x16各向异性过滤?目前仅使用x1,尽管我将最大样本数设置为16,并使用日志确认硬件支持16个样本。@Jeff我的directX知识非常非常有限,因此我没有答案。@Jeff您能用更多信息扩展您的问题吗。例如,您在其中设置采样器过滤等的代码。是的,我能够使用d3dcaps9实现检查,但我想知道您是否碰巧知道如何实现x16各向异性过滤?目前仅使用x1,尽管我将最大样本数设置为16,并使用日志确认硬件支持16个样本。@Jeff我的directX知识非常非常有限,因此我没有答案。@Jeff您能用更多信息扩展您的问题吗。例如,您在其中设置采样器过滤等的代码。我确实尝试了caps.maxAstropy&只是用我想要的实际值填充它。我还使用了一个日志来确保我的gpu在x16支持af,这是根据我的日志实现的。mipfilter上的Afaik d3dtexf_各向异性是无效的组合。就像gpu识别出我想要x16过滤集,但没有应用它。@Jeff你的意思是设置你得到的D3DCAPS9结构的最大各向异性?正确,日志显示我的gpu支持16个样本的设置,只是没有应用它。@Jeff你不能设置D3DCAPS9结构中的值,这没有效果,因为它只是一个返回值,你的硬件能够与D3D。如果它说只支持MaxAF 1,那么你就只能这样了。也许我没有解释清楚,但我的日志显示我的gpu支持16作为最大AF值,只是没有设置。代码示例。日志(“支持的最大AF样本数:%d\n”,caps.maxitrophic);以下是我收到的输出:支持的最大AF样本数:16I确实尝试了caps.maxAstropy&只是用我想要的实际值填充它。我还使用了一个日志来确保我的gpu在x16支持af,这是根据我的日志实现的。mipfilter上的Afaik d3dtexf_各向异性是无效的组合。这就像gpu识别出我想要x16过滤集,但没有应用它。@Jeff你是说设置你得到的D3DCAPS9结构的最大各向异性?正确,日志显示我的gpu支持16个样本的设置,只是没有