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
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; } |
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; } |
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; |
Werbeanzeige