标签: directx-11

使用Visual Studio 2012/Visual Studio 2013构建Qt5,并与IDE集成

如何让Qt5下载并与Visual Studio 2012集成?您将遇到哪些问题,以及如何解决这些问题?

更新重新.Visual Studio 2013

Visual Studio 2013也报告了成功,并且正在为VS 2013维护这些注释.

还要注意的是这个问题的重点是坚决的只是建筑物的Qt与Visual Studio.还有关于与Visual Studio IDE集成的说明

c++ directx-11 qt5 visual-studio-2012 visual-studio-2013

50
推荐指数
3
解决办法
7万
查看次数

d3dx11.h不见了?

所以我已经重新安装了directx11几次,甚至去了微软网站并获得了包含所有直接x cabinet文件的SDK包.任何人都知道为什么我一直得到这个错误呢?我知道它为什么这么说,但更多的是寻找它的解决方案.

1> c:\ users\_vaughn\documents\visual studio 2010\projects\myfirstapp\myfirstapp\main.cpp(5):致命错误C1083:无法打开包含文件:'d3dx11.h':没有这样的文件或目录

c++ directx-11

21
推荐指数
1
解决办法
4万
查看次数

如何在C++中急切地提交已分配的内存?

概况

对带宽,CPU使用率和GPU使用率极为密集的应用程序需要从一个GPU到另一个GPU每秒传输大约10-15GB.它使用DX11 API访问GPU,因此只有使用需要映射的缓冲区才能上传到GPU.上传一次发生在25MB的块中,并且16个线程同时将缓冲区写入映射的缓冲区.关于这一点,没有什么可以做的.如果不是针对以下错误,则写入的实际并发级别应该更低.

它是一个功能强大的工作站,配有3个Pascal GPU,一个高端Haswell处理器和四通道RAM.在硬件上没有太多改进.它正在运行Windows 10的桌面版.

实际问题

一旦我通过~50%的CPU负载,MmPageFault()(在Windows内核中,在访问已映射到您的地址空间但尚未由操作系统提交的内存时调用)中的某些内容突然破坏,剩下的50%CPU负载是被浪费在内部的旋转锁上MmPageFault().CPU变得100%利用,应用程序性能完全降低.

我必须假设这是由于每秒需要分配给进程的大量内存,并且每次取消映射DX11缓冲区时也完全从进程中取消映射.相应地,它实际上是MmPageFault()每秒数千次调用,顺序发生,顺序memcpy()写入缓冲区.对于遇到的每个单独的未提交页面.

一个CPU负载超过50%,保护页面管理的Windows内核中的乐观自旋锁完全降低了性能.

注意事项

缓冲区由DX11驱动程序分配.没有什么可以调整分配策略.不可能使用不同的内存API,尤其是重用.

调用DX11 API(映射/取消映射缓冲区)都是从单个线程发生的.与系统中的虚拟处理器相比,实际的复制操作可能跨越更多线程发生多线程.

无法降低内存带宽要求.这是一个实时应用程序.事实上,硬限制目前是主GPU的PCIe 3.0 16x带宽.如果可以的话,我已经需要进一步推进.

避免使用多线程副本是不可能的,因为有些独立的生产者 - 消费者队列无法简单地合并.

旋转锁定性能下降似乎非常罕见(因为用例推动它那么远)在Google上,你不会找到旋转锁定功能名称的单一结果.

升级到可以更好地控制映射的API(Vulkan)正在进行中,但它不适合作为短期修复.出于同样的原因,切换到更好的OS内核目前不是一种选择.

减少CPU负载也不起作用; 除了(通常是微不足道的和便宜的)缓冲区副本之外,还有太多的工作需要完成.

问题

可以做些什么?

我需要显着减少单个页面故障的数量.我知道已映射到我的进程的缓冲区的地址和大小,我也知道内存尚未提交.

如何确保以尽可能少的事务提交内存?

DX11的异常标志可以防止在取消映射后取消分配缓冲区,Windows API强制在单个事务中提交,几乎任何东西都是受欢迎的.

目前的状态

// In the processing threads
{
    DX11DeferredContext->Map(..., &buffer)
    std::memcpy(buffer, source, size);
    DX11DeferredContext->Unmap(...);
}
Run Code Online (Sandbox Code Playgroud)

c++ memory windows multithreading directx-11

21
推荐指数
1
解决办法
692
查看次数

桌面复制(DirectX)屏幕捕获无法提供屏幕更新

我正在开发一个应用程序,它将通过桌面复制API(使用DirectX 11)捕获屏幕(仅对前一个屏幕更新的差异)并在另一个窗口上呈现它(查看器可能在通过LAN连接的另一台机器上运行) .该代码是MSDN中提供的示例的改进版本.一切正常,除了设备没有给出任何屏幕更新,虽然在中间有一次,大约10%的时间在一些机器上发生(大多数在Windows 8/8.1机器上,很少在Windows 10机器上).我尝试了所有可能的方法来解决这个问题.减少了设备重置的次数,这为我提供了一些可靠的输出,但并不总能正常工作100%.

设备有时无法提供初始屏幕(全屏)(这种情况在所有支持桌面复制的Windows操作系统上有60%的时间发生),我想出了一个可以重新进行初步更新的工作.设备,直到它提供一个,但也导致多个问题,设备可能甚至不提供初始屏幕.

我已经投入了数周的时间来解决这个问题,但没有找到合适的解决方案,而且我所知道的论坛没有讨论这些问题.任何帮助,将不胜感激.

下面是我的代码,以获得前一个屏幕差异,初始化设备,填充适配器和监视器.

请耐心等待一段很长的代码片段,在此先感谢.

要获取屏幕更新:

INT getChangedRegions(int timeout, rectangles &dirtyRects, std::vector <MOVE_RECT> &moveRects, UINT &rect_count, RECT ScreenRect)
{
UINT diffArea           = 0;
FRAME_DATA currentFrameData;

bool isTimeOut          = false;

TRY
{

    m_LastErrorCode = m_DuplicationManager.GetFrame(&currentFrameData, timeout, &isTimeOut);

    if(SUCCEEDED(m_LastErrorCode) && (!isTimeOut))
    {
        if(currentFrameData.FrameInfo.TotalMetadataBufferSize)
        {

            m_CurrentFrameTexture = currentFrameData.Frame;

            if(currentFrameData.MoveCount)
            {
                DXGI_OUTDUPL_MOVE_RECT* moveRectArray = reinterpret_cast<DXGI_OUTDUPL_MOVE_RECT*> (currentFrameData.MetaData);

                if (moveRectArray)
                {
                    for(UINT index = 0; index < currentFrameData.MoveCount; index++)
                    {
                        //WebRTC
                        // DirectX capturer API may randomly return unmoved move_rects, …
Run Code Online (Sandbox Code Playgroud)

directx-11 visual-c++ dxgi webrtc desktop-duplication

18
推荐指数
1
解决办法
1453
查看次数

我在哪里可以找到一些深入的DirectX 11教程?

到目前为止,我能找到的唯一教程是在directx11tutorials.com上,这些教程基本上是从现有的样本中推断出来的.有谁知道在哪里可以找到其他教程,或者更好的使用DirectX 11的开源项目?(使用DirectX 11的项目代码的额外点:))

c++ directx directx-11 directcompute

17
推荐指数
4
解决办法
2万
查看次数

你如何在DirectX 11中绘制文本?

在DirectX 10中,您可以使用D3DX10提供的字体界面.在DirectX 11中,您应该使用DirectWrite.但看起来DirectWrite本身并不能说Direct3D?有什么基本的东西我不见了吗?如何使用DirectX 11绘制简单文本?

c++ directx directx-11

15
推荐指数
4
解决办法
4万
查看次数

DirectX 11是否支持.NET?

我可以使用C#app中的DirectX 11吗?

需要从WPF应用程序使用DirectSound..NET 4 W7 x64

c# directx multimedia directx-11

14
推荐指数
2
解决办法
3万
查看次数

directx标头和winerror.h之间的宏定义冲突

我在使用Visual Studio 2012的Windows 7上.

当我编译时,我得到了很多由winerror.h和dxgi.h,dxgitype.h,d3d11.h,d3d10.h引起的宏重定义警告.例如DXGI_STATUS_OCCLUDED,DXGI_STATUS_CLIPPED,DXGI_STATUS_NO_REDIRECTION等.

我想这是因为安装了windows sdk 8.我怎么能避免这个?有没有办法可以从我的项目中排除这些新库?

c++ winapi directx-11 visual-studio-2012

14
推荐指数
2
解决办法
1万
查看次数

以编程方式创建directx 11纹理,三种不同方法的优缺点

MSDN文档解释说,在DirectX 11有多种方法以编程方式填充的DirectX 11质地:

(1)使用默认使用纹理创建纹理,并使用内存中的数据对其进行初始化

(2)使用动态用法创建纹理,使用DeviceContext Map获取指向纹理内存的指针,写入它,然后使用Unmap指示你已完成(此时我猜它被复制到gpu)

(3)使用分段用法创建纹理,并按照与动态纹理相同的步骤进行,但是通过调用ID3D11DeviceContext.CopyResource来使用此分段纹理依次填充(非不可变)默认或动态纹理.

然而,文档并没有解释每种方法的优缺点,而且我对directx还是一个新手,所以对我来说一点也不清楚.

在directx 11中以编程方式创建纹理的每种方法的优缺点是什么?

旁注:我已经读过,在分段纹理的上下文中,从gpu 回不是缓冲的,所以你必须做自己的双缓冲.但我不知道这是否准确,是否适用于使用分段纹理(甚至真正意味着什么)写作.

第二方面注意: Map方法文档说它获取了一个指向子资源中数据的指针,并拒绝GPU访问该子资源.当GPU想要访问其底层数据已被Map调用的纹理时,它会做什么?失速?(我问,因为这听起来像是我询问的利弊的一部分)

directx textures directx-11

13
推荐指数
1
解决办法
8662
查看次数

在C#中使用DirectX11和SlimDX的Nvidia 3D视频

美好的一天,我正在尝试使用nvidia 3DVision和两个IP摄像头显示实时立体视频.我对DirectX完全不熟悉,但已尝试在此网站和其他网站上完成一些教程和其他问题.现在,我正在为左眼和右眼显示两个静态位图.一旦我的程序部分工作,这些将被我的相机中的位图取代.这个问题NV_STEREO_IMAGE_SIGNATURE和DirectX 10/11(nVidia 3D Vision)给了我很多帮助,但我仍然在努力让我的程序正常工作.我发现我的快门眼镜开始正常工作,但只有右眼图像显示,而左眼仍然是空白(鼠标光标除外).

这是我生成立体图像的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

using SlimDX;
using SlimDX.Direct3D11;
using SlimDX.Windows;
using SlimDX.DXGI;

using Device = SlimDX.Direct3D11.Device;            // Make sure we use DX11
using Resource = SlimDX.Direct3D11.Resource;

namespace SlimDxTest2
{
static class Program
{
    private static Device device;               // DirectX11 Device
    private static int Count;                   // Just to make sure things are being updated

    // The NVSTEREO header. 
    static byte[] stereo_data = new …
Run Code Online (Sandbox Code Playgroud)

c# direct3d nvidia directx-11 slimdx

13
推荐指数
1
解决办法
3884
查看次数