summaryrefslogtreecommitdiff
path: root/src/scene00.c
diff options
context:
space:
mode:
authorLudovic Pouzenc <ludovic@pouzenc.fr>2019-09-01 21:54:50 +0200
committerLudovic Pouzenc <ludovic@pouzenc.fr>2019-09-01 21:54:50 +0200
commit235cbc46a64ac63fd53df8a39a8681a8fcea2848 (patch)
tree3d792f5e4a1bb7f8054948b74b389be1a128b342 /src/scene00.c
downloaddemoscene-eo-235cbc46a64ac63fd53df8a39a8681a8fcea2848.tar.gz
demoscene-eo-235cbc46a64ac63fd53df8a39a8681a8fcea2848.tar.bz2
demoscene-eo-235cbc46a64ac63fd53df8a39a8681a8fcea2848.zip
Initial import. First working main loop.
Switching from scene to scene is done. Loading image to SDL, download SDL texture from VRAM to RAM is done. caca background from SDL texture is "done". GL drawing is not yet tried. Considering OpenGL3 + shaders.
Diffstat (limited to 'src/scene00.c')
-rw-r--r--src/scene00.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/scene00.c b/src/scene00.c
new file mode 100644
index 0000000..746db29
--- /dev/null
+++ b/src/scene00.c
@@ -0,0 +1,73 @@
+/*
+ * demoscene-eo, an ASCII art demoscene written as a gift for Emmanuel Otton retirement
+ * Copyright (C) 2019 XXXXXX XXXXXXX <xxxxxx@xxxxxx.fr>
+ *
+ * This file is part of demoscene-eo.
+ *
+ * demoscene-eo is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * demoscene-eo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with demoscene-eo. If not, see <http://www.gnu.org/licenses/>
+ */
+#include "scene00.h"
+
+int scene00_init(graphical_env_t *ge, scene00_env_t *se) {
+ SDL_Surface *bmpSurf = SDL_LoadBMP("./res/eo1.bmp");
+ se->eo1 = SDL_CreateTextureFromSurface(ge->sdl_rndr, bmpSurf);
+ SDL_FreeSurface(bmpSurf);
+
+ return 0;
+}
+
+void scene00_free(graphical_env_t *ge, scene00_env_t *se) {
+ SDL_DestroyTexture(se->eo1); se->eo1=NULL;
+}
+
+int scene00_next(graphical_env_t *ge, scene00_env_t *se) {
+ // Shorthands
+ caca_canvas_t *cv = ge->cv;
+ int w = ge->w, h = ge->h;
+ Uint32 frame = ge->sc_framecount;
+ SDL_Renderer *r = ge->sdl_rndr;
+ // Local vars
+ int res;
+
+ // https://gist.github.com/Twinklebear/8265888
+ // https://forums.libsdl.org/viewtopic.php?p=51634
+
+ // Render all the stuff on target texture
+ SDL_SetRenderTarget(r, ge->sdl_target);
+ SDL_RenderCopy(r, se->eo1, NULL, NULL);
+ // [...]
+
+ // Copy the SDL screen to SDL debug window (and display it, not mandatory)
+ SDL_SetRenderTarget(r, NULL);
+ SDL_RenderCopy(r, ge->sdl_target, NULL, NULL);
+ SDL_RenderPresent(r);
+
+ // Download the rendered texture from videocard to main memory
+ res = SDL_RenderReadPixels(r, NULL, 0, ge->raw_target, 256*4);
+
+ // "convert" the raw pixel stream to ASCII art on caca canevas
+ if ( res == 0 ) caca_dither_bitmap(cv, 0, 0, w, h, ge->d, ge->raw_target);
+
+ // Add things on top of caca canvas
+ caca_set_color_ansi(cv, CACA_BLACK, CACA_WHITE);
+ caca_put_str(cv, (w-17)/2, h/2, "This is a message");
+ caca_draw_line(cv,6,6,w-14,11, '*');
+ caca_draw_thin_line(cv,frame%10,frame%10,w-10+frame%10,h-10+frame%10);
+
+ if ( frame >= 100 ) {
+ return 1;
+ }
+ return 0;
+}
+