У меня проблема с GLKit в проекте, похожем на GLPaint.GLPaint с GLKit: мерцание при рисовании
Прежде всего, я не использую GLKViewController, но только GLKView, который добавлен в мой класс.
Моя проблема в том, что когда я рисую свой GLKView, содержимое мерцает. Похоже, что я рисовал в определенном буфере кадров в первом вызове drawKect GLKViewDelegate, и следующий вызов был другим буфером кадров, затем следующий вызов вернулся к первому и т. Д. Я протестировал эту возможность, и это похоже, не так, как буфер визуализации, так и буфер кадров одинаковы во всем чертеже.
Вот как мой рисунок работа (аналогичный GLPaint образец код):
На сенсорных событиях, я называю renderStroke создавать точки, которые используются в чертеже, чтобы применить текстуры и представить линию. Я использую пользовательские шейдеры, поэтому я устанавливаю буфер, содержащий эти пункты в заранее оговоренном месте, поэтому шейдер имеет доступ к нему:
// Give the vertex positions to the vertex shader
glVertexAttribPointer(ATTRIB_POSITION, 2, GL_FLOAT, 0, 0, vertexBuffer);
glEnableVertexAttribArray(ATTRIB_POSITION);
Затем в методе дро, я называю glDrawArrays:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glDrawArrays(GL_POINTS, 0, self.verticesCount);
}
Вот как я инициализировать GLKView:
self.glView = [[GLKView alloc] initWithFrame:self.frame];
self.glView.context = _context;
self.glView.delegate = self;
self.glView.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888;
self.glView.drawableStencilFormat = GLKViewDrawableStencilFormat8;
self.glView.enableSetNeedsDisplay = NO;
self.glView.userInteractionEnabled = NO;
[self addSubview:self.glView];
текстура, матрица modelViewProjection кажется работать правильно, так как я вижу правильную текстуру применительно к каждой точке.
Я искал способы отладки этого, но все, что я видел, казалось нормальным. Есть что-то, что мне не хватает?
Спасибо!
EDIT:
Я задаюсь вопросом, когда DrawRect называется, является color_render_buffer и stencil_buffer означало быть очищены перед дальнейшим рисунок делается? Моя цель здесь - сохранить рисунок, который я сделал ранее, и нарисовать другой контент поверх него. Без GLKit это обычно делается с помощью kEAGLDrawablePropertyRetainedBacking. Я установил его на слой glView, используя:
CAEAGLLayer * const eaglLayer = (CAEAGLLayer*) self.glView.layer;
eaglLayer.opaque = NO;
eaglLayer.drawableProperties = @{kEAGLDrawablePropertyRetainedBacking : @(YES)};
Это, похоже, не работает.
Удачи вам в этом? – Joe
Нет, вы можете проверить эту тему, которую я создал на форуме apple, где я описываю некоторые из моих проблем с проблемой. Вот ссылка: [https://devforums.apple.com/thread/162592?tstart=15] – ebp
Этот ответ работает: http://stackoverflow.com/questions/9395743/glkview-set-drawable-properties/ 13684498 # 13684498 – aoakenfo