csprite
A simple pixel art editor.
![]()
[!NOTE] This README is intended as a technical overview of the software, Intended for developers. If you're an user, Please visit csprite.github.io
Minimum System Requirements:
- Linux, Windows 7 or Later (Future plans to support Mac & Mobile)
- Atleast 512MB of Usable RAM
- 64-bit Processor (Future plans to support 32-bit processors in future)
- OpenGL v3.0 or Later
You can download pre-built binaries of the software here (Requires login).
The main aim of this software is to be simple on it's own in terms of code & UX. With functionality to write plugins to add support for various things like File Formats, etc.
Compiling
Requirements for Windows:
- Windows 7 or Later
- VS Build Tools 2019 or Later With Clang Support (Direct Download)
- BusyBox for Windows (Direct Download)
- Python v3.0+ (Direct Download) (Make sure to select "Add To Path" option)
Requirements for Linux:
-
POSIX Compliant Shell
-
GCC or Clang (And libomp-dev if using Clang)
On Debian/Ubuntu (And maybe other distros as well), If you're using LLVM-Clang toolchain then
libomp-devhas to be installed as it doesn't come packaged with the toolchain for some reason. -
GLFW3 v3.1 or Later.
-
MOLD is used for speeding up the linking process. It is completely optional & Even unnecessary if you're just building for use. It was able to cut my linking time by a second or two which makes things a bit less annoying.
Roadmap
- [ ] Tool Preview - Just have a buffer on which user's action are cleared (by storing dirty from previous user input) & drawn on every user input. When it's time to commit just blit the buffer or blend it?
- [x] Variable Brush/Eraser Sizes
- [ ] Undo Redo
- [ ] File IO
- [ ] Layers with Blending Modes
- [ ] Alpha
- [ ] Addition
- [ ] Subtraction
- [ ] Difference
- [ ] Multiply
- [ ] Screen
- [ ] Overlay
- [ ] Darken
- [ ] Lighten
- [ ] Color Dodge/Burn
- [ ] Hard/Soft Light
- [ ] Plugin System
- [ ] Node Based Post Processing Effects
- [ ] Basic Effects like Lightness, Saturation, etc.
- [ ] Dithering Effects (Like DitherBoy)
- [ ] Convolutional Filters
- [ ] Unit Testing (https://youtu.be/21JlBOxgGwY)
- [ ] UTF-8 Support (Maybe)
- [ ] Docking (Maybe)
- [ ] Color Pickers for Normal, Specular, Roughness & Height Maps (https://youtu.be/gUkY8ZoRfuQ)
- [ ] Generate Normal Map Functionality (https://youtu.be/-rJdOc9WZS4)
- [ ] Procedural Math Based Art (Maybe)
- [ ] MacOS Port
- [ ] Mobile Port
- [ ] Misc
- [ ] Porter Duff's Alpha Functions
- [ ] https://lodev.org/cgtutor/floodfill.html#Scanline_Floodfill_Algorithm_With_Stack
- [ ] Use SIMD To Accelerate Various Drawing Tasks. Related:
References
Here are resources that have helped me while developing this software.
- It's probably time to stop recommending Clean Code
- Enter The Arena: Simplifying Memory Management (2023)
- Compositing and Blending Level 1
- The Beauty of Bresenham's Algorithm
- CS-3388 Computer Graphics Winter 2020
- Introduction to Computer Graphics, Fall 2021
- Wu's Algorithm for anti-aliased line drawing
Controls
- LMB To Select Primary Color In Palette.
- RMB To Select Secondary Color In Palette.
- Hover At Primary Color's Edge In Palette & LMB + Drag To Reorder It.
- (Ctrl + Plus/Minus) or (Regular Scroll) To Zoom In/Out.
- Plus/Minus To Increase/Decrease Brush Size.