提交 f56122ac 编写于 作者: Z Zhang Rui

ios/glview: fix padding calculation

上级 1825a99b
......@@ -176,6 +176,7 @@ static void mat4f_LoadOrtho(float left, float right, float bottom, float top, fl
BOOL _didSetContentMode;
BOOL _didRelayoutSubViews;
BOOL _didVerticesChanged;
BOOL _didPaddingChanged;
int _tryLockErrorCount;
......@@ -435,10 +436,18 @@ static int g_ijk_gles_queue_spec_key;
- (void)layoutOnDisplayThread
{
int backingWidth = 0;
int backingHeight = 0;
glBindRenderbuffer(GL_RENDERBUFFER, _renderbuffer);
[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_backingWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_backingHeight);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight);
if (_backingWidth != backingWidth || _backingHeight != backingHeight) {
_backingWidth = backingWidth;
_backingHeight = backingHeight;
_didVerticesChanged = YES;
}
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE) {
......@@ -449,16 +458,12 @@ static int g_ijk_gles_queue_spec_key;
NSLog(@"OK setup GL framebuffer %d:%d", _backingWidth, _backingHeight);
}
[self updateVertices];
// FIXME: trigger a redisplay on display thread
// [self display: nil];
}
- (void)setContentMode:(UIViewContentMode)contentMode
{
_didSetContentMode = YES;
[super setContentMode:contentMode];
_didSetContentMode = YES;
if (self->_useRenderQueue && self->_renderQueue) {
dispatch_async(self->_renderQueue, ^(){
[self display:nil];
......@@ -502,15 +507,26 @@ static int g_ijk_gles_queue_spec_key;
}
}
if (overlay && (_frameWidth != overlay->w ||
_frameHeight != overlay->h ||
_frameSarNum != overlay->sar_num ||
_frameSarDen != overlay->sar_den)) {
_frameWidth = overlay->w;
_frameHeight = overlay->h;
_frameSarNum = overlay->sar_num;
_frameSarDen = overlay->sar_den;
[self updateVertices];
if (overlay) {
if (_frameWidth != overlay->w ||
_frameHeight != overlay->h ||
_frameSarNum != overlay->sar_num ||
_frameSarDen != overlay->sar_den) {
_frameWidth = overlay->w;
_frameHeight = overlay->h;
_frameSarNum = overlay->sar_num;
_frameSarDen = overlay->sar_den;
_didVerticesChanged = YES;
}
if (!overlay->is_private && overlay->pitches && _frameWidth > 0) {
int frameBufferWidth = overlay->pitches[0] / _bytesPerPixel;
int rightPaddingPixels = frameBufferWidth - _frameWidth;
if (rightPaddingPixels != _rightPaddingPixels) {
_rightPaddingPixels = rightPaddingPixels;
_rightPadding = ((GLfloat)_rightPaddingPixels) / frameBufferWidth;
}
}
}
return YES;
......@@ -665,19 +681,14 @@ exit:
return;
}
if (overlay && !overlay->is_private && overlay->pitches[0] / _bytesPerPixel > _frameWidth) {
_rightPaddingPixels = overlay->pitches[0] / _bytesPerPixel - _frameWidth;
_didPaddingChanged = YES;
}
if (_didRelayoutSubViews) {
_didRelayoutSubViews = NO;
[self layoutOnDisplayThread];
}
if (_didSetContentMode || _didPaddingChanged) {
if (_didSetContentMode || _didVerticesChanged) {
_didSetContentMode = NO;
_didPaddingChanged = NO;
_didVerticesChanged = NO;
[self updateVertices];
}
......@@ -688,17 +699,10 @@ exit:
glUseProgram(_program);
if (overlay) {
_frameWidth = overlay->w;
_frameHeight = overlay->h;
_frameSarNum = overlay->sar_num;
_frameSarDen = overlay->sar_den;
[_renderer render:overlay];
}
if ([_renderer prepareDisplay]) {
if (_frameWidth > 0)
_rightPadding = ((GLfloat)_rightPaddingPixels) / _frameWidth;
_texCoords[0] = 0.0f;
_texCoords[1] = 1.0f;
_texCoords[2] = 1.0f - _rightPadding;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册