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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
bool CGame::InitDirect3D() { //Buffer der Swapchain DXGI_MODE_DESC BufferDesc; ZeroMemory(&BufferDesc, sizeof(BufferDesc)); BufferDesc.Width = ResX; BufferDesc.Height = ResY; BufferDesc.RefreshRate.Numerator = 60; BufferDesc.RefreshRate.Denominator = 1; BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; // //Swapchain DXGI_SWAP_CHAIN_DESC SwapChainDesc; ZeroMemory(&SwapChainDesc, sizeof(SwapChainDesc)); SwapChainDesc.BufferDesc = BufferDesc; SwapChainDesc.SampleDesc.Count = 1; SwapChainDesc.SampleDesc.Quality = 0; SwapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; SwapChainDesc.BufferCount = 1; SwapChainDesc.OutputWindow = hWnd; SwapChainDesc.Windowed = true; SwapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; // //DXGI Factory IDXGIFactory1* DXGIFactory; hr = CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&DXGIFactory); IDXGIAdapter1* Adapter; hr = DXGIFactory->EnumAdapters1(0, &Adapter); DXGIFactory->Release(); //Swap Chain Erstellen hr = D3D11CreateDeviceAndSwapChain(Adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, D3D11_CREATE_DEVICE_BGRA_SUPPORT, NULL, NULL, D3D11_SDK_VERSION, &SwapChainDesc, &SwapChain, &D3D11Device, NULL, &D3D11DevCon); // //2D InitDirect2D(Adapter); // Adapter->Release(); hr = SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&BackBuffer11); hr = D3D11Device->CreateRenderTargetView(BackBuffer11, NULL, &RenderTargetView); // //Depth/Stencil Buffer D3D11_TEXTURE2D_DESC DepthStencilDesc; ZeroMemory(&DepthStencilDesc, sizeof(DepthStencilDesc)); DepthStencilDesc.Width = ResX; DepthStencilDesc.Height = ResY; DepthStencilDesc.MipLevels = 1; DepthStencilDesc.ArraySize = 1; DepthStencilDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; DepthStencilDesc.SampleDesc.Count = 1; DepthStencilDesc.SampleDesc.Quality = 0; DepthStencilDesc.Usage = D3D11_USAGE_DEFAULT; DepthStencilDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; DepthStencilDesc.CPUAccessFlags = 0; DepthStencilDesc.MiscFlags = 0; D3D11Device->CreateTexture2D(&DepthStencilDesc, NULL, &DepthStencilBuffer); D3D11Device->CreateDepthStencilView(DepthStencilBuffer, NULL, &DepthStencilView); // return true; } bool CGame::InitDirect2D(IDXGIAdapter1* Adapter) { //Create our Direc3D 10.1 Device/////////////////////////////////////////////////////////////////////////////////////// hr = D3D10CreateDevice1(Adapter, D3D10_DRIVER_TYPE_HARDWARE, NULL, D3D10_CREATE_DEVICE_BGRA_SUPPORT, D3D10_FEATURE_LEVEL_9_3, D3D10_1_SDK_VERSION, &D3D101Device); //Create Shared Texture that Direct3D 10.1 will render on////////////////////////////////////////////////////////////// D3D11_TEXTURE2D_DESC sharedTexDesc; ZeroMemory(&sharedTexDesc, sizeof(sharedTexDesc)); sharedTexDesc.Width = ResX; sharedTexDesc.Height = ResY; sharedTexDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; sharedTexDesc.MipLevels = 1; sharedTexDesc.ArraySize = 1; sharedTexDesc.SampleDesc.Count = 1; sharedTexDesc.Usage = D3D11_USAGE_DEFAULT; sharedTexDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; sharedTexDesc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX; hr = D3D11Device->CreateTexture2D(&sharedTexDesc, NULL, &SharedTex11); // Get the keyed mutex for the shared texture (for D3D11)/////////////////////////////////////////////////////////////// hr = SharedTex11->QueryInterface(__uuidof(IDXGIKeyedMutex), (void**)&KeyedMutex11); // Get the shared handle needed to open the shared texture in D3D10.1/////////////////////////////////////////////////// IDXGIResource *sharedResource10; HANDLE sharedHandle10; hr = SharedTex11->QueryInterface(__uuidof(IDXGIResource), (void**)&sharedResource10); hr = sharedResource10->GetSharedHandle(&sharedHandle10); sharedResource10->Release(); // Open the surface for the shared texture in D3D10.1/////////////////////////////////////////////////////////////////// IDXGISurface1 *sharedSurface10; hr = D3D101Device->OpenSharedResource(sharedHandle10, __uuidof(IDXGISurface1), (void**)(&sharedSurface10)); hr = sharedSurface10->QueryInterface(__uuidof(IDXGIKeyedMutex), (void**)&KeyedMutex10); // Create D2D factory/////////////////////////////////////////////////////////////////////////////////////////////////// ID2D1Factory *D2DFactory; hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, __uuidof(ID2D1Factory), (void**)&D2DFactory); D2D1_RENDER_TARGET_PROPERTIES renderTargetProperties; ZeroMemory(&renderTargetProperties, sizeof(renderTargetProperties)); renderTargetProperties.type = D2D1_RENDER_TARGET_TYPE_HARDWARE; renderTargetProperties.pixelFormat = D2D1::PixelFormat(DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED); hr = D2DFactory->CreateDxgiSurfaceRenderTarget(sharedSurface10, &renderTargetProperties, &D2DRenderTarget); sharedSurface10->Release(); D2DFactory->Release(); // Create a solid color brush to draw something wit hr = D2DRenderTarget->CreateSolidColorBrush(D2D1::ColorF(1.0f, 1.0f, 1.0f, 1.0f), &Brush); //DirectWrite/////////////////////////////////////////////////////////////////////////////////////////////////////////// hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown**>(&DWriteFactory)); hr = DWriteFactory->CreateTextFormat( L"Script", NULL, DWRITE_FONT_WEIGHT_REGULAR, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 24.0f, L"en-us", &TextFormat ); hr = TextFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_LEADING); hr = TextFormat->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_NEAR); D3D101Device->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_POINTLIST); return true; } |
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 |
CGame::CGame(HINSTANCE hInstance, int ShowWnd) :ResX(1920), ResY(1080) { //Initialize Variables hInst = hInstance; WndClassName = L"Boxhead 3D"; NumElements = ARRAYSIZE(Layout); // //Initialize Funktions if (!InitWindow(ShowWnd)) { MessageBox(NULL, L"Fehler beim erstellen des Fensters", L"Fehler", MB_OK); exit(0); } if (!InitDirect3D()) { MessageBox(NULL, L"Fehler beim Initialisieren von Direct3D", L"Fehler", MB_OK); exit(0); } if (!InitScene()) { MessageBox(NULL, L"Fehler beim Initialisieren der Gegenstände", L"Fehler", MB_OK); exit(0); } if (!InitInput()) { MessageBox(NULL, L"Fehler beim Initalisieren der Eingabegeräte", L"Fehler", MB_OK); exit(0); } // Run(); } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FERNman« (07.05.2014, 14:44)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FERNman« (07.05.2014, 15:24)
C-/C++-Quelltext |
|
1 2 |
//Swap Chain Erstellen hr = D3D11CreateDeviceAndSwapChain(null, D3D_DRIVER_TYPE_UNKNOWN, NULL, D3D11_CREATE_DEVICE_BGRA_SUPPORT, NULL, NULL, D3D11_SDK_VERSION, &SwapChainDesc, &SwapChain, &D3D11Device, NULL, &D3D11DevCon); |
C-/C++-Quelltext |
|
1 |
#define FAILED(hr) (((HRESULT)(hr)) < 0) //Winerror.h |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
... float color[4]; color[0] = 0.9f; color[1] = 0.2f; color[2] = 0.3f; color[3] = 1.0f; m_deviceContext->ClearRenderTargetView(m_renderTargetView, color); m_deviceContext->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0); |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FERNman« (07.05.2014, 16:00)
Zitat
Edit 2: Ich habe das Macro jetzt in meinem Code drinnen, aber wie merke ich wenn etwas falsch läuft? Muss ich mir das selber schreiben (Überprüfen ob das falsch ist) oder kommt dann von selbst eine Meldung?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Error Output handler: void MyErrorHandler(const char* expr, unsigned int line = 0; const char* func = "?") { char* pOut = new char[500]; sprintf_s(pOut, 500, "Error in expression %s\nLine: %d\nFunction: %s", expr, line, func); MessageBoxA(0, pOut, "Error", MB_ICONERROR | MB_OK); delete[] pOut; } // Macro: #define MY_CHECK(code) \ do { \ if ((FAILED(code))) { \ MyErrorHandler(#code, __LINE__, __FUNCTION__); \ } \ } while (0) // Code: MY_CHECK(hRes = DoSomethingHere()); |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »iSmokiieZz« (07.05.2014, 16:13)
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 |
int CGame::Run() { MSG msg; ZeroMemory(&msg, sizeof(msg)); CObject Grass(L"ground.obj", SwapChain, D3D11Device, TextureNameArray, meshSRV); while (true) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) { break; } TranslateMessage(&msg); DispatchMessage(&msg); } else { Render(Grass); } } return msg.wParam; } void CGame::Render(CObject &Grass) { float BgColor[4] = { 0.1f, 0.1f, 0.1f, 1.0f }; D3D11DevCon->ClearRenderTargetView(RenderTargetView, BgColor); D3D11DevCon->ClearDepthStencilView(DepthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0); ConstBuffPerFrame.light = Licht; D3D11DevCon->UpdateSubresource(cbPerFrameBuffer, 0, NULL, &ConstBuffPerFrame, 0, 0); D3D11DevCon->PSSetConstantBuffers(0, 1, &cbPerFrameBuffer); D3D11DevCon->OMSetRenderTargets(1, &RenderTargetView, DepthStencilView); D3D11DevCon->OMSetBlendState(0, 0, 0xffffffff); D3D11DevCon->VSSetShader(VS, 0, 0); D3D11DevCon->PSSetShader(PS, 0, 0); Grass.DrawVisible(CamView, CamProjection, cbPerObj, D3D11DevCon, cbPerObjectBuffer, CubesTexSamplerState, RSCullNone); Grass.DrawTransparent(CamView, CamProjection, cbPerObj, D3D11DevCon, cbPerObjectBuffer, CubesTexSamplerState, RSCullNone); SwapChain->Present(0, 0); } |
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »iSmokiieZz« (07.05.2014, 16:37)
Werbeanzeige