gpt4 book ai didi

ios - 不使用任何 Apple API 加载 GLSL 着色器

转载 作者:行者123 更新时间:2023-11-29 04:51:33 25 4
gpt4 key购买 nike

使用 C/C++ 加载 GLSL 着色器而不使用 Objective-C 或任何 Apple API 的好方法是什么?

我目前正在使用以下方法,该方法来自iPhone 3D编程书籍,但它说不建议用于生产代码:

简单.vsh

const char* SimpleVertexShader = STRINGIFY
(

// Shader code...

);

渲染引擎.cpp

#define STRINGIFY(A) #A
#include "Simple.vsh"

// ...

glShaderSource( shaderHandle, 1, &SimpleVertexShader, 0 );

最佳答案

如果您想从应用程序包中的文件加载着色器,您可以使用 NSBundle 对象(在 Objective-C 中)或使用 CoreFoundation CFBundle< 获取文件路径 对象(纯 C 语言)。

无论哪种方式,您都在使用 Apple 特定的 API。使用 CFBundle 而不是 NSBundle 唯一得到的就是更多的样板代码。

如果您不想使用任何 Apple API,那么您的选择是将着色器嵌入为文字字符串,或连接到 Internet 上的服务器并下载它们(使用 Unix 套接字 API)。

真正需要做的是定义一个接口(interface),您的 RenderingEngine 可以通过该接口(interface)获取其着色器的源代码,并在您的端口所连接的每个平台上使用适当的特定于平台的 API 来实现该接口(interface)渲染引擎。界面可以非常简单,如下所示:

RenderingEngineShaderSourceInterface.h

#ifdef __cplusplus
extern "C" {
#endif

// You are responsible for freeing the C string that this function returns.
extern char const *RenderingEngine_shaderSourceForName(char const *name);

#ifdef __cplusplus
}
#endif

然后创建RenderingEngineShaderSource_Windows.cppRenderingEngineShaderSource_iOS.mRenderingEngineShaderSource_Linux.cpp等。每个都实现RenderingEngine_shaderSourceForName code> 使用适合该平台的 API。

关于ios - 不使用任何 Apple API 加载 GLSL 着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8737947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com