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>
312 lines
9.6 KiB
C++
312 lines
9.6 KiB
C++
//-----------------------------------------------------------------------------
|
|
// File: D3DApp.h
|
|
//
|
|
// Desc: Header file for a D3DIM app that uses MFC
|
|
//
|
|
//
|
|
// Copyright (c) 1997-2001 Microsoft Corporation. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
#ifndef D3D_MFC_APP_H
|
|
#define D3D_MFC_APP_H
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif
|
|
#ifndef __AFXWIN_H__
|
|
#error include 'stdafx.h' before including this file
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: class CAppDoc
|
|
// Desc: Overridden CDocument class needed for the CFormView
|
|
//-----------------------------------------------------------------------------
|
|
class CAppDoc : public CDocument
|
|
{
|
|
protected:
|
|
DECLARE_DYNCREATE(CAppDoc)
|
|
|
|
// Overrides
|
|
// ClassWizard generated virtual function overrides
|
|
//{{AFX_VIRTUAL(CAppDoc)
|
|
public:
|
|
//}}AFX_VIRTUAL
|
|
|
|
// Implementation
|
|
//{{AFX_MSG(CAppDoc)
|
|
// NOTE - the ClassWizard will add and remove member functions here.
|
|
// DO NOT EDIT what you see in these blocks of generated code !
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: class CAppFrameWnd
|
|
// Desc: CFrameWnd-based class needed to override the CFormView's window style
|
|
//-----------------------------------------------------------------------------
|
|
class CAppFrameWnd : public CFrameWnd
|
|
{
|
|
protected:
|
|
DECLARE_DYNCREATE(CAppFrameWnd)
|
|
// ClassWizard generated virtual function overrides
|
|
//{{AFX_VIRTUAL(CAppFrameWnd)
|
|
public:
|
|
virtual BOOL PreCreateWindow( CREATESTRUCT& cs );
|
|
//}}AFX_VIRTUAL
|
|
|
|
protected:
|
|
//{{AFX_MSG(CAppFrameWnd)
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: class CApp
|
|
// Desc: Main MFCapplication class derived from CWinApp.
|
|
//-----------------------------------------------------------------------------
|
|
class CApp : public CWinApp
|
|
{
|
|
public:
|
|
|
|
// Overrides
|
|
// ClassWizard generated virtual function overrides
|
|
//{{AFX_VIRTUAL(CApp)
|
|
public:
|
|
virtual BOOL InitInstance();
|
|
virtual BOOL OnIdle( LONG );
|
|
//}}AFX_VIRTUAL
|
|
|
|
// Implementation
|
|
//{{AFX_MSG(CApp)
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: class CAppForm
|
|
// Desc: CFormView-based class which allows the UI to be created with a form
|
|
// (dialog) resource. This class manages all the controls on the form.
|
|
//-----------------------------------------------------------------------------
|
|
class CAppForm : public CFormView, public CD3DApplication
|
|
{
|
|
HWND m_hwndRenderWindow;
|
|
HWND m_hwndRenderFullScreen;
|
|
LPDIRECT3DTEXTURE8 m_pTexture0;
|
|
LPDIRECT3DTEXTURE8 m_pTexture1;
|
|
LPDIRECT3DVERTEXBUFFER8 m_pQuadVB;
|
|
DWORD m_hPixelShader;
|
|
LPD3DXBUFFER m_pD3DXBufShader;
|
|
|
|
VOID UpdateUIForInstruction( INT iInstruction );
|
|
VOID UpdateUIForDeviceCapabilites();
|
|
VOID DisablePixelShaderEditingControls();
|
|
VOID GeneratePixelShaderOpcodes();
|
|
HRESULT SetPixelShader( TCHAR* strOpcodes );
|
|
HRESULT ConfirmDevice( D3DCAPS8*,DWORD,D3DFORMAT );
|
|
HRESULT OneTimeSceneInit();
|
|
HRESULT InitDeviceObjects();
|
|
HRESULT RestoreDeviceObjects();
|
|
HRESULT FrameMove();
|
|
HRESULT Render();
|
|
HRESULT InvalidateDeviceObjects();
|
|
HRESULT DeleteDeviceObjects();
|
|
HRESULT FinalCleanup();
|
|
virtual HRESULT AdjustWindowForChange();
|
|
|
|
protected:
|
|
DECLARE_DYNCREATE(CAppForm)
|
|
|
|
CAppForm();
|
|
virtual ~CAppForm();
|
|
public:
|
|
BOOL IsReady() { return m_bReady; }
|
|
TCHAR* PstrFrameStats() { return m_strFrameStats; }
|
|
VOID RenderScene() { Render3DEnvironment(); }
|
|
HRESULT CheckForLostFullscreen();
|
|
|
|
//{{AFX_DATA(CAppForm)
|
|
enum { IDD = IDD_FORMVIEW };
|
|
//}}AFX_DATA
|
|
|
|
//{{AFX_VIRTUAL(CAppForm)
|
|
virtual void OnInitialUpdate();
|
|
//}}AFX_VIRTUAL
|
|
|
|
//{{AFX_MSG(CAppForm)
|
|
afx_msg void OnToggleFullScreen();
|
|
afx_msg void OnChangeDevice();
|
|
afx_msg void OnHScroll( UINT, UINT, CScrollBar* );
|
|
afx_msg void OnPresets();
|
|
afx_msg void OnOpenPixelShaderFile();
|
|
afx_msg void OnPixelShaderEdit();
|
|
afx_msg void OnChangeInstructions();
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Pixel shader instructions
|
|
//-----------------------------------------------------------------------------
|
|
struct PIXELSHADER_OPCODE
|
|
{
|
|
DWORD opcode;
|
|
DWORD dwNumArgs;
|
|
BOOL bInstructionSupportsScaling;
|
|
BOOL bInstructionSupportsBias;
|
|
BOOL bInputsSupportModifiers;
|
|
BOOL bUsesTextureRegisters;
|
|
TCHAR* optext;
|
|
TCHAR* description;
|
|
};
|
|
|
|
|
|
struct PIXELSHADER_PARAMETER
|
|
{
|
|
DWORD opcode;
|
|
TCHAR* optext;
|
|
TCHAR* description;
|
|
};
|
|
|
|
#define D3DSIO_PS 0x00010000 // for specifying PixelShader version
|
|
|
|
// The pixel shader instructions
|
|
PIXELSHADER_OPCODE g_PixelShaderInstructions[] =
|
|
{ // opcode numArgs Scaling Bias InputMods Tex opText Description
|
|
{ D3DSIO_NOP, 0, FALSE, FALSE, FALSE, FALSE, "nop", "No operation" },
|
|
{ D3DSIO_PS, 2, FALSE, FALSE, FALSE, FALSE, "ps", "Pixel Shader Version" },
|
|
{ D3DSIO_DEF, 5, FALSE, FALSE, FALSE, FALSE, "def", "Define Constant" },
|
|
{ D3DSIO_MOV, 2, TRUE, TRUE, TRUE, FALSE, "mov", "Move" },
|
|
{ D3DSIO_ADD, 3, TRUE, TRUE, TRUE, FALSE, "add", "Add" },
|
|
{ D3DSIO_SUB, 3, TRUE, TRUE, TRUE, FALSE, "sub", "Subtract" },
|
|
{ D3DSIO_MAD, 4, TRUE, TRUE, TRUE, FALSE, "mad", "Multiply and add" },
|
|
{ D3DSIO_MUL, 3, TRUE, TRUE, TRUE, FALSE, "mul", "Multiply" },
|
|
{ D3DSIO_DP3, 3, TRUE, TRUE, TRUE, FALSE, "dp3", "DotProduct3" },
|
|
{ D3DSIO_LRP, 4, TRUE, TRUE, TRUE, FALSE, "lrp", "Interpolate (blend)" },
|
|
{ D3DSIO_CND, 4, TRUE, TRUE, TRUE, FALSE, "cnd", "Conditional" },
|
|
{ D3DSIO_TEXCOORD, 1, FALSE, FALSE, FALSE, TRUE, "texcoord", "Texture coord ???" },
|
|
{ D3DSIO_TEXKILL, 1, FALSE, FALSE, FALSE, TRUE, "texkill", "Texture kill ???" },
|
|
{ D3DSIO_TEX, 1, FALSE, FALSE, FALSE, TRUE, "tex", "Texture" },
|
|
{ D3DSIO_TEXBEM, 2, FALSE, FALSE, FALSE, TRUE, "texbem", "Bump env map" },
|
|
{ D3DSIO_TEXBEML, 2, FALSE, FALSE, FALSE, TRUE, "texbeml", "Bump env map w/luminance" },
|
|
{ D3DSIO_TEXREG2AR, 2, FALSE, FALSE, FALSE, TRUE, "texreg2ar", "???" },
|
|
{ D3DSIO_TEXREG2GB, 2, FALSE, FALSE, FALSE, TRUE, "texreg2gb", "???" },
|
|
{ D3DSIO_TEXM3x2PAD, 2, FALSE, FALSE, FALSE, TRUE, "texm3x2pad", "3x2 ???" },
|
|
{ D3DSIO_TEXM3x2TEX, 2, FALSE, FALSE, FALSE, TRUE, "texm3x2tex", "3x2 ???" },
|
|
{ D3DSIO_TEXM3x3PAD, 2, FALSE, FALSE, FALSE, TRUE, "texm3x3pad", "3x3 ???" },
|
|
{ D3DSIO_TEXM3x3TEX, 2, FALSE, FALSE, FALSE, TRUE, "texm3x3tex", "3x3 ???" },
|
|
{ D3DSIO_TEXM3x3DIFF, 2, FALSE, FALSE, FALSE, TRUE, "texm3x3diff", "3x3 ???" },
|
|
{ D3DSIO_TEXM3x3SPEC, 3, FALSE, FALSE, FALSE, TRUE, "texm3x3spec", "3x3 ???" },
|
|
{ D3DSIO_TEXM3x3VSPEC, 2, FALSE, FALSE, FALSE, TRUE, "texm3x3vspec","3x3 ???" },
|
|
{ D3DSIO_END, 0, FALSE, FALSE, FALSE, FALSE, NULL, NULL },
|
|
};
|
|
|
|
|
|
|
|
|
|
// The source parameters for the pixel shader instructions
|
|
PIXELSHADER_PARAMETER g_PixelShaderParameters[] =
|
|
{
|
|
{ D3DS_SR0, "r0", "Register 0" },
|
|
{ D3DS_SR1, "r1", "Register 1" },
|
|
{ D3DS_SR2, "r2", "Register 2" },
|
|
{ D3DS_SR3, "r3", "Register 3" },
|
|
{ D3DS_SR4, "r4", "Register 4" },
|
|
{ D3DS_SR5, "r5", "Register 5" },
|
|
{ D3DS_SR6, "r6", "Register 6" },
|
|
{ D3DS_SR7, "r7", "Register 7" },
|
|
{ D3DS_T0, "t0", "Texture 0" },
|
|
{ D3DS_T1, "t1", "Texture 1" },
|
|
{ D3DS_T2, "t2", "Texture 2" },
|
|
{ D3DS_T3, "t3", "Texture 3" },
|
|
{ D3DS_T4, "t4", "Texture 4" },
|
|
{ D3DS_T5, "t5", "Texture 5" },
|
|
{ D3DS_T6, "t6", "Texture 6" },
|
|
{ D3DS_T7, "t7", "Texture 7" },
|
|
{ D3DS_C0, "c0", "Constant 0" },
|
|
{ D3DS_C1, "c1", "Constant 1" },
|
|
{ D3DS_C2, "c2", "Constant 2" },
|
|
{ D3DS_C3, "c3", "Constant 3" },
|
|
{ D3DS_C4, "c4", "Constant 4" },
|
|
{ D3DS_C5, "c5", "Constant 5" },
|
|
{ D3DS_C6, "c6", "Constant 6" },
|
|
{ D3DS_C7, "c7", "Constant 7" },
|
|
{ D3DS_V0, "v0", "Vertex color 0" },
|
|
{ D3DS_V1, "v1", "Vertex color 1" },
|
|
{ D3DS_V1, NULL, NULL },
|
|
};
|
|
|
|
|
|
|
|
// Define some preset pixel shaders
|
|
TCHAR* g_strPixelShaderPresets[10] =
|
|
{
|
|
{
|
|
"// Diffuse only\r\n"
|
|
"ps.1.0\r\n"
|
|
"mov r0, v0"
|
|
},
|
|
{
|
|
"// Decal\r\n"
|
|
"ps.1.0\r\n"
|
|
"tex t0\r\n"
|
|
"mov r0, t0"
|
|
},
|
|
{
|
|
"// Modulate texture with diffuse (color0)\r\n"
|
|
"ps.1.0\r\n"
|
|
"tex t0\r\n"
|
|
"mul r0, v0, t0"
|
|
},
|
|
{
|
|
"// Blend between tex0 and tex1\r\n"
|
|
"ps.1.0\r\n"
|
|
"tex t0\r\n"
|
|
"tex t1\r\n"
|
|
"mov r1, t1\r\n"
|
|
"lrp r0, v0, t0, r1"
|
|
},
|
|
{
|
|
"// Scale tex0 by color0 and add to tex1\r\n"
|
|
"ps.1.0\r\n"
|
|
"tex t0\r\n"
|
|
"tex t1\r\n"
|
|
"mov r1, t1\r\n"
|
|
"mad r0, v0, t0, r1"
|
|
},
|
|
{
|
|
"// Add tex0, tex1, color0, and color1\r\n"
|
|
"ps.1.0\r\n"
|
|
"tex t0\r\n"
|
|
"tex t1\r\n"
|
|
"add r0, t0, v1\r\n"
|
|
"add r0, r0, t1\r\n"
|
|
"add r0, r0, v0"
|
|
},
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|