Top Related Projects
Quick Overview
Sunshine is a lightweight C++ game engine designed for 2D game development. It provides a simple and efficient framework for creating games with basic graphics, input handling, and audio support. The engine is aimed at beginners and hobbyists looking for a straightforward way to develop 2D games.
Pros
- Easy to use and understand for beginners
- Lightweight and efficient, suitable for small-scale 2D games
- Cross-platform support (Windows, macOS, Linux)
- Includes basic audio and input handling capabilities
Cons
- Limited features compared to more comprehensive game engines
- Lack of advanced graphics capabilities or 3D support
- Minimal documentation and examples available
- Small community and limited third-party resources
Code Examples
- Creating a window and rendering a rectangle:
#include <Sunshine/Sunshine.hpp>
int main() {
Sunshine::Window window("My Game", 800, 600);
Sunshine::Renderer renderer(window);
while (window.isOpen()) {
window.pollEvents();
renderer.clear();
renderer.drawRect(100, 100, 200, 150, Sunshine::Color::Red);
renderer.present();
}
return 0;
}
- Handling user input:
#include <Sunshine/Sunshine.hpp>
int main() {
Sunshine::Window window("Input Example", 800, 600);
Sunshine::Input input;
while (window.isOpen()) {
window.pollEvents();
if (input.isKeyPressed(Sunshine::Key::Escape)) {
window.close();
}
if (input.isMouseButtonPressed(Sunshine::MouseButton::Left)) {
auto mousePos = input.getMousePosition();
std::cout << "Mouse clicked at: " << mousePos.x << ", " << mousePos.y << std::endl;
}
}
return 0;
}
- Playing audio:
#include <Sunshine/Sunshine.hpp>
int main() {
Sunshine::Window window("Audio Example", 800, 600);
Sunshine::Audio audio;
Sunshine::Sound sound("path/to/sound.wav");
Sunshine::Music music("path/to/music.ogg");
sound.play();
music.play();
while (window.isOpen()) {
window.pollEvents();
}
return 0;
}
Getting Started
-
Clone the repository:
git clone https://github.com/loki-47-6F-64/sunshine.git
-
Build the engine using CMake:
cd sunshine mkdir build && cd build cmake .. make
-
Include the Sunshine headers in your project and link against the built library.
-
Start creating your game using the Sunshine engine!
Competitor Comparisons
Sends your logs to files, sockets, inboxes, databases and various web services
Pros of Monolog
- More mature and widely adopted logging library for PHP
- Extensive documentation and community support
- Supports a wide range of handlers and formatters
Cons of Monolog
- Larger codebase and potentially more complex for simple use cases
- May have more dependencies and overhead
Code Comparison
Monolog:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
$log->warning('Foo');
Sunshine:
use Sunshine\Logger;
$logger = new Logger();
$logger->setLogFile('path/to/your.log');
$logger->warning('Foo');
Summary
Monolog is a more feature-rich and widely adopted logging solution for PHP, offering extensive customization options and broad community support. It may be better suited for larger projects or those requiring advanced logging capabilities. Sunshine, on the other hand, appears to be a simpler, lightweight alternative that might be more appropriate for smaller projects or those with basic logging needs. The code comparison shows that Sunshine has a slightly more straightforward API for basic logging tasks, while Monolog offers more flexibility in configuring handlers and log levels.
Pros of log
- Widely adopted PSR-3 logging interface standard
- Extensive documentation and community support
- Compatible with many PHP frameworks and libraries
Cons of log
- Limited to logging functionality only
- Requires implementation of concrete logger classes
- May have overhead for simple logging needs
Code Comparison
log:
use Psr\Log\LoggerInterface;
class Example {
private $logger;
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
}
sunshine:
use Sunshine\Logger;
class Example {
private $logger;
public function __construct() {
$this->logger = new Logger();
}
}
Summary
log provides a standardized logging interface that's widely adopted in the PHP ecosystem, offering better interoperability and community support. However, it requires additional implementation for concrete loggers and may be overkill for simple projects.
sunshine appears to be a more lightweight logging solution with a simpler implementation, but likely lacks the extensive compatibility and standardization of log. It may be more suitable for smaller projects or those with specific logging requirements.
The choice between the two depends on project needs, existing ecosystem, and desired level of standardization and compatibility.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Introduction
Sunshine is a Gamestream host for Moonlight
Building
Linux
If you do not wish to clutter your PC with development files, yet you want the very latest version... You can use these build scripts They make use of docker to handle building Sunshine automatically
Requirements:
Ubuntu 20.04: Install the following:
Common
sudo apt install cmake gcc-10 g++-10 libssl-dev libavdevice-dev libboost-thread-dev libboost-filesystem-dev libboost-log-dev libpulse-dev libopus-dev libevdev-dev
X11
sudo apt install libxtst-dev libx11-dev libxrandr-dev libxfixes-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev
KMS
This requires additional setup.
sudo apt install libdrm-dev libcap-dev
Wayland
This is for wlroots based compositores, such as Sway
sudo apt install libwayland-dev
Cuda + NvFBC
This requires proprietary software On Ubuntu 20.04, the cuda compiler will fail since it's version is too old, it's recommended you compile the sources with the build scripts
sudo apt install nvidia-cuda-dev nvidia-cuda-toolkit
Warning:
You might require ffmpeg version >= 4.3. Check the troubleshooting section for more information.
Compilation:
git clone https://github.com/loki-47-6F-64/sunshine.git --recurse-submodules
cd sunshine && mkdir build && cd build
cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 ..
make -j ${nproc}
Setup:
sunshine needs access to uinput to create mouse and gamepad events:
-
Add user to group 'input':
usermod -a -G input $USER
-
Create udev rules:
- Run the following command:
nano /etc/udev/rules.d/85-sunshine-input.rules
- Input the following contents:
KERNEL=="uinput", GROUP="input", MODE="0660"
- Save the file and exit
CTRL+X
to start exitY
to save modifications
- Run the following command:
-
assets/sunshine.conf
is an example configuration file. Modify it as you see fit, then use it by running:sunshine path/to/sunshine.conf
-
Configure autostart service
path/to/build/dir/sunshine.service
is used to start sunshine in the background. To use it, do the following:- Copy it to the users systemd,
cp sunshine.service ~/.config/systemd/user/
- Starting
- Onetime:
systemctl --user start sunshine
- Always on boot:
systemctl --user enable sunshine
- Onetime:
- Copy it to the users systemd,
-
assets/apps.json
is an example of a list of applications that are started just before running a stream
Additional Setup for KMS:
Please note that cap_sys_admin
may as well be root, except you don't need to be root to run it.
It's necessary to allow Sunshine to use KMS
sudo setcap cap_sys_admin+p sunshine
Trouleshooting:
-
If you get "Could not create Sunshine Gamepad: Permission Denied", ensure you are part of the group "input":
groups $USER
-
If Sunshine sends audio from the microphone instead of the speaker, try the following steps:
- Check whether you're using Pulseaudio or Pipewire
- Pulseaudio: Use
pacmd list-sources | grep "name:"
- Pipewire: Use
pactl info | grep Source
. In some causes you'd need to use thesink
device. Trypactl info | grep Sink
, if Source doesn't work.
- Pulseaudio: Use
- Copy the name to the configuration option "audio_sink"
- Restart sunshine
- Check whether you're using Pulseaudio or Pipewire
-
If you get "Error: Failed to create client: Daemon not running", ensure that your avahi-daemon is running:
systemctl status avahi-daemon
-
If you use hardware acceleration on Linux using an Intel or an AMD GPU (with VAAPI), you will get tons of graphical issues if your ffmpeg version is < 4.3. If it is not available in your distribution's repositories, consider using a newer version of your distribution.
- Ubuntu started to ship ffmpeg 4.3 starting with groovy (20.10). If you're using an older version, you could use this PPA instead of upgrading. Using PPAs is dangerous and may break your system. Use it at your own risk.
Windows 10
Requirements:
First you need to install MSYS2, then startup "MSYS2 MinGW 64-bit" and install the following packages using pacman -S
:
mingw-w64-x86_64-binutils mingw-w64-x86_64-openssl mingw-w64-x86_64-cmake mingw-w64-x86_64-toolchain mingw-w64-x86_64-opus mingw-w64-x86_64-x265 mingw-w64-x86_64-boost git mingw-w64-x86_64-make cmake make gcc
Compilation:
git clone https://github.com/loki-47-6F-64/sunshine.git --recursive
cd sunshine && mkdir build && cd build
cmake -G"Unix Makefiles" ..
mingw32-make
Setup:
- OPTIONAL Gamepad support: Download and run 'ViGEmBus_Setup_1.16.116.exe' from [https://github.com/ViGEm/ViGEmBus/releases]
Common
Usage:
- run "sunshine path/to/sunshine.conf"
- If running for the first time, make sure to note the username and password Sunshine showed to you, since you cannot get back later!
- In Moonlight: Add PC manually
- When Moonlight request you insert the correct pin on sunshine:
- Type in the URL bar of your browser:
https://xxx.xxx.xxx.xxx:47990
wherexxx.xxx.xxx.xxx
is the IP address of your computer - Ignore any warning given by your browser about "insecure website"
- You should compile the next page with a new username and a password, needed to login into the next step
- Press "Save" and log in using the credentials given above
- Go to "PIN" in the Header
- Type in your PIN and press Enter, you should get a Success Message
- Type in the URL bar of your browser:
- Click on one of the Applications listed
- Have fun :)
Shortcuts:
All shortcuts start with CTRL + ALT + SHIFT, just like Moonlight
- CTRL + ALT + SHIFT + N --> Hide/Unhide the cursor (This may be usefull for Remote Desktop Mode for Moonlight)
- CTRL + ALT + SHIFT + F1/F13 --> Switch to different monitor for Streaming
Credits:
- Simple-Web-Server
- Moonlight
- Looking-Glass (For showing me how to properly capture frames on Windows, saving me a lot of time :)
- Eretik (For creating PolicyConfig.h, allowing me to change the default audio device on Windows programmatically)
- Twitter emoji (Sunshine's icon is made of twemoji)
Application List:
Note: You can change the Application List in the "Apps" section of the User Interface https://xxx.xxx.xxx.xxx:47990/
- You can use Environment variables in place of values
- $(HOME) will be replaced by the value of $HOME
- $$ will be replaced by $ --> $$(HOME) will be replaced by $(HOME)
- env: Adds or overwrites Environment variables for the commands/applications run by Sunshine.
- "Variable name":"Variable value"
- apps: The list of applications
- Example:
{ "name":"An App", "cmd":"command to open app", "prep-cmd":[ { "do":"some-command", "undo":"undo-that-command" } ], "detached":[ "some-command", "another-command" ] }
- name: Self explanatory
- output
: The file where the output of the command is stored - If it is not specified, the output is ignored
- detached: A list of commands to be run and forgotten about
- prep-cmd: A list of commands to be run before/after the application
- If any of the prep-commands fail, starting the application is aborted
- do: Run before the application
- If it fails, all 'undo' commands of the previously succeeded 'do' commands are run
- undo
: Run after the application has terminated - This should not fail considering it is supposed to undo the 'do' commands.
- If it fails, Sunshine is terminated
- cmd
: The main application - If not specified, a processs is started that sleeps indefinitely
- When an application is started, if there is an application already running, it will be terminated.
- When the application has been shutdown, the stream shuts down as well.
- In addition to the apps listed, one app "Desktop" is hardcoded into Sunshine. It does not start an application, instead it simply starts a stream.
Linux
{
"env":{
"DISPLAY":":0",
"DRI_PRIME":"1",
"XAUTHORITY":"$(HOME)/.Xauthority",
"PATH":"$(PATH):$(HOME)/.local/bin"
},
"apps":[
{
"name":"Low Res Desktop",
"prep-cmd":[
{ "do":"xrandr --output HDMI-1 --mode 1920x1080", "undo":"xrandr --output HDMI-1 --mode 1920x1200" }
]
},
{
"name":"Steam BigPicture",
"output":"steam.txt",
"cmd":"steam -bigpicture",
"prep-cmd":[]
}
]
}
Windows
{
"env":{
"PATH":"$(PATH);C:\\Program Files (x86)\\Steam"
},
"apps":[
{
"name":"Steam BigPicture",
"output":"steam.txt",
"prep-cmd":[
{"do":"steam \"steam://open/bigpicture\""}
]
}
]
}
Top Related Projects
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot