标签: directx-11

使用两个花车进行双重划分?

我想使用两个浮点数进行双重划分(看起来Direct Compute不支持双重划分).

那可能吗?

这是我到目前为止所尝试的(c#代码,以后应该是HLSL):

int count = 7;
double value = 0.0073812398871474;
float f1 = (float)value;
float f2 = (float)((value - f1));
float r1 = f1 / count;
float r2 = f2 / count;
double result = (double)r1 + (double)r2;
Run Code Online (Sandbox Code Playgroud)

0,00105446285765182(结果)

0,00105446284102106(正确的结果)

它与f1中的舍入有关.如果值是:

 double value = 0.0073812344471474;
Run Code Online (Sandbox Code Playgroud)

然后结果是正确的.

c# floating-point directx-11 compute-shader

0
推荐指数
1
解决办法
3238
查看次数

DX11交换链仅显示第一帧.在它和黑色图像之间翻转

当我运行我的3D场景时,它只渲染第一帧然后在它和黑屏之间翻转,导致大量闪烁.我认为这是我的交换链没有正确设置,但我真的不知道.

这是我的代码来设置它.它几乎是从微软的例子中复制而来的.

DXGI_SWAP_CHAIN_DESC1 sd = {0};
sd.Width = 0;                           
sd.Height = 0;
sd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; 
sd.Stereo = false; 
sd.SampleDesc.Count = 1;                
sd.SampleDesc.Quality = 0;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.BufferCount = 2;                     
sd.Scaling = DXGI_SCALING_NONE;
sd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
sd.Flags = 0;

CoreWindow^ window =  reinterpret_cast<CoreWindow^>(mSystem->GetIWindow());
hr = pIDXGIFactory->CreateSwapChainForCoreWindow(mD3DDevice,  reinterpret_cast<IUnknown*>(window), &sd, NULL, &mSwapChain);
EA_ASSERT(SUCCEEDED( hr ));
Run Code Online (Sandbox Code Playgroud)

而目前的代码:

DXGI_PRESENT_PARAMETERS  presentParameters = {0};
HRESULT hr = mSwapChain->Present1(0, 0, &presentParameters);
Run Code Online (Sandbox Code Playgroud)

在我看来相当直接,所以我不明白为什么它不起作用.

场景一直在运行.更新功能每帧都运行一次.

另外,如果我在PIX中检查渲染,一切都很好.我得到了我期望渲染的东西.它只是没有出现在屏幕上.

有任何想法吗?谢谢!

windows directx directx-11 windows-8

0
推荐指数
1
解决办法
771
查看次数

Direct3D c ++ api如何更新顶点缓冲区?

那么如何使用IASetVertexBuffers方法更新绑定到设备对象的顶点缓冲区中的值?也将在此缓冲区变化值调用之前Draw()Present()?还会根据缓冲区中的这些新值更新图像吗?

c++ windows graphics direct3d directx-11

0
推荐指数
1
解决办法
3400
查看次数

DirectX 11最小纹理大小

我正在使用DirectX 11处理卷渲染程序.

我渲染到窗口(HWND)和纹理(ID3D11Texture2D).

虽然HWND总是看起来正确的渲染,但ID3D11Texture2D对于小于64x64的渲染大小,我看起来很糟糕:

在此输入图像描述

我想知道DirectX 11中是否存在纹理的最小大小限制.

不幸的是,我只能找到有关最大纹理大小限制的信息.

directx directx-11 render-to-texture

0
推荐指数
1
解决办法
910
查看次数

C ++ / CX标头文件找不到Microsoft名称空间

我有一个带有以下代码的头文件:

  Microsoft::WRL:ComPtr<ID3D11Device2> m_device;
Run Code Online (Sandbox Code Playgroud)

在类定义中。Visual Studio 2013表示Microsoft不是名称空间,如果我将代码剪切并切下,然后将其放在另一个文件的另一个类中,则保持不变就可以了!

有任何想法吗?

菲利浦

编辑:突然之间(无需我进行任何更改)Intelissense现在接受Microsoft :: WRL :: ComPtry为有效,但是在我编译时它仍然给我错误,提示它不存在。

directx-11 c++-cx visual-studio-2013

0
推荐指数
1
解决办法
2295
查看次数

C++-WinRT 的 com_ptr 重置?

我正在尝试将 DirectX11/XAML UWP 模板移植到 C++-WinRT 版本...其中一切都是通过 C++-WinRT 完成的,我可以关闭 CX。

我目前陷入了如何ResizeBuffers使用交换链的困境。我不断收到错误消息,提示我尚未释放所有缓冲区引用。如果我注释掉与调整缓冲区大小有关的任何内容并仅硬编码大小,则该应用程序可以正常工作。所以...我可能做错了什么。

我相信这与新的winrt::com_ptr. 没有Reset像 WRL ComPtr 上那样的方法。我已将它们设置为nullptr与原始 C++/CX 模板中一样,但这似乎还不够。

我必须做的其他事情可能会影响正在发生的事情:

  1. DeviceResources 类现在是一个 C++/WinRT 类,我使用 nullptr_t 参数在所有其他类(SampleScene3DRenderer、DirectXPage 和 Main)中默认创建该类。这样,我可以在 DirectXPage 中创建它,传入 swapChainPanel 引用,然后将这个 DeviceResources 实例传递给我创建的所有其他类。

  2. 在 DirectX 初始化中有一个地方您必须传入**IUnknown. C++/WinRT 的文档提到使用调用的函数winrt::get_unknown来返回*IUnknown. 我无法让它适用于以下DWriteCreateFactory方法,所以我尝试了这种方式:

     DX::ThrowIfFailed(
        DWriteCreateFactory(
           DWRITE_FACTORY_TYPE_SHARED,
           __uuidof(IDWriteFactory3),
           reinterpret_cast<::IUnknown**>(m_dwriteFactory.put())
        )
    );
    
    Run Code Online (Sandbox Code Playgroud)

我不知道还能做什么。只有交换链调整大小不起作用。我是在 PC 上(不是 Windows Phone)执行此操作。

directx-11 c++-winrt

0
推荐指数
1
解决办法
1257
查看次数

从哪里开始创建 D3D11 Hook 来制作游戏叠加层?

我目前正在开发我的第一个 D3D 项目,其中涉及为游戏创建叠加层,以便向用户呈现实时信息。实际的数据采集已经处理完毕,将通过消息系统发送。目前,我的程序适用于无边框全屏模式,并且正在调整它以在窗口模式下按比例缩放(以确保所有内容都指向正确的位置,无论大小如何)。该应用程序是游戏的父级,但是,当游戏进入真正的全屏模式时,一切都会崩溃。研究表明,据我了解,我需要创建一个假的 .dll,并将其插入到游戏的本地目录中。该 .dll 将被打开,而不是它正在寻找的实际 directX DLL,我可以在那里制作所需的图形。

为了回答一些潜在的问题,我无法直接访问游戏,而且,虽然相关游戏的开发者已经同意这一点,但我宁愿它不要被反作弊软件捕获和惩罚。此外,我希望将性能影响保持在最低限度,因此目前覆盖层的 FPS 相当低(~10fps)。

预先感谢您的任何帮助!

c++ directx overlay directx-11

0
推荐指数
1
解决办法
2786
查看次数

如何在C++的头文件中使用在命名空间中声明的类型?

我正在使用C++在Visual Studio 2017中创建DirectX11应用程序,我需要在我的"GeometryGenerator.h"头文件中声明一个数据结构.

问题是当我尝试使用类型:我的头文件中的XMFLOAT3时,当我尝试运行项目时,我从Visual Studio收到错误并给我这样的消息:

“C4430: missing type specifier - int assumed”
Run Code Online (Sandbox Code Playgroud)

在我声明XMFLOAT3类型的变量的行中

这是我的代码:

#pragma once
#include "..\Common\DeviceResources.h"
#include "ShaderStructures.h"
#include "..\Common\StepTimer.h"

namespace DirectX11Engine
{

    class GeometryGenerator {
    public: 
        struct Vertex
        {
            Vertex() {}
            Vertex(const XMFLOAT3& p, const XMFLOAT3& n, const XMFLOAT3& t, const XMFLOAT2& uv)
                : Position(p), Normal(n), TangentU(t), TexC(uv) {}
            Vertex(
                float px, float py, float pz,
                float nx, float ny, float nz,
                float tx, float ty, float tz,
                float u, float v)
                : Position(px, py, pz), Normal(nx, …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces header directx-11

-3
推荐指数
1
解决办法
88
查看次数