我目前正在使用SharpDX(托管的c#directx包装器)创建Windows 8应用程序.但是我遇到了一个着色器的问题,我想知道它是否可以调试这些应用程序.PIX似乎不适用于directX应用程序,因为可执行文件不喜欢直接打开,并且当我尝试捕获有关我的会话的任何信息时,VS2012中的新视觉工作室图形调试工具包始终指出"无法启动实验".
谢谢!
我正在使用SharpDX Toolkit,我正在尝试以编程方式创建Texture2D,因此我可以手动指定所有像素值.我不确定用它创建什么像素格式.
SharpDX甚至没有记录工具包的PixelFormat类型(他们有另一个PixelFormat类的文档,但它适用于WIC,而不是工具包).我确实找到了它包装的DirectX枚举,DXGI_FORMAT,但它的文档没有给我如何选择格式的任何有用的指导.
我习惯于使用每个颜色通道8位加8位alpha的旧32位位图格式,这对我来说已经足够了.所以我猜最简单的选择是R8G8B8A8或B8G8R8A8.我选择哪个重要?它们都将在所有硬件上得到完全支持吗?
甚至一旦我选择了其中之一,我就需要进一步指定它是SInt,SNorm,Typeless,UInt,UNorm还是UNormSRgb.我不需要sRGB色彩空间.我不明白Typeless应该是什么.UInt似乎是最简单的 - 只是一个普通的无符号字节 - 但事实证明它不起作用; 我没有收到错误,但我的纹理不会在屏幕上绘制任何内容.UNorm有效,但文档中没有任何内容可以解释为什么UInt没有.所以现在我很偏执,因为它可能无法在其他视频卡上运行.
这是我得到的代码,如果有人想看到的话.下载SharpDX完整包,打开SharpDXToolkitSamples项目,转到SpriteBatchAndFont.WinRTXaml项目,打开SpriteBatchAndFontGame类,并在指示的位置添加代码:
// Add new field to the class:
private Texture2D _newTexture;
// Add at the end of the LoadContent method:
_newTexture = Texture2D.New(GraphicsDevice, 8, 8, PixelFormat.R8G8B8A8.UNorm);
var colorData = new Color[_newTexture.Width*_newTexture.Height];
_newTexture.GetData(colorData);
for (var i = 0; i < colorData.Length; ++i)
colorData[i] = (i%3 == 0) ? Color.Red : Color.Transparent;
_newTexture.SetData(colorData);
// Add inside the Draw method, just before the call to spriteBatch.End():
spriteBatch.Draw(_newTexture, new Vector2(0, …Run Code Online (Sandbox Code Playgroud) 我希望将H264视频流式传输到Windows Phone 8应用程序.那么我怎么能用ShardDX做到这一点?(或者也许是Media Foundation的原生功能).
我找到了用于播放视频的MediaEngine类,但我需要"手动"解析帧并将它们转换为解码器或播放器,或其他内容.
media-player h.264 sharpdx ms-media-foundation windows-phone-8
我的C#应用程序崩溃了这个窗口.它是使用SharpDX的DirectX应用程序.
我甚至不知道从哪里开始调试这个?有小费吗?

当我启用本机代码的调试时,崩溃看起来像这样:

并且堆栈是:
ntdll.dll!77d1f8b1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!77d1f8b1()
KernelBase.dll!7658149d()
kernel32.dll!75c51194()
kernel32.dll!75c51194()
ntdll.dll!77d5b459()
ntdll.dll!77d5b42b()
ntdll.dll!77d5b3ce()
ntdll.dll!77d10133()
XAudio2_7.dll!61fb6b43()
XAudio2_7.dll!61fa7fa2()
XAudio2_7.dll!61fa79e9()
XAudio2_7.dll!61fa8bb8()
XAudio2_7.dll!61fa9492()
[External Code]
SharpDX.XAudio2.dll!SharpDX.XAudio2.Voice.DestroyVoice() Line 916 + 0x34 bytes C#
Run Code Online (Sandbox Code Playgroud) 我有4个浮点(2D中的位置),我想使用sharpdx在2D中绘制和填充多边形(在这4个位置具有顶点).有人可以指导我吗?我搞不清楚了.作为newbee的示例代码对我来说会更好,在此先感谢
我试图在WPF应用程序中通过SharpDX使用DirectX11在窗口中平滑地滚动一些图像.
一点背景:
图像是信号返回,随时间变化,从文件加载并作为纹理数组加载到D3D中,图像本身呈现为一系列纹理四边形(一系列相邻的矩形,在很长的水平线上) ).设置视口,使左右边缘表示时间偏移,并且信号显示在这些时间之间的时间段内.DirectX实现非常简单; 四个顶点生成一次,一个非常小的每帧缓冲区包含一个简单的2D世界视图变换,根据当前可见范围/缩放等更新缩放和平移.据我所知,D3D实现不是我遇到的问题的一部分 - 它确实是一个非常简单的设置,并且似乎渲染非常快(应该如此),虽然我确实有一些更好的东西(根据需要从磁盘传输纹理),但我有禁用所有这些并运行非常简单(小)纹理,而我尝试解决我遇到的问题..
问题:
当可见时间范围被动画化时,图像的滚动不平滑.图像在很多时候"抖动",坦率地看起来很糟糕(当它不抖动时,它看起来很棒).
设置:
DirectX渲染到D3DImage,在幕后进行一些工作以使DX11工作 - 此代码取自https://sharpdxwpf.codeplex.com/
有多个D3DImages(最多总共4个),排列在一个网格中(我已经测试了两个,两个都包含相同时间段的信号并一起动画).
这些D3DImages由DrawingVisual(由自定义FrameworkElement托管)绘制,它们被用作ImageBrush的源.frameworkelement对象根据需要触发渲染,绘图视觉处理D3D渲染调用并绘制一个矩形以使用D3DImage画笔填充控件.
使用WPF DoubleAnimation动画时间范围值.当前显示的视觉效果通过INotifyPropertyChanged绑定到此值,并在每次更改时触发渲染(通过InvalidateVisual).
DrawingVisual呈现代码,由"位置"值(可见时间范围的开始)的更改触发:
// update scene per-frame buffer first, with world-view transform
using (DrawingContext dc = RenderOpen()
{
_scene.Renderer.Render(_draw_args);
_image.Invalidate();
dc.DrawRectangle(_brush, null, new Rect(viewer.RenderSize));
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
我已经尝试过很多东西(并经过大量搜索)来尝试确定问题是由于抖动渲染请求计时,还是问题是否进一步进入渲染过程.
(不用说,这是非常"测试"代码):
Stopwatch rsw;
long last_time = 0;
void play()
{
rsw = new Stopwatch();
last_time = 0;
rsw.Start();
CompositionTarget.Rendering += rendering;
}
void rendering(object sender, EventArgs e)
{
double update_distance = rsw.ElapsedMilliseconds - last_time;
Position += …Run Code Online (Sandbox Code Playgroud) 我在Direct2D下使用SharpDx开发Metro应用程序.我用了一些图片deviceContext.如何将我的图片保存到png文件?
我将 SharpDX.WPF 项目用于 WPF 功能,与 SharpDX 附带的工具包(具有相同的问题!)相比,它似乎是一个易于理解的低开销库
首先:我使用以下方法修复了最新 SharpDX 的 SharpDX.WPF 项目: https
然后我对 DXElement.cs 进行了以下 hacky 调整,这里也完成了一个解决方案:
private Query queryForCompletion;
public void Render()
{
if (Renderer == null || IsInDesignMode)
return;
var test = Renderer as D3D11;
if (queryForCompletion == null)
{
queryForCompletion = new Query(test.Device,
new QueryDescription {Type = QueryType.Event, Flags = QueryFlags.None});
}
Renderer.Render(GetDrawEventArgs());
Surface.Lock();
test.Device.ImmediateContext.End(queryForCompletion);
// wait until drawing completes
Bool completed;
var counter = 0;
while (!(test.Device.ImmediateContext.GetData(queryForCompletion, out completed)
&& completed)) …Run Code Online (Sandbox Code Playgroud) 我在HelixToolKit中创建了一个点云。我需要为每个点应用颜色。当我使用PointVisual3D时,没有为每个点设置颜色的选项。它为整个点云设置颜色。当我在 Helix 工具包中使用PointGeometryModel3D(使用 SharpDX)时,我也无法为每个点设置颜色。可以为点云中的每个点设置颜色。
谢谢...
我正在使用C#构建一个Windows 10通用应用程序,它必须列出系统上已安装字体的名称.该应用程序是一个地铁/现代ui/windows 8.1应用程序,我使用SharpDX'技巧'来获取名称.
对于Windows 10 UAP,SharpDX不可用(但是?),因此不再适用.
有没有其他方法来实现我的目标?我应该考虑所描述的字体名称的固定列表这里在推荐的字体?例如,在桌面上这似乎相当有限.
提前致谢!
sharpdx ×10
directx ×5
c# ×4
wpf ×2
d3dimage ×1
debugging ×1
direct2d ×1
directx-11 ×1
flicker ×1
fonts ×1
h.264 ×1
helix ×1
hlsl ×1
image ×1
media-player ×1
pinvoke ×1
pixelformat ×1
png ×1
point-clouds ×1
windows-10 ×1