mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-10-03 12:18:10 +00:00
graphics/tinygl: add TinyGL software OpenGL library
Add TinyGL (https://github.com/C-Chads/tinygl), a small software-only implementation of a subset of OpenGL 1.1 written in portable C99, by Fabrice Bellard, Gek and C-Chads, under a zlib-style license. Like graphics/lvgl, the sources are not kept in the repository: the build downloads a pinned git revision from GitHub (CONFIG_TINYGL_VERSION) and applies the NuttX patches that live next to the Makefile: 0001 zfeatures: allow overriding the feature switches at build time 0002 Fix -Wstrict-prototypes warnings 0003 zbuffer: do not over-read the source in ZB_copyFrameBuffer() 0004 zbuffer.h: make the default allocator wrappers static inline The TinyGL compile time features (pixel depth, GL_SELECT, GL_POLYGON, blending, texture size, ...) are exposed as CONFIG_TINYGL_* Kconfig options. They change public structures, so Make.defs / CMakeLists.txt export them to every application that includes <GL/gl.h> or <zbuffer.h>. Both the make and the CMake builds are supported. An unpack stamp file makes sure an object directory created inside the source tree is never mistaken for downloaded sources. Assisted-by: Claude Opus 5.5 (1M context) Signed-off-by: Alan Carvalho de Assis <acassis@gmail.com>
This commit is contained in:
parent
df19cbe26b
commit
a539a4d768
10 changed files with 1036 additions and 0 deletions
2
graphics/tinygl/.gitignore
vendored
Normal file
2
graphics/tinygl/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
/tinygl
|
||||
/tinygl-*.tar.gz
|
||||
|
|
@ -0,0 +1,228 @@
|
|||
From 7b0dd7f5ccc8826f8c49977b1d26f640fd959738 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Carvalho de Assis <acassis@gmail.com>
|
||||
Date: Thu, 24 Sep 2026 09:45:18 -0300
|
||||
Subject: [PATCH 1/2] zfeatures: allow overriding the feature switches at build
|
||||
time
|
||||
|
||||
Wrap every tunable TGL_FEATURE_* (and related) definition in
|
||||
include/zfeatures.h, and POLYGON_MAX_VERTEX in src/zgl.h, with #ifndef
|
||||
so that a build system can select the features with -D compiler flags
|
||||
instead of editing the header.
|
||||
|
||||
NuttX uses this to drive the TinyGL features from Kconfig
|
||||
(CONFIG_TINYGL_*). The defaults are unchanged.
|
||||
---
|
||||
include/zfeatures.h | 66 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
src/zgl.h | 2 ++
|
||||
2 files changed, 68 insertions(+)
|
||||
|
||||
diff --git a/include/zfeatures.h b/include/zfeatures.h
|
||||
index aa7a14c..a67249e 100644
|
||||
--- a/include/zfeatures.h
|
||||
+++ b/include/zfeatures.h
|
||||
@@ -6,80 +6,134 @@
|
||||
Enables setting the error flags when there's an error, so you can check it with glGetError
|
||||
Disabling this has slight performance gains.
|
||||
*/
|
||||
+#ifndef TGL_FEATURE_ERROR_CHECK
|
||||
#define TGL_FEATURE_ERROR_CHECK 0
|
||||
+#endif
|
||||
/*
|
||||
Strict out-of-memory checking. All OpenGL function calls are invalidated (ALL OF THEM) if a GL_OUT_OF_MEMORY error occurs.
|
||||
This means that TinyGL has to constantly check all gl_malloc() attempts for errors and the state of the error state variable.
|
||||
The checks slow down the renderer so it is not recommended , but
|
||||
it's in the GL spec that this should occur.
|
||||
*/
|
||||
+#ifndef TGL_FEATURE_STRICT_OOM_CHECKS
|
||||
#define TGL_FEATURE_STRICT_OOM_CHECKS 0
|
||||
+#endif
|
||||
|
||||
/*
|
||||
Swap between using the inline'd malloc(), calloc(), and free() in zbuffer.h, or
|
||||
a replacement gl_malloc(), gl_zalloc(), and gl_free() in memory.c
|
||||
*/
|
||||
+#ifndef TGL_FEATURE_CUSTOM_MALLOC
|
||||
#define TGL_FEATURE_CUSTOM_MALLOC 0
|
||||
+#endif
|
||||
|
||||
/*
|
||||
Use Fast Inverse Square Root. Toggleable because it's actually slower on some platforms,
|
||||
And because some systems may have float types which are incompatible with it.
|
||||
*/
|
||||
+#ifndef TGL_FEATURE_FISR
|
||||
#define TGL_FEATURE_FISR 0
|
||||
+#endif
|
||||
|
||||
+#ifndef TGL_FEATURE_ARRAYS
|
||||
#define TGL_FEATURE_ARRAYS 1
|
||||
+#endif
|
||||
|
||||
+#ifndef TGL_FEATURE_DISPLAYLISTS
|
||||
#define TGL_FEATURE_DISPLAYLISTS 1
|
||||
+#endif
|
||||
|
||||
+#ifndef TGL_FEATURE_LIT_TEXTURES
|
||||
#define TGL_FEATURE_LIT_TEXTURES 1
|
||||
+#endif
|
||||
/*Enable the patternized "discard"-ing of pixels.*/
|
||||
+#ifndef TGL_FEATURE_POLYGON_STIPPLE
|
||||
#define TGL_FEATURE_POLYGON_STIPPLE 1
|
||||
+#endif
|
||||
/*Enable the use of GL_SELECT and GL_FEEDBACK*/
|
||||
+#ifndef TGL_FEATURE_ALT_RENDERMODES
|
||||
#define TGL_FEATURE_ALT_RENDERMODES 0
|
||||
+#endif
|
||||
/*
|
||||
Enable the rendering of large polygons (in terms of vertex count)
|
||||
Also enabled the rendering of line loops.
|
||||
the maximum number of vertices in a polygon is defined in zgl.h
|
||||
*/
|
||||
+#ifndef TGL_FEATURE_GL_POLYGON
|
||||
#define TGL_FEATURE_GL_POLYGON 0
|
||||
+#endif
|
||||
|
||||
+#ifndef TGL_FEATURE_BLEND
|
||||
#define TGL_FEATURE_BLEND 1
|
||||
+#endif
|
||||
|
||||
+#ifndef TGL_FEATURE_BLEND_DRAW_PIXELS
|
||||
#define TGL_FEATURE_BLEND_DRAW_PIXELS 0
|
||||
+#endif
|
||||
/*The width of textures as a power of 2. The default is 8, or 256x256 textures.*/
|
||||
+#ifndef TGL_FEATURE_TEXTURE_POW2
|
||||
#define TGL_FEATURE_TEXTURE_POW2 8
|
||||
+#endif
|
||||
#define TGL_FEATURE_TEXTURE_DIM (1<<TGL_FEATURE_TEXTURE_POW2)
|
||||
|
||||
/*A stipple pattern is 128 bytes in size.*/
|
||||
+#ifndef TGL_POLYGON_STIPPLE_BYTES
|
||||
#define TGL_POLYGON_STIPPLE_BYTES 128
|
||||
+#endif
|
||||
/*A stipple pattern is 2^5 (32) bits wide.*/
|
||||
+#ifndef TGL_POLYGON_STIPPLE_POW2_WIDTH
|
||||
#define TGL_POLYGON_STIPPLE_POW2_WIDTH 5
|
||||
+#endif
|
||||
+#ifndef TGL_POLYGON_STIPPLE_MASK_X
|
||||
#define TGL_POLYGON_STIPPLE_MASK_X 31
|
||||
+#endif
|
||||
+#ifndef TGL_POLYGON_STIPPLE_MASK_Y
|
||||
#define TGL_POLYGON_STIPPLE_MASK_Y 31
|
||||
+#endif
|
||||
|
||||
/*Use lookup tables for calculating specular light.*/
|
||||
+#ifndef TGL_FEATURE_SPECULAR_BUFFERS
|
||||
#define TGL_FEATURE_SPECULAR_BUFFERS 0
|
||||
+#endif
|
||||
|
||||
/*Prevent ZB_copyFrameBuffer from copying certain colors.*/
|
||||
+#ifndef TGL_FEATURE_NO_COPY_COLOR
|
||||
#define TGL_FEATURE_NO_COPY_COLOR 0
|
||||
+#endif
|
||||
/*Don't draw (texture mapped) pixels whose color is the NO_DRAW_COLOR*/
|
||||
+#ifndef TGL_FEATURE_NO_DRAW_COLOR
|
||||
#define TGL_FEATURE_NO_DRAW_COLOR 1
|
||||
+#endif
|
||||
/*Regardless of the current clear color, always clear using the NO_COPY_COLOR*/
|
||||
+#ifndef TGL_FEATURE_FORCE_CLEAR_NO_COPY_COLOR
|
||||
#define TGL_FEATURE_FORCE_CLEAR_NO_COPY_COLOR 0
|
||||
+#endif
|
||||
+#ifndef TGL_NO_COPY_COLOR
|
||||
#define TGL_NO_COPY_COLOR 0xff00ff
|
||||
+#endif
|
||||
+#ifndef TGL_NO_DRAW_COLOR
|
||||
#define TGL_NO_DRAW_COLOR 0xff00ff
|
||||
+#endif
|
||||
/* solid debug pink.*/
|
||||
+#ifndef TGL_COLOR_MASK
|
||||
#define TGL_COLOR_MASK 0x00ffffff
|
||||
+#endif
|
||||
/* mask to check for while drawing/copying.*/
|
||||
|
||||
|
||||
|
||||
|
||||
+#ifndef TGL_FEATURE_MULTITHREADED_DRAWPIXELS
|
||||
#define TGL_FEATURE_MULTITHREADED_DRAWPIXELS 1
|
||||
+#endif
|
||||
|
||||
+#ifndef TGL_FEATURE_MULTITHREADED_COPY_TEXIMAGE_2D
|
||||
#define TGL_FEATURE_MULTITHREADED_COPY_TEXIMAGE_2D 1
|
||||
+#endif
|
||||
|
||||
+#ifndef TGL_FEATURE_MULTITHREADED_ZB_COPYBUFFER
|
||||
#define TGL_FEATURE_MULTITHREADED_ZB_COPYBUFFER 0
|
||||
+#endif
|
||||
|
||||
/*
|
||||
!!!!!WARNING!!!!!
|
||||
@@ -89,14 +143,18 @@ Disabled by default for compatibility- you should only enable this if you KNOW t
|
||||
returns 16-byte aligned pointers.
|
||||
*/
|
||||
|
||||
+#ifndef TGL_FEATURE_ALIGNAS
|
||||
#define TGL_FEATURE_ALIGNAS 0
|
||||
+#endif
|
||||
/*
|
||||
Optimization hint- cost of branching.
|
||||
0- branching has zero cost, avoid extraneous code.
|
||||
1- Branching has some cost, allow some extraneous code
|
||||
2- Branching has extreme cost, allow a lot of extraneous code. Modern processors work best on this setting.
|
||||
*/
|
||||
+#ifndef TGL_OPTIMIZATION_HINT_BRANCH_COST
|
||||
#define TGL_OPTIMIZATION_HINT_BRANCH_COST 2
|
||||
+#endif
|
||||
|
||||
|
||||
#ifdef __TINYC__
|
||||
@@ -113,8 +171,12 @@ Optimization hint- cost of branching.
|
||||
#endif
|
||||
|
||||
|
||||
+#ifndef TGL_FEATURE_16_BITS
|
||||
#define TGL_FEATURE_16_BITS 0
|
||||
+#endif
|
||||
+#ifndef TGL_FEATURE_32_BITS
|
||||
#define TGL_FEATURE_32_BITS 1
|
||||
+#endif
|
||||
|
||||
#if TGL_FEATURE_32_BITS == 1
|
||||
#define TGL_FEATURE_RENDER_BITS 32
|
||||
@@ -128,11 +190,15 @@ Optimization hint- cost of branching.
|
||||
#endif
|
||||
|
||||
/*The fraction bits in the fixed point values used for S and T in interpolatiion.*/
|
||||
+#ifndef ZB_POINT_S_FRAC_BITS
|
||||
#define ZB_POINT_S_FRAC_BITS 10
|
||||
+#endif
|
||||
#define ZB_POINT_T_FRAC_BITS (ZB_POINT_S_FRAC_BITS + TGL_FEATURE_TEXTURE_POW2)
|
||||
|
||||
/*Test the compatibility of the target platform at glInit() time.*/
|
||||
+#ifndef TGL_FEATURE_TINYGL_RUNTIME_COMPAT_TEST
|
||||
#define TGL_FEATURE_TINYGL_RUNTIME_COMPAT_TEST 1
|
||||
+#endif
|
||||
|
||||
#define TINYGL_VERSION 1.0
|
||||
|
||||
diff --git a/src/zgl.h b/src/zgl.h
|
||||
index 77cc70a..aa1ea70 100644
|
||||
--- a/src/zgl.h
|
||||
+++ b/src/zgl.h
|
||||
@@ -25,6 +25,7 @@ enum {
|
||||
};
|
||||
|
||||
|
||||
+#ifndef POLYGON_MAX_VERTEX
|
||||
#if TGL_FEATURE_GL_POLYGON == 1
|
||||
|
||||
#define POLYGON_MAX_VERTEX 16
|
||||
@@ -32,6 +33,7 @@ enum {
|
||||
|
||||
#define POLYGON_MAX_VERTEX 4
|
||||
#endif
|
||||
+#endif
|
||||
/* Max # of specular light pow buffers */
|
||||
#define MAX_SPECULAR_BUFFERS 32
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
||||
131
graphics/tinygl/0002-Fix-Wstrict-prototypes-warnings.patch
Normal file
131
graphics/tinygl/0002-Fix-Wstrict-prototypes-warnings.patch
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
From 24b54cc5e89984a6e100fed0312fe7b386a0d975 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Carvalho de Assis <acassis@gmail.com>
|
||||
Date: Thu, 24 Sep 2026 09:47:19 -0300
|
||||
Subject: [PATCH 2/2] Fix -Wstrict-prototypes warnings
|
||||
|
||||
Declare functions that take no arguments as (void) instead of (). In
|
||||
C, () means "unspecified arguments", which newer compilers warn about
|
||||
and which C23 changes meaning of. The public glGetError() declaration
|
||||
in <GL/gl.h> is included by every application, so the warning showed
|
||||
up in all users of the library too.
|
||||
---
|
||||
include/GL/gl.h | 2 +-
|
||||
src/init.c | 2 +-
|
||||
src/matrix.c | 2 +-
|
||||
src/memory.c | 2 +-
|
||||
src/misc.c | 4 ++--
|
||||
src/texture.c | 2 +-
|
||||
src/zgl.h | 6 +++---
|
||||
7 files changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/include/GL/gl.h b/include/GL/gl.h
|
||||
index da16f81..ab4a10b 100644
|
||||
--- a/include/GL/gl.h
|
||||
+++ b/include/GL/gl.h
|
||||
@@ -932,7 +932,7 @@ void glHint(GLint target,GLint mode);
|
||||
void glGetIntegerv(GLint pname,GLint *params);
|
||||
void glGetFloatv(GLint pname, GLfloat *v);
|
||||
const GLubyte* glGetString(GLenum name);
|
||||
-GLenum glGetError();
|
||||
+GLenum glGetError(void);
|
||||
void glFrontFace(GLint mode);
|
||||
|
||||
/* opengl 1.2 arrays */
|
||||
diff --git a/src/init.c b/src/init.c
|
||||
index a394759..9220904 100644
|
||||
--- a/src/init.c
|
||||
+++ b/src/init.c
|
||||
@@ -69,7 +69,7 @@ static void endSharedState(GLContext* c) {
|
||||
#if TGL_FEATURE_TINYGL_RUNTIME_COMPAT_TEST == 1
|
||||
|
||||
#define TGL_FLOAT_ERR(a, b) ((a - b) / b)
|
||||
-static int TinyGLRuntimeCompatibilityTest() {
|
||||
+static int TinyGLRuntimeCompatibilityTest(void) {
|
||||
GLfloat t = -0, tf2;
|
||||
GLint t2 = 1 << 31;
|
||||
memcpy(&tf2, &t2, 4);
|
||||
diff --git a/src/matrix.c b/src/matrix.c
|
||||
index 6234352..2bba0c6 100644
|
||||
--- a/src/matrix.c
|
||||
+++ b/src/matrix.c
|
||||
@@ -8,7 +8,7 @@ void gl_print_matrix(const GLfloat* m) {
|
||||
}
|
||||
}
|
||||
|
||||
-static void gl_matrix_update() {
|
||||
+static void gl_matrix_update(void) {
|
||||
GLContext* c = gl_get_context();
|
||||
c->matrix_model_projection_updated = (c->matrix_mode <= 1);
|
||||
}
|
||||
diff --git a/src/memory.c b/src/memory.c
|
||||
index 7cf44c5..5d9ae8a 100644
|
||||
--- a/src/memory.c
|
||||
+++ b/src/memory.c
|
||||
@@ -2,7 +2,7 @@
|
||||
* Memory allocator for TinyGL
|
||||
*/
|
||||
|
||||
-static inline void required_for_compilation_(){
|
||||
+static inline void required_for_compilation_(void){
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/src/misc.c b/src/misc.c
|
||||
index c7f1bb7..1b48fa2 100644
|
||||
--- a/src/misc.c
|
||||
+++ b/src/misc.c
|
||||
@@ -192,7 +192,7 @@ void glopPolygonOffset(GLParam* p) {
|
||||
c->offset_units = p[2].f;
|
||||
}
|
||||
|
||||
-GLenum glGetError() {
|
||||
+GLenum glGetError(void) {
|
||||
#if TGL_FEATURE_ERROR_CHECK == 1
|
||||
GLContext* c = gl_get_context();
|
||||
GLenum eflag = c->error_flag;
|
||||
@@ -256,4 +256,4 @@ void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format
|
||||
/* TODO: implement read pixels.*/
|
||||
}
|
||||
|
||||
-void glFinish() { return; }
|
||||
+void glFinish(void) { return; }
|
||||
diff --git a/src/texture.c b/src/texture.c
|
||||
index c2e5364..470a621 100644
|
||||
--- a/src/texture.c
|
||||
+++ b/src/texture.c
|
||||
@@ -109,7 +109,7 @@ GLTexture* alloc_texture(GLint h) {
|
||||
return t;
|
||||
}
|
||||
|
||||
-void glInitTextures() {
|
||||
+void glInitTextures(void) {
|
||||
/* textures */
|
||||
GLContext* c = gl_get_context();
|
||||
c->texture_2d_enabled = 0;
|
||||
diff --git a/src/zgl.h b/src/zgl.h
|
||||
index aa1ea70..cd82c00 100644
|
||||
--- a/src/zgl.h
|
||||
+++ b/src/zgl.h
|
||||
@@ -429,8 +429,8 @@ void glopTranslate(GLParam *p);*/
|
||||
void gl_enable_disable_light(GLint light, GLint v);
|
||||
void gl_shade_vertex(GLVertex* v);
|
||||
|
||||
-void glInitTextures();
|
||||
-void glEndTextures();
|
||||
+void glInitTextures(void);
|
||||
+void glEndTextures(void);
|
||||
GLTexture* alloc_texture(GLint h);
|
||||
|
||||
/* image_util.c */
|
||||
@@ -456,7 +456,7 @@ GLSpecBuf* specbuf_get_buffer(const GLint shininess_i, const GLfloat shininess);
|
||||
/* this clip epsilon is needed to avoid some rounding errors after
|
||||
several clipping stages */
|
||||
|
||||
-static void gl_eval_viewport() {
|
||||
+static void gl_eval_viewport(void) {
|
||||
GLContext* c = gl_get_context();
|
||||
GLViewport* v;
|
||||
GLfloat zsize = (1 << (ZB_Z_BITS + ZB_POINT_Z_FRAC_BITS));
|
||||
--
|
||||
2.43.0
|
||||
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
From cb43569fb11bb988335056622f6f8db4ac2c7a14 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Carvalho de Assis <acassis@gmail.com>
|
||||
Date: Thu, 24 Sep 2026 09:47:54 -0300
|
||||
Subject: [PATCH] zbuffer: do not over-read the source in
|
||||
ZB_copyFrameBuffer()
|
||||
|
||||
ZB_copyBuffer() copied `linesize` bytes per line, where linesize is the
|
||||
pitch of the destination buffer. When the destination is wider than
|
||||
the TinyGL buffer (e.g. a hardware framebuffer whose lines are padded),
|
||||
this read past the end of every source line and, on the last line, past
|
||||
the end of the TinyGL pixel buffer.
|
||||
|
||||
Copy zb->linesize bytes, the size of a TinyGL line, and keep using the
|
||||
destination pitch only to step through the destination.
|
||||
---
|
||||
src/zbuffer.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/zbuffer.c b/src/zbuffer.c
|
||||
index 6321340..e3e822c 100644
|
||||
--- a/src/zbuffer.c
|
||||
+++ b/src/zbuffer.c
|
||||
@@ -131,7 +131,7 @@ static void ZB_copyBuffer(ZBuffer* zb, void* buf, GLint linesize) {
|
||||
*(((PIXEL*)p1) + i) = *(q + i);
|
||||
}
|
||||
#else
|
||||
- memcpy(p1, q, linesize);
|
||||
+ memcpy(p1, q, zb->linesize);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ static void ZB_copyBuffer(ZBuffer* zb, void* buf, GLint linesize) {
|
||||
*(((PIXEL*)p1) + i) = *(q + i);
|
||||
}
|
||||
#else
|
||||
- memcpy(p1, q, linesize);
|
||||
+ memcpy(p1, q, zb->linesize);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
--
|
||||
2.43.0
|
||||
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
From a3c2ac6a18ef6a91fcbbe6027d7d07f7a15a08f6 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Carvalho de Assis <acassis@gmail.com>
|
||||
Date: Thu, 24 Sep 2026 09:50:16 -0300
|
||||
Subject: [PATCH] zbuffer.h: make the default allocator wrappers static inline
|
||||
|
||||
gl_malloc(), gl_zalloc() and gl_free() are defined in the public
|
||||
<zbuffer.h> as plain static functions when TGL_FEATURE_CUSTOM_MALLOC is
|
||||
0. Every application that includes the header but does not call them
|
||||
then gets three -Wunused-function warnings. Declaring them static
|
||||
inline keeps the same behaviour without the warnings.
|
||||
---
|
||||
include/zbuffer.h | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/include/zbuffer.h b/include/zbuffer.h
|
||||
index 886eb72..c54c9bd 100644
|
||||
--- a/include/zbuffer.h
|
||||
+++ b/include/zbuffer.h
|
||||
@@ -354,9 +354,9 @@ void *gl_zalloc(GLint size);
|
||||
#else
|
||||
#include<string.h>
|
||||
#include<stdlib.h>
|
||||
-static void gl_free(void* p) { free(p); }
|
||||
-static void* gl_malloc(GLint size) { return malloc(size); }
|
||||
-static void* gl_zalloc(GLint size) { return calloc(1, size); }
|
||||
+static inline void gl_free(void* p) { free(p); }
|
||||
+static inline void* gl_malloc(GLint size) { return malloc(size); }
|
||||
+static inline void* gl_zalloc(GLint size) { return calloc(1, size); }
|
||||
#endif
|
||||
|
||||
#endif /* _tgl_zbuffer_h_ */
|
||||
--
|
||||
2.43.0
|
||||
|
||||
|
|
@ -0,0 +1,182 @@
|
|||
From 202a4eba444f29055174ee33394a608607c4d35a Mon Sep 17 00:00:00 2001
|
||||
From: Alan Carvalho de Assis <acassis@gmail.com>
|
||||
Date: Sat, 26 Sep 2026 13:51:30 -0300
|
||||
Subject: [PATCH] Declare the input array parameters const, as OpenGL does
|
||||
|
||||
glMaterialfv(), glLightfv(), glLightModelfv(), the glVertex*v(),
|
||||
glColor*v(), glNormal*v(), glTexCoord*v() and glRasterPos*v() families
|
||||
only read the array they are passed, and OpenGL declares that parameter
|
||||
const. Do the same, so that callers can pass constant data, for
|
||||
example "static const GLfloat red[4]", without casts or warnings.
|
||||
---
|
||||
include/GL/gl.h | 28 ++++++++++++++--------------
|
||||
src/api.c | 16 ++++++++--------
|
||||
src/zraster.c | 6 +++---
|
||||
3 files changed, 25 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/include/GL/gl.h b/include/GL/gl.h
|
||||
index ab4a10b..1f651fc 100644
|
||||
--- a/include/GL/gl.h
|
||||
+++ b/include/GL/gl.h
|
||||
@@ -804,26 +804,26 @@ void glPlotPixel(GLint x, GLint y, GLuint pixel);
|
||||
#define PROTO_GL1(name) \
|
||||
void gl ## name ## 1f(GLfloat); \
|
||||
void gl ## name ## 1d(GLdouble); \
|
||||
-void gl ## name ## 1fv(GLfloat *); \
|
||||
-void gl ## name ## 1dv(GLdouble *);
|
||||
+void gl ## name ## 1fv(const GLfloat *); \
|
||||
+void gl ## name ## 1dv(const GLdouble *);
|
||||
|
||||
#define PROTO_GL2(name) \
|
||||
void gl ## name ## 2f(GLfloat ,GLfloat); \
|
||||
void gl ## name ## 2d(GLdouble ,GLdouble); \
|
||||
-void gl ## name ## 2fv(GLfloat *); \
|
||||
-void gl ## name ## 2dv(GLdouble *);
|
||||
+void gl ## name ## 2fv(const GLfloat *); \
|
||||
+void gl ## name ## 2dv(const GLdouble *);
|
||||
|
||||
#define PROTO_GL3(name) \
|
||||
void gl ## name ## 3f(GLfloat ,GLfloat ,GLfloat); \
|
||||
void gl ## name ## 3d(GLdouble ,GLdouble ,GLdouble); \
|
||||
-void gl ## name ## 3fv(GLfloat *); \
|
||||
-void gl ## name ## 3dv(GLdouble *);
|
||||
+void gl ## name ## 3fv(const GLfloat *); \
|
||||
+void gl ## name ## 3dv(const GLdouble *);
|
||||
|
||||
#define PROTO_GL4(name) \
|
||||
void gl ## name ## 4f(GLfloat ,GLfloat ,GLfloat, GLfloat ); \
|
||||
void gl ## name ## 4d(GLdouble ,GLdouble ,GLdouble, GLdouble ); \
|
||||
-void gl ## name ## 4fv(GLfloat *); \
|
||||
-void gl ## name ## 4dv(GLdouble *);
|
||||
+void gl ## name ## 4fv(const GLfloat *); \
|
||||
+void gl ## name ## 4dv(const GLdouble *);
|
||||
|
||||
PROTO_GL2(Vertex)
|
||||
PROTO_GL3(Vertex)
|
||||
@@ -915,14 +915,14 @@ GLboolean glAreTexturesResident( GLsizei n,
|
||||
GLboolean glIsTexture( GLuint texture);
|
||||
/* lighting */
|
||||
|
||||
-void glMaterialfv(GLint mode,GLint type,GLfloat *v);
|
||||
+void glMaterialfv(GLint mode,GLint type,const GLfloat *v);
|
||||
void glMaterialf(GLint mode,GLint type,GLfloat v);
|
||||
void glColorMaterial(GLint mode,GLint type);
|
||||
|
||||
-void glLightfv(GLint light,GLint type,GLfloat *v);
|
||||
+void glLightfv(GLint light,GLint type,const GLfloat *v);
|
||||
void glLightf(GLint light,GLint type,GLfloat v);
|
||||
void glLightModeli(GLint pname,GLint param);
|
||||
-void glLightModelfv(GLint pname,GLfloat *param);
|
||||
+void glLightModelfv(GLint pname,const GLfloat *param);
|
||||
|
||||
/* misc */
|
||||
|
||||
@@ -978,9 +978,9 @@ void glRasterPos2f(GLfloat, GLfloat);
|
||||
void glRasterPos3f(GLfloat, GLfloat, GLfloat);
|
||||
void glRasterPos4f(GLfloat, GLfloat, GLfloat, GLfloat);
|
||||
|
||||
-void glRasterPos2fv(GLfloat* v);
|
||||
-void glRasterPos3fv(GLfloat* v);
|
||||
-void glRasterPos4fv(GLfloat* v);
|
||||
+void glRasterPos2fv(const GLfloat* v);
|
||||
+void glRasterPos3fv(const GLfloat* v);
|
||||
+void glRasterPos4fv(const GLfloat* v);
|
||||
void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, void* data);
|
||||
void glPixelZoom(GLfloat x, GLfloat y);
|
||||
|
||||
diff --git a/src/api.c b/src/api.c
|
||||
index e310a1b..3f082b5 100644
|
||||
--- a/src/api.c
|
||||
+++ b/src/api.c
|
||||
@@ -17,7 +17,7 @@ void glVertex2f(GLfloat x, GLfloat y) { glVertex4f(x, y, 0, 1); }
|
||||
|
||||
void glVertex3f(GLfloat x, GLfloat y, GLfloat z) { glVertex4f(x, y, z, 1); }
|
||||
|
||||
-void glVertex3fv(GLfloat* v) { glVertex4f(v[0], v[1], v[2], 1); }
|
||||
+void glVertex3fv(const GLfloat* v) { glVertex4f(v[0], v[1], v[2], 1); }
|
||||
|
||||
/* glNormal */
|
||||
|
||||
@@ -40,7 +40,7 @@ void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) {
|
||||
glEnd();
|
||||
}
|
||||
|
||||
-void glNormal3fv(GLfloat* v) { glNormal3f(v[0], v[1], v[2]); }
|
||||
+void glNormal3fv(const GLfloat* v) { glNormal3f(v[0], v[1], v[2]); }
|
||||
|
||||
/* glColor */
|
||||
|
||||
@@ -58,7 +58,7 @@ void glColor4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a) {
|
||||
gl_add_op(p);
|
||||
}
|
||||
|
||||
-void glColor4fv(GLfloat* v) {
|
||||
+void glColor4fv(const GLfloat* v) {
|
||||
GLParam p[8];
|
||||
#include "error_check_no_context.h"
|
||||
p[0].op = OP_Color;
|
||||
@@ -75,7 +75,7 @@ void glColor4fv(GLfloat* v) {
|
||||
|
||||
void glColor3f(GLfloat x, GLfloat y, GLfloat z) { glColor4f(x, y, z, 1); }
|
||||
|
||||
-void glColor3fv(GLfloat* v) { glColor4f(v[0], v[1], v[2], 1); }
|
||||
+void glColor3fv(const GLfloat* v) { glColor4f(v[0], v[1], v[2], 1); }
|
||||
|
||||
/* TexCoord */
|
||||
|
||||
@@ -93,7 +93,7 @@ void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q) {
|
||||
|
||||
void glTexCoord2f(GLfloat s, GLfloat t) { glTexCoord4f(s, t, 0, 1); }
|
||||
|
||||
-void glTexCoord2fv(GLfloat* v) { glTexCoord4f(v[0], v[1], 0, 1); }
|
||||
+void glTexCoord2fv(const GLfloat* v) { glTexCoord4f(v[0], v[1], 0, 1); }
|
||||
|
||||
void glEdgeFlag(GLint flag) {
|
||||
GLParam p[2];
|
||||
@@ -360,7 +360,7 @@ void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLd
|
||||
|
||||
/* lightening */
|
||||
|
||||
-void glMaterialfv(GLint mode, GLint type, GLfloat* v) {
|
||||
+void glMaterialfv(GLint mode, GLint type, const GLfloat* v) {
|
||||
GLParam p[7];
|
||||
GLint i, n;
|
||||
#define NEED_CONTEXT
|
||||
@@ -410,7 +410,7 @@ void glColorMaterial(GLint mode, GLint type) {
|
||||
gl_add_op(p);
|
||||
}
|
||||
|
||||
-void glLightfv(GLint light, GLint type, GLfloat* v) {
|
||||
+void glLightfv(GLint light, GLint type, const GLfloat* v) {
|
||||
GLParam p[7];
|
||||
GLint i;
|
||||
#include "error_check_no_context.h"
|
||||
@@ -450,7 +450,7 @@ void glLightModeli(GLint pname, GLint param) {
|
||||
gl_add_op(p);
|
||||
}
|
||||
|
||||
-void glLightModelfv(GLint pname, GLfloat* param) {
|
||||
+void glLightModelfv(GLint pname, const GLfloat* param) {
|
||||
GLParam p[6];
|
||||
GLint i;
|
||||
#include "error_check_no_context.h"
|
||||
diff --git a/src/zraster.c b/src/zraster.c
|
||||
index d19cfb2..334e317 100644
|
||||
--- a/src/zraster.c
|
||||
+++ b/src/zraster.c
|
||||
@@ -67,9 +67,9 @@ void glopRasterPos(GLParam* p) {
|
||||
void glRasterPos2f(GLfloat x, GLfloat y) { glRasterPos4f(x, y, 0, 1); }
|
||||
void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z) { glRasterPos4f(x, y, z, 1); }
|
||||
|
||||
-void glRasterPos2fv(GLfloat* v) { glRasterPos2f(v[0], v[1]); }
|
||||
-void glRasterPos3fv(GLfloat* v) { glRasterPos3f(v[0], v[1], v[2]); }
|
||||
-void glRasterPos4fv(GLfloat* v) { glRasterPos4f(v[0], v[1], v[2], v[3]); }
|
||||
+void glRasterPos2fv(const GLfloat* v) { glRasterPos2f(v[0], v[1]); }
|
||||
+void glRasterPos3fv(const GLfloat* v) { glRasterPos3f(v[0], v[1], v[2]); }
|
||||
+void glRasterPos4fv(const GLfloat* v) { glRasterPos4f(v[0], v[1], v[2], v[3]); }
|
||||
|
||||
void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, void* data) {
|
||||
/* TODO: Come up with a clever scheme for storing the data to avoid pointer dependency. */
|
||||
--
|
||||
2.43.0
|
||||
|
||||
153
graphics/tinygl/CMakeLists.txt
Normal file
153
graphics/tinygl/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
# ##############################################################################
|
||||
# apps/graphics/tinygl/CMakeLists.txt
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
|
||||
# license agreements. See the NOTICE file distributed with this work for
|
||||
# additional information regarding copyright ownership. The ASF licenses this
|
||||
# file to you under the Apache License, Version 2.0 (the "License"); you may not
|
||||
# use this file except in compliance with the License. You may obtain a copy of
|
||||
# the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations under
|
||||
# the License.
|
||||
#
|
||||
# ##############################################################################
|
||||
|
||||
if(CONFIG_GRAPHICS_TINYGL)
|
||||
|
||||
# ############################################################################
|
||||
# Fetch and patch TinyGL
|
||||
# ############################################################################
|
||||
|
||||
set(TINYGL_DIR ${CMAKE_CURRENT_LIST_DIR}/tinygl)
|
||||
|
||||
if(NOT EXISTS ${TINYGL_DIR})
|
||||
file(GLOB TINYGL_PATCHES
|
||||
${CMAKE_CURRENT_LIST_DIR}/[0-9][0-9][0-9][0-9]-*.patch)
|
||||
list(SORT TINYGL_PATCHES)
|
||||
set(TINYGL_PATCH_COMMAND "")
|
||||
foreach(p ${TINYGL_PATCHES})
|
||||
list(
|
||||
APPEND
|
||||
TINYGL_PATCH_COMMAND
|
||||
COMMAND
|
||||
patch
|
||||
-s
|
||||
-N
|
||||
-p1
|
||||
-d
|
||||
${TINYGL_DIR}
|
||||
-i
|
||||
${p})
|
||||
endforeach()
|
||||
list(POP_FRONT TINYGL_PATCH_COMMAND)
|
||||
|
||||
FetchContent_Declare(
|
||||
tinygl_fetch
|
||||
URL ${CONFIG_TINYGL_URL}/${CONFIG_TINYGL_VERSION}.tar.gz SOURCE_DIR
|
||||
${TINYGL_DIR} BINARY_DIR
|
||||
${NUTTX_BINARY_DIR}/apps/graphics/tinygl/tinygl
|
||||
PATCH_COMMAND ${TINYGL_PATCH_COMMAND}
|
||||
DOWNLOAD_NO_PROGRESS true
|
||||
TIMEOUT 60)
|
||||
|
||||
FetchContent_GetProperties(tinygl_fetch)
|
||||
|
||||
if(NOT tinygl_fetch_POPULATED)
|
||||
FetchContent_Populate(tinygl_fetch)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ############################################################################
|
||||
# Feature switches (they change public structures, so export them)
|
||||
# ############################################################################
|
||||
|
||||
macro(tinygl_bool var cfg)
|
||||
if(${cfg})
|
||||
set(${var} 1)
|
||||
else()
|
||||
set(${var} 0)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
tinygl_bool(TGL_32 CONFIG_TINYGL_RENDER_BITS_32)
|
||||
tinygl_bool(TGL_16 CONFIG_TINYGL_RENDER_BITS_16)
|
||||
tinygl_bool(TGL_SELECT CONFIG_TINYGL_SELECT)
|
||||
tinygl_bool(TGL_POLYGON CONFIG_TINYGL_GL_POLYGON)
|
||||
tinygl_bool(TGL_BLEND CONFIG_TINYGL_BLEND)
|
||||
tinygl_bool(TGL_BLEND_DP CONFIG_TINYGL_BLEND_DRAW_PIXELS)
|
||||
tinygl_bool(TGL_STIPPLE CONFIG_TINYGL_POLYGON_STIPPLE)
|
||||
tinygl_bool(TGL_NODRAW CONFIG_TINYGL_NO_DRAW_COLOR)
|
||||
tinygl_bool(TGL_ERRCHK CONFIG_TINYGL_ERROR_CHECK)
|
||||
|
||||
set(TINYGL_DEFINES
|
||||
TGL_FEATURE_32_BITS=${TGL_32}
|
||||
TGL_FEATURE_16_BITS=${TGL_16}
|
||||
TGL_FEATURE_TEXTURE_POW2=${CONFIG_TINYGL_TEXTURE_POW2}
|
||||
TGL_FEATURE_ALT_RENDERMODES=${TGL_SELECT}
|
||||
TGL_FEATURE_GL_POLYGON=${TGL_POLYGON}
|
||||
TGL_FEATURE_BLEND=${TGL_BLEND}
|
||||
TGL_FEATURE_BLEND_DRAW_PIXELS=${TGL_BLEND_DP}
|
||||
TGL_FEATURE_POLYGON_STIPPLE=${TGL_STIPPLE}
|
||||
TGL_FEATURE_NO_DRAW_COLOR=${TGL_NODRAW}
|
||||
TGL_FEATURE_ERROR_CHECK=${TGL_ERRCHK})
|
||||
|
||||
if(CONFIG_TINYGL_POLYGON_MAX_VERTEX)
|
||||
list(APPEND TINYGL_DEFINES
|
||||
POLYGON_MAX_VERTEX=${CONFIG_TINYGL_POLYGON_MAX_VERTEX})
|
||||
endif()
|
||||
|
||||
# ############################################################################
|
||||
# Library
|
||||
# ############################################################################
|
||||
|
||||
set(SRCS
|
||||
${TINYGL_DIR}/src/accum.c
|
||||
${TINYGL_DIR}/src/api.c
|
||||
${TINYGL_DIR}/src/arrays.c
|
||||
${TINYGL_DIR}/src/clear.c
|
||||
${TINYGL_DIR}/src/clip.c
|
||||
${TINYGL_DIR}/src/get.c
|
||||
${TINYGL_DIR}/src/image_util.c
|
||||
${TINYGL_DIR}/src/init.c
|
||||
${TINYGL_DIR}/src/light.c
|
||||
${TINYGL_DIR}/src/list.c
|
||||
${TINYGL_DIR}/src/matrix.c
|
||||
${TINYGL_DIR}/src/memory.c
|
||||
${TINYGL_DIR}/src/misc.c
|
||||
${TINYGL_DIR}/src/msghandling.c
|
||||
${TINYGL_DIR}/src/select.c
|
||||
${TINYGL_DIR}/src/specbuf.c
|
||||
${TINYGL_DIR}/src/texture.c
|
||||
${TINYGL_DIR}/src/vertex.c
|
||||
${TINYGL_DIR}/src/zbuffer.c
|
||||
${TINYGL_DIR}/src/zline.c
|
||||
${TINYGL_DIR}/src/zmath.c
|
||||
${TINYGL_DIR}/src/zpostprocess.c
|
||||
${TINYGL_DIR}/src/zraster.c
|
||||
${TINYGL_DIR}/src/ztext.c
|
||||
${TINYGL_DIR}/src/ztriangle.c)
|
||||
|
||||
nuttx_add_library(tinygl)
|
||||
target_sources(tinygl PRIVATE ${SRCS})
|
||||
target_compile_options(
|
||||
tinygl PRIVATE -Wno-shadow -Wno-undef -Wno-unused-function
|
||||
-Wno-unknown-pragmas -Wno-unused-variable)
|
||||
target_compile_definitions(tinygl PRIVATE NDEBUG)
|
||||
|
||||
set_property(
|
||||
TARGET nuttx
|
||||
APPEND
|
||||
PROPERTY NUTTX_INCLUDE_DIRECTORIES ${TINYGL_DIR}/include)
|
||||
set_property(
|
||||
TARGET nuttx
|
||||
APPEND
|
||||
PROPERTY NUTTX_DEFINITIONS ${TINYGL_DEFINES})
|
||||
endif()
|
||||
108
graphics/tinygl/Kconfig
Normal file
108
graphics/tinygl/Kconfig
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
#
|
||||
# For a description of the syntax of this configuration file,
|
||||
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||
#
|
||||
|
||||
menuconfig GRAPHICS_TINYGL
|
||||
bool "TinyGL software OpenGL 1.1 subset"
|
||||
default n
|
||||
---help---
|
||||
Enable TinyGL, a small software-only implementation of a subset of
|
||||
OpenGL 1.1 originally written by Fabrice Bellard and maintained by
|
||||
C-Chads (https://github.com/C-Chads/tinygl).
|
||||
|
||||
TinyGL renders into a memory buffer (struct ZBuffer). The result
|
||||
can be copied to a NuttX framebuffer device (/dev/fbN) with
|
||||
ZB_copyFrameBuffer(), or TinyGL can render directly into the
|
||||
mmap()ed framebuffer memory.
|
||||
|
||||
The sources are downloaded from GitHub at build time and patched
|
||||
for NuttX (see the patches in apps/graphics/tinygl).
|
||||
|
||||
if GRAPHICS_TINYGL
|
||||
|
||||
config TINYGL_URL
|
||||
string "TinyGL download URL"
|
||||
default "https://github.com/C-Chads/tinygl/archive"
|
||||
---help---
|
||||
Base URL of the TinyGL source archives. The file
|
||||
<TINYGL_VERSION>.tar.gz is downloaded from here.
|
||||
|
||||
config TINYGL_VERSION
|
||||
string "TinyGL git revision"
|
||||
default "36a7987e7bebfda19615ea33341b1cc0ff9c3b13"
|
||||
---help---
|
||||
Git commit of C-Chads/tinygl to download. The NuttX patches are
|
||||
made against this revision.
|
||||
|
||||
choice
|
||||
prompt "TinyGL pixel format"
|
||||
default TINYGL_RENDER_BITS_32
|
||||
|
||||
config TINYGL_RENDER_BITS_32
|
||||
bool "32 bits per pixel (XRGB8888)"
|
||||
|
||||
config TINYGL_RENDER_BITS_16
|
||||
bool "16 bits per pixel (RGB565)"
|
||||
|
||||
endchoice # TinyGL pixel format
|
||||
|
||||
config TINYGL_TEXTURE_POW2
|
||||
int "Texture size (log2)"
|
||||
default 8
|
||||
range 4 10
|
||||
---help---
|
||||
TinyGL uses a single, fixed texture size set at compile time. All
|
||||
textures are resized to (1 << TINYGL_TEXTURE_POW2) pixels square.
|
||||
The default of 8 means 256x256 textures, which use 256KiB each in
|
||||
32-bit mode.
|
||||
|
||||
config TINYGL_SELECT
|
||||
bool "Support GL_SELECT and GL_FEEDBACK render modes"
|
||||
default n
|
||||
---help---
|
||||
Enable glRenderMode(GL_SELECT) (object picking with
|
||||
glSelectBuffer()/glLoadName()) and GL_FEEDBACK. Enabling this makes
|
||||
all rendering slightly slower.
|
||||
|
||||
config TINYGL_GL_POLYGON
|
||||
bool "Support GL_POLYGON and GL_LINE_LOOP"
|
||||
default y
|
||||
---help---
|
||||
Enable rendering of general polygons (up to
|
||||
TINYGL_POLYGON_MAX_VERTEX vertices) and line loops.
|
||||
|
||||
config TINYGL_POLYGON_MAX_VERTEX
|
||||
int "Maximum number of vertices in a GL_POLYGON"
|
||||
default 16
|
||||
depends on TINYGL_GL_POLYGON
|
||||
|
||||
config TINYGL_BLEND
|
||||
bool "Support blending (glBlendFunc)"
|
||||
default y
|
||||
|
||||
config TINYGL_BLEND_DRAW_PIXELS
|
||||
bool "Apply blending to glDrawPixels()"
|
||||
default n
|
||||
depends on TINYGL_BLEND
|
||||
|
||||
config TINYGL_POLYGON_STIPPLE
|
||||
bool "Support polygon stipple (glPolygonStipple)"
|
||||
default y
|
||||
|
||||
config TINYGL_NO_DRAW_COLOR
|
||||
bool "Skip texels with the no-draw color (0xff00ff)"
|
||||
default y
|
||||
---help---
|
||||
When enabled, texture mapped pixels whose color is exactly
|
||||
magenta (0xff00ff) are not drawn, which gives cheap cut-out
|
||||
textures.
|
||||
|
||||
config TINYGL_ERROR_CHECK
|
||||
bool "Enable glGetError() error checking"
|
||||
default n
|
||||
---help---
|
||||
Set GL error flags on invalid calls so that they can be read with
|
||||
glGetError(). Useful for debugging, slightly slower.
|
||||
|
||||
endif # GRAPHICS_TINYGL
|
||||
55
graphics/tinygl/Make.defs
Normal file
55
graphics/tinygl/Make.defs
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
############################################################################
|
||||
# apps/graphics/tinygl/Make.defs
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership. The
|
||||
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance with the
|
||||
# License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
ifneq ($(CONFIG_GRAPHICS_TINYGL),)
|
||||
CONFIGURED_APPS += $(APPDIR)/graphics/tinygl
|
||||
|
||||
# TinyGL public headers: <GL/gl.h>, <zbuffer.h> and <zfeatures.h>
|
||||
|
||||
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/graphics/tinygl/tinygl/include
|
||||
CXXFLAGS += ${INCDIR_PREFIX}$(APPDIR)/graphics/tinygl/tinygl/include
|
||||
|
||||
# The TinyGL feature switches change the layout of public structures (for
|
||||
# example struct ZBuffer and the PIXEL type), so they must be seen by both
|
||||
# the library and every application that includes the TinyGL headers.
|
||||
|
||||
tgl_bool = $(if $(filter y,$(1)),1,0)
|
||||
|
||||
TINYGL_DEFINES = -DTGL_FEATURE_32_BITS=$(call tgl_bool,$(CONFIG_TINYGL_RENDER_BITS_32))
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_16_BITS=$(call tgl_bool,$(CONFIG_TINYGL_RENDER_BITS_16))
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_TEXTURE_POW2=$(CONFIG_TINYGL_TEXTURE_POW2)
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_ALT_RENDERMODES=$(call tgl_bool,$(CONFIG_TINYGL_SELECT))
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_GL_POLYGON=$(call tgl_bool,$(CONFIG_TINYGL_GL_POLYGON))
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_BLEND=$(call tgl_bool,$(CONFIG_TINYGL_BLEND))
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_BLEND_DRAW_PIXELS=$(call tgl_bool,$(CONFIG_TINYGL_BLEND_DRAW_PIXELS))
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_POLYGON_STIPPLE=$(call tgl_bool,$(CONFIG_TINYGL_POLYGON_STIPPLE))
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_NO_DRAW_COLOR=$(call tgl_bool,$(CONFIG_TINYGL_NO_DRAW_COLOR))
|
||||
TINYGL_DEFINES += -DTGL_FEATURE_ERROR_CHECK=$(call tgl_bool,$(CONFIG_TINYGL_ERROR_CHECK))
|
||||
|
||||
ifneq ($(CONFIG_TINYGL_POLYGON_MAX_VERTEX),)
|
||||
TINYGL_DEFINES += -DPOLYGON_MAX_VERTEX=$(CONFIG_TINYGL_POLYGON_MAX_VERTEX)
|
||||
endif
|
||||
|
||||
CFLAGS += $(TINYGL_DEFINES)
|
||||
CXXFLAGS += $(TINYGL_DEFINES)
|
||||
|
||||
endif
|
||||
100
graphics/tinygl/Makefile
Normal file
100
graphics/tinygl/Makefile
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
############################################################################
|
||||
# apps/graphics/tinygl/Makefile
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership. The
|
||||
# ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance with the
|
||||
# License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
include $(APPDIR)/Make.defs
|
||||
|
||||
# TinyGL software OpenGL library
|
||||
|
||||
TINYGL_URL = $(patsubst "%",%,$(strip $(CONFIG_TINYGL_URL)))
|
||||
TINYGL_VERSION = $(patsubst "%",%,$(strip $(CONFIG_TINYGL_VERSION)))
|
||||
TINYGL_TARBALL = tinygl-$(TINYGL_VERSION).tar.gz
|
||||
TINYGL_UNPACK = tinygl
|
||||
TINYGL_PATCHES = $(sort $(wildcard $(CURDIR)/[0-9][0-9][0-9][0-9]-*.patch))
|
||||
|
||||
SRC = $(TINYGL_UNPACK)/src
|
||||
|
||||
CSRCS = $(SRC)/accum.c
|
||||
CSRCS += $(SRC)/api.c
|
||||
CSRCS += $(SRC)/arrays.c
|
||||
CSRCS += $(SRC)/clear.c
|
||||
CSRCS += $(SRC)/clip.c
|
||||
CSRCS += $(SRC)/get.c
|
||||
CSRCS += $(SRC)/image_util.c
|
||||
CSRCS += $(SRC)/init.c
|
||||
CSRCS += $(SRC)/light.c
|
||||
CSRCS += $(SRC)/list.c
|
||||
CSRCS += $(SRC)/matrix.c
|
||||
CSRCS += $(SRC)/memory.c
|
||||
CSRCS += $(SRC)/misc.c
|
||||
CSRCS += $(SRC)/msghandling.c
|
||||
CSRCS += $(SRC)/select.c
|
||||
CSRCS += $(SRC)/specbuf.c
|
||||
CSRCS += $(SRC)/texture.c
|
||||
CSRCS += $(SRC)/vertex.c
|
||||
CSRCS += $(SRC)/zbuffer.c
|
||||
CSRCS += $(SRC)/zline.c
|
||||
CSRCS += $(SRC)/zmath.c
|
||||
CSRCS += $(SRC)/zpostprocess.c
|
||||
CSRCS += $(SRC)/zraster.c
|
||||
CSRCS += $(SRC)/ztext.c
|
||||
CSRCS += $(SRC)/ztriangle.c
|
||||
|
||||
# TinyGL is third party code, silence the warnings that the NuttX build
|
||||
# enables but that upstream does not care about.
|
||||
|
||||
CFLAGS += -Wno-shadow -Wno-undef -Wno-unused-function -Wno-unknown-pragmas
|
||||
CFLAGS += -Wno-unused-variable -DNDEBUG
|
||||
|
||||
$(TINYGL_TARBALL):
|
||||
$(ECHO_BEGIN)"Downloading: $(TINYGL_TARBALL)"
|
||||
$(Q) curl -L $(if $(V),,-Ss) -o $(TINYGL_TARBALL) \
|
||||
$(TINYGL_URL)/$(TINYGL_VERSION).tar.gz
|
||||
$(ECHO_END)
|
||||
|
||||
# The stamp file marks a complete unpack + patch, so that a partially
|
||||
# created tree (for example an object directory) is never mistaken for
|
||||
# the sources.
|
||||
|
||||
TINYGL_STAMP = $(TINYGL_UNPACK)/.nuttx_patched
|
||||
|
||||
$(TINYGL_STAMP): $(TINYGL_TARBALL)
|
||||
$(ECHO_BEGIN)"Unpacking: $(TINYGL_TARBALL) -> $(TINYGL_UNPACK)"
|
||||
$(Q) rm -rf $(TINYGL_UNPACK) tinygl-$(TINYGL_VERSION)
|
||||
$(Q) tar zxf $(TINYGL_TARBALL)
|
||||
$(Q) mv tinygl-$(TINYGL_VERSION) $(TINYGL_UNPACK)
|
||||
$(Q) for p in $(TINYGL_PATCHES); do \
|
||||
patch -s -N -p1 -d $(TINYGL_UNPACK) < $$p || exit 1; \
|
||||
done
|
||||
$(Q) touch $@
|
||||
$(ECHO_END)
|
||||
|
||||
# Download and unpack tarball if no git repo found
|
||||
|
||||
ifeq ($(wildcard $(TINYGL_UNPACK)/.git),)
|
||||
context:: $(TINYGL_STAMP)
|
||||
|
||||
distclean::
|
||||
$(call DELDIR, $(TINYGL_UNPACK))
|
||||
$(call DELFILE, $(TINYGL_TARBALL))
|
||||
endif
|
||||
|
||||
include $(APPDIR)/Application.mk
|
||||
Loading…
Add table
Add a link
Reference in a new issue