Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
212 lines
8.8 KiB
C++
212 lines
8.8 KiB
C++
//-----------------------------------------------------------------------------
|
|
// File: D3DApp.h
|
|
//
|
|
// Desc: Application class for the Direct3D samples framework library.
|
|
//
|
|
// Copyright (c) 1998-2001 Microsoft Corporation. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
#ifndef D3DAPP_H
|
|
#define D3DAPP_H
|
|
|
|
// basetsd.h defines INT_PTR (used below). It is not included by default
|
|
// under VC 5.0. If you are using VC6 or later, it is included via Windows.h.
|
|
#include <basetsd.h>
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Error codes
|
|
//-----------------------------------------------------------------------------
|
|
enum APPMSGTYPE { MSG_NONE, MSGERR_APPMUSTEXIT, MSGWARN_SWITCHEDTOREF };
|
|
|
|
#define D3DAPPERR_NODIRECT3D 0x82000001
|
|
#define D3DAPPERR_NOWINDOW 0x82000002
|
|
#define D3DAPPERR_NOCOMPATIBLEDEVICES 0x82000003
|
|
#define D3DAPPERR_NOWINDOWABLEDEVICES 0x82000004
|
|
#define D3DAPPERR_NOHARDWAREDEVICE 0x82000005
|
|
#define D3DAPPERR_HALNOTCOMPATIBLE 0x82000006
|
|
#define D3DAPPERR_NOWINDOWEDHAL 0x82000007
|
|
#define D3DAPPERR_NODESKTOPHAL 0x82000008
|
|
#define D3DAPPERR_NOHALTHISMODE 0x82000009
|
|
#define D3DAPPERR_NONZEROREFCOUNT 0x8200000a
|
|
#define D3DAPPERR_MEDIANOTFOUND 0x8200000b
|
|
#define D3DAPPERR_RESIZEFAILED 0x8200000c
|
|
#define D3DAPPERR_NULLREFDEVICE 0x8200000d
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: struct D3DModeInfo
|
|
// Desc: Structure for holding information about a display mode
|
|
//-----------------------------------------------------------------------------
|
|
struct D3DModeInfo
|
|
{
|
|
DWORD Width; // Screen width in this mode
|
|
DWORD Height; // Screen height in this mode
|
|
D3DFORMAT Format; // Pixel format in this mode
|
|
DWORD dwBehavior; // Hardware / Software / Mixed vertex processing
|
|
D3DFORMAT DepthStencilFormat; // Which depth/stencil format to use with this mode
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: struct D3DDeviceInfo
|
|
// Desc: Structure for holding information about a Direct3D device, including
|
|
// a list of modes compatible with this device
|
|
//-----------------------------------------------------------------------------
|
|
struct D3DDeviceInfo
|
|
{
|
|
// Device data
|
|
D3DDEVTYPE DeviceType; // Reference, HAL, etc.
|
|
D3DCAPS8 d3dCaps; // Capabilities of this device
|
|
const TCHAR* strDesc; // Name of this device
|
|
BOOL bCanDoWindowed; // Whether this device can work in windowed mode
|
|
|
|
// Modes for this device
|
|
DWORD dwNumModes;
|
|
D3DModeInfo modes[150];
|
|
|
|
// Current state
|
|
DWORD dwCurrentMode;
|
|
BOOL bWindowed;
|
|
D3DMULTISAMPLE_TYPE MultiSampleTypeWindowed;
|
|
D3DMULTISAMPLE_TYPE MultiSampleTypeFullscreen;
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: struct D3DAdapterInfo
|
|
// Desc: Structure for holding information about an adapter, including a list
|
|
// of devices available on this adapter
|
|
//-----------------------------------------------------------------------------
|
|
struct D3DAdapterInfo
|
|
{
|
|
// Adapter data
|
|
D3DADAPTER_IDENTIFIER8 d3dAdapterIdentifier;
|
|
D3DDISPLAYMODE d3ddmDesktop; // Desktop display mode for this adapter
|
|
|
|
// Devices for this adapter
|
|
DWORD dwNumDevices;
|
|
D3DDeviceInfo devices[5];
|
|
|
|
// Current state
|
|
DWORD dwCurrentDevice;
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: class CD3DApplication
|
|
// Desc: A base class for creating sample D3D8 applications. To create a simple
|
|
// Direct3D application, simply derive this class into a class (such as
|
|
// class CMyD3DApplication) and override the following functions, as
|
|
// needed:
|
|
// OneTimeSceneInit() - To initialize app data (alloc mem, etc.)
|
|
// InitDeviceObjects() - To initialize the 3D scene objects
|
|
// FrameMove() - To animate the scene
|
|
// Render() - To render the scene
|
|
// DeleteDeviceObjects() - To cleanup the 3D scene objects
|
|
// FinalCleanup() - To cleanup app data (for exitting the app)
|
|
// MsgProc() - To handle Windows messages
|
|
//-----------------------------------------------------------------------------
|
|
class CD3DApplication
|
|
{
|
|
protected:
|
|
// Internal variables for the state of the app
|
|
D3DAdapterInfo m_Adapters[10];
|
|
DWORD m_dwNumAdapters;
|
|
DWORD m_dwAdapter;
|
|
BOOL m_bWindowed;
|
|
BOOL m_bActive;
|
|
BOOL m_bReady;
|
|
BOOL m_bHasFocus;
|
|
|
|
// Internal variables used for timing
|
|
BOOL m_bFrameMoving;
|
|
BOOL m_bSingleStep;
|
|
|
|
// Internal error handling function
|
|
HRESULT DisplayErrorMsg( HRESULT hr, DWORD dwType );
|
|
|
|
// Internal functions to manage and render the 3D scene
|
|
HRESULT BuildDeviceList();
|
|
BOOL FindDepthStencilFormat( UINT iAdapter, D3DDEVTYPE DeviceType,
|
|
D3DFORMAT TargetFormat, D3DFORMAT* pDepthStencilFormat );
|
|
HRESULT Initialize3DEnvironment();
|
|
HRESULT Resize3DEnvironment();
|
|
HRESULT ToggleFullscreen();
|
|
HRESULT ForceWindowed();
|
|
HRESULT UserSelectNewDevice();
|
|
VOID Cleanup3DEnvironment();
|
|
HRESULT Render3DEnvironment();
|
|
virtual HRESULT AdjustWindowForChange();
|
|
static INT_PTR CALLBACK SelectDeviceProc( HWND hDlg, UINT msg,
|
|
WPARAM wParam, LPARAM lParam );
|
|
|
|
protected:
|
|
// Main objects used for creating and rendering the 3D scene
|
|
D3DPRESENT_PARAMETERS m_d3dpp; // Parameters for CreateDevice/Reset
|
|
HWND m_hWnd; // The main app window
|
|
HWND m_hWndFocus; // The D3D focus window (usually same as m_hWnd)
|
|
HMENU m_hMenu; // App menu bar (stored here when fullscreen)
|
|
LPDIRECT3D8 m_pD3D; // The main D3D object
|
|
LPDIRECT3DDEVICE8 m_pd3dDevice; // The D3D rendering device
|
|
D3DCAPS8 m_d3dCaps; // Caps for the device
|
|
D3DSURFACE_DESC m_d3dsdBackBuffer; // Surface desc of the backbuffer
|
|
DWORD m_dwCreateFlags; // Indicate sw or hw vertex processing
|
|
DWORD m_dwWindowStyle; // Saved window style for mode switches
|
|
RECT m_rcWindowBounds; // Saved window bounds for mode switches
|
|
RECT m_rcWindowClient; // Saved client area size for mode switches
|
|
|
|
// Variables for timing
|
|
FLOAT m_fTime; // Current time in seconds
|
|
FLOAT m_fElapsedTime; // Time elapsed since last frame
|
|
FLOAT m_fFPS; // Instanteous frame rate
|
|
TCHAR m_strDeviceStats[90];// String to hold D3D device stats
|
|
TCHAR m_strFrameStats[90]; // String to hold frame stats
|
|
|
|
// Overridable variables for the app
|
|
TCHAR* m_strWindowTitle; // Title for the app's window
|
|
BOOL m_bUseDepthBuffer; // Whether to autocreate depthbuffer
|
|
DWORD m_dwMinDepthBits; // Minimum number of bits needed in depth buffer
|
|
DWORD m_dwMinStencilBits; // Minimum number of bits needed in stencil buffer
|
|
DWORD m_dwCreationWidth; // Width used to create window
|
|
DWORD m_dwCreationHeight; // Height used to create window
|
|
BOOL m_bShowCursorWhenFullscreen; // Whether to show cursor when fullscreen
|
|
BOOL m_bClipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen
|
|
|
|
// Overridable functions for the 3D scene created by the app
|
|
virtual HRESULT ConfirmDevice(D3DCAPS8*,DWORD,D3DFORMAT) { return S_OK; }
|
|
virtual HRESULT OneTimeSceneInit() { return S_OK; }
|
|
virtual HRESULT InitDeviceObjects() { return S_OK; }
|
|
virtual HRESULT RestoreDeviceObjects() { return S_OK; }
|
|
virtual HRESULT FrameMove() { return S_OK; }
|
|
virtual HRESULT Render() { return S_OK; }
|
|
virtual HRESULT InvalidateDeviceObjects() { return S_OK; }
|
|
virtual HRESULT DeleteDeviceObjects() { return S_OK; }
|
|
virtual HRESULT FinalCleanup() { return S_OK; }
|
|
|
|
public:
|
|
// Functions to create, run, pause, and clean up the application
|
|
virtual HRESULT Create( HINSTANCE hInstance );
|
|
virtual INT Run();
|
|
virtual LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
|
virtual VOID Pause( BOOL bPause );
|
|
|
|
// Internal constructor
|
|
CD3DApplication();
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|