原帖地址:http://www.cevx.com/bbs/viewthread.php?tid=11343&highlight=opengl
在vxworks下进行OpenGL编程的环境搭建 一、前言 OpenGL 著名的API,其主要作用是依据照相机的设置,将指定图元绘制到帧缓冲中去。 Mesa 是OpenGL的一个具体实现,目前版本是7.0.2 DRI 是直接渲染架构(Direct Render Infrustructure)。包含了诸如ATI r300显卡的子项目 Mesa原先是为UNIX/X11设计的,Mesa对于OpenGL的实现是纯软件的,不含硬件加速,所以跑3D图形时帧率低。 DRI提供了一个安全的接口,让Mesa(以及其他OpenGL实现)可以安全的使用显卡提供的硬件加速功能。 风河对于Mesa的支持貌似在5.0就停止更新了,现在Mesa7.0.2中关于windml中跑3D的代码还是N年以前的 但对于入门OPENGL,学习空间、投影变换,光照,纹理,显示列表等概念这已经足够了 所以写这个帖子只是让大家知道如何在vxworks下开始步入OPENGL世界,学习OPENGL基本概念 而要真正开发应用程序,就一定要用DRI了,这就不在本文范围内了 二、准备工作 我的开发环境是 Tornado 2.2 VxWorks 5.5 WindML 3.0 Mesa 4.0(后面提供下载)
三、编译Mesa for WindML 3D图形库 下载MESA 4.0后,解压到c:/Tornado 2.2/target/src下 目录结构如图所示
在Tornado下,建立一个可下载工程,基于SIMNTgnu的 然后添加以下所有的源文件到你的工程,不要漏哦 #### GL ##### (最主要的图形库) GL_SOURCES = / api_arrayelt.c /(在C:/Tornado2.2/target/src/Mesa/src下) api_loopback.c / api_noop.c / api_validate.c / accum.c / attrib.c / blend.c / buffers.c / clip.c / colortab.c / config.c / context.c / convolve.c / debug.c / depth.c / dispatch.c / dlist.c / drawpix.c / enable.c / enums.c / eval.c / extensions.c / feedback.c / fog.c / get.c / glapi.c / glthread.c / hash.c / hint.c / histogram.c / image.c / imports.c / light.c / lines.c / matrix.c / mem.c / mmath.c / pixel.c / points.c / polygon.c / rastpos.c / state.c / stencil.c / texformat.c / teximage.c / texobj.c / texstate.c / texstore.c / texutil.c / varray.c / vtxfmt.c / X86/x86.c /(C:/Tornado2.2/target/src/Mesa/src/X86下) X86/common_x86.c / X86/3dnow.c / X86/sse.c / math/m_debug_clip.c /(C:/Tornado2.2/target/src/Mesa/src/math下) math/m_debug_norm.c / math/m_debug_vertex.c / math/m_debug_xform.c / math/m_eval.c / math/m_matrix.c / math/m_translate.c / math/m_vector.c / math/m_vertices.c / math/m_xform.c / array_cache/ac_context.c /(C:/Tornado2.2/target/src/Mesa/src/array_cache下) array_cache/ac_import.c / swrast/s_aaline.c /(C:/Tornado2.2/target/src/Mesa/src/swrast下) swrast/s_aatriangle.c / swrast/s_accum.c / swrast/s_alpha.c / swrast/s_alphabuf.c / swrast/s_bitmap.c / swrast/s_blend.c / swrast/s_buffers.c / swrast/s_copypix.c / swrast/s_context.c / swrast/s_depth.c / swrast/s_drawpix.c / swrast/s_feedback.c / swrast/s_fog.c / swrast/s_histogram.c / swrast/s_imaging.c / swrast/s_lines.c / swrast/s_logic.c / swrast/s_masking.c / swrast/s_pb.c / swrast/s_pixeltex.c / swrast/s_points.c / swrast/s_readpix.c / swrast/s_scissor.c / swrast/s_span.c / swrast/s_stencil.c / swrast/s_texture.c / swrast/s_texstore.c / swrast/s_triangle.c / swrast/s_zoom.c / swrast_setup/ss_context.c / swrast_setup/ss_triangle.c / swrast_setup/ss_vb.c / tnl/t_array_api.c /(C:/Tornado2.2/target/src/Mesa/src/tnl下) tnl/t_array_import.c / tnl/t_context.c / tnl/t_eval_api.c / tnl/t_imm_alloc.c / tnl/t_imm_api.c / tnl/t_imm_debug.c / tnl/t_imm_dlist.c / tnl/t_imm_elt.c / tnl/t_imm_eval.c / tnl/t_imm_exec.c / tnl/t_imm_fixup.c / tnl/t_pipeline.c / tnl/t_vb_fog.c / tnl/t_vb_light.c / tnl/t_vb_normals.c / tnl/t_vb_points.c / tnl/t_vb_render.c / tnl/t_vb_texgen.c / tnl/t_vb_texmat.c / tnl/t_vb_vertex.c
##### UGL ##### UGL_SOURCES = / windml/ugl_api.c /(C:/Tornado2.2/target/src/Mesa/src/windml下) windml/ugl_dd.c / windml/ugl_span.c / windml/ugl_line.c / windml/ugl_tri.c / windml/tornado/torMesaUGLInit.c(C:/Tornado2.2/target/src/Mesa/src/windml/tornado下)
##### OS ##### OS_SOURCES = / OSmesa/osmesa.c /(C:/Tornado2.2/target/src/Mesa/src/OSmesa下) windml/tornado/torMesaOSInit.c(C:/Tornado2.2/target/src/Mesa/src/windml/tornado下)
##### GLUTSHAPES ##### GLUTSHAPES_SOURCES = / windml/ugl_glutshapes.c /(C:/Tornado2.2/target/src/Mesa/src/windml下) windml/tornado/torGLUTShapesInit.c(C:/Tornado2.2/target/src/Mesa/src/windml/tornado下)
##### GLU ##### GLU_SOURCES = / glu.c /(在C:/Tornado2.2/target/src/Mesa/src-glu下) mipmap.c / nurbs.c / nurbscrv.c / nurbssrf.c / nurbsutl.c / polytest.c / project.c / quadric.c / tess.c / tesselat.c / ../src/windml/tornado/torMesaGLUInit.c(在C:/Tornado2.2/target/src/Mesa/src/windml/tornado下)
然后在C:/Tornado2.2/target/h下建立GL文件夹(存放OPENGL头文件的) 把C:/Tornado2.2/target/src/Mesa/include/下的 gl.h、glext.h、glu.h、osmesa.h、uglglutshapes.h、uglmesa.h拷贝到刚建立的GL文件夹下
做完以上工作后 更改Tornado工程Builds选项卡中的c/c++ compiler选项,添加include path... 添加以下路径 C:/Tornado2.2/target/src/Mesa/include C:/Tornado2.2/target/src/Mesa/src
再更改Rules选项卡,改为archive,即生成.a文件 然后可以编译了,编译成功后会在你工程目录下生成.a 四、建立一个vxworks的工程 新建一个基于simpc BSP的vxworks工程 把windml的complete 2D图形库和simulator host devices,Simulator graphics组件包含到vxworks 编译你的vxworks 如果不清楚这一步的,论坛里可以搜关于WINDML的安装及编译,这里就不多说了
五、运行DEMO程序 建立一个可下载的工程,基于SIMNTgnu工具链的 以uglteapot为例 将C:/Tornado2.2/target/src/Mesa/windmldemos下的uglteapot.c添加到工程 把taskSpawn中的UGL_FALSE修改为UGL_TRUE,如下 void uglteapot (void) { taskSpawn ("tTeapot",210,VX_FP_TASK,100000,(FUNCPTR)windMLTeapot, UGL_TRUE,1,2,3,4,5,6,7,8,9); }
更改Tornado工程Builds选项卡中Marcos选项 在PRJ_LIBS中把生成的.a路径添加进去 我的是C:/Tornado2.2/target/proj/MesaLib/SIMNTgnu/MesaLib.a 然后编译工程,生成.out 运行刚才生成的vxworks 开启一个shell 下载.out 在shell下输入命令uglteapot 以下是运行结果
可以按左右键旋转茶壶,按K键打开关闭光照1等 按ESC是退出 再帖几张运行的DEMO截图
六、总结也可以在vmware下的vxworks下测试你的DEMO不过由于不支持双缓,图形显示时有点问题在simpc下显示倒是很正常,不过速度很慢就是环境搭建好了大家可以参考DEMO里的流程来写自己的demo学习OPENGL了转自Tony嵌入式论坛,地址:http://www.cevx.com/bbs/thread-11343-1-1.html (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|