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

Anonymous

unregistriert

1

28.07.2003, 12:37

Ratschläge

Hallo,
ich habe letzens mein Programm umgeschrieben und seither funktioniert gar nichts mehr. Jetzt wollte ich mir ein paar Ratschläge einholen, wo überall der Fehler liegen könnte.

Es wird nicht mal mehr der Bildschirm gelöscht. Trotzdem habe ich keinen Fehler und in der Log Datei sind auch keine Vermerke.

Könnte mir evtl. jmd. sagen, wo ich ma schauen sollte, denn ich such mich dumm und dämlich. Wär echt nett.

Thx

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

28.07.2003, 12:59

Sorry, aber so wirst Du sicher nicht zu einer Lösung kommen. Es gibt doch tausende Möglichkeiten, wo der Fehler liegen könnte. Am besten postest Du den gesamten Quelltext hier ins Forum.

Anonymous

unregistriert

3

28.07.2003, 13:51

hm, ok..

Hauptfenster:

Quellcode

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
    WNDCLASSEX  wndclass;
    TCHAR       szAppClass[] = TEXT("FrameWorktest");
    MSG         message;
   
   // Fenster deklarieren
    wndclass.cbSize         = sizeof(WNDCLASSEX);
    wndclass.style          = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc    = MsgProc;
    wndclass.cbClsExtra     = 0;
    wndclass.cbWndExtra     = 0;
    wndclass.hInstance      = hInst;
    wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground  = (HBRUSH)(COLOR_WINDOW);
    wndclass.lpszMenuName   = NULL;
    wndclass.lpszClassName  = szAppClass;
    wndclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    
    if(!(RegisterClassEx(&wndclass)))
        return 0;

    HWND hwnd;
    // create window
    if (!(g_.m_hWndBasic = CreateWindowEx(NULL,
                                szAppClass,
                                "Test",
                                WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                                0,0,
                                GetSystemMetrics(SM_CXSCREEN),
                                GetSystemMetrics(SM_CYSCREEN),
                                NULL,
                                NULL,
                                hInst,
                                NULL)))
        return 0;


Vorschaufenster:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    DWORD dwChild = WS_CHILD | WS_VISIBLE;

    RECT rcWnd;
    GetClientRect(g_.m_hWndBasic, &rcWnd);
    
    if(!(g_.m_hWnd3D = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("static"), NULL,
                                      dwChild| SS_BLACKRECT, 400, 200, 
                                      rcWnd.right  - 400 - 50,
                                      rcWnd.bottom - 200 - 50,
                                      g_.m_hWndBasic,
                                      NULL,
                                      hInst,
                                      NULL)))
    {
        g_.Log("Create Child Window faid\n", 0);
        return 0;
    }




ok, hier wird D3D Initialisiert:

Quellcode

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
    HRESULT hr;

    if(FAILED (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
    {
        g_.Log("Konnte D3D nicht initialisieren",1);
        return FALSE;
    }

    D3DFORMAT               d3dfmt = D3DFMT_UNKNOWN;
    D3DPRESENT_PARAMETERS   D3D_PP;
    memset(&D3D_PP, 0, sizeof(D3D_PP));

    D3D_PP.Windowed                 = TRUE;
    D3D_PP.hDeviceWindow            = g_.m_hWnd3D;
    D3D_PP.SwapEffect               = D3DSWAPEFFECT_DISCARD;
    D3D_PP.BackBufferFormat         = d3dfmt;
    D3D_PP.BackBufferWidth          = GetSystemMetrics(SM_CXSCREEN);
    D3D_PP.BackBufferHeight         = GetSystemMetrics(SM_CYSCREEN);
    D3D_PP.EnableAutoDepthStencil   = true;
    D3D_PP.AutoDepthStencilFormat   = D3DFMT_D16;

    if( FAILED ( g_pD3D->CreateDevice(
                        D3DADAPTER_DEFAULT,
                        D3DDEVTYPE_HAL, g_.m_hWnd3D,
                        D3DCREATE_HARDWARE_VERTEXPROCESSING,
                        &D3D_PP, &g_pDevice)))
    {
        g_.Log("CreateDevice() faid",1);
        return FALSE;
    }



Hier werden die Vertexbuffer initialisiert und anschließend gefüllt:

Quellcode

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
45
46
47
48
49
50
    if(FAILED(g_pDevice->CreateVertexBuffer(3 * 8 * sizeof(VERTEX),
                                            0,
                                            D3DFVF_VERTEX,
                                            D3DPOOL_MANAGED,
                                            &m_VBGrid,
                                            NULL)))
    {
        g_.Log("CreateVertexBuffer failed", LE_ERROR);
        return FALSE;
    }


    if(FAILED(g_pDevice->CreateIndexBuffer(1 * 3 * 2,
                                           0,
                                           D3DFMT_INDEX16,
                                           D3DPOOL_MANAGED,
                                           &m_IBGrid,
                                           NULL)))
    {
        g_.Log("CreateIndexBuffer failed", LE_ERROR);
        return FALSE;
    }


    unsigned short *pusIndizesData = NULL;
    void           *pVertices      = NULL;

    VERTEX   v[3]     = {
        { 25.0f, 25.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(255,   0,   0) },
        { 25.0f, 50.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(  0, 255,   0) },
        { 50.0f, 50.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(  0,   0, 255) }
    };

    
    //Buffer füllen    
    m_VBGrid->Lock(0, 0, (void**)(&pVertices), D3DLOCK_NOSYSLOCK );
        memcpy(pVertices, v, sizeof(v));
    m_VBGrid->Unlock();


    m_IBGrid->Lock(0, 0, (void**)(&pusIndizesData), D3DLOCK_NOSYSLOCK );    
        unsigned short iI[3] = {0, 1, 2 };
        memcpy(pusIndizesData, iI, sizeof(iI));
    m_IBGrid->Unlock();
    

    D3DXMATRIX xView;
    if(!(D3DXMatrixPerspectiveFovLH(&xView, 0.8f, 800/600, 0.5f, 1000.0f)))
        return FALSE;
    g_pDevice->SetTransform(D3DTS_PROJECTION, &xView);



Hier wird gerendert:

Quellcode

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
    InitScene();

    if( FAILED (g_pDevice->Clear(0, NULL,
                     D3DCLEAR_TARGET  |
                     D3DCLEAR_ZBUFFER,
                     D3DCOLOR_XRGB(255,0,0),
                     1.0f, 0)))
    {
        g_.Log("Clear() failed", LE_ERROR);
        return FALSE;
    }
    
    g_pDevice->SetFVF(D3DFVF_VERTEX);

    g_pDevice->SetStreamSource(0, m_VBGrid, 0, sizeof(VERTEX));
    g_pDevice->SetIndices(m_IBGrid);

    g_pDevice->BeginScene();
        
    if( FAILED( g_pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,
                                                0, 0, 2, 0, 1)))
    {
        g_.Log("Draw() failed", LE_ERROR);
        return FALSE;
    }

    g_pDevice->EndScene();



Und das is die Funktion InitScene()

Quellcode

1
2
    g_pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    g_pDevice->SetRenderState(D3DRS_ZENABLE,  D3DZB_FALSE);



Das Vorschaufenster bleibt leider so komisch grau und wird nicht mit der Farbe 255, 0, 0 gefüllt. :(


Vielen Dank im Voraus !!

4

28.07.2003, 14:28

Ich sehe nirgens g_pDevice->Present.
Kann aber auch sein das ich blind bin!

Werbeanzeige