Mesa是一个开源的3D图形库,它是一个按照3D视窗系统(OpenGL)的规范发展起来的实现。Mesa的功能是在Linux操作系统下构建满足用户顶点基础顶点(vertex)和像素(pixel)操控的应用。
Mesa是一个完备的新版本,它能够有效激发低级硬件功能,通过与Linux接口传输,能够支持在用户桌面上可视化计算,实时动画和复杂的影像操作。Mesa的前身——命令行提示的程序和工具库——对Linux的开发者来说,是一个小小的奇迹,它使Linux不再仅仅只是一个简单的操作系统而已,而是一个能够实现任何形式的计算的通用处理系统。
Mesa的实现会降低应用的开发成本,也会改善程序的性能,这一点显而易见,因为Mesa得到了图形学,物理计算和并行编程方面多年来的联合优化。它能够提供极高的性能和可移植性,提供基于GPU和多核cpu的高性能并行计算环境,如此于此,Mesa也成为许多图像、视频处理和科学计算中,首选的图形库和计算环境。
举个例子,在OpenGL ES开发桌面环境中,Mesa支持以下示例:
1. 像素/纹理处理:
// Load the texture with the given type and source
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, source);
// Bind the texture
glBindTexture(GL_TEXTURE_2D, textureId);
// Set blending mode
glEnable(GL_BLEND);
// Draw texture
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
2. 着色/着色器:
// Load shader from source code
GLuint shaderId = glCreateShader(GL_VERTEX_SHADER);
// Assign the source code to shader
glShaderSource(shaderId, 1, &shaderSrc, NULL);
// Compile the shader
glCompileShader(shaderId);
// Attach and link the shader to the program
glAttachShader(programId, shaderId);
glLinkProgram(programId);
// Use the shader
glUseProgram(programId);
Mesa在Linux系统中的应用明显可见,它是Linux系统中计算技术的核心基础设施,涵盖可视化计算,3D图形,图像处理和科学计算的开发和运行。Mesa在提高可视化图形性能和图形应用程序可移植性方面,发挥着极大的作用,正在推动Linux系统桌面开发中更新更完整的实现应用程序。

香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
请问要编在linux下运行的mesa/opengl 3D游戏,代码一定要在linux下编吗?
这个……你打算仅用vs的->编辑<-功能吗?vs是->编译<-不出Linux能跑的elf格式的可执行文件。 就算代码编的没问题,也要重编译成linux下的可执行文件才行。 交叉编译是非常辛苦的事情。 win里面一个叫sygwin的编译调试工具,那个编出来的东西Linux可以跑。 我也初涉Linux编程。 但我知道这两种系统的文件系统都不一样,所以程序的动态链接也想去深远。 还有,系统调用也不一样。 比如C代码中的system()在Linux和windows中都是直接运行系统命令,但这两个系统有完全不同的命令集。 Ubuntu是近年来很流行的Linux发行版。 很多初学者都喜欢用那个。 那个界面更友好一些。 国内用的人很多。 开发者也不再少数,你遇到什么问题直接可以去Ubuntu中国社区讨论。 那边有高手也有新人。 应该算目前国内用户量最多的系统。 楼主也是新手的话就用这个吧。 楼主辛苦了,win下编Linux程序不是不可以,但你要清楚自己使用的所有库函数,清楚他们有没有Linux版的代码,可不可以在Linux环境下编译运行等。 从理论上说这样的编译可以实现……祝楼主好运。 gcc是Linux里面最强大的开发工具GNU工具链的编译器。 windows+GNU=sygwin。 windows到Linux的交叉编译环境通常是那个。 sygwin开发环境就是在gnu库上的编译开发Linux代码的环境。 p.s.我没写过3d程序,我是用C写靠近硬件的底层代码。 但我没用过sygwin。 因为我在Linux下直一般接用GCC编译。 编辑代码用emacs。 老师曾笑着说,vim那是穷人的工具。 Emacs不只是编译工具那么简单,那是一个超Mini的集成GNU开发环境。 在那里面可以直接运行命令linux bash命令。 调用gcc编译,调用运行gdb调试。 嘛,调试其实我也很少用gdb,我一般用nemver或者用edb。 楼主真要写Linux程序,索性直接进Ubuntu去开发算了。 我更喜欢Fedora……有情结。 Fedora是RedHat公司的得意之作,本来就是为开发者准备的。 相对而言Ubuntu是作为桌面系统而推出的。 Fedora是Linux名门之后,Ubuntu是后起之秀。 其实还有些发行版,Debian,SUSE这两个更是有历史的……也都是不错的开发环境。
apache在LINUX与WINDOWS里怎么用?
apache是一个软件,linux与windows是操作系统。 将apche安装到linux或windows中,启动服务,就可以使用了。 以redhat为例,来说明:用rpm包安装好apache后,可以用apachectl start来启动apache服务器,apachectl stop来停止服务器。 windows也可以点击 开始->运行->输入启动apache服务就好了。
如何在Linux操作系统下检测内存泄漏
Linux操作系统应用专区1.开发背景:在 Windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名、行号以及内存大小。 该功能是 MFC Framework 提供的内置机制,封装在其类结构体系内部。 在 Linux 或者 Unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额。 而且程序退出时,我们无法获知任何内存泄漏信息。 为了更好的辅助在 linux 下程序开发,我们在我们的类库项目中设计并实现了一个内存检测子系统。 下文将简述 C++ 中的 new 和 delete 的基本原理,并讲述了内存检测子系统的实现原理、实现中的技巧,并对内存泄漏检测的高级话题进行了讨论。 2.New和delete的原理当我们在程序中写下 new 和 delete 时,我们实际上调用的是 C++ 语言内置的 new operator 和 delete operator。 所谓语言内置就是说我们不能更改其含义,它的功能总是一致的。 以 new operator 为例,它总是先分配足够的内存,而后再调用相应的类型的构造函数初始化该内存。 而 delete operator 总是先调用该类型的析构函数,而后释放内存(图1)。 我们能够施加影响力的事实上就是 new operator 和 delete operator 执行过程中分配和释放内存的方法。 new operator 为分配内存所调用的函数名字是 operator new,其通常的形式是 void * operator new(size_t size); 其返回值类型是 void*,因为这个函数返回一个未经处理(raw)的指针,未初始化的内存。 参数 size 确定分配多少内存,你能增加额外的参数重载函数 operator new,但是第一个参数类型必须是 size_t。 delete operator 为释放内存所调用的函数名字是 operator delete,其通常的形式是 void operator delete(void *memoryToBeDeallocated);它释放传入的参数所指向的一片内存区。 这里有一个问题,就是当我们调用 new operator 分配内存时,有一个 size 参数表明需要分配多大的内存。 但是当调用 delete operator 时,却没有类似的参数,那么 delete operator 如何能够知道需要释放该指针指向的内存块的大小呢?答案是:对于系统自有的数据类型,语言本身就能区分内存块的大小,而对于自定义数据类型(如我们自定义的类),则 operator new 和 operator delete 之间需要互相传递信息。 当我们使用 operator new 为一个自定义类型对象分配内存时,实际上我们得到的内存要比实际对象的内存大一些,这些内存除了要存储对象数据外,还需要记录这片内存的大小,此方法称为 cookie。 这一点上的实现依据不同的编译器不同。 (例如 MFC 选择在所分配内存的头部存储对象实际数据,而后面的部分存储边界标志和内存大小信息。 g++ 则采用在所分配内存的头 4 个自己存储相关信息,而后面的内存存储对象实际数据。 )当我们使用 delete operator 进行内存释放操作时,delete operator 就可以根据这些信息正确的释放指针所指向的内存块。 以上论述的是对于单个对象的内存分配/释放,当我们为数组分配/释放内存时,虽然我们仍然使用 new operator 和 delete operator,但是其内部行为却有不同:new operator 调用了operator new 的数组版的兄弟- operator new[],而后针对每一个数组成员调用构造函数。 而 delete operator 先对每一个数组成员调用析构函数,而后调用 operator delete[] 来释放内存。 需要注意的是,当我们创建或释放由自定义数据类型所构成的数组时,编译器为了能够标识出在 operator delete[] 中所需释放的内存块的大小,也使用了编译器相关的 cookie 技术。
发表评论