Не могу найти мои шейдеры (Obj-C ++, ios, opengles2.0) - PullRequest
1 голос
/ 16 февраля 2012

Я сейчас пытаюсь загрузить свои шейдеры, но не могу найти их в коде.Я копирую их в пакет, и они находятся рядом с исполняемым файлом, но я до сих пор не могу их найти.Я пишу код рендеринга на C ++.

Вот основной пакет ...

Here's the main bundle...

и мой код, который, надеюсь, однажды загрузитшейдер.Я просто пытаюсь найти это прямо сейчас, поэтому на самом деле ничего не происходит ...

void RenderingEngine::ReadShader()
{
    char* buffer;
    long size;
    std::ifstream file;
    file.open("Shader.frag");

    if (!file.is_open())
    {
        std::cout << "FILE NOT OPENED!\n";
    }
}

1 Ответ

2 голосов
/ 16 февраля 2012

Если бы вы использовали Objective-C, то стандартный способ открыть файлы был бы что-то вроде:

// get the path to the shader file, without having to duplicate logic about
// how the bundle is laid out from the OS
NSString *pathToShader = [[NSBundle mainBundle] pathForResource:@"Shader"
                                      ofType:@"Frag"];

// load the source from pathToShader by whatever means... probably you'd
// actually get a file URL above and use the relevant NSString method,
// but that's not necessarily helpful here

Таким образом, вы явно попросите операционную систему указать путь к вашему файлу, если он находится в основном комплекте (приложении).

Вместо этого вы, похоже, предполагаете, что текущий рабочий каталог настроен на область ресурсов в комплекте (что в iOS такое же, как путь к исполняемому файлу, но в OS X отдельно), чего я не делаю думаю гарантировано где угодно.

Предполагая, что у вас есть некоторый код Objective-C для настройки соответствующего UIKit, прежде чем вы перейдете на C ++, вы, вероятно, захотите добавить что-то вроде:

[[NSFileManager defaultManager]
           changeCurrentDirectoryPath:[[NSBundle mainBundle] resourcePath]];

Чтобы установить, что вы хотите, чтобы основной пакет размещал свои ресурсы в качестве текущего рабочего каталога.

...