问题标签 [sharpdx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - SwapChain.Present 访问冲突
在以下代码行中,我遇到了一个非常烦人的问题:
我的程序运行一个引发事件的计时器,如果它被引发并且我此时没有渲染,则程序会强制执行渲染调用。同时运行另一个计时器 + 鼠标事件,更新矩阵、顶点、缓冲区和其他东西 - 但在渲染时,所有这些更新功能都被锁定 - 但只有在DeviceContext.Draw(mNumVertices, 0);
达到之前,同步对象才会解锁。
我现在的问题 - 如果在和VertexBufferBinding
之间更改,是否会引发访问冲突?还是抄袭?而且,第二个 - 为什么我不能捕捉到这种访问冲突?它总是一个“未处理的异常”。Draw(..)
SwapChain.Present(..)
编辑:奇怪的是,访问冲突只出现在我的工作笔记本(Core i5、Intel HD 3000 和 Radeon 6490M)上,而不出现在我的家用笔记本电脑(Core i7、Intel HD 3000 和 NVidia GeForce 540M)上。
directx - 创建新的 Texture2D 时如何选择像素格式?
我正在使用 SharpDX Toolkit,并且正在尝试以编程方式创建 Texture2D,因此我可以手动指定所有像素值。而且我不确定用什么像素格式来创建它。
SharpDX 甚至没有记录工具包的 PixelFormat 类型(他们有另一个 PixelFormat 类的文档,但它是用于 WIC,而不是工具包)。我确实找到了它包装的 DirectX 枚举DXGI_FORMAT,但它的文档没有就我如何选择格式提供任何有用的指导。
我习惯于普通的 32 位位图格式,每个颜色通道 8 位加上 8 位 alpha,这对我来说已经足够好了。所以我猜最简单的选择是 R8G8B8A8 或 B8G8R8A8。我选择哪个重要吗?所有硬件都完全支持它们吗?
即使我选择了其中之一,我也需要进一步指定它是 SInt、SNorm、Typeless、UInt、UNorm 还是 UNormSRgb。我不需要 sRGB 颜色空间。我不明白无类型应该是什么。UInt 似乎是最简单的——只是一个普通的旧无符号字节——但事实证明它不起作用;我没有收到错误,但我的纹理不会在屏幕上绘制任何内容。UNorm 有效,但文档中没有任何内容可以解释 UInt 无效的原因。所以现在我很怀疑 UNorm 可能无法在其他显卡上工作。
这是我得到的代码,如果有人想看的话。下载 SharpDX 完整包,打开 SharpDXToolkitSamples 项目,转到 SpriteBatchAndFont.WinRTXaml 项目,打开 SpriteBatchAndFontGame 类,并在指示处添加代码:
这会在屏幕左上角绘制一个带有对角线的小矩形。它适用于我正在测试它的笔记本电脑,但我不知道如何知道这是否意味着它可以在任何地方工作,我也不知道它是否会是最高性能的。
我应该使用什么像素格式来确保我的应用程序可以在所有硬件上运行并获得最佳性能?
c# - 设置透视的缩放值等于透视
我正在构建一个具有两种视图模式的小型形状编辑器:正交视图和透视视图。所以我发现它会很好,如果透视和正交的缩放值相等(或尽可能相等)。
通过设置 z 轴上的位置,可以简单地归档透视图的缩放值。对于正交,我将左、右、上和下角从 0.0 缩放到 X。
是否可以同样缩放它们?有解决办法吗?
rendering - DirectX11 中的最佳顶点缓冲区处理
我正在编写一些使用 D3D11(用于 WinRT 应用程序的 SharpDX)绘制 2D 精灵的代码。所有这些都有效,但速度并不快。这是我正在使用的一些代码:
屏幕上渲染的每个精灵都会调用此代码。我不能保证每个精灵的寿命。他们可能在下一帧的相同位置或不同的位置。可以有更多,也可以更少。根据我的分析器,在渲染大量精灵时,SharpDX.Direct3D11.Buffer.Create 占用了整个帧的 50%。我认为有更好的方法可以做到这一点,但我正在努力弄清楚该怎么做。任何人都可以为此提供任何建议吗?
c# - 如何在 WinRT 中使用 SharpDX 同时播放多个声音?
我正在尝试制作乐器类型的应用程序。我遇到的问题是只有在旧声音完成后才会播放新声音。我希望能够同时播放它们。
这就是我的代码的样子:
首先,MyWave 类只保存一个音频缓冲区和一些其他信息:
在 SoundPlayer 类中:
谷歌不是很有帮助,我找不到任何有用的东西。那么如何同时播放多个声音呢?
gdi+ - 在 Direct2D 中执行世界 <--> 设备转换
在 GDI+ 中,Graphics 对象有一个 TransformPoints 函数,它允许您指定设备到世界或世界到设备的坐标变换。在 SharpDX 中,我可以获取设备(独立)坐标并使用 Matrix3x2.TransformPoint(...) 将它们翻译到我的世界,但我该如何走另一条路呢?
或者,我正在做的是通过一系列转换,我最终在屏幕上绘制了一些我只知道在当前世界坐标中的东西,但我想在上面绘制一个文本标签。因此,我认为我需要回到设备坐标以正确绘制我的文本(即将 Identity 设置为变换;drawtext(device x,device y) -- 快乐的日子)。因此,如果有一个不涉及 TransformPoints 的直接解决方案,那我也会很高兴。
我正在使用 SharpDX,但我很乐意翻译任何 c++ 答案......
c# - 如何打印渲染到 SurfaceImageSource 的内容?
我正在使用 SharpDx 在 WinRt 的 Image 控件中呈现一些形状。如何打印渲染到打印机的内容?
我尝试在不执行这些渲染操作的情况下打印图像控件的内容,它起作用了。当我在调用此方法后尝试相同时,它会打印空白。
direct2d - 是否可以始终绘制 1 像素(与设备无关)线 direct2d?
我在渲染目标上使用 DrawLine 函数,并且希望始终绘制一条(与设备无关)像素粗的线。
我的问题是我有一个变换,它的水平和垂直尺寸大不相同,看来我只能为这些尺寸之一缩放 strokeWidth。
我可以将变换设置为标识,并使用矩阵变换点将每个点转换为我的设备独立坐标,从而获得正确的结果,但工作并没有被卸载到 GPU。
有没有办法做到这一点,以便我可以让渲染目标上的转换完成工作?
我正在使用 C# 中的 SharpDX,但我很乐意翻译任何 c++ 答案。
media-player - 使用 Media Foundation 的 WP8 视频流
我希望将 H264 视频流式传输到 Windows Phone 8 应用程序。那么我该如何使用 ShardDX 呢?(或者可能来自媒体基金会的本机功能)。
我找到了用于播放视频的 MediaEngine 类,但我需要“手动”解析帧并将它们送到解码器或播放器或其他东西。
3d - DirectX Unproject 问题
我有一个正交投影,我尝试从屏幕空间中取消投影一个点。
以下是视图和投影矩阵:
这是我取消投影 Pointp
的方法,该点以屏幕像素为单位:
我的代码不起作用,矩阵m
仅包含Nan
. 当我尝试反转时,view * proj
我得到一个只有零的矩阵。
所以我怀疑我的问题与正交投影矩阵有关。
以下是我的问题:
- 问题可能是由于 OrthoOffCenterLH 投影中的大值导致的下溢引起的吗?
- 我必须传递哪些
x,y,width,height
参数Unproject(...)
? minZ
中的andmaxZ
参数有什么意义Unproject(...)
?p.Z
我通过什么重要Unproject(...)
吗?