Skip to content

Contributing

Aurumaker72 edited this page Dec 11, 2024 · 4 revisions

Compiling

Open the solution with your IDE of choice and build the solution.

Recommended IDEs are:

Additional context - Rider

It's recommended to disable "Use external console" (Run > Modify Run Configuration...), as it breaks spdlog's text coloring and reduces both startup and runtime performance.

Commit Style

Commits should, if possible, be reduced to individual work units and not contain multiple unrelated changes, barring situations where, for example, API changes require updating callsites.

The commits should be formatted as follows:

[Module]/[Kind]: [Description]

Module describes the module affected by the commit, usually by filename (e.g.: EncodingManager.cpp)

Kind loosely specifies the groups affected by the change. Can be:

  • Dev (internal change with little to no effect on users)
  • Fix (a bugfix)
  • Feat (a new feature or noteworthy change in functionality of an existing feature).

Example commits:

AVIEncoder/Fix: Fix encoder crashing on frame 32

ConfigDialog/Feat: Add reset settings button

Program Structure

The project is divided into 3 layers: Shared, Core, and View.

The layered approach should be respected in new commits, such that no architectural violations (such as directly accessing UI elements in the emulation core) are introduced.

Shared

The shared layer contains code with no dependencies other than the STL and project libraries (e.g.: libdeflate).

This layer contains shared code, such as helpers, contracts, core types, and the config. All other layers can reference the shared layer and utilize its code, hence the name.

Core

The core layer contains the emulation core data and code, with access to the shared layer, STL, and project libraries.

This layer must be driven by the view layer, and is allowed to call into contract functions defined in the shared layer and implemented in the view layer.

View

The view layer contains references to the other layers, implements the required contracts, and drives the view layer.

Platform-specific references (e.g.: Windows.h) are only permitted in the view layer.

Clone this wiki locally