diff options
author | Joel Bodenmann <joel@unormal.org> | 2013-02-11 09:25:45 +0100 |
---|---|---|
committer | Joel Bodenmann <joel@unormal.org> | 2013-02-11 09:25:45 +0100 |
commit | 1bfc5a9f85e7c3296095105ca8e3ee1215b22be8 (patch) | |
tree | 08f2662a3ad41936e23e00815ae9ee024bdedbfd /demos/applications/mandelbrot | |
parent | 885b3d53b3a491c62fb0634b78cb9857723ac15d (diff) | |
download | uGFX-1bfc5a9f85e7c3296095105ca8e3ee1215b22be8.tar.gz uGFX-1bfc5a9f85e7c3296095105ca8e3ee1215b22be8.tar.bz2 uGFX-1bfc5a9f85e7c3296095105ca8e3ee1215b22be8.zip |
removed GDISP_LLD() macro - fix
Diffstat (limited to 'demos/applications/mandelbrot')
-rw-r--r-- | demos/applications/mandelbrot/gfxconf.h | 33 | ||||
-rw-r--r-- | demos/applications/mandelbrot/main.c | 79 |
2 files changed, 112 insertions, 0 deletions
diff --git a/demos/applications/mandelbrot/gfxconf.h b/demos/applications/mandelbrot/gfxconf.h new file mode 100644 index 00000000..7eaacc50 --- /dev/null +++ b/demos/applications/mandelbrot/gfxconf.h @@ -0,0 +1,33 @@ +/**
+ * This file has a different license to the rest of the GFX system.
+ * You can copy, modify and distribute this file as you see fit.
+ * You do not need to publish your source modifications to this file.
+ * The only thing you are not permitted to do is to relicense it
+ * under a different license.
+ */
+
+#ifndef _GFXCONF_H
+#define _GFXCONF_H
+
+/* GFX sub-systems to turn on */
+#define GFX_USE_GDISP TRUE
+#define GFX_USE_GWIN FALSE
+#define GFX_USE_GEVENT FALSE
+#define GFX_USE_GTIMER FALSE
+#define GFX_USE_GINPUT FALSE
+
+/* Features for the GDISP sub-system. */
+#define GDISP_NEED_VALIDATION TRUE
+#define GDISP_NEED_CLIP FALSE
+#define GDISP_NEED_TEXT FALSE
+#define GDISP_NEED_CIRCLE FALSE
+#define GDISP_NEED_ELLIPSE FALSE
+#define GDISP_NEED_ARC FALSE
+#define GDISP_NEED_SCROLL FALSE
+#define GDISP_NEED_PIXELREAD FALSE
+#define GDISP_NEED_CONTROL FALSE
+#define GDISP_NEED_MULTITHREAD FALSE
+#define GDISP_NEED_ASYNC FALSE
+#define GDISP_NEED_MSGAPI FALSE
+
+#endif /* _GFXCONF_H */
diff --git a/demos/applications/mandelbrot/main.c b/demos/applications/mandelbrot/main.c new file mode 100644 index 00000000..2fe1141d --- /dev/null +++ b/demos/applications/mandelbrot/main.c @@ -0,0 +1,79 @@ +/*
+ ChibiOS/GFX - Copyright (C) 2012
+ Joel Bodenmann aka Tectu <joel@unormal.org>
+
+ This file is part of ChibiOS/GFX.
+
+ ChibiOS/GFX 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.
+
+ ChibiOS/GFX 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 this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "ch.h"
+#include "hal.h"
+#include "gfx.h"
+
+void mandelbrot(float x1, float y1, float x2, float y2) {
+ unsigned int i,j, width, height;
+ uint16_t iter;
+ color_t color;
+ float fwidth, fheight;
+
+ float sy = y2 - y1;
+ float sx = x2 - x1;
+ const int MAX = 512;
+
+ width = (unsigned int)gdispGetWidth();
+ height = (unsigned int)gdispGetHeight();
+ fwidth = width;
+ fheight = height;
+
+ for(i = 0; i < width; i++) {
+ for(j = 0; j < height; j++) {
+ float cy = j * sy / fheight + y1;
+ float cx = i * sx / fwidth + x1;
+ float x=0.0f, y=0.0f, xx=0.0f, yy=0.0f;
+ for(iter=0; iter <= MAX && xx+yy<4.0f; iter++) {
+ xx = x*x;
+ yy = y*y;
+ y = 2.0f*x*y + cy;
+ x = xx - yy + cx;
+ }
+ //color = ((iter << 8) | (iter&0xFF));
+ color = RGB2COLOR(iter<<7, iter<<4, iter);
+ gdispDrawPixel(i, j, color);
+ }
+ }
+}
+
+int main(void) {
+ float cx, cy;
+ float zoom = 1.0f;
+
+ halInit();
+ chSysInit();
+
+ gdispInit();
+
+ /* where to zoom in */
+ cx = -0.086f;
+ cy = 0.85f;
+
+ while(TRUE) {
+ mandelbrot(-2.0f*zoom+cx, -1.5f*zoom+cy, 2.0f*zoom+cx, 1.5f*zoom+cy);
+
+ zoom *= 0.7f;
+ if(zoom <= 0.00001f)
+ zoom = 1.0f;
+ }
+}
+
|