glCreateProgram причинява segfault?

Опитвам се да напиша програма за преглед на файлове Wavefront OBJ в Objective-C, която може да зарежда мрежи/материали/шейдъри от файлове. Създадох класове за шейдъри и програми за шейдъри и се опитвам да създам програмен обект за шейдъри OpenGL като част от метода init на моя клас шейдър програма:

- (id)initWithVertexShader:(NSString *)vshader FragmentShader:(NSString *)fshader {
self = [super init];
if (self) {
    SRShader* shaders[2] = {
        [[SRShader alloc] initWithFilename:vshader Type:GL_VERTEX_SHADER Source:nil],
        [[SRShader alloc] initWithFilename:fshader Type:GL_FRAGMENT_SHADER Source:nil]
    };

    program = glCreateProgram();

    for (int i = 0; i < 2; i++) {
        SRShader* s = shaders[i];
        NSError* e = nil;
        s.source = [NSString stringWithContentsOfFile:s.filename encoding:NSUTF8StringEncoding error:&e];
        if (!e) {
            NSLog(@"Failed to read shader file: %@\n", s.filename);
            exit(-1);
        }

        GLuint shader = [s compile];
... and so on.

Извикването на glCreateProgram обаче води до EXC_BAD_ACCESS, както и извикването на [SRShader compile], което на свой ред извиква glCreateShader. Някой знае ли за проблеми с тези извиквания на функции в Objective-C? Може би нещо общо с ARC или извикването им във функция за инициализация?


person alaroldai    schedule 22.08.2012    source източник
comment
Първо създадохте ли контекст на OpenGL и го направихте актуален в извикващата нишка?   -  person bosmacs    schedule 28.08.2012


Отговори (1)


Ако използвате NSOpenGLView, ще трябва да добавите следните редове код, преди да извикате glCreateProgram(), така че вероятно в -(id)initWithCoder, ако заредите изгледа от Interface Builder:

NSOpenGLContext* context = [self openGLContext];

[context makeCurrentContext];

Много елементарно и знам, че тази тема е остаряла, но може би това ще спести на някого минута или две, когато потърси в Google и намери тази тема (както направих току-що).

person Mike    schedule 22.01.2013
comment
не че ми помогна, но мисля, че усилията ви трябва да бъдат признати - person VivienLeger; 26.05.2017