标签: directx-11

当我们调用 IUnknown::Release 时会发生什么

例如,在以下代码中:

ID3D11Texture2D* texture2d; 

    HRESULT result = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*) &texture2d);//mSwapChain is a swap chain, as obvious

    result = mDevice->CreateRenderTargetView(texture2d, 0, &mTargetView);

    texture2d->Release();
Run Code Online (Sandbox Code Playgroud)

我真的很困惑在调用 release 之后交换链中的后台缓冲区会发生什么。目前我认为可能发生的是,指针被释放,而不会影响后台缓冲区本身。不过,我需要一个更详细的答案,因为我很难理解这个概念。

directx directx-11

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

尝试使用TriangleStrip Topologu创建三角形时的奇怪行为

我试图在输入汇编器设置为三角形条带的情况下创建这个2D三角形:

1.(0.0f, 0.0f, 0.5f)
2.(-0.5f, 0.0f, 0.5f)
3.(-0.5f, -0.5f, 0.5f)
Run Code Online (Sandbox Code Playgroud)

但是,没有绘制三角形,实际上渲染目标上没有绘制任何内容,甚至没有绘制单行.我搞砸周围,然后我换坐标23,和它的工作.正如我想要的那样绘制三角形.这种奇怪行为的原因是什么?

directx directx-11 directx-10

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

在针对Win8.1 + Metro时使用SharpDX保存Texture2D?

我正在尝试将用户生成的Texture2D保存到磁盘,但是在定位DirectX11.1/Win8.1/Metro时看起来无法实现此标准的标准方法.没有ToStream/FromStream,也没有用于将纹理写入磁盘的DX11方法.

任何想法或建议?

c# directx directx-11 sharpdx windows-8.1

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

更改 DirectX 11 中的分辨率

如何更改 DirectX 11 中的屏幕分辨率?有没有一种简单的方法可以做到这一点,或者我是否必须完全重新创建交换链,并创建一个新的后缓冲区和渲染目标视图?

c++ winapi directx-11

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

无法从交换链释放 Direct3D 缓冲区以调整大小

当我的窗口发生变化时,我正在努力调整缓冲区的大小。除了这一部分之外,该过程的每个部分都按预期工作。

// in MyGame.h - 
private:
    ComPtr<ID3D11RenderTargetView> gRenderTarget;
...


// handle resize method:
void MyGame::UpdateBackbufferSize(UINT pWidth, UINT pHeight) {

    /* 1. Clear render targets from device context */
    gDeviceContext->OMSetRenderTargets(0, 0, 0);

    /* 2. Release Rendering Target */
    gRenderTarget->Release(); // ! CANNOT ACCESS client.h private Release()

    /* 3. Resize buffer */
    gSwapchain->ResizeBuffers(
        0,
        pWidth,
        pHeight,
        DXGI_FORMAT_UNKNOWN,
        0
        );

    /* 4. Reset the buffer as target view */ 
    ComPtr<ID3D11Texture2D> backBuffer;
    gSwapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), &backBuffer);
    gDevice->CreateRenderTargetView(backBuffer.Get(), nullptr,     &gRenderTarget);
    backBuffer.Get()->Release();

    /* 5. Set the new …
Run Code Online (Sandbox Code Playgroud)

resize directx-11 direct3d11 uwp

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

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

DirectX::SpriteFont我在使用/时遇到问题DirectX::SpriteBatch(来自 DirectXTK;与此处讨论的问题完全相同:Problems while Drawing text using the SpriteFont class)。

void DrawScene(void)
{
    HRESULT hr;

    float bgColor_a[4] = { 0.0f, 0.4f, 0.8f, 0.0f };

    g_pDeviceContext->ClearRenderTargetView(g_pRenderTargetView, bgColor_a);
    g_pDeviceContext->ClearDepthStencilView(g_pDepthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);

    XMMATRIX cameraProj = XMLoadFloat4x4(&g_camera._cameraProjection);
    XMVECTOR pos = XMLoadFloat3(&g_camera._pos);
    XMVECTOR target = XMLoadFloat3(&g_camera._target);
    XMVECTOR up = XMLoadFloat3(&g_camera._up);
    XMMATRIX cameraView = XMMatrixLookAtLH(pos, target, up);
    XMMATRIX worldBox2 = XMMatrixIdentity() * (XMMatrixTranslation(2.0f, 0.0f, 0.0f) * XMMatrixRotationY(XMConvertToRadians(g_rotBox2)));
    XMMATRIX wvp = worldBox2 * cameraView * cameraProj;
    XMMATRIX transposeWvp = XMMatrixTranspose(wvp); …
Run Code Online (Sandbox Code Playgroud)

c++ 3d directx-11 spritefont

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

如何使用HLSL和DirectX 11进行激光效果?

我仍在使用我自己的自定义游戏引擎开发我的科幻视频游戏.现在,我想在我的游戏和引擎中实现战斗系统.虽然几乎所有东西都很清楚,但我想知道如何制作合适的激光束,如星球大战,星际迷航,巴比伦5等等.

我做了一些在线研究,但是我找不到合适的文章.我很确定我搜索了错误的关键字/标签.你能给我一些提示如何实现激光束等效果吗?我想,了解我在线研究所需的正确技术或术语就足够了......

directx hlsl directx-11

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

D3D11_USAGE_STAGING,使用什么样的GPU/CPU内存?

我阅读了D3D11用法页面并来自CUDA背景我想知道标记为D3D11_USAGE_STAGING存储的纹理会是什么样的内存.

我想在CUDA中它会固定页面锁定的零拷贝内存.我测量了从ID3D11Texture2Dwith D3D11_USAGE_STAGING到分配的主机缓冲区的传输时间,malloc花了将近7毫秒(在流媒体/游戏中相当多),我认为这将是从GPU全局内存到内存区域所需的时间.

我的任何假设都是正确的吗?什么D3D11_USAGE_STAGING用作GPU内存?

windows directx gpu directx-11

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

结合C++和C.

我试图做一个DirectX教程,但我想用C编写应用程序,而不是用C++编写.所以我用C编写代码,但是当我尝试编译它时,我在"setupD3D"函数中遇到了很多错误.所以我只是将文件重命名为.cpp.但新代码也没有编译.我认为结合C和C++是个问题,或者有许多交叉引用.谁能告诉我这段代码中的问题是什么?

direct3d.h:

#include "main.h"

#ifndef DIRECT3D

#define DIRECT3D

int m_videoCardMemory;
char m_videoCardDescription[128];
ID3D11DeviceContext* m_deviceContext = 0;
D3DXMATRIX m_projectionMatrix;
D3DXMATRIX m_worldMatrix;
D3DXMATRIX m_orthoMatrix;

int setupD3D(BYTE vsync, HWND hwnd, float screenDepth, float screenNear);
void terminateD3D();
void beginScene(float red, float green, float blue, float alpha);
void endScene();

#endif
Run Code Online (Sandbox Code Playgroud)

direct3d.cpp

#include "direct3d.h"
// code
Run Code Online (Sandbox Code Playgroud)

main.h:

#ifndef MAIN_FUNC

#define MAIN_FUNC

#pragma comment(lib, "dxgi.lib")
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dx11.lib")
#pragma comment(lib, "d3dx10.lib")

#include <Windows.h>
#include <dxgi.h>
#include <d3dcommon.h>
#include <d3d11.h>
#include <d3dx10math.h>
#include "direct3d.h"

int …
Run Code Online (Sandbox Code Playgroud)

c c++ directx directx-11

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

在DirectX代码中正确使用ComPtr

我正在编写基于DirectX 11的引擎.所有DirectX Com对象都包装在Microsoft :: WRL :: ComPtr中.但不幸的是,当我在关机时调用ID3D11Debug :: ReportLiveDeviceObjects时,它报告的多于1个对象的引用计数非零.

我很困惑,哪些代码实际上增加了那些引用计数,防止引用最后为零.举个例子,我在我的代码中提供了ID3D11ShaderResourceView的这个示例用法:

ID3D11ShaderResourceView在我的渲染目标类中声明为成员,

Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_pShaderResourceView
Run Code Online (Sandbox Code Playgroud)

它在构造函数中初始化为nullptr:

m_pShaderResourceView(wwNULLPTR)
Run Code Online (Sandbox Code Playgroud)

界面创建如下:

device->CreateShaderResourceView(m_pDXTexture.Get(), &shaderResourceDesc, m_pShaderResourceView.ReleaseAndGetAddressOf()); 
Run Code Online (Sandbox Code Playgroud)

该接口用于GenerateMips函数:

deviceContext->GenerateMips(m_pShaderResourceView.Get());
Run Code Online (Sandbox Code Playgroud)

接口有一个getter函数:

ID3D11ShaderResourceView* GetShaderResourceView() 
{ 
     return m_pShaderResourceView.Get(); 
}
Run Code Online (Sandbox Code Playgroud)

最后在析构函数中重置了接口:

m_pShaderResourceView.Reset();
Run Code Online (Sandbox Code Playgroud)

最后,我在实时对象摘要中获得至少8个引用.

我的问题是:

我的代码的哪一部分实际上增加了引用计数?为什么调用Reset不会使引用为零?可能我错过了什么?

谢谢.

com directx-11

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

标签 统计

directx-11 ×10

directx ×6

c++ ×3

3d ×1

c ×1

c# ×1

com ×1

direct3d11 ×1

directx-10 ×1

gpu ×1

hlsl ×1

resize ×1

sharpdx ×1

spritefont ×1

uwp ×1

winapi ×1

windows ×1

windows-8.1 ×1