From d836338b70187011c30873addcded34dc6b13177 Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Thu, 21 Sep 2023 15:27:16 +0200 Subject: [PATCH] Game engine setup post --- ...023-09-25-setup-for-a-game-engine.markdown | 124 ++++++++++++++++++ static/images/site-bg.png | Bin 900 -> 817 bytes .../images/thumbnails/engine_tools_setup.jpg | Bin 0 -> 30133 bytes static/images/thumbnails/template.jpg | Bin 0 -> 14093 bytes 4 files changed, 124 insertions(+) create mode 100644 _posts/2023-09-25-setup-for-a-game-engine.markdown create mode 100644 static/images/thumbnails/engine_tools_setup.jpg create mode 100644 static/images/thumbnails/template.jpg diff --git a/_posts/2023-09-25-setup-for-a-game-engine.markdown b/_posts/2023-09-25-setup-for-a-game-engine.markdown new file mode 100644 index 0000000..c59e00b --- /dev/null +++ b/_posts/2023-09-25-setup-for-a-game-engine.markdown @@ -0,0 +1,124 @@ +--- +layout: post +title: Setup for a game engine development +author: JackCarterSmith +categories: Programming C++ GameDev +thumbnail: engine_tools_setup +highlight: true +--- + +* Contents +{:toc} + +My first point of reflection was to choose/find the tools I needed to develop my game engine. +As I intend to use Direct3D for GPU interface and rendering, my developement platform will be +*Windows* obligatory (but maybe not, see below...) + +For those who haven't followed the reasons behind my choice of API and platform, I invite them +to have a look at my [previous blog post]({% post_url 2023-09-10-build-a-game-engine %}). + +I'm used to [Eclipse IDE][link_eclipse] for C++ developement with [CMake][link_cmake] as project manager. But +as Direct3D has been part of the Windows SDK since version 10, support for it will be more complete +if I use [VisualStudio and the MSVC toolchain][link_vs]. Sometimes, for a quick modification or +comparison, I use VisualStudio Code. + +It may seem superfluous, but I always recommend a large whiteboard to put your ideas on. It's +quite effective for me in clearing up the mess in my head. + +### Direct3D and DirectX + +Throughout this blog, you'll come across the terms DirectX, Direct3D, DXGI and so on. A brief +aside to explain exactly what I'm talking about is in order to avoid losing anyone from the outset. + +DirectX was developed from version 1 to 9 from Windows 95 to Windows XP to make graphics game +development more accessible (before DirectX, a *heavier* version of OpenGL existed, but could +only be used on specialized machines). At the time, the real advantage of DirectX was its ability +to interface with the graphical display as well as the *human-machine interface* (keyboard, joystick, etc.) +or sound. Using DirectX means you only need one library to manage user interfaces! + +As you can see, DirectX is more than just a graphics API... In fact, DirectX is a set of multiple +libraries for gaming: + +- **Direct3D/2D** for the graphic rendering, +- **Xaudio** (aka. DirectSound) for... sound, +- **DirectPlay** for multiplayer session, +- **Xinput** (aka DirectInput) for Human Interface Device (HID), +- **DXGI** for hardware management like GPU card selection, +- And others for specialized usage. + +At this time, DirectX is used for a mono-thread usage and all action taken inside user code, are +executed immediatly (no command list). Multi-threading will not be available until version 11 on +Windows Vista. + +Versions 11 and 12 essentially change the way resources are allocated in video memory and how GPU +instructions are processed by it. + +Since May 20, 2020, DirectX12 has been ported to linux as open source. This is particularly +interesting for the idea of porting my engine to other platforms. *I wasn't aware of this when I +chose this API, but it makes me all confident for the future.* + +DirectX is included as standard in the Windows SDK, which is installed with Visual Studio (as long +as you select **Game Development with C++** in the installation options). So let's move on to the next part... + +### VisualStudio setup + +I'm using *VisualStudio Community edition* for my game engine developement. It has all the tools you +need for design and debugging. Although it can be heavy to install, I can recommend to the purist +to install only the SDK with the MSVC toolchain, but I won't detail the procedure here (far too +long and technical for this post). + +For the setup options, the minimal is: + +- **Game Development with C++**, +- Windows SDK (normally included by default), +- HLSL tools, +- Graphics tools (located in Windows *Optionals Features* in Apps settings). + +### Others usefull graphic debugging tools + +In addition to code design and debugging tools such as Visual Studio, I use graphical debugging +tools that are specifically designed to check the graphical pipeline. + +I recommend two of them, mainly because I'm used to using them, but they were the ones who got +me up quickly: + +- **[PIX][link_pix]** is a precise measurement and tunning tools of render timing. Developed by +Microsoft, it come as a standalone program (for GUI) and a library to integrate into our code. +When our game start, the PIX program will connect to the [lib interface][link_pixlib] and begin to collect datas +about the current running graphic pipeline, getting all GPU resources and event timing on the move. +It can also be launch on a separate machine from the one where the game is run and connect to it +through network. It only work with Direct3D API. +- **[RenderDoc][link_renderdoc]** is equivalent to PIX in terms of features but it's open source +and can have plugins and scripts to extends its limits. Unlike PIX, it support Direct3D, OpenGL +and Vulkan API. It plug on app using debug layer of the API (who need to be integrated by dev +in its code). Linux support is a plus! + +Both of this tools work better on Direct3D-12 API, with retro-compatibility to version 11. + +### Project template and others examples + +My main aim is to give you my experience of game engine development. I won't go into detail here +on how to create a new project in VisualStudio. + +With the DirectX suite integrated into the IDE, you'll have access to 4 template variants: + +- Direct3D-11 with or without Device Resource (DR), +- Direct3D-12 with or without DR. + +DR handle the *boiler-plates* of Direct3D and DXGI instance. And it give some example of how basically +interface with your GPU card and render an *empty* scene on your screen. I recommand using this in first +time and after some tries, you can make your own implementation. Try, experiment, fail... That the **only** +good method to learn effectively! + +But if you're feeling a bit lost on VisualStudio, I'd advise you to go [here][link_msdx12quick] or [there][link_msdx12flow]. + + + +[link_eclipse]: https://www.eclipse.org/ +[link_vs]: https://visualstudio.microsoft.com/ +[link_cmake]: https://cmake.org/ +[link_pix]: https://devblogs.microsoft.com/pix/download/ +[link_pixlib]: https://www.nuget.org/packages/WinPixEventRuntime +[link_renderdoc]: https://github.com/baldurk/renderdoc +[link_msdx12quick]: https://learn.microsoft.com/en-us/windows/win32/direct3dgetstarted/building-your-first-directx-app +[link_msdx12flow]: https://learn.microsoft.com/en-us/windows/win32/direct3d12/creating-a-basic-direct3d-12-component diff --git a/static/images/site-bg.png b/static/images/site-bg.png index 351fb39b8a38e6536590697638005b730962fe96..3fb9afef1b894d517e8ab22b2344ac40197db40d 100644 GIT binary patch literal 817 zcmeAS@N?(olHy`uVBq!ia0vp^Dhv!v9UM$R)^z3b#XyR)z#|e!a|?km&`KDvAsonYub5?!+zj|Hy?`PL@ z9j@_8NJ!lHpS=Hl(VdHWVMa)W7LK&IT7XZJ@@PCr^Ho@V0%H(kPjDa}Ur` zow?d4n3#)`XT~^+%@CZX545gYXG#jt+?!6G(~d{1isEG{78oe~`ECeTW3wESdOsxp?HAp2i*QOl;4Nu$@jF@?{!n?+X#>UFF-gIuD ze)SDMox~(&NY6eK4+`hYM}ww`B`ff-@bK`QVbA%t3+SP;wKr;Zg6O?BqQoR5X5`;U z+6wd<5PZ9Q<8_rbH_w}>jZf2nG!M@k?;CzVd$-+smr`iV_DGK7#?!yXd1ak9;-+1f zU`|wc-n6!y9pvnU1pD6HG9c4Tf|;>6`L{V(F#f={b_i>FvutW35X5qAtF}JH#0&zz z?cRW5U~AIv$L+vign$jFkMbSohZvb~zin?lR54fwPU17eZ}uJrO_O~VDxgfk;OXk; Jvd$@?2>?F5OlJT9 literal 900 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 LL)7!>-|GJZgOtZl literal 0 HcmV?d00001 diff --git a/static/images/thumbnails/template.jpg b/static/images/thumbnails/template.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83527433e36b6baba0a19ceed78528b353f9cc08 GIT binary patch literal 14093 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 z