From f4826b9fa9ae6271426df277f52f7f79f9bbc838 Mon Sep 17 00:00:00 2001
From: Vincent Lafeychine <vincent.lafeychine@gmail.com>
Date: Fri, 11 Feb 2022 00:18:33 +0100
Subject: [PATCH] Add example binding

---
 src/main/scala/GraphicsSFML.scala | 79 +++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100644 src/main/scala/GraphicsSFML.scala

diff --git a/src/main/scala/GraphicsSFML.scala b/src/main/scala/GraphicsSFML.scala
new file mode 100644
index 0000000..7ffd821
--- /dev/null
+++ b/src/main/scala/GraphicsSFML.scala
@@ -0,0 +1,79 @@
+import scalanative.unsafe.*
+import scalanative.unsigned.*
+
+object SFMLSystem {
+    type sfBool = CInt
+    type sfInt8 = CChar
+    type sfUint8 = CUnsignedChar
+    type sfInt16 = CShort
+    type sfUint16 = CUnsignedShort
+    type sfInt32 = CInt
+    type sfUint32 = CUnsignedInt
+    type sfInt64 = CLongLong
+    type sfUint64 = CUnsignedLongLong
+
+    val sfFalse: sfBool = 0
+    val sfTrue: sfBool = 1
+}
+
+@link("csfml-graphics")
+@link("csfml-window")
+@extern
+object SFML {
+    import SFMLSystem.*
+
+    type sfVideoMode = CStruct3[CUnsignedInt, CUnsignedInt, CUnsignedInt]
+
+    type sfColor = CStruct4[sfUint8, sfUint8, sfUint8, sfUint8]
+
+    type sfRenderWindow
+    type sfContextSettings
+
+    def sfRenderWindow_create(
+        mode: Ptr[sfVideoMode],
+        title: CString,
+        style: sfUint32,
+        settings: Ptr[sfContextSettings]
+    ): Ptr[sfRenderWindow] = extern
+
+    def sfRenderWindow_clear(
+        renderWindow: Ptr[sfRenderWindow],
+        color: Ptr[sfColor]
+    ): Unit = extern
+
+    def sfRenderWindow_destroy(
+        renderWindow: Ptr[sfRenderWindow]
+    ): Unit = extern
+
+    def sfRenderWindow_display(
+        renderWindow: Ptr[sfRenderWindow]
+    ): Unit = extern
+
+    def sfRenderWindow_isOpen(
+        sfRenderWindow: Ptr[sfRenderWindow]
+    ): sfBool = extern
+}
+
+import SFML.*
+
+object HelloWorld extends App {
+    val videomode = stackalloc[sfVideoMode]()
+    videomode._1 = 1080.toUInt
+    videomode._2 = 720.toUInt
+    videomode._3 = 32.toUInt
+
+    val sfBlack = stackalloc[sfColor]()
+    sfBlack._1 = 0.toUByte
+    sfBlack._2 = 0.toUByte
+    sfBlack._3 = 0.toUByte
+    sfBlack._4 = 0.toUByte
+
+    var window = sfRenderWindow_create(videomode, c"Hello World", 0.toUInt, null)
+
+    while true do {
+        sfRenderWindow_clear(window, sfBlack)
+        sfRenderWindow_display(window)
+    }
+
+    sfRenderWindow_destroy(window)
+}
-- 
GitLab