changeset 0:efcc908bca21

core: implement basic windowing, closes #2437
author David Demelier <markand@malikania.fr>
date Mon, 06 Jan 2020 12:58:49 +0100
parents
children 03f6d572fd17
files .hgignore LICENSE.md Makefile src/main.c src/window.c src/window.h
diffstat 6 files changed, 201 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Mon Jan 06 12:58:49 2020 +0100
@@ -0,0 +1,14 @@
+# vim/emacs specific.
+^tags$
+^tags.lock$
+^tags.temp$
+\.swp$
+\.swo$
+
+# macOS specific.
+\.DS_Store$
+
+# object files.
+^molko$
+\.d$
+\.o$
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LICENSE.md	Mon Jan 06 12:58:49 2020 +0100
@@ -0,0 +1,16 @@
+Molko's Adventure ISC LICENSE
+=============================
+
+Copyright (c) 2020 David Demelier <markand@malikania.fr>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Mon Jan 06 12:58:49 2020 +0100
@@ -0,0 +1,47 @@
+#
+# Makefile -- basic Makefile for Molko's Adventure
+#
+# Copyright (c) 2020 David Demelier <markand@malikania.fr>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+.POSIX:
+
+CC=             clang
+CFLAGS=         -O3 -DNDEBUG -std=c99 -Wall -Wextra
+CPPFLAGS=       -MMD
+SRCS=           src/main.c src/window.c
+OBJS=           ${SRCS:.c=.o}
+DEPS=           ${SRCS:.c=.d}
+
+SDL_CFLAGS=     `pkg-config --cflags sdl2`
+SDL_LDFLAGS=    `pkg-config --libs sdl2`
+
+.SUFFIXES:
+.SUFFIXES: .c .o
+
+all: molko
+
+-include ${DEPS}
+
+.c.o:
+	${CC} ${SDL_CFLAGS} ${CPPFLAGS} ${CFLAGS} -c $< -o $@
+
+molko: ${OBJS}
+	${CC} -o $@ ${OBJS} ${SDL_LDFLAGS} ${LDFLAGS}
+
+clean:
+	rm -f hello ${OBJS}
+
+.PHONY: clean
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main.c	Mon Jan 06 12:58:49 2020 +0100
@@ -0,0 +1,32 @@
+/*
+ * main.c -- Molko's Adventure
+ *
+ * Copyright (c) 2020 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "window.h"
+
+int
+main(int argc, char **argv)
+{
+        (void)argc;
+        (void)argv;
+
+        struct window *w = window_init("Molko's Adventure", 640, 480);
+
+        SDL_Delay(5000);
+
+        return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/window.c	Mon Jan 06 12:58:49 2020 +0100
@@ -0,0 +1,60 @@
+/*
+ * window.c -- basic window management
+ *
+ * Copyright (c) 2020 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <assert.h>
+
+#include <SDL.h>
+
+#include "window.h"
+
+struct window {
+	SDL_Window *win;
+	SDL_Renderer *renderer;
+};
+
+struct window *
+window_init(const char *title, unsigned width, unsigned height)
+{
+	struct window *w;
+
+	assert(title);
+
+	if (!(w = calloc(1, sizeof (struct window))))
+		return NULL;
+	if (SDL_CreateWindowAndRenderer(width, height, SDL_WINDOW_OPENGL,
+	    &w->win, &w->renderer) < 0)
+		goto fail;
+
+	SDL_SetWindowTitle(w->win, title);
+
+	return w;
+
+fail:
+	free(w);
+	return NULL;
+}
+
+void
+window_close(struct window *w)
+{
+	assert(window);
+
+	SDL_DestroyRenderer(w->renderer);
+	SDL_DestroyWindow(w->win);
+	free(w);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/window.h	Mon Jan 06 12:58:49 2020 +0100
@@ -0,0 +1,32 @@
+/*
+ * window.h -- basic window management
+ *
+ * Copyright (c) 2020 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef MOLKO_WINDOW_H
+#define MOLKO_WINDOW_H
+
+#include <stdbool.h>
+
+struct window;
+
+struct window *
+window_init(const char *name, unsigned width, unsigned height);
+
+void
+window_close(struct window *window);
+
+#endif /* !MOLKO_WINDOW_H */