Skip to content

Latest commit

 

History

History
68 lines (51 loc) · 3.69 KB

CONTRIBUTING.md

File metadata and controls

68 lines (51 loc) · 3.69 KB

Contributing Guidelines

Bug reporting

Open an issue at GitHub issue tracker. Before doing that, ensure the bug was not already reported or fixed in master branch. Describe a problem and, if necessary, provide minimal code needed to reproduce it.

Note that macOS compatibility issues are not considered bugs. Dagon uses OpenGL and doesn't support macOS where OpenGL is deprecated.

Bug fixing

Open a new GitHub pull request with your patch. Provide a description of the problem and solution. Follow our code style.

Implementing new features

New code should at least:

  • work under Windows and POSIX systems and provide platform-agnostic API
  • support x86 and x86_64 targets
  • use OpenGL 4.0 and GLSL 4.00 (core profile)
  • use dlib for game math, image decoding, file I/O and other tasks dlib was created for
  • follow our code style
  • use transparent dynamic memory allocations. Ideally the code should not allocate at all or rely on user for that. Garbage collector usage is not allowed. If dynamic allocations can't be avoided, they should be done with dlib.core.memory. All classes should use dlib.core.ownership
  • not violate copyright/licensing. When adapting third-party code, make sure that it is compatible with Boost Software License 1.0.

Adding new external dependencies should be avoided as much as possible. Only GC-free third-party D libraries are allowed. C libraries should be linked via BindBC binding.

Branching strategy

master branch is a development branch for the next release. When release is ready, a release branch is created from master (for example, dev_0.10). Release branches are not merged back into master, they are used to fix bugs and make minor updates.

Code style and standards

Dagon follows D style. Essential rules are the following:

  • Use spaces instead of tabs. Each indentation level is 4 spaces
  • Opening curly bracket should be on a new line
  • Functions and variables should be in camelCase
  • Types, constants and enums should be in PascalCase
  • Module names should be in lowercase.

Each D module should start with a Boost license block prepended with a copyright notice:

/*
Copyright (c) 2020 <author's name here>

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/