glCreateProgram вызывает segfault?

Я пытаюсь написать средство просмотра файлов Wavefront OBJ в Objective-C, способное загружать сетки/материалы/шейдеры из файлов. Я создал классы для шейдеров и шейдерных программ, и я пытаюсь создать объект шейдерной программы OpenGL как часть метода инициализации моего класса шейдерной программы:

- (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], который, в свою очередь, вызывает 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];

Очень просто, и я знаю, что эта ветка устарела, но, возможно, это сэкономит кому-то минуту или две, когда они погуглят и найдут эту ветку (как я только что сделал).

person Mike    schedule 22.01.2013
comment
не то чтобы мне это помогло, но я думаю, что ваши усилия должны быть отмечены - person VivienLeger; 26.05.2017