From 1bfc5a9f85e7c3296095105ca8e3ee1215b22be8 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Mon, 11 Feb 2013 09:25:45 +0100 Subject: removed GDISP_LLD() macro - fix --- demos/applications/mandelbrot/gfxconf.h | 33 ++++++++++++++ demos/applications/mandelbrot/main.c | 79 +++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 demos/applications/mandelbrot/gfxconf.h create mode 100644 demos/applications/mandelbrot/main.c (limited to 'demos/applications/mandelbrot') 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 + + 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 . +*/ + +#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; + } +} + -- cgit v1.2.3