Game Engine Toolset Development

Free Download

Authors:

Edition: 1

ISBN: 9781592009633, 1592009638

Size: 9 MB (9417721 bytes)

Pages: 641/641

File format:

Language:

Publishing Year:

Category: Tags: , ,

Graham Wihlidal9781592009633, 1592009638

Toolset development is an extremely broad topic. Game Engine Toolset Development provides you with a core set of skills and a comprehensive insight that will aid you in the development of game engine utilities, significantly reducing the time period associated with the construction phase of a project. The book starts off with topics regarding development methodologies and best practices, and then proceeds into advanced topics like swap chain management and MVC object model automation with CodeDom. An introductory working knowledge of C# and the .NET 2.0 framework is expected, allowing the content of each topic to be directed towards the subject and avoiding trivial and introductory explanations. Readers are not required to have any experience developing game engine tools. Terminology and design fundamentals specific to toolset development are clearly depicted and explained. The companion Web site provides downloads of all source code from the book, as well as several bonus chapters.

Table of contents :
Foreword……Page 5
Acknowledgments……Page 7
About the Author……Page 9
Contents……Page 10
Introduction……Page 18
Part I: Toolset Design Fundamentals……Page 20
What Is a Tool? What Is a Toolset?……Page 22
Stakeholders: Internal Versus External……Page 23
Who Builds the Tools?……Page 24
Conclusion……Page 26
Why Use C#? Why Use .NET?……Page 28
Overview of .NET……Page 29
Overview of C#……Page 30
Legacy Interoperability……Page 31
Benefits……Page 33
Conclusion……Page 34
Examples of Commercial Toolsets……Page 36
Case Study: BioWare Corporation……Page 37
Case Study: Artificial Studios……Page 41
Conclusion……Page 44
Everything Starts with a Plan……Page 46
Stakeholders……Page 47
Architecture……Page 48
Coding Standards……Page 49
Documentation……Page 50
Testing……Page 51
Development Environment……Page 52
Production Environment……Page 53
Conclusion……Page 54
Development Phases of a Tool……Page 56
Phase: Planning……Page 57
Phase: Design……Page 58
Phase: Implementation……Page 59
Conclusion……Page 60
Measurement Metrics for Tool Quality……Page 62
Metric: Traceability……Page 63
Metric: Usability……Page 64
Metric: Portability……Page 65
Metric: Efficiency……Page 66
Conclusion……Page 67
Fundamentals of User Interface Design……Page 68
Principle of Transparency……Page 69
Principle of Feedback……Page 70
Principle of Exploration……Page 71
Principle of Self-Evidence……Page 72
Principle of Customization……Page 73
Conclusion……Page 74
Distributed Componential Architecture Design……Page 76
Core Components……Page 77
Windows Entry Point……Page 78
Other Entry Points……Page 79
Architecture Example……Page 80
Alternate Architecture Structure……Page 93
Conclusion……Page 94
Solutions to Bridge Domain Gaps……Page 96
Cause: Domain Coverage……Page 97
Cause: Framework Gap……Page 98
Cause: Entity Overlap……Page 99
Cause: Source Code Access……Page 100
Relevant Design Patterns……Page 101
Conclusion……Page 106
Unit Testing with NUnit……Page 108
Overview of Unit Testing……Page 109
Introducing NUnit……Page 110
Creating an NUnit Project……Page 111
Attribute Overview……Page 112
Expected Outcome Assertion……Page 117
A Simple Example……Page 121
Running Tests……Page 124
Debugging with Visual Studio……Page 126
Conclusion……Page 127
Code Documentation with NDoc and XML……Page 130
Configuring the Project……Page 131
Supported XML Markup……Page 133
Commenting Example……Page 135
Generating the Documentation……Page 136
Conclusion……Page 138
Microsoft Coding Conventions……Page 140
Styles of Capitalization……Page 141
Naming Interfaces……Page 142
Naming Namespaces……Page 143
Naming Static Fields……Page 144
Naming Properties……Page 145
Naming Events……Page 146
Conclusion……Page 147
Enforcing Coding Policies with FxCop……Page 148
Installing FxCop……Page 149
Configuring Built-In Rules……Page 150
Analyzing Your Project……Page 151
Building Custom Rules……Page 155
Conclusion……Page 159
Best Practices for Robust Exception Handling……Page 162
Creating Custom Exceptions……Page 163
Throwing Exceptions……Page 165
Structured Exception Handlers……Page 166
Mechanisms for Cleanup……Page 167
Conclusion……Page 169
Part II: Techniques for Arbitrary Tools……Page 172
Compressing Data to Reduce Memory Footprint……Page 174
GZipStream Compression in .NET 2.0……Page 175
Implementation for Arbitrary Data……Page 176
Implementation for Serializable Objects……Page 178
Conclusion……Page 180
Protecting Sensitive Data with Encryption……Page 182
Encryption Rudiments……Page 183
Selecting a Cipher……Page 188
ICryptoTransform Interface……Page 189
Conclusion……Page 191
Generic Batch File Processing Framework……Page 192
Proposed Solution……Page 193
Implementation……Page 194
Conclusion……Page 201
Ensuring a Single Instance of an Application……Page 202
Early Solutions……Page 203
Journey to the Dark Side……Page 206
The Solution……Page 207
Conclusion……Page 210
Implementing a Checksum to Protect Data Integrity……Page 212
Implementation……Page 213
Usage……Page 215
Alternative……Page 216
Conclusion……Page 217
Using the Property Grid Control with Late Binding……Page 218
Designing a Bindable Class……Page 219
Ordering Properties……Page 224
Using the PropertyGrid……Page 227
Conclusion……Page 228
Printing Regular Text……Page 230
Supporting Printer Selection……Page 234
Supporting Page Setup……Page 235
Supporting Print Preview……Page 236
Conclusion……Page 238
Flexible Command Line Tokenizer……Page 240
Formatting Styles……Page 241
Implementation……Page 242
Sample Usage……Page 245
Conclusion……Page 247
Layering Windows Forms on Console Applications……Page 248
Implementation……Page 249
Sample Usage……Page 250
Conclusion……Page 251
Overview of Database Access with ADO.NET……Page 252
Advantages of ADO.NET……Page 253
ADO.NET Object Model……Page 254
Working with a DataReader……Page 255
Working with a DataAdapter……Page 256
Working with XML……Page 257
Potion Database Editor……Page 258
Conclusion……Page 259
Part III: Techniques for Graphical Tools……Page 260
Using Direct3D Swap Chains with MDI Applications……Page 262
What Is a Swap Chain?……Page 263
Common Pitfalls……Page 265
The Proposed Solution……Page 266
Conclusion……Page 279
Constructing an Aesthetic Texture Browser Control……Page 280
Swappable Loader Interface……Page 281
Windows GDI+ Loader……Page 282
Managed Direct3D Loader……Page 283
Storing Texture Information……Page 287
Building the Thumbnail Control……Page 290
Building the Viewer Control……Page 295
Using the Control……Page 308
Loading Textures from a Directory……Page 309
Texture Browser Demo……Page 310
Conclusion……Page 311
Converting from Screen Space to World Space……Page 314
Transforming Screen Coordinates……Page 315
Computing the Picking Ray……Page 318
Bounding Sphere Intersection Tests……Page 319
Improving Intersection Accuracy……Page 321
Using Built-In D3DX Functionality……Page 322
Conclusion……Page 323
Asynchronous Input Device Polling……Page 324
Asynchronous Mouse Polling……Page 325
Asynchronous Keyboard Polling……Page 330
Sample Usage……Page 334
Conclusion……Page 337
Part IV: Techniques for Network Tools……Page 338
Downloading Network Files Asynchronously……Page 340
The Request Object……Page 341
Maintaining Data State……Page 342
The Core System……Page 344
Sample Usage……Page 348
Conclusion……Page 349
Part V: Techniques for Legacy Interoperability……Page 350
Exchanging Data Between Applications……Page 352
What Microsoft.NET Provides……Page 353
Building a Wrapper Around WM_COPYDATA……Page 358
Conclusion……Page 363
Interacting with the Clipboard……Page 364
Storing Built-In Types……Page 365
Storing Custom Data Formats……Page 367
Complete Solution……Page 369
Conclusion……Page 372
Using .NET Assemblies as COM Objects……Page 374
COM Callable Wrappers (CCW)……Page 375
Applying Interop Attributes……Page 376
Registering with COM……Page 380
Accessing from Unmanaged Code……Page 382
Deployment Considerations……Page 383
Conclusion……Page 384
Managing Items in the Recent Documents List……Page 386
Implementation……Page 387
Conclusion……Page 388
Part VI: Techniques to Improve Performance……Page 390
Playing Nice with the Garbage Collector……Page 392
Overview of the Garbage Collector……Page 393
Collecting the Garbage……Page 394
Allocation Profile……Page 395
CLR Profiler and GC Monitoring……Page 396
Finalization and the Dispose Pattern……Page 403
Weak Referencing……Page 408
Explicit Control……Page 410
Conclusion……Page 411
Using Unsafe Code and Pointers……Page 412
Rudiments of Pointer Notation……Page 413
Using an Unsafe Context……Page 416
Pinning Memory with the Fixed Statement……Page 417
Allocating High Performance Memory……Page 418
Getting Size of Data Types……Page 420
Example: Array Iteration and Value Assignment……Page 421
Example: Data Block Copying……Page 422
Example: Win32 API Access……Page 424
Conclusion……Page 425
Investigating Performance……Page 426
Avoid Manual Optimization……Page 427
String Comparison……Page 428
String Formatting……Page 430
Compiling Regular Expressions……Page 432
Avoid Boxing and Unboxing……Page 434
Use Value Types Sensibly……Page 435
The Myth About Foreach Loops……Page 436
Minimize the Working Set……Page 437
Perform Chunky Calls……Page 438
Thoughts About NGen……Page 439
Conclusion……Page 440
Responsive UI During Intensive Processing……Page 442
Implementing the Worker Logic……Page 443
Reporting Operation Progress……Page 446
Supporting User Cancellation……Page 447
Executing the Worker Thread……Page 448
Conclusion……Page 449
Part VII: Techniques to Enhance Usability……Page 450
Designing an Extensible Plugin-Based Architecture……Page 452
Embedding Plugin Metadata Information……Page 453
Building a Proxy Wrapper……Page 456
Loading Plugins Through the Proxy……Page 461
Reloading Plugins During Runtime……Page 467
Runtime Compilation of Plugins……Page 475
Enforcing a Security Policy……Page 479
Conclusion……Page 482
Persisting Application Settings to Isolated Storage……Page 484
Concept of Isolated Storage……Page 485
Accessing Isolated Storage……Page 486
Levels of Isolation……Page 489
Management and Debugging……Page 490
Conclusion……Page 492
Designing a Reusable and Versatile Loading Screen……Page 494
Splash Dialog……Page 495
Go for the Gusto……Page 503
Concept of Loading Jobs……Page 506
Responsive Processing……Page 507
Simple Example……Page 508
Conclusion……Page 511
Writing Context Menu Shell Extensions……Page 512
Unmanaged Interfaces……Page 513
Reusable Framework……Page 521
Sample Usage—Standalone……Page 530
Sample Usage—Integrated……Page 532
Component Registration……Page 535
Debugging Techniques……Page 538
Conclusion……Page 539
Part VIII: Techniques to Increase Productivity……Page 540
Automating Workflow Using Job Scheduling……Page 542
Solution Goals……Page 543
Implementation……Page 544
Conclusion……Page 549
MVC Object Model Automation with CodeDom……Page 550
Advantages of an Automatable Object Model……Page 551
Comparison with Model-View-Controller Pattern……Page 552
A Simple Object Model Architecture……Page 554
Plugin-Based Architectures……Page 555
Controlling an Object Model with Scripts……Page 556
Implementing a C# Command Window……Page 558
Simple Automation and MVC Example……Page 562
Conclusion……Page 568
Part IX: Techniques for Deployment and Support……Page 570
Deployment and Versioning with ClickOnce……Page 572
ClickOnce and MSI Comparison……Page 574
Creating the Application……Page 575
Publishing the Application……Page 576
Launching the Application……Page 579
Deployment Configuration……Page 580
Pushing Application Updates……Page 583
Programmatically Handling Updates……Page 584
Conclusion……Page 586
Testing for the Availability of the .NET Framework……Page 588
The Solution……Page 589
Example Usage……Page 591
Conclusion……Page 592
Building and Customizing an MSI Installer……Page 594
Creating a Setup Project……Page 596
Project Configuration……Page 598
Deployment Configuration……Page 603
Custom Installer Actions……Page 606
Deploying the Installer……Page 609
Conclusion……Page 610
Determining Binary File Differences……Page 612
What Is Levenshtein Distance?……Page 613
Generating a Difference List……Page 614
Transforming Data Using a Difference List……Page 616
Thoughts for Usability and Deployment……Page 618
Conclusion……Page 619
Index……Page 622

Reviews

There are no reviews yet.

Be the first to review “Game Engine Toolset Development”
Shopping Cart
Scroll to Top