Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法从空资源创建RenderTargetView_C++_C_Visual C++_Directx - Fatal编程技术网

C++ 无法从空资源创建RenderTargetView

C++ 无法从空资源创建RenderTargetView,c++,c,visual-c++,directx,C++,C,Visual C++,Directx,我正在尝试创建渲染目标视图,但从direct X获得此错误 A RenderTargetView cannot be created from a NULL Resource 据我所知,在传递rendertarget指针之前,似乎必须用数据填充它。但我很难弄清楚怎么做。以下是我的声明和执行情况 声明 #pragma once #include "stdafx.h" #include "resource.h" #include "d3d10.h" #include "d3dx10.h" #in

我正在尝试创建渲染目标视图,但从direct X获得此错误

 A RenderTargetView cannot be created from a NULL Resource
据我所知,在传递rendertarget指针之前,似乎必须用数据填充它。但我很难弄清楚怎么做。以下是我的声明和执行情况

声明

#pragma once
#include "stdafx.h"
#include "resource.h"
#include "d3d10.h"
#include "d3dx10.h"
#include "dinput.h"


#define MAX_LOADSTRING 100

class RenderEngine {
protected:

    RECT m_screenRect;

    //direct3d Members
    ID3D10Device *m_pDevice; // The IDirect3DDevice10
    // interface
    ID3D10Texture2D *m_pBackBuffer; // Pointer to the back buffer
    ID3D10RenderTargetView *m_pRenderTargetView; // Pointer to render target view
    IDXGISwapChain *m_pSwapChain; // Pointer to the swap chain
    RECT m_rcScreenRect; // The dimensions of the screen

    ID3DX10Font *m_pFont; // The font used for rendering text
    // Sprites used to hold font characters
    ID3DX10Sprite *m_pFontSprite;

    ATOM RegisterEngineClass();
    void Present();

public:
    static HINSTANCE m_hInst;
    HWND m_hWnd;
    int m_nCmdShow;
    TCHAR m_szTitle[MAX_LOADSTRING];                    // The title bar text
    TCHAR m_szWindowClass[MAX_LOADSTRING];          // the main window class name

    void DrawTextString(int x, int y, D3DXCOLOR color, const TCHAR *strOutput);

    //static functions
    static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
    static INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

    bool InitWindow();
    bool InitDirectX();
    bool InitInstance();
    int Run();

    RenderEngine()
    {
        m_screenRect.right = 800;
        m_screenRect.bottom = 600;
    }

};
我的实现

bool RenderEngine::InitDirectX()
{   
    //potential error. You did not set to zero memory and you did not set the scaling property
    DXGI_MODE_DESC bd;
    bd.Width                    = m_screenRect.right;
    bd.Height                   = m_screenRect.bottom;
    bd.Format                   = DXGI_FORMAT_R8G8B8A8_UNORM;
    bd.RefreshRate.Numerator    = 60;
    bd.RefreshRate.Denominator  = 1;

    DXGI_SAMPLE_DESC sd;
    sd.Count = 1;
    sd.Quality = 0;

    DXGI_SWAP_CHAIN_DESC swapDesc;
    ZeroMemory(&swapDesc, sizeof(swapDesc));

    swapDesc.BufferDesc     = bd;
    swapDesc.SampleDesc     = sd;
    swapDesc.BufferUsage    = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    swapDesc.OutputWindow   = m_hWnd;
    swapDesc.BufferCount    = 1;
    swapDesc.SwapEffect     = DXGI_SWAP_EFFECT_DISCARD,
    swapDesc.Windowed       = true;
    swapDesc.Flags          = 0;

    HRESULT hr;

    hr = D3D10CreateDeviceAndSwapChain(NULL,
        D3D10_DRIVER_TYPE_HARDWARE, 
        NULL, 
        D3D10_CREATE_DEVICE_DEBUG,
        D3D10_SDK_VERSION ,
        &swapDesc, &m_pSwapChain, &m_pDevice);

    if(FAILED(hr))
        return false;

    // Create a render target view
    hr = m_pDevice->CreateRenderTargetView(
                    m_pBackBuffer, NULL, &m_pRenderTargetView); // FAILS RIGHT HERE
    //

    if(FAILED(hr))
        return false;



    return true;
}

我明白了。我忘了先检索缓冲区。打电话

m_pSwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*) &m_pBackBuffer);
然后我将缓冲区传递到render target view方法中