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

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 087

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

11

05.11.2007, 17:40

ok THX!
Habs wohl übersehen^^

mfg
BRWeiden
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 087

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

12

05.11.2007, 18:09

Kann ich jetz eigentlich nun den Auflösungs-Teil aus der TriBase in Breakanoid einkopieren und die Device neuladen?

oder muss ich sonst noch was beachten?

Will mir ja nicht gleich den ganzen Quelltext versauen^^

mfg
BRWeiden
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

13

05.11.2007, 19:32

schau dir den config dialog mal etwas näher an. da zeigt mr. D, wie man solche sachen ausließt... ;)

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 087

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

14

05.11.2007, 20:26

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
45
46
47
48
49
50
51
52
53
// Abzählen der Videomodi des Adapters und des Gerätetyps

tbResult EnumVideoModes(HWND hDlg)
{
    int             iSelectedAdapter;
    int             iNumVideoModes;
    D3DFORMAT       aFormat[] = {D3DFMT_X8R8G8B8, D3DFMT_R8G8B8, D3DFMT_R5G6B5, D3DFMT_X1R5G5B5};
    D3DDISPLAYMODE* pVideoMode;
    char            acFormatString[256];
    char            acVideoModeString[256];
    int             iIndex;


    // Gewählten Adapter abfragen

    iSelectedAdapter = (int)(SendDlgItemMessage(hDlg, TB_IDC_D3DC_ADAPTERS, CB_GETCURSEL, 0, 0));

    // Liste der Videomodi leeren

    DeleteListData(hDlg, TB_IDC_D3DC_VIDEO_MODES);

    // Anzahl der verfügbaren Videomodi erfragen.

    // Wir gehen dabei Format für Format durch.

    for(int iFormat = 0; iFormat < 4; iFormat++)
    {
        iNumVideoModes = g_pD3DTemp->GetAdapterModeCount(iSelectedAdapter, aFormat[iFormat]);

        // Jeden Videomodus durchgehen und Informationen über ihn abfragen

        for(int iVideoMode = 0; iVideoMode < iNumVideoModes; iVideoMode++)
        {
            // Speicher für diesen Videomodus reservieren

            pVideoMode = (D3DDISPLAYMODE*)(tbMemAlloc(sizeof(D3DDISPLAYMODE)));

            // Informationen abfragen

            g_pD3DTemp->EnumAdapterModes(iSelectedAdapter, aFormat[iFormat], iVideoMode, pVideoMode);

            // Textbeschreibung für diesen Videomodus generieren

            tbGetD3DFormatString(pVideoMode->Format, acFormatString);
            if(pVideoMode->RefreshRate != 0) sprintf(acVideoModeString, "%d x %d (%s, %d Hz)", pVideoMode->Width, pVideoMode->Height, acFormatString, pVideoMode->RefreshRate);
            else sprintf(acVideoModeString, "%d x %d (%s)", pVideoMode->Width, pVideoMode->Height, acFormatString);
            
            // Einen neuen Listeneintrag anlegen

            iIndex = (int)(SendDlgItemMessage(hDlg, TB_IDC_D3DC_VIDEO_MODES, CB_ADDSTRING,
                                              0, (LPARAM)(acVideoModeString)));

            // Daten dem Eintrag zuweisen

            SendDlgItemMessage(hDlg, TB_IDC_D3DC_VIDEO_MODES, CB_SETITEMDATA,
                               iIndex, (LPARAM)(pVideoMode));
        }
    }

    // Ersten Videomodus auswählen

    SendDlgItemMessage(hDlg, TB_IDC_D3DC_VIDEO_MODES, CB_SETCURSEL, 7, 0);

    return TB_OK;
}


so das is glaube ich der Ausschnitt^^
habe bei mir in der ersten for Schleife schon mal iformat auf 1 gesetzt, damit man nur "die normalen" Auflösungen bekommt...

kann ich diesen Quelltext einfach so in Breakanoid übernehmen und dan einfach nur die device neu laden :shock: ?
klar die Liste kann man sich "optisch" ersparen, aber vom Prinzip her, allso, das nur der Spieler diese Daten auswählt...
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 087

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

15

05.11.2007, 20:43

huch hab was übesehen :oops:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    // Präsentationsstruktur ausfüllen

    ZeroMemory(&PresentParams, sizeof(D3DPRESENT_PARAMETERS));
    PresentParams.BackBufferWidth               = pConfig->Direct3D.VideoMode.Width;
    PresentParams.BackBufferHeight              = pConfig->Direct3D.VideoMode.Height;
    PresentParams.BackBufferFormat              = pConfig->Direct3D.BackBufferFormat;
    PresentParams.BackBufferCount               = 1;
    PresentParams.MultiSampleType               = pConfig->Direct3D.MultiSamplingType;
    PresentParams.MultiSampleQuality            = pConfig->Direct3D.dwMultiSamplingQuality;
    PresentParams.SwapEffect                    = D3DSWAPEFFECT_DISCARD;
    PresentParams.hDeviceWindow                 = m_hWindow;
    PresentParams.Windowed                      = pConfig->Direct3D.bWindowed;
    PresentParams.EnableAutoDepthStencil        = TRUE;
    PresentParams.AutoDepthStencilFormat        = pConfig->Direct3D.ZStencilBufferFormat;
    PresentParams.Flags                         = pConfig->Direct3D.ZStencilBufferFormat != D3DFMT_D16_LOCKABLE ? D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL : 0;
    PresentParams.FullScreen_RefreshRateInHz    = pConfig->Direct3D.bWindowed ? D3DPRESENT_RATE_DEFAULT : pConfig->Direct3D.VideoMode.RefreshRate;
    PresentParams.PresentationInterval          = pConfig->Direct3D.bVSync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE;

    // Und nun die Geräteschnittstelle generieren

    if(FAILED(hResult = m_pD3D->CreateDevice(pConfig->Direct3D.iAdapter,
                                             pConfig->Direct3D.DeviceType,
                                             m_hWindow,
                                             pConfig->Direct3D.dwFlags,
                                             &PresentParams,
                                             &m_pD3DDevice)))
    {
        // Fehler beim Generieren der Schnittstelle!

        TB_ERROR_DIRECTX("m_pD3D->CreateDevice", hResult, TB_ERROR);
    }

    // Parameter eintragen

    m_PresentParams = PresentParams;

    // Die Gerätefähigkeiten abfragen und den aktuellen Status speichern

    m_pD3DDevice->GetDeviceCaps(&m_Caps);
    Capture();

    // Cursor im Vollbildmodus ausblenden

    if(!pConfig->Direct3D.bWindowed) ShowCursor(FALSE);

    // Standardeinstellungen

    SetFVF(D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1);
    SetRS(D3DRS_DITHERENABLE, TRUE);
    for(DWORD dwStage = 0; dwStage < m_Caps.MaxTextureBlendStages; dwStage++)
    {
        if(m_Caps.PrimitiveMiscCaps & D3DPTFILTERCAPS_MINFANISOTROPIC) SetSS(dwStage, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);
        else SetSS(dwStage, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
        if(m_Caps.PrimitiveMiscCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) SetSS(dwStage, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
        else SetSS(dwStage, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        SetSS(dwStage, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
        SetSS(dwStage, D3DSAMP_MAXANISOTROPY, m_Caps.MaxAnisotropy);
    }

    m_vScreenSize.x = (float)(PresentParams.BackBufferWidth);
    m_vScreenSize.y = (float)(PresentParams.BackBufferHeight);

    TB_INFO("Die Initialisierung der Direct3D-Komponente ist abgeschlossen!");

    m_PresentResult = TB_OK;
    m_bInitialized = TRUE;

    return TB_OK;
}


glaube hier braucht man nur m_vScreenSize.x und m_vScreenSize.y eingene Werte zu übergeben oder?

mfg
BRWeiden
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

16

05.11.2007, 22:00

also ich sehe das problem jetzt nicht ganz.
du musst die device neu erstellen. das sollte ja nun nicht so schwer sein.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    // Fill out swapchaindesc

    ZeroMemory(&_swapChainDesc, sizeof(_swapChainDesc));
    _swapChainDesc.BufferCount                          = 1;
    _swapChainDesc.BufferDesc.Width                     = _windowWidth;
    _swapChainDesc.BufferDesc.Height                    = _windowHeight;
    _swapChainDesc.BufferDesc.Format                    = DXGI_FORMAT_R8G8B8A8_UNORM;
    _swapChainDesc.BufferDesc.RefreshRate.Numerator     = 60;
    _swapChainDesc.BufferDesc.RefreshRate.Denominator   = 1;
    _swapChainDesc.BufferUsage                          = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    _swapChainDesc.OutputWindow                         = _windowHandle;
    _swapChainDesc.SampleDesc.Count                     = 1;
    _swapChainDesc.SampleDesc.Quality                   = 0;
    _swapChainDesc.Windowed                             = !_fullScreen;

    // Create swapchain and device

    if(FAILED(D3D10CreateDeviceAndSwapChain(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, NULL, D3D10_SDK_VERSION, &_swapChainDesc, &_d3d10SwapChain, &_d3d10Device)))
        return bD3DDeviceSwapChainCouldNotCreated;

das ist code aus meiner engine, die noch nicht den fortschirtt erreicht hat, wie man erkennen kann. aber du rufts einfach die createdevice funktion auf. vorher natürlich beeden ;)
und das fenster auch noch anpassen. also das fenster neuerstellen. ob das nun notwendig ist weiß ich nicht genau, aber ich habe es so gelöst.

du werte kannste rein logisch so auslesen, wie david es gemacht hat. musst nur schauen das du ausgelesenden werte irgendwie in ein stringformat wandelst, was du in einelistbox oder so einfügen kannst. so kann der user wählen, di convertierst zurück und erstellst dann alles von neu...

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 087

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

17

06.11.2007, 08:27

ok thx probiere es mal!

mfg
BRWeiden
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 087

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

18

06.11.2007, 15:18

ohh DX 10^^

ich glaube deinen quelltext kann ich nicht nehemen...

aber mache es identisch in DX9...
darf ich den Werten windowWidth und WindowHeight eigene werte übergeben? also zb. dierekt Zahlen verwenden wie 1024 und 800 oder mit integer werten?

mfg
BRWeiden
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

19

06.11.2007, 18:45

1024 und 800 wäre integer ;) .
jo, das ist meine manuel zuweisung. ich arbeite gerade an dem config dialog. diese sachen werden später noch mit anderen variablen ersetzt.
mit dx9 kannst du das ähnlich machen. dort ist es sogar einfacher, weil der viewport gleich miterstelle wird. in dx10 musste den manuel setzen.

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 087

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

20

06.11.2007, 19:47

cool THX!

wenn du deine Config fertig hast, könntest du die auch hier rein stellen?

nur eins istmir immer noch nicht klar:
an welcher stelle wird die device runtergefahren?
in TB find ich zig punkte, wo auf i-welche device zugegriffen wird, aber nit wo sie runtergefahren werden...
ich muss ja die nämlich doch zu erst runterfahren oder?

mfg
BRWeiden
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

Werbeanzeige