directx-11 相关问题

DirectX 11是Microsoft的DirectX API的第11个版本,用于开发和处理与多媒体相关的任务,例如Microsoft平台上的游戏编程,3D可视化和视频。 DirectX 11可在Windows Vista,Windows 7,Windows 8,Windows 10和Xbox One上运行。

为什么使用 DXGI 输出复制和 Direct3D 时捕获的图像数据全为零?

我正在开发一个应用程序,使用 DXGI 输出复制和 C# 中的 Direct3D 从桌面捕获屏幕截图。我的应用程序初始化 DXGI、创建 Direct3D 设备并复制

回答 1 投票 0

WARP 驱动程序、参考驱动程序和软件驱动程序之间有什么区别?

在 DirectX 11 中,有四种类型的驱动程序: D3D_DRIVER_TYPE_HARDWARE D3D_DRIVER_TYPE_REFERENCE D3D_DRIVER_TYPE_SOFTWARE D3D_DRIVER_TYPE_WARP 第一个是广泛使用的硬件驱动程序...

回答 1 投票 0

在 Visual Studio 中使用 D3Dcompile 缺少 HLSL 调试符号

我有一个通过清除屏幕并绘制三角形来按预期工作的应用程序,但我想在 Visual Studio 图形调试器中单步执行顶点和像素着色器代码,但是

回答 1 投票 0

立方体旋转仅由鼠标移动或按键触发

编辑: 好吧,我忘记包含一些相关函数,使您很难识别错误。对此我很抱歉。 所以我再次更新了我的问题 我遇到了一个奇怪的事情......

回答 1 投票 0

无法在 Direct3D 应用程序中显示立方体

我目前正在开发一个 Direct3D 应用程序,在该应用程序中我面临着在屏幕上显示立方体的挑战。尽管检查了各个方面,立方体仍未出现。这是我已经验证过的...

回答 1 投票 0

DirectX::SpriteFont/SpriteBatch 阻止 3D 场景绘制

我在使用 DirectX::SpriteFont/DirectX::SpriteBatch 时遇到问题(来自 DirectXTK;与此处讨论的问题完全相同:使用 SpriteFont 类绘制文本时的问题)。 void DrawScene(v...

回答 2 投票 0

d3d11 三角形渲染失败,尽管一切都已正确初始化

学习如何使用 d3d11,使用 ComPtrs,没有故意进行错误检查,因为我只是使用断点来查看所有内容是否都已初始化,但没有任何内容被吸引到胜利...

回答 1 投票 0

Qt 5.15,ANGLE:使用DirectComposition,即Flip Model SwapChain

我正在开发一个使用 Qt 5.15.11 和 ANGLE 的应用程序,它需要与我无法控制的另一个应用程序很好地配合。通过使用小型 DirectX 测试应用程序进行大量实验,我确定

回答 1 投票 0

为什么 Map() 在默认纹理上失败,尽管使用了 UnifiedMemoryArchitecture 和 MapOnDefaultTextures

文档建议,默认使用纹理可以映射到 UMA 架构上,例如具有 Direct3D 11.3 的英特尔集成显卡。 我试图实现这一点,但 Map() 总是失败并出现 E_INVALIDARG。 ...

回答 2 投票 0

DirectX 中的 tbuffers 如何操作?

我已经阅读了 MSDN 上的文档,但是关于 tbuffer 到底是什么、它如何工作、它在图形编程中的使用以及如何准确创建它的相关内容很少。我很好奇...

回答 2 投票 0

ID3D11Texture2D转ID2D1Bitmap,可以吗?

我正在开发一款游戏的扩展,它只打开 HDC 供插件开发人员使用。 然而,我已经用尽了 GDI+/Direct2D 绘图的可能性,这些可能性对于我想要的来说足够快

回答 4 投票 0

如何使用 C 语言在 DirectX 11 中渲染文本

我一直在尝试使用 DirectX 11 在屏幕上渲染一些简单的文本,但我无法做到这一点,因为我不断遇到问题。我使用的是 C18 而不是 C++。尝试过使用 DirectXTK 、 Direct2...

回答 1 投票 0

使用 assimp 的 .X 文件中的 UV 纹理映射问题

描述错误 .X 文件中的 UV 纹理映射问题,有时可以完美加载,但在极少数情况下会发生。 重现 重现该行为的步骤: 尝试加载 Land_Objects_WareHous...

回答 1 投票 0

在 OMSetRenderTarget 中使用深度模板视图后,DirectX 3d 11 根本没有渲染任何内容

我已经尝试这个好几个小时了。我不知道为什么三角形没有在屏幕上呈现。 D3D11_DEPTH_STENCIL_DESC dsDesc = {}; dsDesc.DepthEnable = true; dsDesc.DepthWrite...

回答 1 投票 0

为什么ID3D11Device的CreateDevice()返回错误0x80070057:“参数不正确”?

我正在尝试学习如何使用D3D11(我在任何方面都不是图形编程的专业人士),并且在我的代码中的设备创建函数中,它返回E_INVALIDARG。 #包括 我正在尝试学习如何使用D3D11(我无论如何都不是图形编程的专业人士),并且在我的代码中的设备创建功能期间,它返回E_INVALIDARG。 #include <Windows.h> #include <iostream> #include <d3d11.h> #include <dxgi.h> #include <d3dcompiler.h> #pragma comment(lib,"d3d11.lib") #pragma comment(lib,"dxgi.lib") #pragma comment(lib,"d3dcompiler.lib") LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } #define WndHeight 700 #define WndWidth 1000 HRESULT hres = 0; void check(LPCWSTR str) { if (hres != S_OK) { OutputDebugString(str); LPVOID errorMsg; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, hres, 0, // Default language (LPWSTR)&errorMsg, 0, NULL ); // Create a buffer to hold the formatted message wchar_t buffer[256]; swprintf_s(buffer, L"Error 0x%X: %s", hres, (errorMsg ? static_cast<LPCWSTR>(errorMsg) : L"Unknown error")); // Output the message to the debugger OutputDebugString(buffer); // Free the allocated buffer LocalFree(errorMsg); DWORD lastError = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, lastError, 0, // Default language (LPWSTR)&errorMsg, 0, NULL ); // Create a buffer for the additional system information swprintf_s(buffer, L"Additional system information: %s", (errorMsg ? static_cast<LPCWSTR>(errorMsg) : L"Unknown error")); // Output the additional system information to the debugger OutputDebugString(buffer); // Free the allocated buffer LocalFree(errorMsg); exit(-1); } } int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { HWND hwnd; { WNDCLASS wc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = CreateSolidBrush(RGB(0, 0, 0)); wc.hCursor = NULL; wc.hIcon = NULL; wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = L"MainClass"; wc.lpszMenuName = nullptr; wc.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wc)) { OutputDebugString(L"Class Registreation Failed!"); } hwnd = CreateWindow(L"MainClass", L"simple quad", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, WndHeight, WndWidth, NULL, NULL, hInstance, NULL); if (!hwnd) { OutputDebugString(L"Window Creation Failed!"); } } ID3D11Device* device = nullptr; ID3D11DeviceContext* context = nullptr; D3D_FEATURE_LEVEL SSfeaturelvl[] = { D3D_FEATURE_LEVEL_11_0 }; IDXGIFactory1* dxgiFactory = nullptr; { hres = CreateDXGIFactory1(IID_PPV_ARGS(&dxgiFactory)); check(L"\nIDXGIFactory1 Creation Failed!\n"); } IDXGIAdapter* adapter = nullptr; { hres = dxgiFactory->EnumAdapters(0, &adapter); check(L"\nIDXGIAdapter Creation Failed!\n"); DXGI_ADAPTER_DESC adapterDesc = { 0 }; adapter->GetDesc(&adapterDesc); OutputDebugString(L"\nGraphics device : "); OutputDebugString(adapterDesc.Description); } hres = D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, SSfeaturelvl, 1, D3D11_SDK_VERSION, &device, NULL, &context); check(L"\nID3D11Device Creation Failed!\n"); IDXGISwapChain* swapchain = nullptr; { DXGI_MODE_DESC modeDesc = { 0 }; modeDesc.Width = WndWidth; modeDesc.Height = WndHeight; modeDesc.Format = DXGI_FORMAT_UNKNOWN; modeDesc.RefreshRate.Numerator = 30; modeDesc.RefreshRate.Denominator = 1; modeDesc.Scaling = DXGI_MODE_SCALING_STRETCHED; modeDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; DXGI_SWAP_CHAIN_DESC desc = { 0 }; desc.BufferCount = 2; desc.BufferDesc = modeDesc; desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; desc.Flags = 0; desc.OutputWindow = hwnd; desc.SampleDesc.Count = 1; desc.SampleDesc.Quality = 0; desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; desc.Windowed = TRUE; hres = dxgiFactory->CreateSwapChain(device, &desc, &swapchain); check(L"\nswapchain Creation Failed!\n"); } ID3D11Buffer* vertexbuffer = nullptr; { int vertices[] = { // X, Y -500, 350, -500, -250, 500, -250, 500, 250 }; D3D11_BUFFER_DESC VBdesc = { 0 }; VBdesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; VBdesc.ByteWidth = sizeof(vertices); VBdesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ; VBdesc.MiscFlags = 0; VBdesc.StructureByteStride = 2 * sizeof(int); VBdesc.Usage = D3D11_USAGE_DEFAULT; D3D11_SUBRESOURCE_DATA VBdata = { 0 }; VBdata.pSysMem = vertices; VBdata.SysMemPitch = 0; VBdata.SysMemSlicePitch = 0; hres = device->CreateBuffer(&VBdesc, &VBdata, &vertexbuffer); check(L"\nvertexbuffer Creation Failed!\n"); } ID3D11Buffer* indexbuffer = nullptr; { int vertices[] = { // 1, 2, 3 0, 1, 2, 2, 3, 0 }; D3D11_BUFFER_DESC VBdesc = { 0 }; VBdesc.BindFlags = D3D11_BIND_INDEX_BUFFER; VBdesc.ByteWidth = sizeof(vertices); VBdesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ; VBdesc.MiscFlags = 0; VBdesc.StructureByteStride = 3 * sizeof(int); VBdesc.Usage = D3D11_USAGE_DEFAULT; D3D11_SUBRESOURCE_DATA VBdata = { 0 }; VBdata.pSysMem = vertices; VBdata.SysMemPitch = 0; VBdata.SysMemSlicePitch = 0; device->CreateBuffer(&VBdesc, &VBdata, &indexbuffer); check(L"\nindexbuffer Creation Failed!\n"); } ID3D11VertexShader* VertesShader = nullptr; ID3DBlob* vsBlob = nullptr; { hres = D3DCompileFromFile(L"shaders.hlsl", nullptr, nullptr, "vs_main", "vs_5_0", 0, 0, &vsBlob, 0); check(L"\nvsBlob Creation Failed!\n"); hres = device->CreateVertexShader(vsBlob->GetBufferPointer(), vsBlob->GetBufferSize(), nullptr, &VertesShader); check(L"\nVertesShader Creation Failed!\n"); } ID3D11PixelShader* pixelShader; ID3DBlob* psBlob = nullptr; { hres = D3DCompileFromFile(L"shaders.hlsl", nullptr, nullptr, "ps_main", "ps_5_0", 0, 0, &psBlob, 0); check(L"\npsBlob Creation Failed!\n"); hres = device->CreatePixelShader(psBlob->GetBufferPointer(), psBlob->GetBufferSize(), nullptr, &pixelShader); check(L"\npixelShader Creation Failed!\n"); psBlob->Release(); } ID3D11InputLayout* IL = nullptr; { D3D11_INPUT_ELEMENT_DESC IEdesc[] = { {"POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, }; hres = device->CreateInputLayout(IEdesc, ARRAYSIZE(IEdesc), vsBlob->GetBufferPointer(), vsBlob->GetBufferSize(), &IL); check(L"\nID3D11InputLayout Creation Failed!\n"); } ID3D11RenderTargetView* RTV = nullptr; { ID3D11Texture2D* d3d11FrameBuffer; hres = swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&d3d11FrameBuffer); check(L"\ngetbuffer for RTV Failed!\n"); hres = device->CreateRenderTargetView(d3d11FrameBuffer, 0, &RTV); check(L"\nID3D11RenderTargetView Creation Failed!\n"); d3d11FrameBuffer->Release(); } { context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); context->IASetIndexBuffer(indexbuffer, DXGI_FORMAT_R32G32B32_SINT, 0); context->IASetInputLayout(IL); context->VSSetShader(VertesShader, NULL, NULL); context->PSSetShader(pixelShader, NULL, NULL); RECT winRect; GetClientRect(hwnd, &winRect); D3D11_VIEWPORT viewport = { 0 }; viewport.TopLeftX = 0.0f; viewport.TopLeftY = 0.0f; viewport.Width = (FLOAT)(winRect.right - winRect.left); viewport.Height = (FLOAT)(winRect.bottom - winRect.top); viewport.MinDepth = 0.0f; viewport.MaxDepth = 0.0f; context->RSSetViewports(1, &viewport); context->OMSetRenderTargets(1, &RTV, NULL); } ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); MSG msg = { 0 }; while (msg.message != WM_QUIT) { if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } context->DrawIndexed(6, 0, 0); swapchain->Present(1, 0); } return 0; } 一开始我不明白为什么,但后来我将 IDXGIAdapter 参数更改为 NULL 并且函数通过了,但我觉得它应该第一次就可以工作。我想知道为什么会发生这种情况,以及如何使用 IDXGIAdapter 界面而不是 NULL。 您无法传递 DXGI 适配器参考 和 D3D_DRIVER_TYPE_HARDWARE,如记录的: 如果将 pAdapter 参数设置为非 NULL 值,则还必须 将 DriverType 参数设置为 D3D_DRIVER_TYPE_UNKNOWN 值。如果 将 pAdapter 参数设置为非 NULL 值,并将 DriverType 设置为 D3D_DRIVER_TYPE_HARDWARE 值的参数,D3D11CreateDevice 返回 E_INVALIDARG 的 HRESULT。 所以,你必须这样做: hres = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, SSfeaturelvl, 1, D3D11_SDK_VERSION, &device, NULL, &context); 或者这个: hres = D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, 0, SSfeaturelvl, 1, D3D11_SDK_VERSION, &device, NULL, &context);

回答 1 投票 0

为什么我的ID3D11Device接口的CreateDevice函数返回错误0x80070057:“参数不正确”?

我试图学习如何使用 d3d11(无论如何都不是图形编程的专业人士),并且在我的代码中,在设备创建函数期间它返回了 E_INVALIDARG。 #包括 #

回答 1 投票 0

使用.exe时无法看到渲染

我一直在尝试让它工作,但我不知道为什么它不显示红点,这是我用实际的 gui 替换点之前的测试。任何帮助,将不胜感激。 我有

回答 1 投票 0

DXGI 翻转模型锁定垂直同步

我发现使用翻转模型(DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL或DXGI_SWAP_EFFECT_FLIP_DISCARD)创建的交换链被锁定到VSync(1/60秒),使用SyncInte调用IDXGISwapChain1::Present1方法...

回答 2 投票 0

读取纹理颜色数据中的一行而不是 Silk.Net 中的所有行

我正在测试从纹理读取数据。问题是我的最终数组的数据不完整。 我使用自己的类创建源纹理来简化代码(https://github.com/Kordi3112/

回答 1 投票 0

原语未显示在屏幕上

我不知道为什么我的代码不会使红色矩形出现在绿色背景上。 // 根据一项或多项协议授权给 .NET 基金会。 // .NET 基金会虱子...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.