偶然间发现大神级程序员Fabrice Bellard的作品,tinygl,可以不使用GPU来实现OPENGL 3d显示,甚至MCU都可以运行。
我在STM32F429上移植运行了,分辨率为800*480,效果还不错,奈何MCU性能的原因,帧率较低。
移植的话需要注意,需要较大的RAM用于heap分配buffer,MCU通常需要有外挂RAM。而且有浮点数计算,尽量把FPU打开。后续有时间进行优化。
以下为机翻的介绍:
介绍
TinyGL旨在为嵌入式系统或游戏提供OpenGL *子集的一个非常小的实现。它是一个纯软件的实现。只实现了主要的OpenGL调用。
TinyGL的主要优点是快速和简单,因为它不必完全兼容OpenGL。特别是纹理映射和几何变换的速度非常快。TinyGL比Mesa或Solaris OpenWin为VReng虚拟现实引擎实现的OpenGL快得多。
TinyGL的主要特性有:
与OpenGL兼容的报头(报头改编自Brian Paul等人的very good Mesa)。
类似zlib的许可证,便于在商业设计中集成(请阅读许可证文件)。
GLX的子集,便于使用X窗口进行测试。
类似于API (NGLX)来将其与NanoX一起使用。
BeOS下BGLView的子集(感谢Peder Blekken)。
OpenGL喜欢闪电。
有限的支持OpenGL 1.1数组。
完成OpenGL选择模式处理对象拾取。
16位Z缓冲区。16位RGB显示。高速抖动到8位,如果需要。高速转换到24或32位。
快速Gouraud着色优化为16位RGB。
快速的纹理映射能力,具有透视校正和纹理对象。
32位浮点运算。
非常小:在x86上编译后的代码大小约为40 kB。
GCC在32/64位体系结构上的C语言源代码。在x86-Linux和sparc-Solaris上进行了测试。
体系结构
TinyGL由四个主要模块组成:
数学例程(zmath)。
opengl类仿真(zgl)。
Z缓冲区和光栅化(zbuffer)。
GLX接口(zglx)。