我不确定如何调用ReportLiveObjects方法,因为我试图声明的类是抽象的,或者在IDXGIDebug"unclared"的情况下(我想我错过了一个头文件?).
这是片段.
ID3D11Debug *debugDev = new ID3D11Debug();
debugDev->ReportLiveDeviceObjects( D3D11_RLDO_DETAIL );
Run Code Online (Sandbox Code Playgroud)
上面的代码告诉我类是抽象的,所以我不能创建一个对象.
IDXGIDebug debugDev = new IDXGIDebug();
Run Code Online (Sandbox Code Playgroud)
上面的代码告诉我IDXGIDebug是未声明的.
头文件"DXGI"已包含在内.调试层已打开.
任何帮助,将不胜感激.
我试图了解HLSL和DirectX11中的镜面反射
cbuffer ConstantBuffer : register( b0 )
{
matrix World; // ??????? ????
matrix View; // ??????? ????
matrix Projection; // ??????? ????????
float4 vLightDir[3]; // Dir of light
float4 vLightColor[3]; // color of light
float4 vOutputColor; // Active color
//float3 Eye;
}
struct VS_INPUT // ???????? ?????? ?????????? ???????
{
float4 Pos : POSITION; // ??????? ?? X, Y, Z
float3 Norm : NORMAL; // ??????? ?? X, Y, Z
};
struct PS_INPUT // ???????? ?????? ??????????? ???????
{ …
Run Code Online (Sandbox Code Playgroud) 当帧开始时,我会进行逻辑更新并在此之后进行渲染。在我的渲染代码中,我做通常的事情。我通过调用 Draw 设置了几个状态、缓冲、纹理和结束。
m_deviceContext->Draw(
nbVertices,
0);
Run Code Online (Sandbox Code Playgroud)
在帧结束时,我调用present 来显示渲染帧。
// Present the back buffer to the screen since rendering is complete.
if(m_vsync_enabled)
{
// Lock to screen refresh rate.
m_swapChain->Present(1, 0);
}
else
{
// Present as fast as possible.
m_swapChain->Present(0, 0);
}
Run Code Online (Sandbox Code Playgroud)
平时的东西。现在,当我调用 Draw 时,根据 MSDN
Draw 将工作提交给渲染管道。
这是否意味着数据被发送到 GPU 并且主线程(称为 Draw 的线程)继续?还是等待渲染完成?
在我看来,只有 Present 函数应该让主线程等待渲染完成。
我有一些问题的理解之间的差异ID3D11Device
和ID3D11DeviceContext
。
是否ID3D11Device
代表您的 GPU 并ID3D11DeviceContext
用于功能,以控制device
?
为什么需要 2 个对象?
哪个函数与设备一起使用,哪个与设备对象一起使用?
哪个对象将最终图像发送到后台缓冲区?
后台缓冲区在ID3D11RenderTargetView
对象中,不是吗?
哪些对象连接到交换链,为什么?
我想我知道它应该如何工作 - 只有它没有。我有一台带有 860m 和英特尔集成卡的联想笔记本电脑。
我可以使用两个 gpu 从外部运行我的应用程序,一切正常:选定的 gpu 将是索引为 0 的适配器,它具有笔记本电脑屏幕作为输出等。
但是,如果我尝试使用索引为 1 的适配器(如果我正常运行应用程序,那就是 nvidia,如果我使用 nvidia gpu 运行它,那就是英特尔),IDXGIOutput::EnumOutputs 找不到任何东西,所以我无法正确配置显示设置。
我正在考虑简单地跳过配置,或者使用其他适配器的输出 - 但是没有办法过滤掉没有实际输出的适配器 - 例如我的电脑也有一个集成卡,但它没有物理连接的显示器,所以使用它应该是不可能的。
我还试图找到“使用图形处理器运行”上下文菜单按钮的确切功能,但我找不到任何东西。
目标是让用户能够在应用程序内选择适配器,他/她的选择被保存到配置文件中,并在重新启动后使用 - 但我找不到过滤可能的适配器的方法。
阅读本书:“使用 Direct3D 11 进行实际渲染和计算”,并在线查找定义:https : //docs.microsoft.com/en-us/windows/uwp/graphics-concepts/shader-resource-view-- srv-
我仍然对 ID3D11ShaderResourceView 是什么感到困惑。
请记住,我正在学习 DirectX 11 来创建视频游戏。考虑到这一点 ...
什么是着色器资源视图?在什么情况下您会使用着色器资源视图?最重要的是,您如何使用着色器资源视图?
我假设你可以在你的 HLSL 代码中使用这个资源,但在书中我还没有看到一个关于如何做到这一点的例子,以及它用于视频游戏引擎的通用方式。
谢谢!
I see that HSLS has float and a number after float (1-4) and a lot of fields (r, rr, rrrr, arar,...) (I see these fields with the help of HLSL Tool Thanks to Tim Jones :D - I can't imagine (for now) how can we programming HSLS without this tool).
I try to find references about this data type and its field but I can't find anything about it(why the number 1-4 and the meanings of its fields. In C++ …
我已将 HLSL 着色器添加到我的 Visual Studio 项目中,并且作为构建过程的一部分,它们会自动编译为 cso 文件。我面临的问题是,我需要使用不同的着色器模型多次编译它们,因为“/4_0_level_9_3”适用于 DirectX 11,但不适用于 DirectX 9,而“/3_0”仅适用于 DirectX 9,但不适用于在 DirectX 11 上。
向 Visual Studio 项目多次添加相同的文件不起作用,我想避免复制 HLSL 源文件,因为它会增加维护工作量和潜在的错误原因。我也无法在 Visual Studio 中创建单独的目标/配置来实现此目的,因为我需要在可执行文件中支持两个 DirectX 版本(可在运行时切换)。
有没有办法在 Visual Studio 中为单个 HLSL 文件指定多个编译(不同的着色器模型和不同的输出文件)?
如何在DirectX11中设置renderState?
device-> SetRenderState()似乎不再存在.
我刚开始用DirectX11的3D游戏编程学习直接3D .
我按照第一个教程得到了一个MessageBox,说"D3D11CreateDevice失败".
我检查了这个函数的返回值并获得了垃圾值-2005270483
.十六进制值0x887a002d
,人们说这是DXGI_ERROR_SDK_COMPONENT_MISSING
错误的.
但是,我找不到任何有关它的信息.此外,它没有D3D11CreateDevice()
MSDN通知的可能值.
以下是创建D3D设备的书的代码:
bool D3DApp::InitDirect3D()
{
// Create the device and device context.
UINT createDeviceFlags = 0;
#if defined(DEBUG) || defined(_DEBUG)
createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
D3D_FEATURE_LEVEL featureLevel;
HRESULT hr = D3D11CreateDevice(
0, // default adapter
md3dDriverType,
0, // no software device
createDeviceFlags, // createDeviceFlags,
0, 0, // default feature level array
D3D11_SDK_VERSION,
&md3dDevice,
&featureLevel,
&md3dImmediateContext);
if( FAILED(hr) )
{
// I added this part to check out …
Run Code Online (Sandbox Code Playgroud)