From 4ab4e4f58b3477587057e08e3252978f60da1071 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 25 Oct 2017 23:30:19 -0400 Subject: [PATCH] initial version --- .gitignore | 1 + README.md | 11 +++++ build.zig | 19 +++++++++ screenshot.png | Bin 0 -> 14416 bytes src/main.zig | 107 +++++++++++++++++++++++++++++++++++++++++++++++++ src/zig.bmp | Bin 0 -> 65822 bytes 6 files changed, 138 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build.zig create mode 100644 screenshot.png create mode 100644 src/main.zig create mode 100644 src/zig.bmp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..03299ae --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/zig-cache/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..d561c14 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# SDL2 Zig Demo + +Here's a basic window with SDL2 in Zig. + +![screenshot](screenshot.png) + +## How to build and run it + +``` +zig build run +``` diff --git a/build.zig b/build.zig new file mode 100644 index 0000000..8856cfa --- /dev/null +++ b/build.zig @@ -0,0 +1,19 @@ +const Builder = @import("std").build.Builder; + +pub fn build(b: &Builder) { + const mode = b.standardReleaseOptions(); + const exe = b.addExecutable("sdl-zig-demo", "src/main.zig"); + exe.setBuildMode(mode); + exe.linkSystemLibrary("SDL2"); + exe.linkSystemLibrary("c"); + + b.default_step.dependOn(&exe.step); + b.installArtifact(exe); + + + const run = b.step("run", "Run the demo"); + const run_cmd = b.addCommand(".", b.env_map, + [][]const u8{exe.getOutputPath(), }); + run.dependOn(&run_cmd.step); + run_cmd.step.dependOn(&exe.step); +} diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..cd335032cc854f0d3e438fa533244e09e3b168c6 GIT binary patch literal 14416 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

v89(|7-9UD7mQ+z|0@cC5e(rrSV<5=rZ zr=>&+4a~~2W=a?OY8j_wWQ_h()s@lLC%WnG#tH=mb=($%0%F7Iye@QeQ`~z1yHeFQ zy=@GbzI2qTmSGjUVz{cL!?j@WDL~k1xDs!xEGgKyIP|z>Ge8P~(uH4Zsz0m%gs~lc9c4|#%oXpSYD1RV1?l{B~&do zE0k4*$!$q$^p+p}f-4$HwSLOG>O^V5Iw|l($Xb@Zlz*Qdef*m*8Em`DPA$`~XW zTF`u&Jo41rxAVD;8M+y~L|_uoFj&|BFvFpur5)9AIlx3DLvg_}H1}4L*Z27@ok7mB8mZWgwgO!fZ@rbrj^x?w7!c$#~Rz zxC>3wIc4Q0_^l#=AB9*lz$|BVqjHgkmUbr)S!iF$!J!*6S_t!X*EI+uA7-);fsTx&Xt{Fl|DyP(;JyxG7zOu1F{aFswBH81xpVzV&ym z`|q*-ClC(&gII9vIf8_ej}T!46CoGb{v5p28;Ov))6)saf(B2Q8~Si$JCek;hI=KP*=nk)2k&>&=KEo&x@qm`k}fVk*4*~d;e)j#W!T@EN~X$@8Bwy!owfH)nSLmwm>I(j>|TXx_^z#j8h~YLJMLqe+6eFGkbk_|QnazLIV)hM z9335%OJnJZbXsy>W^7SoSriJY6(F-6{zJ_U0b07I!OBP)Cfc1X1by4N=J7fPkH_=T z2ZSoV1MdyIy}Os?W;@?ZTT+lA=8J`*xdZ|1sL`8x8vR;tq@x%W12MN-1}E821nOoS zFYUTwg5*QdVIcvBC+4dS%+j>sj_og>mCeo`6f2h@Tf}+S2FjVPjb&wJzov*R-IVdk z87C?g3++5QycxMHNmYjaCqkGL(vC0Y4N~? zYjb~&t_QWuUc?xvewMT!f2fRq zHcw+uV{udb{FKEh|El)hHG@X^i|!!z!Y*?wW$ke01%lp*RDB<55)_MtCW>N{`(x#a zj34FwMp4<;QnWWv?=}(bC;>xRcGg$oiNo)p6iwbIhzCF=&RXNmdy4;DWxon z0+5S05!!%|fMa*)m@F9Ogr6MN%_kg47+C))lCq}e0#HBIGUNVgE4S6@5CtE9ZII_& zP>L1~I#3d$rL1f(Heu)^rlzA=&Q^i7P{o$YDV4+T85f8`L&FR8Bo+V<%H3@f0z>KjvtA**@!=P5-6$$5+J5lRX3SNh5to*Rv$V7v&hn9S z=BPKD;xBQMk(J>ATt7=ZSa3gVLDFNm?&^MoK8E9?p$efK%@3o{8uM~Qa#j|e@lNx< zS!XJ)9;2p<-5xy?p9_26%znLxwfUq<_snAS7Z zsC9ja3k~hxcwsHQ+|vN?c;1*Q?as6Np*n_5jfSv*fB?=x`8f`z?(_Ehv$f_(C%`QV zA*KWfyH^|Hp#nvk?6x+8TTi_dbo~>de}0PICqIGJ5wc?hgbnO)mkRhx5ylFL<)1yj zM>1=4`-qjlof&maX7L0%5H_67{f!tuDA51%u|Sf{WGoefL9TTePAR_zOI zRL2*TIG-8Kvy#e?WLvQ@e$$#W@1MmA)00%$8JErlV}@~~-2u3XEY|*}c0#C=PLCOC z^1=mMAW8u6)av$D%^0V2D1%7%U2Wu=a$!n0V^ZVGJnF$WhNCIw4olt_;Gbrxn3KiX zyr;!i;92AOWGndkY|L+iGvLxs!p@!uQYw2bhKD6o5GM=?lOisTdX_- zZBazJItUmhHQ@Ezg~s~WjjSpm#dX6JLG-PoOvV?TIBPkD-ke+r>wjrFOGrDRq^`R5 zWRJ?2&GRUtg$Ew(+B#jC)gB&=^~qIT$p75-KRF~ca*vOV0lq#clTuQecz^Y>AbOOR zI_+52&Ff3%1L@M!#WdS(2~|~98GZPJPyn5Jf^Y8#9*?Ikv(=o7jo{Q6Mdm_3H?Ly6 zP2Yy3Ab#9=i077+8{+@@46EHMetc;a;kGkl=|DQ2O6BvG1JOSMbl*tcqQ5?uI%|lPQV*&+ef5bdCI`_X-!5G7$&PO}^V#y8q1a*Ws1qa?c8y_D zg0idWQ_5&SsQx9d_8lmFRu#S>CXEm7k|zWhqdbXS*!Y)|wrK z3#+O+Iyx?Qnj;?^98{(>7SNopb?27mx~JgVwS2aC?Zt?js+yKYuEW($MC`q#lg?LU zI)L_>q%cld1mk{V9PO_ak=?~_FZ_$SN?N1MVH3#$i}&L6CoYObNfr9t{;@(Y%s^n% z>ns8(4!Z|O{WMQ0NZqYiE&d4)MdN!8JOe~wWn^RkyQAGT9uKET?VtV-Fo6A;;g}X! z1xfo`je<%PtwnhY9%PQy5@TymB;$T^YTe={%e=fizf^s9DEU904efThf;!$0s=`a$ z;W=Y7zDHB({hOVhEA{4AsIlLn0~x$tgeoQ`5Bgf2KwhzL<~SRX!bU9!rM+HP%&k`& zT4i&HvoOG^MPwQ#@Mr3-{w!NVv$}Rg)xI|8an}xB>=yxn5uizVEQ`tJuq4amva_AT z?=Fl}VKe9vMnl`>`_Q5WCxu+n@y7J^J0ADx!0zd)%9HZn9Mnef|Amy{{aDT z`GT!QsA?m(@tMu%R%^573i2BnD`7x5I50G{7^y>pQvhts0J&LobaYA>pu&_GnPn2| z*y!kJN>Q=pSqe7AH7-pV75I+e}7VYWg<>cp3&eUMoI1 z^(s>!@KjlSBr#pk`_+D85QIVC9Fl$Df)21Xfyjw_9EG{Fh zrG@8oG-bFy@+f(Bk^`>JY^%P9^F(hyuxQ8C^o|a)@}`z-@Un;iAW(PqpusX*BoNvW zG;$5##?yLw%U_t_K~hpV2?>{m1refoZE_@@JWarp6NFTaeDcRJ;MDzhKNm>V3!~fd zvu+;NqQA!)S$mMN1z1I9M$1diw7c0=wH{ifFnvU#F`A64tR!5a|~5f^k(>hj09!I{|w0@~%03F)^3- z{sgF*S#*29=AL&y+%nHc2t1O;E7L_xJhAL8vv3*dcISR_Pdt}&8(4e1FH=X$vcIF_ z$-J(VK^ztqqav(HAv2>kOu@$8Or92Y;EEsBH^%^)CULi^K z95}lIpb(j-mzsK7b*gN!KSw#_L6c4lTjROJ1doKFqNk@|X-O-n56H+j#Cc$>ou9`* z+eMd>l`VApY4`eYA?xhy+&L~KSx@e3p7>?1$B_#PG$S1s0GS4MFzY+hNTY0~jjW%Y z@aNLB$k>GAeK^PbB9-4JzM0R-tbJdztDM6%U5i%22nJDm^z3LR30M(l=lk%fA=Y0< zc)O0RX)K1|=u~ptGn%|~ZK>ap$P_x53#&hMiyWJ&q~mEiMa3*^ljd(|KA3-AxRF{= zZy|u<*K;?{%>L|wIDGmd`tEKm?W-E=MUZ`;4x*7z<^*I8+*V%*%Is5r7FFs&i*zCg zZXV2Xt1qhWfZT^_>A$cti-Ao>hqU{f4m^-%;maP}hhlEpf;gVH%e>Y9uCyh7M_XZoth?aL$ND^uJI?ov=~c3iKf12plFih-Sreyo;Olg5HO5IM62RcKcfPpOjo1e+0uo zAS4enYlZ!A-Kq;}q zVS@?!|E;y4!trm4j6Z2`kd{E|xcVbfe)Yc-ai}>FY&T!u%GSR*U#XKEgN_J-NlPe* JSBV+~{0}DFL literal 0 HcmV?d00001 diff --git a/src/main.zig b/src/main.zig new file mode 100644 index 0000000..f6be95f --- /dev/null +++ b/src/main.zig @@ -0,0 +1,107 @@ +const c = @cImport({ + @cInclude("SDL2/SDL.h"); +}); +const assert = @import("std").debug.assert; + + +// See https://github.com/zig-lang/zig/issues/565 +// SDL_video.h:#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) +// SDL_video.h:#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) +// SDL_video.h:#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u +const SDL_WINDOWPOS_UNDEFINED = @bitCast(c_int, c.SDL_WINDOWPOS_UNDEFINED_MASK); + +// Zig does not support extern unions yet. +// See https://github.com/zig-lang/zig/issues/144 +const SDL_Event = extern struct { + _type: c.Uint32, + _union: [56]u8, +}; +extern fn SDL_PollEvent(event: &SDL_Event) -> c_int; + +// SDL_RWclose is fundamentally unrepresentable in Zig, because `ctx` is +// evaluated twice. One could make the case that this is a bug in SDL, +// especially since the docs list a real function prototype that would not +// have this double-evaluation of the parameter. +// If SDL would instead of a macro use a static inline function, +// it would resolve the SDL bug as well as make the function visible to Zig +// and to debuggers. +// SDL_rwops.h:#define SDL_RWclose(ctx) (ctx)->close(ctx) +inline fn SDL_RWclose(ctx: &c.SDL_RWops) -> c_int { + const aligned_ctx = @alignCast(@alignOf(my_SDL_RWops), ctx); + const casted_ctx = @ptrCast(&my_SDL_RWops, aligned_ctx); + return casted_ctx.close(casted_ctx); +} +// Zig does not support extern unions yet. +// See https://github.com/zig-lang/zig/issues/144 +const my_SDL_RWops = extern struct { + size: extern fn(), + seek: extern fn(), + read: extern fn(), + write: extern fn(), + close: extern fn(context: &my_SDL_RWops)->c_int, +}; + +error SDLInitializationFailed; + +pub fn main() -> %void { + if (c.SDL_Init(c.SDL_INIT_VIDEO) != 0) { + c.SDL_Log(c"Unable to initialize SDL: %s", c.SDL_GetError()); + return error.SDLInitializationFailed; + } + defer c.SDL_Quit(); + + const screen = c.SDL_CreateWindow(c"My Game Window", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + 300, 73, + c.SDL_WINDOW_OPENGL) ?? + { + c.SDL_Log(c"Unable to create window: %s", c.SDL_GetError()); + return error.SDLInitializationFailed; + }; + defer c.SDL_DestroyWindow(screen); + + const renderer = c.SDL_CreateRenderer(screen, -1, 0) ?? { + c.SDL_Log(c"Unable to create renderer: %s", c.SDL_GetError()); + return error.SDLInitializationFailed; + }; + defer c.SDL_DestroyRenderer(renderer); + + const zig_bmp = @embedFile("zig.bmp"); + const rw = c.SDL_RWFromConstMem(@ptrCast(&c_void, &zig_bmp[0]), c_int(zig_bmp.len)) ?? { + c.SDL_Log(c"Unable to get RWFromConstMem: %s", c.SDL_GetError()); + return error.SDLInitializationFailed; + }; + defer assert(SDL_RWclose(rw) == 0); + + const zig_surface = c.SDL_LoadBMP_RW(rw, 1) ?? { + c.SDL_Log(c"Unable to load bmp: %s", c.SDL_GetError()); + return error.SDLInitializationFailed; + }; + defer c.SDL_FreeSurface(zig_surface); + + const zig_texture = c.SDL_CreateTextureFromSurface(renderer, zig_surface) ?? { + c.SDL_Log(c"Unable to create texture from surface: %s", c.SDL_GetError()); + return error.SDLInitializationFailed; + }; + defer c.SDL_DestroyTexture(zig_texture); + + var quit = false; + while (!quit) { + var event: SDL_Event = undefined; + while (SDL_PollEvent(&event) != 0) { + switch (event._type) { + c.SDL_QUIT => { + quit = true; + }, + else => {}, + } + } + + _ = c.SDL_RenderClear(renderer); + _ = c.SDL_RenderCopy(renderer, zig_texture, null, null); + c.SDL_RenderPresent(renderer); + + c.SDL_Delay(17); + } +} diff --git a/src/zig.bmp b/src/zig.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5308a05da50e9cb0815dd465f95fbe2dc6a9e10f GIT binary patch literal 65822 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 literal 0 HcmV?d00001