由于工作的需要,最近研究了一下OpenGL.都说它是个3D图象处理标准。可这两天才有点明白OpenGL到底是啥意思
为什么说是标准呢?因为OpenGL 提供了一套标准的API接口函数。标准定好了后,用户根据这套接口函数写应用程序,而显示芯片厂商要想实现OpenGL功能,只需要实现相应的接口函数即可。 这样用户也能方便的将代码移植到其他平台上去了。
之前有句说的比较经典“三流公司卖质量,二流公司卖服务,一流公司卖标准”。在这方面属于中国公司的标准和协议太少了
闲话说的有点多了,下面介绍我的平台,用的是ST-linux ,主芯片是ST的sti7105. ST提供的sdk里,提供了OpenGL ES 1.1的支持,但好些个API函数没实现,反正我在网上找的OpenGL的例子都用不了
。 为了满足我对OpenGL的好奇心,只能找找不基于ST平台的OpenGL库了,但这样的缺点就是效率低,毕竟一个是软的,另一个是硬的。
具体步骤如下:
根据自己的情况做了些修改,因此记录下来。
tar -xjf ../picogl-20051108.tar.tar
cd PicoGL/
mkdir install
grep -n -r "DGLX_IMPL_HEADER" ./ --color
./examples/Makefile.am:4: -DGLX_IMPL_HEADER="\"$(GLX_IMPL_HEADER)\"" \
./examples/Makefile.in:213: -DGLX_IMPL_HEADER="\"$(GLX_IMPL_HEADER)\"" \
./src/Makefile.am:41: -DGLX_IMPL_HEADER="\"$(GLX_IMPL_HEADER)\""
./src/glu/Makefile.am:15: -DGLX_IMPL_HEADER="\"$(GLX_IMPL_HEADER)\""
./src/glu/Makefile.in:212: -DGLX_IMPL_HEADER="\"$(GLX_IMPL_HEADER)\""
./src/Makefile.in:253: -DGLX_IMPL_HEADER="\"$(GLX_IMPL_HEADER)\""
将所有的 -DGLX_IMPL_HEADER="\"$(GLX_IMPL_HEADER)\""
改为: -DGLX_IMPL_HEADER="$(GLX_IMPL_HEADER)"
./configure CC=sh4-linux-gcc --prefix=$PWD/install --host=sh4-linux --with-backend=vesafb
vi include/GL/glx.h
注释掉 #include GLX_IMPL_HEADER 一行,直接include "glx_impl.h" 文件的路径:
#include "/home/terry/Workdir/Applications/OpenGL/PicoGL/backends/vesafb/glx_impl.h"
另外,修改backends/vesafb/tk.c中,initialize_fbdev函数有关VarInfo的设置:
#if 0
if (VarInfo.bits_per_pixel == 16) (VarInfo.bits_per_pixel == 15){
VarInfo.red.offset = 11;
VarInfo.green.offset = 5;
VarInfo.blue.offset = 0;
VarInfo.red.length = 5;
VarInfo.green.length = 6;
VarInfo.blue.length = 5;
VarInfo.transp.offset = 0;
VarInfo.transp.length = 0;
}
else if (VarInfo.bits_per_pixel == 32) {
VarInfo.red.offset = 16;
VarInfo.green.offset = 8;
VarInfo.blue.offset = 0;
VarInfo.transp.offset = 24;
VarInfo.red.length = 8;
VarInfo.green.length = 8;
VarInfo.blue.length = 8;
VarInfo.transp.length = 8;
}
/* timing values taken from /etc/fb.modes (1280x1024 @ 75Hz) */
VarInfo.xres_virtual = VarInfo.xres = 1920;
VarInfo.yres_virtual = VarInfo.yres = 1080;
VarInfo.pixclock = 7408;
VarInfo.left_margin = 248;
VarInfo.right_margin = 16;
VarInfo.upper_margin = 38;
VarInfo.lower_margin = 1;
VarInfo.hsync_len = 144;
VarInfo.vsync_len = 3;
VarInfo.xoffset = 0;
VarInfo.yoffset = 0;
VarInfo.nonstd = 0;
VarInfo.vmode &= ~FB_VMODE_YWRAP; /* turn off scrolling */
/* set new variable screen info */
if (ioctl(FrameBufferFD, FBIOPUT_VSCREENINFO, &VarInfo)) {
fprintf(stderr, "ioctl(FBIOPUT_VSCREENINFO failed): %s\n",
strerror(errno));
exit(1);
}
#endif
我是把它们都注释掉了,因为我不需要再对framebuffer进行设置了,直接用默认的即可。
make && make install
安装成功后,在install 文件夹下:
./
|-- bin
| |-- gears
| |-- mech
| |-- spin
| `-- texobj
`-- lib
|-- libPicoGL.a
|-- libPicoGL.la
|-- libPicoGL.so -> libPicoGL.so.0.0.0
|-- libPicoGL.so.0 -> libPicoGL.so.0.0.0
|-- libPicoGL.so.0.0.0
|-- libPicoGLU.a
|-- libPicoGLU.la
|-- libPicoGLU.so -> libPicoGLU.so.0.0.0
|-- libPicoGLU.so.0 -> libPicoGLU.so.0.0.0
`-- libPicoGLU.so.0.0.0
bin/目录下就是编译好的例子,直接将编译好的bin,lib 拷贝到目标板上。就可以显示了。
也可以静态编译这些例子。
cd examples/
sh4-linux-gcc -o cube-sh -L ../install/lib/libPicoGL.so -L ../install/lib/libPicoGLU.so -lm cube.o ../install/lib/libPicoGL.a ../install/lib/libPicoGLU.a
现在可以到板子上运行cube-sh 程序了。如果成功了,可以看到一个机器人一步一步望前走
。
接下来就等ST的支持了,想办法找他们的技术支持提供一个OpenGL的例子,好让我在板子上看看效果如何。有新的消息我回写出来。
阅读(3533) | 评论(0) | 转发(0) |