Snake/README.md
2025-02-03 21:18:10 +00:00

2.9 KiB
Raw Blame History

Below is a sample README.md that explains how to install the necessary MinGW dependencies via MSYS2s pacman and then build both the DLL and an EXE that depends on it.

# Snake Ported - SDL2 + OpenGL Test Game (UWP/Windows)

This project builds a DLL (`snake_ported.dll`) that exposes `external_entry()` and `update_controller_input()` for use in a host application. It relies on **SDL2** and **OpenGL** under MinGW-w64 on Windows.

Prerequisites

Install MSYS2 and update it:

pacman -Syu

Close the shell, reopen MSYS2 MinGW 64-bit shell, and update again if prompted:

pacman -Syu

Then install the needed packages:

pacman -S --needed base-devel \
  mingw-w64-x86_64-toolchain \
  mingw-w64-x86_64-SDL2

These packages provide:

  • GCC/G++ (MinGW toolchain)
  • SDL2 headers and libraries for 64-bit Windows
  • Basic build tools like make

Building the DLL

Inside the MinGW64 shell, run:

g++ -shared snake_ported.cpp -o snake_ported.dll \
    -lmingw32 -lSDL2main -lSDL2 -lopengl32 -mwindows

This produces snake_ported.dll which exports:

  • external_entry() to launch the Snake game loop using the hosts OpenGL context.
  • update_controller_input(...) to feed controller/keyboard input into the game.

Building a Standalone EXE (Optional)

If you also have a version of the same code (like the original Snake game) that creates its own window, you can build it as an EXE. For instance:

g++ snake.cpp -o snake_exe \
    -lmingw32 -lSDL2main -lSDL2 -lopengl32 -mwindows

This will produce a standalone EXE (snake_exe) that creates an SDL window and runs the game.

Usage

  1. DLL scenario: Load snake_ported.dll from a host application (C#, Rust, C++, etc.).
  2. EXE scenario: Simply run snake_exe.exe.

In the DLL scenario, the host is responsible for:

  • Creating an SDL window and OpenGL context.
  • Calling external_entry() once everything is set up.
  • Calling update_controller_input(...) with user/controller input data every frame/tick.

After compilation

once compiled you should see what your DLL depends on. A good tool for this is Dependencies.

Since unlike traditional C++ devs i don't want to burden you and force you to basically decrypt what it needs i'll tell you what you need to grab from mingw:

  • libstdc++-6.dll
  • libwinpthread-1.dll
  • libgcc_s_seh-1.dll

!!! it might say SDL2.dll is not found that's okay since the host itself will provide a UWP compatible SDL build so you can ignore that.

all these can be found in the following folder:

C:\msys64\mingw64\bin

A host compatible with the DLL can be found here. Simply replace the existing DLL by snake_ported.dll, insert the 3 mingw extra DLLS and see your game boot up!