这个问题来 self 之前的问题:
Delphi XE7 Abstract Error on StyleLookup with Effect (FireMonkey)
基本上,我有几个应用了效果的样式控件。这些效果适用于大多数系统,因此我不想将它们从我的风格中全部剔除,以供少数客户使用。有没有办法检测客户端是否有 DirectX 9 并且安装的 GPU 是否支持 Pixel Shader 2.0?
最佳答案
据我所知,没有直接的方法来确定 DirectX 版本,但是 Microsoft 提供了一个名为 GetDXVersion 的示例函数,它是 DirectX SDK 的一部分。此函数运行一组检查以确定 DirectX 版本。幸运的是,您可以在 DSPack
中找到该函数的 Delphi 翻译。项目。
现在要检测像素着色器版本,您必须使用 IDirect3D9::GetDeviceCaps
方法,然后检查 D3DCAPS9
的 PixelShaderVersion
字段的值记录一下。
尝试这个 FMX 示例
uses
Winapi.Windows,
Winapi.Direct3D9,
FMX.Context.DX9;
procedure TForm1.Button1Click(Sender: TObject);
var
LCaps: TD3DCaps9;
LPixelShaderVersionMajor, LPixelShaderVersionMinor : Cardinal;
begin
ZeroMemory(@LCaps, SizeOf(LCaps));
if TCustomDX9Context.Direct3D9Obj.GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, LCaps) = S_OK then
begin
LPixelShaderVersionMajor:= D3DSHADER_VERSION_MAJOR(LCaps.PixelShaderVersion);
LPixelShaderVersionMinor:= D3DSHADER_VERSION_MINOR(LCaps.PixelShaderVersion);
ShowMessage(Format('PixelShaderVersion %d.%d', [LPixelShaderVersionMajor, LPixelShaderVersionMinor]));
end;
//also you can use the D3DPS_VERSION function to determine if the version returned meets the requirements
if (LCaps.PixelShaderVersion >= D3DPS_VERSION(2, 0)) then
ShowMessage('Hey your PixelShaderVersion is compatible');
end;
关于delphi - 在运行时检测 GPU 是否支持 Pixel Shader 2.0 (Firemonkey),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28971884/