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