Question

J'utilise DirectX11.1 dans Visual Studio 2013, développant une application Windows 8 Store.

J'essaie quelques jours pour avoir la tête autour de la création d'une interface utilisateur 2D à l'aide de DirectX, et tout comme je pensais que je pourrais l'avoir, je rencontre une exception non heurtée que je ne peux pas sembler Shake.

"Exception non confondue à 0x002e2901 dans First.exe: 0xc0000005: Emplacement de lecture de violation d'accès 0x00000000."

mise à jour: il semble qu'après «D2DFactory-> crééevice (DXGidevice.get (get (), & Dev2D); ' Dev2D sort comme null.

Mise à jour: Utiliser HRESULT La méthode Create Device donne l'erreur "e_invalidarg".

(Je suis suivi http:// msdn. microsoft.com/en-us/library/windows/apps/hh780340.aspx )

ci-dessous est mon code de l'en-tête et du fichier .cpp. Je n'ai rien inclus dans la création d'un ID2D1Devicecontex, car c'est là que l'erreur se pose (ce n'est que lorsque j'inclus que l'exception se produit.

.h

#pragma once

#include <d2d1.h>
#include <d2d1_1.h>
#include "DeviceResources.h"
#include "DirectXHelper.h"

using namespace Microsoft::WRL;
using namespace Windows::UI::Core;
using namespace Platform;
using namespace DirectX;

class CGame
{public:
ComPtr<ID3D11Device1> dev;                      // the device interface
ComPtr<ID3D11DeviceContext1> devcon;            // the device context interface
ComPtr<IDXGISwapChain1> swapchain;              // the swap chain interface
ComPtr<ID3D11RenderTargetView> rendertarget;    // the render target interface
ComPtr<ID3D11Buffer> vertexbuffer;              // the vertex buffer interface
ComPtr<ID3D11Buffer> vertexbuffer2;   //For triangle
ComPtr<ID3D11Buffer> vertexbuffer3;   //For laser
ComPtr<ID3D11Buffer> vertexbuffer4;   //ship 2

ComPtr<ID3D11VertexShader> vertexshader;        // the vertex shader interface
ComPtr<ID3D11PixelShader> pixelshader;          // the pixel shader interface
ComPtr<ID3D11InputLayout> inputlayout;          // the input layout interface


//2D Stuff
ComPtr<IDXGISurface> dxgiBackBuffer;
ComPtr<ID2D1Factory1> d2dFactory;
ComPtr<ID2D1Device> dev2d;
ComPtr<ID2D1DeviceContext> devcon2d;

ComPtr<ID2D1Bitmap1> targetBitmap;
ComPtr<ID2D1SolidColorBrush> pBlackBrush;

fichier .cpp

    #include "pch.h"
#include "Game.h"
#include <fstream>
#include <process.h>



// Use some common namespaces to simplify the code
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Core;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::UI::Core;
using namespace Windows::UI::Popups;
using namespace Windows::System;
using namespace Windows::Foundation;
using namespace Windows::Graphics::Display;
using namespace Platform;
using namespace std;


    // this function initializes and prepares Direct3D for use
void CGame::Initialize()
{
    // Define temporary pointers to a device and a device context
    ComPtr<ID3D11Device> dev11;
    ComPtr<ID3D11DeviceContext> devcon11;

    //Create Factory ID2D1Factory1
    D2D1CreateFactory(
        D2D1_FACTORY_TYPE_SINGLE_THREADED,
        __uuidof(ID2D1Factory1),
        0,
        &d2dFactory
        );

    // Create 3D device and device context objects
    D3D11CreateDevice(
        nullptr,
        D3D_DRIVER_TYPE_HARDWARE,
        nullptr,
        0,
        nullptr,
        0,
        D3D11_SDK_VERSION,
        &dev11,
        nullptr,
        &devcon11);

    // Convert the pointers from the DirectX 11 versions to the DirectX 11.1 versions
    dev11.As(&dev);
    devcon11.As(&devcon);


    // obtain the DXGI factory
    ComPtr<IDXGIDevice1> dxgiDevice;
    dev.As(&dxgiDevice);
    ComPtr<IDXGIAdapter> dxgiAdapter;
    dxgiDevice->GetAdapter(&dxgiAdapter);
    ComPtr<IDXGIFactory2> dxgiFactory;
    dxgiAdapter->GetParent(__uuidof(IDXGIFactory2), &dxgiFactory);

    //Create an ID2D1Device and an ID2D1DeviceContex
    d2dFactory->CreateDevice(dxgiDevice.Get(), &dev2d);

    DX::ThrowIfFailed(
        dev2d->CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS_NONE,
        &devcon2d
        )
        ); 

Toute aide serait grandement appréciée et, au cas où il y a une raison quelconque de voir le code qui suit:

// set up the swap chain description
    DXGI_SWAP_CHAIN_DESC1 scd = { 0 };
    scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;    // how the swap chain should be used
    scd.BufferCount = 2;                                  // a front buffer and a back buffer
    scd.Format = DXGI_FORMAT_B8G8R8A8_UNORM;              // the most common swap chain format
    scd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;    // the recommended flip mode
    scd.SampleDesc.Count = 1;                             // disable anti-aliasing

    CoreWindow^ Window = CoreWindow::GetForCurrentThread();    // get the window pointer

    // create the swap chain
    dxgiFactory->CreateSwapChainForCoreWindow(
        dev.Get(),                                  // address of the device
        reinterpret_cast<IUnknown*>(Window),        // address of the window
        &scd,                                       // address of the swap chain description
        nullptr,                                    // advanced
        &swapchain);                                // address of the new swap chain pointer

    // get a pointer directly to the back buffer
    ComPtr<ID3D11Texture2D> backbuffer;
    swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), &backbuffer);

    // create a render target pointing to the back buffer
    dev->CreateRenderTargetView(backbuffer.Get(), nullptr, &rendertarget);

    //Set up Direct2D render target bitmap, linking it to the swapchain
    D2D1_PIXEL_FORMAT pixelFormat = { DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED };

    D2D1_BITMAP_PROPERTIES1 bitmapProperties =
    {   pixelFormat,
        0,
        0,
        D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,
        0,
    };

    //Direct2D needs the dxgi version of the backbuffer surface pointer
    swapchain->GetBuffer(0, IID_PPV_ARGS(&dxgiBackBuffer));

    //Get a D2D surface from the DXGI back buffer to use as the D2D render target.
    devcon2d->CreateBitmapFromDxgiSurface(
        dxgiBackBuffer.Get(),
        &bitmapProperties,
        &targetBitmap
        );

    //Now we can set the Direct2D render target
    devcon2d->SetTarget(targetBitmap.Get());



    //Create a brush for 2D
    devcon2d->CreateSolidColorBrush(
        D2D1::ColorF(D2D1::ColorF::Black),
        &pBlackBrush);

    // set the viewport
    D3D11_VIEWPORT viewport = { 0 };

    viewport.TopLeftX = 0;
    viewport.TopLeftY = 0;
    viewport.Width = Window->Bounds.Width;
    viewport.Height = Window->Bounds.Height;

    devcon->RSSetViewports(1, &viewport);

mise à jour:

La sortie suivante suivante est la suivante: (Il existe une sortie d'erreur similaire à celle-ci autour de Stackoverflow, bien qu'elle semble très non résolue.

'First.exe' (Win32): Loaded 'C:\Users\Alec\Documents\Visual Studio 2013\Projects\First\Debug\First\AppX\First.exe'. Symbols loaded.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d2d1.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d3d11.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dxgi.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\DWrite.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00.Debug_12.0.21005.1_x86__8wekyb3d8bbwe\vccorlib120d_app.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00.Debug_12.0.21005.1_x86__8wekyb3d8bbwe\msvcp120d_app.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00.Debug_12.0.21005.1_x86__8wekyb3d8bbwe\msvcr120d_app.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\combase.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\gdi32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\oleaut32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcryptprimitives.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\imm32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msctf.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel.appcore.dll'. Cannot find or open the PDB file.
The thread 0x22c0 has exited with code 0 (0x0).
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\twinapi.appcore.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\WinTypes.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\SHCore.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptsp.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rsaenh.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcrypt.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\uxtheme.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\actxprxy.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\MrmCoreR.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\BCP47Langs.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\Windows.UI.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ninput.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dwmapi.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\igd10umd32.dll'. Cannot find or open the PDB file.
'First.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Cannot find or open the PDB file.

Était-ce utile?

La solution

s'avère que je n'avais pas créé mon appareil D3D11 pour être compatible avec Direct2D.Le code ci-dessous fixe-le.Merci à Trillian pour l'aide au débogage, était incroyablement utile.

// This flag adds support for surfaces with a different color channel ordering than the API default.
    // You need it for compatibility with Direct2D.
    UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;

    // This array defines the set of DirectX hardware feature levels this app  supports.
    // The ordering is important and you should  preserve it.
    // Don't forget to declare your app's minimum required feature level in its
    // description.  All apps are assumed to support 9.1 unless otherwise stated.
    D3D_FEATURE_LEVEL featureLevels[] =
    {
        D3D_FEATURE_LEVEL_11_1,
        D3D_FEATURE_LEVEL_11_0,
        D3D_FEATURE_LEVEL_10_1,
        D3D_FEATURE_LEVEL_10_0,
        D3D_FEATURE_LEVEL_9_3,
        D3D_FEATURE_LEVEL_9_2,
        D3D_FEATURE_LEVEL_9_1
    };

    D3D_FEATURE_LEVEL m_featureLevel;

    // Create 3D device and device context objects
    D3D11CreateDevice(
        nullptr,
        D3D_DRIVER_TYPE_HARDWARE,
        nullptr,
        creationFlags,
        featureLevels,
        ARRAYSIZE(featureLevels),
        D3D11_SDK_VERSION,
        &dev11,
        &m_featureLevel,
        &devcon11);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top