使用 OpenGL ES 2.0 和 cmake 生成 iOS 静态库

Posted

技术标签:

【中文标题】使用 OpenGL ES 2.0 和 cmake 生成 iOS 静态库【英文标题】:Generate iOS static library using OpenGL ES 2.0 with cmake 【发布时间】:2014-09-22 23:49:01 【问题描述】:

我正在为多平台渲染器(至少现在是 ios/Mac)编写构建工具链。该项目有一个核心库(每个平台目标都将使用该库),应将其编译为静态库 (.a),以便在其他平台相关项目中使用(如在 xcode 项目或 eclipse 中)用于进一步的android开发)。

此静态库依赖于 OpenGL ES 2.0 (iOS) 或 OpenGL for Mac。所以我有以下文件以包含正确的标题:

#ifdef PLATFORM_IOS
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>
#endif

#ifdef PLATFORM_OSX
#include <OpenGL/gl.h>
#include <GLFW/glfw3.h>
#endif

事实是它在 Mac 平台上完美运行,cmake 正确找到了 OpenGL 头文件,但对于 iOS,它没有找到 OpenGLES;即使使用我编写的 FindOpenGLES.cmake 模块,我也无法找到这些头文件,这似乎是合乎逻辑的,因为我什至在 /usr/include 中都找不到它们。

【问题讨论】:

尝试定位 OpenGLES 和 ES2 目录。如果它们存在,您可以使用 include_directories() 获取确切位置。 是的,这就是我想要做的,但我不知道它们在哪里,我跑了一个 find /usr -name "*GLES*",但这里似乎什么都没有。 1.运行定位命令。 2.或者试试 find / -name "*GLES*" -type f -print 他们一定在某处 【参考方案1】:

你可能需要设置CMAKE_SYSTEM_FRAMEWORK_PATH,以下是我iOS自带的工具链文件

  set (IOS_SDK_ROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk")

  # Set the sysroot default to the most recent SDK
  set (CMAKE_OSX_SYSROOT $IOS_SDK_ROOT CACHE PATH "Sysroot used for iOS support")

  # set the architecture for iOS - this env var sets armv6,armv7 and appears to be XCode's standard. The other found is ARCHS_UNIVERSAL_IPHONE_OS but that is armv7 only
  set (CMAKE_OSX_ARCHITECTURES "$IOS_ARCH" CACHE string "Build architecture for iOS")

  # set up the default search directories for frameworks
  set (CMAKE_SYSTEM_FRAMEWORK_PATH $IOS_SDK_ROOT/Developer/Library/Frameworks)

【讨论】:

以上是关于使用 OpenGL ES 2.0 和 cmake 生成 iOS 静态库的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android上使用OpenGL ES 2.0绘制点

如何在Android上将OpenGL ES 1.0代码转换为OpenGL Es 2.0?

共享内存架构中的 OpenGL (ES 2.0) VBO 性能

如何使用GLSL和OpenGL ES 2.0从整数中获取一点

使用 OpenGL ES 2.0 绘制 2D 图像

使用 OpenGL 2.0(不是 ES)绘制三角形