`
igp92igp
  • 浏览: 16552 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

在vxworks下进行OpenGL编程的环境搭建

 
阅读更多

在vxworks下进行OpenGL编程的环境搭建
2010年10月27日
  原帖地址:http://www.cevx.com/bbs/viewthread.php?tid=11343&h ighlight=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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics