Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

1

31.07.2013, 18:11

Unbehandelte Ausnahme bei 0x6251025F (d3d11.dll)

Hallo,
nach langem hin und her hats mich jetzt wiedermal zu DirectX verschlagen.
Irgendwie scheint ein Fluch auf mir zu liegen ich schaffe es nämlich mit jedem neuen DirectX-Projekt andere Fehler zu bekommen.
Diesmal taucht ein Laufzeitfehler auf sobald ich IASetVertexBuffers in meiner Triangle->Draw funktion aufrufe.
Der Hefler lautet "Unbehandelte Ausnahme bei 0x6251025F (d3d11.dll)".
Im debugger sieht alles ganz ok aus ausser dass bei d3dContext bei __vfptr {d3d11.dll! 0x6251616a} steht.
Das ganze ist schwer zu erklären also hier ein Bild:

(Link)


Hier noch etwas Quellcode:
Main.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <Windows.h>

#include "RenderSystem.hpp"
#include "SimpleShader.hpp"
#include "Triangle.hpp"

LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );


int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE prevInstance, LPWSTR cmdLine, int cmdShow )
{
    RenderSystem *renderSystem = new RenderSystem;

    if(!renderSystem->Initialize(hInstance, hWnd))
        return 0;

    SimpleShader *simpleShader = new SimpleShader;

    if(!simpleShader->Initialize(renderSystem->getDevice()))
        return 0;

    Triangle *triangle = new Triangle;
    if(!triangle->Load(renderSystem->getDevice()))
        return 0;

    //MainLoop
    MSG msg = {0};

    while(msg.message != WM_QUIT)
    {
        if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        
        //Update
        //Render
        renderSystem->Clear();
        triangle->Draw(renderSystem->getDeviceContext());
        simpleShader->Render(renderSystem->getDeviceContext(), 3);
        renderSystem->Present();
    }
}

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
bool Triangle::Load(ID3D11Device *d3dDevice)
{
    Vertex vertices[] =
    {
        XMFLOAT3(0.5f, 0.5f, 0.5f ),
        XMFLOAT3(0.5f, -0.5f, 0.5f ),
        XMFLOAT3(-0.5f, -0.5f, 0.5f )
    };

    D3D11_BUFFER_DESC vertexDesc;
    ZeroMemory(&vertexDesc, sizeof(vertexDesc));
    vertexDesc.Usage = D3D11_USAGE_DEFAULT;
    vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    vertexDesc.ByteWidth = sizeof(Vertex) * 3;

    D3D11_SUBRESOURCE_DATA resourceData;
    ZeroMemory( &resourceData, sizeof(resourceData));
    resourceData.pSysMem = vertices;

    HRESULT result = d3dDevice->CreateBuffer(&vertexDesc, &resourceData, &vertexBuffer);

    if(FAILED(result))
        return false;

    return true;
}

C-/C++-Quelltext

1
2
3
4
5
6
7
void Triangle::Draw(ID3D11DeviceContext * d3dDeviceContext)
{
    UINT stride = sizeof(Vertex);

    d3dDeviceContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, 0); //Hier tritt der Fehler auf
    d3dDeviceContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
}


Es tut mir echt leid dass ich hier jede Woche mit einem neuen Problem ankomme, aber danke schonmal für jeden der sich die mühe macht sich dieses Problem anzuschauen. :/
Der Error sitzt meistens vor dem Bildschirm! :D

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Crazy007« (31.07.2013, 21:05)


2

31.07.2013, 18:31

Versuch mal das:

C-/C++-Quelltext

1
2
3
4
5
6
7
void Triangle::Draw(ID3D11DeviceContext * d3dDeviceContext) 
{ 
     UINT stride = sizeof(Vertex); 
     UINT offset = 0; 
     d3dDeviceContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset); 
     d3dDeviceContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); 
}


Beim Offset wird ein Pointer erwartet, der kein nullptr (bzw. NULL oder 0) sein darf -> daher die unbehandelte Ausnahme.

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

3

31.07.2013, 21:04

Danke vielmals! Hat funktioniert!
Jedoch wird mir kein dreieck angezeigt!
Welche Gründe könnte das haben?

EDIT: Habs gelöst! Danke nochmals!
Der Error sitzt meistens vor dem Bildschirm! :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Crazy007« (31.07.2013, 21:10)


Werbeanzeige