iPhone和Mac上共享的OpenGL代码

iPhone和Mac上共享的OpenGL代码,iphone,cocoa,opengl,opengl-es,Iphone,Cocoa,Opengl,Opengl Es,我有一个iPhone项目,是用一堆OpenGLES编写的,现在我想把这个应用程序移植到Mac/Cocoa上。我可以在Mac上使用OpenGLES吗,或者我必须做一堆“如果”语句吗?据我所知,ES只是桌面版本的简化版本,任何有效的ES代码都是有效的标准GL代码(可能需要一些调整)。当然,在桌面上,您还可以获得其他功能,例如渲染三角形以外的形状 OpenGL ES是OpenGL的一个子集——任何OpenGL ES应用程序都应该在OpenGL上工作(但OpenGL应用程序可能无法在OpenGL ES上

我有一个iPhone项目,是用一堆OpenGLES编写的,现在我想把这个应用程序移植到Mac/Cocoa上。我可以在Mac上使用OpenGLES吗,或者我必须做一堆“如果”语句吗?

据我所知,ES只是桌面版本的简化版本,任何有效的ES代码都是有效的标准GL代码(可能需要一些调整)。当然,在桌面上,您还可以获得其他功能,例如渲染三角形以外的形状


OpenGL ES是OpenGL的一个子集——任何OpenGL ES应用程序都应该在OpenGL上工作(但OpenGL应用程序可能无法在OpenGL ES上工作)

我有一个共享的OpenGL代码库,可以跨iOS和Windows工作。有一些小的部分,没有什么大的,像这样:

// Page flip
#ifdef WIN32
    glFlush();
#else
    const GLenum discards[] = {GL_COLOR_ATTACHMENT0};
    glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, discards);   

    [context presentRenderbuffer:GL_RENDERBUFFER];
#endif

除了GL启动(不使用框架)、OS用户输入事件处理程序和着色器之外,引擎在两种平台上的工作方式相同。在头文件中,我还使用IFDES来保持目标C不影响其他代码库,因此纯C++文件将不会看到类成员,例如“ID”或“EAGLVILATION”。谢谢。但是,标题/包含是不同的,所以我需要对这些语句进行if if语句。另外,我认为OpenGL中不存在EAGLContext?如果有几个调用和include(或重构,使您的通用GL(ES)代码与iOS和Mac特定代码分离),您可能需要#,但一般来说,你的OpenGL ES调用应该可以工作。我只能想到一个潜在的区别——在3GS之前,iPhone中的MBX在技术上每像素只能进行一次分割。如果你将透视变换加载到纹理堆栈中,你需要两次才能在视觉上正确。投影纹理贴图是它出现的唯一有意义的时间,iPhone出现了错误的结果,给出了一些类似PS1纹理扭曲的东西。为Mac构建这样一个程序将产生一个工作正常但视觉效果不同(且更准确)的程序。答案是肯定的,有一些假设。我的引擎使用的是GLE2.0和OGL3+,我遇到的一些差异是整数顶点属性——这些在GLES中简化了——缺少几何体着色器、缺少四元列表、缺少读取纹理的能力以及一些纹理格式。