Implements a complete rendering pipeline, including vertex processing, rasterization, pixel shading, and output merging.
Supports multiple vertex formats (PCU, PCUTBN) for versatile rendering capabilities.
Efficient handling of textures, shaders, vertex buffers, and index buffers.
Implements a resource caching system for optimized performance.
Flexible control over blend states, sampler states, rasterizer states, and depth-stencil states.
Allows for easy switching between different rendering modes.
Dynamic shader compilation and loading.
Supports various shader types and vertex formats.
Implements a 2D and 3D camera system, including perspective and orthographic cameras.
Supports directional lighting with adjustable parameters.
Supports multi-pass rendering for effects like bloom and emissive lighting.
Implements Mip-Mapping for improved texture rendering at various distances.
Utilizes constant buffers for efficient data transfer to the GPU.
Implements vertex and index buffers for optimized geometry rendering.
The video below presents a few features of the DirectX 11 render pipeline integrated with complied HLSL shader code to implement: Ambient and Diffuse Lighting, Specular, and Emissive Lighting, using Diffuse Map for the basic texture and Normal Map for the normal texture. Also Specular, Glossiness, and Emissive Map come with SGE texture.
Vector and matrix classes for 2D, 3D, and 4D operations
Angle conversions and trig functions
Collision detection for various shapes (AABBs, OBBs, discs, capsules)
Distance calculations and projections
Interpolation and clamping functions
Handy geometric queries (Is this point inside that shape? Do these shapes overlap?)
Coordinate transformations
Useful for debugging. Here is the summary of the features:
Supports custom configuration options through the DevConsoleConfig structure. The game code can change it.
Allows developers to input and execute commands during runtime, enhancing debugging and testing capabilities.
It provides methods to add colored text lines, including line and frame numbers options, which help track game events and errors.
It can render itself within a specified screen area with a customizable appearance.
Manages keyboard input for command entry, including character input and special key handling (like backspace and enter).
Maintains a history of executed commands, allowing developers to access and reuse previous commands quickly.
It can be easily shown or hidden during gameplay.
Uses an event system for command execution and input handling.
This video demonstrates how the dev console can change state of the game.
This gif demonstrates the functionality of a multi-threaded job system that has been implemented. Here's what you see on the screen:
Job Addition: Jobs are added to the queue by pressing specific keys (e.g., 'J' for a single job, 'N' for 100 jobs). Each job represents a task that needs to be executed.
Job Representation: Each job is visually represented on the screen, with different colors indicating their status (e.g., red for queuing, yellow for executing, green for completed, blue for retrieved).
Worker Threads: The system uses multiple worker threads to execute jobs concurrently. Each thread claims a job from the queue, executes it, and marks it as completed.
Job Progress: As jobs are executed, their status changes, and their visual representation on the screen updates accordingly.
Completed Jobs: Pressing 'R' retrieves and removes a completed job from the display.
All Completed Jobs: Pressing 'A' retrieves all completed jobs simultaneously, clearing them from the screen.
Implement widget-based UI object classes inherited from the Widget class, including Button, Textbox, and Slider.
The widget class contains features like:
Hierarchical Widgets can have child widgets, allowing for complex, nested UI layouts.
Each widget can have its background texture, border, visibility settings, and interactive sound integrated with the audio system.
Widgets can be positioned using absolute coordinates or relative to their parent, supporting different pivot points.
For click-and-hover events, it is easy to create interactive UI elements.
Separate methods for rendering background and border, allowing for fine-tuned visual customization.
It includes a system for navigable widgets to create menu structures.
I developed a networking system for my custom game engine that supports client and server modes. This system enables multiplayer functionality with efficient data transmission and connection management.
The networking system uses a flexible client-server architecture with separate state machines for client and server operations. It employs socket programming for reliable communication between game instances, with configurable buffer sizes to accommodate different networking requirements. It handles connection establishment, data parsing, and disconnection through a comprehensive API. Connection states are carefully tracked through enumerated types, allowing appropriate responses to network events.