当前位置:  技术问答>linux和unix

SDL内置了调用OpenGL的函数,但是为什么还有人用SDL+OPENGL编程?

    来源: 互联网  发布时间:2016-10-26

    本文导语:  目前,在Linux操作系统中,一般可将图形应用库粗略地分为三个不同层次。 第一层次是图形基础设施,它们本身没有提供相应的应用程序编程接口,而是集成在操作系统中或采用某种封装形式,用作其他高级图形或者...

目前,在Linux操作系统中,一般可将图形应用库粗略地分为三个不同层次。
第一层次是图形基础设施,它们本身没有提供相应的应用程序编程接口,而是集成在操作系统中或采用某种封装形式,用作其他高级图形或者应用程序的基本函数库,较典型的有X Window、SVGALib、framebuffer(帧缓冲)和LibGGI等;
第二层次是高级函数库,它们提供了大量的应用程序编程接口,较典型的有Xlib、GDK、GTK+、QT、SDL、OpenGL、PEG和DirectFB等;
第三层次多任务窗口系统图形用户界面GUI,较典型的有 Microwindows、OpenGUI、Qt/Embedded和MiniGUI等。

-------------------------------------------------------------------------------

X11,GTK,QT,GNOME的区别与联系
X11是X Window System Protocol, Version 11(RFC1013),是X server和X client之间的通信协议。X server是xfree86/xorg驱动下的显示设备鼠标键盘统称,X client通过X11协议和xfree86/xorg实现的X server通信,比如,告诉它画一个左上角坐标为(x,y),宽为w,高为h的窗口,xfree86就让显示器把屏幕上的小灯(像素)打亮,然后你就看到了一个窗口。

为了方便开发人员编写X clients,就有了Xlib来封装协议;Xlib不够方便,于是就有了qt和gtk,提供了很多窗口控件(widgets)。

为了方便用户,就出现了gnome和kde等桌面管理系统。一般来说,linux用户看到的界面就是其中之一了。gnome用的是gtk库,kde用的是qt库。

--------------------------------------------------------------------------------
但毫无疑问, GTK, QT也应该可以画点, 画线, 但他们设计的目的本来就在于图形界面的开发, 他们是图形系统中更高层次的抽象, 比方来说, GTK+从2.8起由Cairo来实现其组件的绘制, 而Cairo正和OpenGL一样, 是更低层次的图形库。

OpengGL 只是定义了一组接口, 具体的实现一般由各显卡厂商提供(Nvidia, ATI,...),也因此能更好的利用硬件的性能, 所以,我们可以看到OpenGL-compatible这样标注的显卡。 这也从一个侧面反应了opengl的底层性。仅以画点, 线,面来说,当性能要求高时, 应当考虑opengl。 一般的桌面应用Gtk应该够了。

我注意到GNU Xaos(一个分形演示软件)用的是libx11-dev来做图形绘制, 那么, libx11和gtk又有什么联系?
拜读了X Window System Architecture Overview HOWTO以后, 我才明白这之间的关系: X window System(X11, Xlib)提供最底层的图形应用,Cairo构建于X System上, 而GTK又依赖于Cairo, Gtk又是Gnome的一部分.
 
回过头来, Cairo和OpenGl都是比Gtk+更低层次的抽象, 但他们是同一层次的抽象吗?Opengl和X window system 谁更底层?

这里说:
"In the X Window System, OpenGL rendering is made available as an
extension to X in the formal X sense: connection and authentication are
accomplished with the normal X mechanisms"

也就是说, X system可以通过opengl来构建。 果然, Xgl就是一个构建于opengl驱动上的X server(wikipedia: Xgl is an X server architecture designed to take advantage of modern graphics cards via their OpenGL drivers, layered on top of OpenGL via glitz.). 原来opengl是驱动级别的啊。但X server也有其他实现, 不一定是基于opengl的,X.Org reference implementation是最常用的X server.


|
SDL我没看过源码,你可以看下,SDL应该也是一个主要处理2D的,可能在处理3D一些的时候使用OPENGL,所以它加入了OPENGL的支持,不能算是SDL内置了OPENGL,只能说是SDL内部加入了接口封装了OPENGL,你可以使用也可以不使用。    

或者说你的疑问是,SDL内部有接口可以实现OPENGL的应用,但这并没影响到程序里直接使用OPENGL本身的接口,不知道是不是这个意思。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sdl显示一张bmp图片示例
  • 如何在应用程序中使用SDL库
  • 关于LINUX下SDL的设置问题
  • SDL 移植到Android问题
  • 休闲游戏 SDL Asylum
  • 飞行游戏 SDL Sopwith
  • 多媒体和游戏开发包 SDL
  • SDL问题
  • 请问在C++中能编写SDL游戏程序吗
  • 求助:sdl+Qt-X11???
  • 请问GTK和SDL能配合使用吗?
  • 散分求助: C+SDL 游戏源码!或相关学习、下载网址!
  • linux+SDL segmentation fault
  • 启动spcaview时出现SDL Parachute Deployed错误
  • 街机游戏 C-Dogs SDL
  • SDL Game Engine
  • 我在交叉编译SDL时.老是出错
  • SDL与ALSA冲突?
  • 关于sdl
  • sdl交叉编译错误


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3