首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VB.net中,DirectX不允许双精度数学运算

在VB.net中,DirectX不允许双精度数学运算
EN

Stack Overflow用户
提问于 2018-03-22 10:34:38
回答 2查看 226关注 0票数 0

我有一个做有限元结构分析的大型VB.net应用程序。它需要双精度的数学运算。该应用程序还将DirectX用于图形。我现在知道DirectX在启动时故意将“浮点单元”设置为单精度。这是一个很大的问题。我需要弄清楚如何启动DirectX,但要保留双精度。目前我使用以下方法启动DirectX:

代码语言:javascript
复制
Dev = New Device(0, DeviceType.Hardware, Panel2,         
CreateFlags.SoftwareVertexProcessing, pParams)

我读到过如下所示的使用“CreateFlags.FpuPreserve”将保持双精度。但是当我尝试这个DirectX时,它并没有启动。

代码语言:javascript
复制
Dev = New Device(0, DeviceType.Hardware, Panel2, CreateFlags.FpuPreserve, pParams)

谁能告诉我如何从VB.net启动DirectX并保持双精度?

EN

回答 2

Stack Overflow用户

发布于 2018-03-29 02:09:11

首先,为了让你的代码正常工作,你仍然需要指定软件顶点处理。在VB中,这是作为Dev = New Device(0, DeviceType.Hardware, Panel2, CreateFlags.SoftwareVertexProcessing Or CreateFlags.FpuPreserve, pParams)完成的

一旦你修复了它,你会发现它仍然不能做你想要的事情。FpuPreserve对应于D3DCREATE_FPU_PRESERVE。这会影响CPU上的浮点精度计算,而不是GPU。

要获得双精度图形处理器计算,您首先需要使用Direct3D 11API或更高版本(看起来使用的是Direct3D 9)。即使这样,双精度支持也是一个可选特性;您必须使用D3D11_FEATURE_DOUBLES查询ID3D11Device::CheckFeatureSupport以查看它是否存在。

在SharpDX中,它应该是device.CheckFeatureSupport(Feature.ShaderDoubles),其中device的类型为Direct3D11.Device,如果您使用的是SharpDX.Toolkit.Graphics,则为GraphicsDeviceFeatures.HasDoublePrecision

票数 1
EN

Stack Overflow用户

发布于 2018-04-01 10:45:04

是的,就是这样,谢谢!调用需要添加如上所示的"Or CreateFlags.FpuPreserve“,"or”是关键字。然后在CPU / FPU计算中保持双精度,这正是我所需要的。我不知道在图形计算中使用的精度是多少,但我并不关心这个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49419613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档