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

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

1

26.03.2014, 10:41

Probleme mit D3DX11CreateEffectFromMemory [Gelößt]

Liebe leser

Ich erstelle grade ein kleines Test Programm, das mit DirectX 11 Läuft und ein Dreieck zeichnen soll. Es Arbeitet mit meinem kleinem Framework, was ich nebenbei erstelle. Jedoch läuft nur Direct3D über das Framework. Effekt und Vertex Buffer werden manuel im Hauptprogramm erstellt.

Es geht um die Funktion "D3DX11CreateEffectFromMemory".
Hier ist die Funktion, die einen Effekt erstellt.


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
    TF_Direct3D11 &D3D = TF_Direct3D11::instance();


DWORD shaderFlags = 0;
#if defined( DEBUG ) || defined( _DEBUG )
    shaderFlags |= D3D10_SHADER_DEBUG;
    shaderFlags |= D3D10_SHADER_SKIP_OPTIMIZATION;
#endif

    ID3D10Blob* compiledShader = 0;
    ID3D10Blob* compilationMsgs = 0;
    HRESULT hr = D3DX11CompileFromFile(L"color.fx", 0, 0, 0, "fx_5_0", shaderFlags, 
        0, 0, &compiledShader, &compilationMsgs, 0);


    if( compilationMsgs != 0 )
    {
        MessageBoxA(0, (char*)compilationMsgs->GetBufferPointer(), 0, 0);
        compilationMsgs->Release();
        return TF_ERROR;
    }

    // Even if there are no compilationMsgs, check to make sure there were no other errors.
    if(FAILED(hr))
    {
        DXTrace(__FILE__, (DWORD)__LINE__, hr, L"D3DX11CompileFromFile", true);
        return TF_ERROR;
    }

    HR(D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 
        0, TF_Direct3D11::instance().GetDevice(), &mFX));

    mTech    = mFX->GetTechniqueByName("ColorTech");
    mfxWorldViewProj = mFX->GetVariableByName("gWorldViewProj")->AsMatrix();

        return TF_OK;




Es kommt immer wieder die Meldung
"Unbehandelte Ausnahme bei 0x0024578f in D3D_Test_DEBUG.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00000008."

Die Meldung zeigt auf folgenden Codeteil in der D3DX11CreateEffectFromMemory Funktion

C-/C++-Quelltext

1
 VN( *ppEffect = NEW CEffect( FXFlags & D3DX11_EFFECT_RUNTIME_VALID_FLAGS) );


Ich bin mir sicher, dass D3D11 korrekt initialisiert wurde, weil im Debugger keine Fehlermeldung erscheint, und weil ich problemlos den Backpuffer Lehren kann. (DeviceContex->Clear...)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sebastian Müller« (26.03.2014, 12:15)


  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

2

26.03.2014, 12:15

Ohhh Entschuldigung.


Ich hatte vergessen, die Anwendungsklasse zu initialisieren. im Debugger war alles Rot.

Ich habe es gelöst.

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

3

26.03.2014, 17:47

Bennene deine Shader mal in *.hlsl um.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

4

26.03.2014, 22:51

Warum ???

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

5

07.05.2014, 15:56

Ich glaube du bekommst Probleme wenn du das Programm mit Visual Studio 2012 / 2013 starten willst. Ich musste die Files alle umbenennen und explizit angeben welche Methode er im Shader aufrufen soll. Die Endung .cso sollte auch gehen. Aber da du das Problem schon lange gelöst hast ist es auch egal. :-D

Werbeanzeige