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>
85 lines
4.1 KiB
Plaintext
85 lines
4.1 KiB
Plaintext
//-----------------------------------------------------------------------------
|
|
//
|
|
// Sample Name: WindowedMode Sample
|
|
//
|
|
// Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
Description
|
|
===========
|
|
WindowedMode demonstrates the tasks required to initialize and run
|
|
a windowed DirectDraw application.
|
|
|
|
Path
|
|
====
|
|
Source: DXSDK\Samples\Multimedia\DDraw\WindowedMode
|
|
|
|
Executable: DXSDK\Samples\Multimedia\DDraw\Bin
|
|
|
|
User's Guide
|
|
============
|
|
WindowedMode requires no user input. Press the ESC key to quit the program.
|
|
|
|
Programming Notes
|
|
=================
|
|
The basic tasks to author a simple windowed DirectDraw application are as follows:
|
|
|
|
Initialize DirectDraw:
|
|
1. Register a window class and create a window.
|
|
2. Call DirectDrawCreateEx to create a DirectDraw object
|
|
3. Call SetCooperativeLevel to set the DirectDraw cooperative level
|
|
to normal.
|
|
4. Call CreateSurface to obtain a pointer to the primary surface. In windowed mode,
|
|
the primary surface is also the desktop window. So the pixel format for the
|
|
primary surface is based on the user's selection of display resolution.
|
|
5. Create a back-buffer. In windowed mode, this is should be an off-screen
|
|
plain buffer. The back buffer is typically the same size as the window's
|
|
client rect, but could be created with any size.
|
|
6. Test to see if the display mode is in palettized color (8-bit or less).
|
|
If it is then a palette needs to be created. This sample displays a single
|
|
bitmap so it can read the bitmap palette info to read and create a DirectDraw
|
|
palette. After a palette is created, call SetPalette to set the palette for
|
|
the primary surface.
|
|
7. Call CreateClipper and SetClipper to create a clipper object, and attach it
|
|
to the primary surface. This will keep DirectDraw from blting on top of
|
|
any windows which happen to overlap.
|
|
8. Create an off-screen plain DirectDraw surface, and load media content into it.
|
|
For example, this sample calls DDUtil_CreateSurfaceFromBitmap() to do just
|
|
this.
|
|
|
|
When the app is idle, and it is not hidden or minimized then render the
|
|
next frame by:
|
|
1. If movement or animation is involved in the app, then calculate how much
|
|
time has passed since the last time the frame was displayed.
|
|
2. Move or animate the app state based on how much time has passed.
|
|
3. Draw the current state into the off-screen plain backbuffer.
|
|
4. Call Blt to blt the contents of the off-screen plain backbuffer into
|
|
the primary surface.
|
|
|
|
If the display resolution changes or an exclusive mode DirectDraw app is run, then
|
|
the DirectDraw surface may be lost (resulting in a DirectDraw call returning
|
|
DDERR_SURFACELOST), then handle it by:
|
|
1. Call RestoreAllSurfaces to have DirectDraw restore all the surfaces.
|
|
2. Restoring a surface doesn't reload any content that existed in the surface
|
|
prior to it being lost. So you must now redraw the graphics the surfaces
|
|
once held. For example, this sample handles this by calling
|
|
DDUtil_ReDrawBitmapOnDDS()
|
|
|
|
In windowed mode, handle the following windows messages:
|
|
1. WM_PAINT: This is sent when all or a part of the window is needs to be
|
|
redrawn. The app may not be active at the time this is called, so if this
|
|
is not handled then the window will appear blank. To avoid this, make a
|
|
call to draw the next frame here.
|
|
2. WM_QUERYNEWPALETTE: This is sent when in a 8-bit desktop and the another
|
|
window set a new palette, but now this window has control so it needs to reset
|
|
its palette. The easy way to make this happen in DirectDraw is just to call
|
|
SetPalette. This will force DirectDraw to realize the DirectDrawPalette
|
|
attached to it.
|
|
3. WM_MOVE: This is sent when the window is moving. Record the new window position
|
|
here since the blt to the primary surface needs to know the window position.
|
|
|
|
|
|
|
|
|