You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					78 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					78 lines
				
				1.9 KiB
			| 
											8 years ago
										 | #include <stdio.h>
 | ||
|  | #include <stdlib.h>
 | ||
|  | #include <stdbool.h>
 | ||
|  | #include <math.h>
 | ||
|  | #include <unistd.h>
 | ||
|  | #include <assert.h>
 | ||
|  | 
 | ||
|  | #include <GLES3/gl3.h>
 | ||
|  | #include <EGL/eglext.h>
 | ||
|  | 
 | ||
|  | #include "nanovg.h"
 | ||
|  | #define NANOVG_GLES3_IMPLEMENTATION
 | ||
|  | #include "nanovg_gl.h"
 | ||
|  | #include "nanovg_gl_utils.h"
 | ||
|  | 
 | ||
|  | #include "common/framebuffer.h"
 | ||
|  | 
 | ||
|  | 
 | ||
|  | int main(int argc, char** argv) {
 | ||
|  |   int err;
 | ||
|  | 
 | ||
|  |   const char* spintext = NULL;
 | ||
|  |   if (argc >= 2) {
 | ||
|  |     spintext = argv[1];
 | ||
|  |   }
 | ||
|  | 
 | ||
|  |   // spinner
 | ||
|  |   int fb_w, fb_h;
 | ||
|  |   EGLDisplay display;
 | ||
|  |   EGLSurface surface;
 | ||
|  |   FramebufferState *fb = framebuffer_init("spinner", 0x00001000, false,
 | ||
|  |                      &display, &surface, &fb_w, &fb_h);
 | ||
|  |   assert(fb);
 | ||
|  | 
 | ||
|  |   NVGcontext *vg = nvgCreateGLES3(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
 | ||
|  |   assert(vg);
 | ||
|  | 
 | ||
|  |   int font = nvgCreateFont(vg, "Bold", "../../assets/courbd.ttf");
 | ||
|  |   assert(font >= 0);
 | ||
|  | 
 | ||
|  |   for (int cnt = 0; ; cnt++) {
 | ||
|  |     glClearColor(0.1, 0.1, 0.1, 1.0);
 | ||
|  |     glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
 | ||
|  | 
 | ||
|  |     glEnable(GL_BLEND);
 | ||
|  |     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 | ||
|  |     nvgBeginFrame(vg, fb_w, fb_h, 1.0f);
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     for (int k=0; k<3; k++) {
 | ||
|  |       float ang = (2*M_PI * (float)cnt / 120.0) + (k / 3.0) * 2*M_PI;
 | ||
|  | 
 | ||
|  |       nvgBeginPath(vg);
 | ||
|  |         nvgStrokeColor(vg, nvgRGBA(255, 255, 255, 255));
 | ||
|  |         nvgStrokeWidth(vg, 5);
 | ||
|  |         
 | ||
|  |         nvgMoveTo(vg, fb_w/2 + 50 * cosf(ang), fb_h/2 + 50 * sinf(ang));
 | ||
|  |         nvgLineTo(vg, fb_w/2 + 15 * cosf(ang), fb_h/2 + 15 * sinf(ang));
 | ||
|  |         nvgMoveTo(vg, fb_w/2 - 15 * cosf(ang), fb_h/2 - 15 * sinf(ang));
 | ||
|  |         nvgLineTo(vg, fb_w/2 - 50 * cosf(ang), fb_h/2 - 50 * sinf(ang));
 | ||
|  |       nvgStroke(vg);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     if (spintext) {
 | ||
|  |       nvgTextAlign(vg, NVG_ALIGN_CENTER | NVG_ALIGN_TOP);
 | ||
|  |       nvgFontSize(vg, 96.0f);
 | ||
|  |       nvgText(vg, fb_w / 2, fb_h*2/3, spintext, NULL);      
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     nvgEndFrame(vg);
 | ||
|  | 
 | ||
|  |     eglSwapBuffers(display, surface);
 | ||
|  |     assert(glGetError() == GL_NO_ERROR);
 | ||
|  |   }
 | ||
|  | 
 | ||
|  |   return 0;
 | ||
|  | }
 |