608|0

504

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

【超小型 Linux 开发套件Quantum Tiny Linux】移植tinygl实现3D显示 [复制链接]

本帖最后由 qinyunti 于 2024-7-20 13:39 编辑

源码如下

 

src.zip (143.37 KB, 下载次数: 0)

 

 

视频

feb906e36f1749077ddea1187ea43a16

 

b站视频


 

微信公众号视频

移植tinygl实现3D显示-基于Quantum开发板 (qq.com)
视频号

  • 前言

前面我们基于fb实现了ftf操作接口,现在开始就可以移植各种GUI了,

我们前面实现了mpu6050的角度获取,后面就可以实现角度的3D显示。

这一篇我们先来移植tinygl为3D显示做准备。

 

Tinygl项目网站见https://bellard.org/TinyGL/

 

Tinygl是OpenGL的一个嵌入式实现子集

 

下载代码

git clone https://github.com/jserv/tinygl

 

或者直接下载打包源码

https://bellard.org/TinyGL/TinyGL-0.4.1.tar.gz

 

将TinyGL-0.4.1.tar.gz导入到开发板

 

解压

tar -xvf TinyGL-0.4.1.tar.gz

 

cd TinyGL

 

make

 

 

可以看到能够编译,

但是默认需要x X display,所以我们需要移植到我们的tft显示,使用之前的基于fb的lcd接口封装。

 

 

删除不必要的文件最终目录如下

 

 

 

复制examples下raw下的gears.c样例程序进行修改。

  • 接口移植

Tinygl显示基于buffer,即最终显示内容是写入buffer的

初始化 ZB_open返回帧buffer,frameBuffer

    // initialize TinyGL

    ZBuffer *frameBuffer = ZB_open(winSizeX, winSizeY,

#if TGL_FEATURE_RENDER_BITS == 32

                                   ZB_MODE_RGBA,

#else

                                   ZB_MODE_5R6G5B,

#endif

                                   0);

    if (!frameBuffer) {

        printf("\nZB_open failed!");

        exit(1);

    }

    glInit(frameBuffer);

 

 

 

需要刷新显示时将帧frameBuffer拷贝出来到imbuf,然后显示imbuf即可

        ZB_copyFrameBuffer(frameBuffer, imbuf, winSizeX * sizeof(PIXEL));

或者直接修改 ZB_copyFrameBuffer

将frameBuffer直接写入用户的显存,无需再经过imbuf中转,减少一次内存拷贝。

 

这里在原来lcd.c上增加一个接口

int lcd_fill(uint8_t* buffer)

{

    memcpy(s_fbp, buffer, s_vinfo.xres*s_vinfo.yres*s_vinfo.bits_per_pixel / 8);

}

 

如下进行显示

        ZB_copyFrameBuffer(frameBuffer, imbuf, winSizeX * sizeof(PIXEL));

        lcd_fill((uint8_t*)imbuf);

 

  • 配置

修改显示的位宽,我们这里是16位

\include\zfeatures.h下修改

#define TGL_FEATURE_16_BITS 0

#define TGL_FEATURE_32_BITS 1

 

#define TGL_FEATURE_16_BITS 0

#define TGL_FEATURE_32_BITS 0

 

 

  • 测试

编译

gcc tinygl/src/*.c gears.c lcd.c -I tinygl/include/ -o gears -lm

 

 

运行

 ./gears

 

测试效果见视频

 

此帖出自Linux开发论坛
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表