Если вы хотите загрузить свои шейдеры из файлов в вашем комплекте приложений, вы можете получить пути к файлам, используя объект NSBundle
(в Objective-C) или объект CoreFoundation CFBundle
(в чистом C).
В любом случае, вы используете специфичные для Apple API.Единственное, что вы получаете, используя CFBundle
вместо NSBundle
, это больше шаблонного кода.
Если вы не хотите использовать какие-либо API-интерфейсы Apple, тогда вы можете встроить свои шейдеры в буквальный.строк или подключитесь к серверу в Интернете и загрузите их (используя API сокетов Unix).
Что вам нужно действительно , это определить интерфейс, через который ваш RenderingEngine получает источниккод для его шейдеров и реализовать этот интерфейс, используя соответствующий API для конкретной платформы на каждой платформе, к которой ваш порт RenderingEngine.Интерфейс может быть очень простым:
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.cpp
, RenderingEngineShaderSource_iOS.m
, RenderingEngineShaderSource_Linux.cpp
и т. Д. Каждый из них реализует RenderingEngine_shaderSourceForName
используя соответствующий API для этой платформы.