Poll: Did you try Qt5 on N900?
Poll Options
Did you try Qt5 on N900?

Reply
Thread Tools
Posts: 224 | Thanked: 132 times | Joined on Jun 2012 @ Cairo ;Egypt
#51
Great work frafI keep going

Where are you from the beginning of the memo ؟ you Posts Only 56 But clearly you are a genius like marmistrz I love his creations you Tried to do something unexpected Thank you


This is Qt 5

http://youtu.be/FIs5YqzS4Bc



Is it possible to run snowshoe on maemo Where snowshoe based on Qt5 and WebKit2


http://db.tt/TD8DDqBC


https://github.com/snowshoe/snowshoe...debian/control


and What about OpenGL with Qt 5

OpenGL with Qt 5


http://quitcoding.com/?page=work

Last edited by amr.fayz; 2013-02-18 at 13:30.
 
Posts: 114 | Thanked: 298 times | Joined on Jan 2011 @ Berlin
#52
number of posts: Well everybody has its own field of interest and Qt is an area where I'm able to contribute something. However I own an N900 since May 2010 and always read this forum since.

about webkit2/snowshoe: I've not yet build webkit2, because it's a likely reason of errors (see Qt wiki), but there is no principal reason, why it shouldn't work in the end.

opengl: Since QtQuick2 requires OpenGL (or OpenGL ES 2) it's already part of the qtbase package. However opengl is likely involved in the aforementioned bug.
btw: anyone able to analyse an opengl call trace gained by Pvrtrace?

Code:
EGL eglBindAPI(EGL_OPENGL_ES_API) ==> EGL_TRUE
EGL eglMakeCurrent(EGLDisplay(1),EGLSurface(762816),EGLSurface(762816),EGLContext(742856)) ==> EGL_TRUE
ES2 glGetError() ==> GL_NO_ERROR
ES2 glGenTextures(1,140002)
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glTexImage2D(GL_TEXTURE_2D,0,GL_ALPHA,670,128,0,GL_ALPHA,GL_UNSIGNED_BYTE,NULL,)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE)
ES2 glGetError() ==> GL_NO_ERROR
ES2 glCreateShader(GL_VERTEX_SHADER) ==> 490007
ES2 glShaderSource(490007,1,
    attribute highp   vec2      textureCoordArray; 
    varying   highp   vec2      textureCoords; 
    void setPosition(); 
    void main(void) 
    { 
        setPosition(); 
        textureCoords = textureCoordArray; 
    }

    attribute highp   vec4      vertexCoordsArray; 
    void setPosition(void) 
    { 
        gl_Position = vertexCoordsArray; 
    }
,364,)
ES2 glCompileShader(490007)
ES2 glGetShaderiv(490007,GL_COMPILE_STATUS,1)
ES2 glCreateProgram() ==> 560008
ES2 glAttachShader(560008,490007)
ES2 glCreateShader(GL_FRAGMENT_SHADER) ==> 630009
ES2 glShaderSource(630009,2,#ifndef GL_FRAGMENT_PRECISION_HIGH
#define highp mediump
#endif


    lowp vec4 srcPixel(); 
    void main() 
    { 
        gl_FragColor = srcPixel(); 
    }

    varying   highp   vec2      textureCoords; 
    uniform           sampler2D imageTexture; 
    lowp vec4 srcPixel() 
    { 
return texture2D(imageTexture, textureCoords); 
}
,64
273,)
ES2 glCompileShader(630009)
ES2 glGetShaderiv(630009,GL_COMPILE_STATUS,1)
ES2 glAttachShader(560008,630009)
ES2 glBindAttribLocation(560008,0,vertexCoordsArray)
ES2 glBindAttribLocation(560008,1,textureCoordArray)
ES2 glLinkProgram(560008)
ES2 glGetProgramiv(560008,GL_LINK_STATUS,1)
ES2 glGetProgramiv(560008,GL_INFO_LOG_LENGTH,0)
ES2 glGenFramebuffers(1,70001)
ES2 glBindFramebuffer(GL_FRAMEBUFFER,70001)
ES2 glGenTextures(1,210003)
ES2 glBindTexture(GL_TEXTURE_2D,210003)
ES2 glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,573,128,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL,)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE)
ES2 glBindTexture(GL_TEXTURE_2D,0)
ES2 glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,210003,0)
ES2 glActiveTexture(GL_TEXTURE0)
ES2 glBindTexture(GL_TEXTURE_2D,70001)
ES2 glGetBooleanv(GL_STENCIL_TEST,NULL)
ES2 glGetBooleanv(GL_DEPTH_TEST,NULL)
ES2 glGetBooleanv(GL_SCISSOR_TEST,NULL)
ES2 glGetBooleanv(GL_BLEND,NULL)
ES2 glGetIntegerv(GL_VIEWPORT,0
0
800
424)
ES2 glGetIntegerv(GL_CURRENT_PROGRAM,280004)
ES2 glDisable(GL_STENCIL_TEST)
ES2 glDisable(GL_DEPTH_TEST)
ES2 glDisable(GL_SCISSOR_TEST)
ES2 glDisable(GL_BLEND)
ES2 glViewport(0,0,573,128)
ES2 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,0xbf2e8)
ES2 glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,0,0xbf308)
ES2 glUseProgram(560008)
ES2 glEnableVertexAttribArray(0)
ES2 glEnableVertexAttribArray(1)
ES2 glDisableVertexAttribArray(2)
ES2 glGetUniformLocation(560008,imageTexture) ==> 1
ES2 glUniform1i(1,0)
ES2 glDrawArrays(GL_TRIANGLE_FAN,0,4)
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,573,128)
ES2 glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_RENDERBUFFER,0)
ES2 glDeleteTextures(1,210003)
ES2 glDeleteTextures(1,70001)
ES2 glBindFramebuffer(GL_FRAMEBUFFER,0)
ES2 glEnable(GL_DEPTH_TEST)
ES2 glEnable(GL_BLEND)
ES2 glViewport(0,0,800,424)
ES2 glUseProgram(280004)
ES2 glDisableVertexAttribArray(0)
ES2 glDisableVertexAttribArray(1)
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glTexSubImage2D(GL_TEXTURE_2D,0,573,0,36,64,GL_ALPHA,GL_UNSIGNED_BYTE,~Image(2304 bytes)~)
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glTexSubImage2D(GL_TEXTURE_2D,0,609,0,25,64,GL_ALPHA,GL_UNSIGNED_BYTE,~Image(1792 bytes)~)
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glTexSubImage2D(GL_TEXTURE_2D,0,634,0,36,64,GL_ALPHA,GL_UNSIGNED_BYTE,~Image(2304 bytes)~)
ES2 glBindFramebuffer(GL_FRAMEBUFFER,0)
ES2 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS,8)
ES2 glGetVertexAttribiv(0,GL_VERTEX_ATTRIB_ARRAY_ENABLED,0)
ES2 glGetVertexAttribiv(1,GL_VERTEX_ATTRIB_ARRAY_ENABLED,0)
ES2 glGetVertexAttribiv(2,GL_VERTEX_ATTRIB_ARRAY_ENABLED,0)
ES2 glGetVertexAttribiv(3,GL_VERTEX_ATTRIB_ARRAY_ENABLED,0)
ES2 glGetVertexAttribiv(4,GL_VERTEX_ATTRIB_ARRAY_ENABLED,0)
ES2 glGetVertexAttribiv(5,GL_VERTEX_ATTRIB_ARRAY_ENABLED,0)
ES2 glGetVertexAttribiv(6,GL_VERTEX_ATTRIB_ARRAY_ENABLED,0)
ES2 glGetVertexAttribiv(7,GL_VERTEX_ATTRIB_ARRAY_ENABLED,0)
ES2 glBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_ALPHA)
ES2 glDisable(GL_BLEND)
ES2 glFrontFace(GL_CCW)
ES2 glDisable(GL_CULL_FACE)
ES2 glEnable(GL_DEPTH_TEST)
ES2 glDepthMask(GL_TRUE)
ES2 glDepthFunc(GL_LESS)
ES2 glClearDepthf(1,000000)
ES2 glDisable(GL_SCISSOR_TEST)
ES2 glClearColor(1,000000,1,000000,1,000000,1,000000)
ES2 glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
ES2 glViewport(0,0,800,424)
ES2 glDisable(GL_STENCIL_TEST)
ES2 glDisable(GL_BLEND)
ES2 glDepthMask(GL_TRUE)
ES2 glEnable(GL_BLEND)
ES2 glDepthMask(GL_FALSE)
ES2 glUseProgram(70001)
ES2 glEnableVertexAttribArray(0)
ES2 glEnableVertexAttribArray(1)
ES2 glUniform1fv(2,1,1,000000)
ES2 glUniformMatrix4fv(1,1,GL_FALSE,[ 
0,002500, 0,000000, 0,000000, -1,000000;
0,000000, -0,004717, 0,000000, 1,000000;
0,000000, 0,000000, 1,000000, 0,000000;
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,12,0xbed28)
ES2 glVertexAttribPointer(1,4,GL_UNSIGNED_BYTE,GL_TRUE,12,0xbed30)
ES2 glDrawElements(GL_TRIANGLE_STRIP,4,GL_UNSIGNED_SHORT,~Data(8 bytes)~,)
ES2 glUniformMatrix4fv(1,1,GL_FALSE,[ 
0,002500, 0,000000, 0,000000, -0,975000;
0,000000, -0,004717, 0,000000, 0,952830;
0,000000, 0,000000, 1,000000, 0,000000;
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,12,0xc19a0)
ES2 glVertexAttribPointer(1,4,GL_UNSIGNED_BYTE,GL_TRUE,12,0xc19a8)
ES2 glDrawElements(GL_TRIANGLE_STRIP,4,GL_UNSIGNED_SHORT,~Data(8 bytes)~,)
ES2 glDisableVertexAttribArray(0)
ES2 glDisableVertexAttribArray(1)
ES2 glUseProgram(280004)
ES2 glEnableVertexAttribArray(0)
ES2 glEnableVertexAttribArray(1)
ES2 glUniform4fv(3,1,[ 
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glUniformMatrix4fv(2,1,GL_FALSE,[ 
0,002500, 0,000000, 0,000000, -0,883086;
0,000000, -0,004717, 0,000000, 0,731132;
0,000000, 0,000000, 1,000000, 0,000000;
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glUniform1fv(5,1,0,345714)
ES2 glUniform1fv(6,1,0,654286)
ES2 glUniform2fv(1,1,[ 
0,001493, 0,007812
])
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE)
ES2 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,16,0xcb1a0)
ES2 glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,16,0xcb1a8)
ES2 glDrawElements(GL_TRIANGLES,30,GL_UNSIGNED_SHORT,~Data(60 bytes)~,)
ES2 glDisableVertexAttribArray(0)
ES2 glDisableVertexAttribArray(1)
ES2 glUseProgram(70001)
ES2 glEnableVertexAttribArray(0)
ES2 glEnableVertexAttribArray(1)
ES2 glUniform1fv(2,1,1,000000)
ES2 glUniformMatrix4fv(1,1,GL_FALSE,[ 
0,002500, 0,000000, 0,000000, 0,500000;
0,000000, -0,004717, 0,000000, 0,655660;
0,000000, 0,000000, 1,000000, 0,000000;
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,12,0xc0ec8)
ES2 glVertexAttribPointer(1,4,GL_UNSIGNED_BYTE,GL_TRUE,12,0xc0ed0)
ES2 glDrawElements(GL_TRIANGLE_STRIP,4,GL_UNSIGNED_SHORT,~Data(8 bytes)~,)
ES2 glDisableVertexAttribArray(0)
ES2 glDisableVertexAttribArray(1)
ES2 glUseProgram(280004)
ES2 glEnableVertexAttribArray(0)
ES2 glEnableVertexAttribArray(1)
ES2 glUniform4fv(3,1,[ 
1,000000, 1,000000, 1,000000, 1,000000
])
ES2 glUniformMatrix4fv(2,1,GL_FALSE,[ 
0,002500, 0,000000, 0,000000, 0,606680;
0,000000, -0,004717, 0,000000, 0,419811;
0,000000, 0,000000, 1,000000, 0,000000;
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glUniform1fv(5,1,0,295895)
ES2 glUniform1fv(6,1,0,700895)
ES2 glUniform2fv(1,1,[ 
0,001493, 0,007812
])
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE)
ES2 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,16,0xcb320)
ES2 glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,16,0xcb328)
ES2 glDrawElements(GL_TRIANGLES,24,GL_UNSIGNED_SHORT,~Data(48 bytes)~,)
ES2 glUniform4fv(3,1,[ 
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glUniformMatrix4fv(2,1,GL_FALSE,[ 
0,002500, 0,000000, 0,000000, -0,133340;
0,000000, -0,004717, 0,000000, -0,500000;
0,000000, 0,000000, 1,000000, 0,000000;
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glUniform1fv(5,1,0,196296)
ES2 glUniform1fv(6,1,0,736296)
ES2 glUniform2fv(1,1,[ 
0,001493, 0,007812
])
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE)
ES2 glBindBuffer(GL_ARRAY_BUFFER,70001)
ES2 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,16,NULL)
ES2 glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,16,0x8)
ES2 glDrawElements(GL_TRIANGLES,102,GL_UNSIGNED_SHORT,~Data(204 bytes)~,)
ES2 glUniformMatrix4fv(2,1,GL_FALSE,[ 
0,002500, 0,000000, 0,000000, -0,062949;
0,000000, -0,004717, 0,000000, -0,820755;
0,000000, 0,000000, 1,000000, 0,000000;
0,000000, 0,000000, 0,000000, 1,000000
])
ES2 glUniform1fv(5,1,0,196296)
ES2 glUniform1fv(6,1,0,736296)
ES2 glUniform2fv(1,1,[ 
0,001493, 0,007812
])
ES2 glBindTexture(GL_TEXTURE_2D,140002)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE)
ES2 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE)
ES2 glBindBuffer(GL_ARRAY_BUFFER,0)
ES2 glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,16,0xcaf38)
ES2 glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,16,0xcaf40)
ES2 glDrawElements(GL_TRIANGLES,48,GL_UNSIGNED_SHORT,~Data(96 bytes)~,)
ES2 glDisableVertexAttribArray(0)
ES2 glDisableVertexAttribArray(1)
ES2 glDisable(GL_SCISSOR_TEST)
EGL eglBindAPI(EGL_OPENGL_ES_API) ==> EGL_TRUE
EGL eglSwapBuffers(EGLDisplay(1),EGLSurface(762816),18,800,424,~Data(1356800 bytes)~) ==> EGL_TRUE
 

The Following 3 Users Say Thank You to frafI For This Useful Post:
Posts: 3,328 | Thanked: 4,476 times | Joined on May 2011 @ Poland
#53
Originally Posted by frafI View Post
number of posts: Well everybody has its own field of interest and Qt is an area where I'm able to contribute something. However I own an N900 since May 2010 and always read this forum since.

about webkit2/snowshoe: I've not yet build webkit2, because it's a likely reason of errors (see Qt wiki), but there is no principal reason, why it shouldn't work in the end.

opengl: Since QtQuick2 requires OpenGL (or OpenGL ES 2) it's already part of the qtbase package. However opengl is likely involved in the aforementioned bug.
btw: anyone able to analyse an opengl call trace gained by Pvrtrace?
U might want to ask freemangordon for help, as afaik iirc he's the qt cssu guy
__________________
If you want to support my work, you can donate by PayPal or Flattr

Projects no longer actively developed: here
 

The Following User Says Thank You to marmistrz For This Useful Post:
Posts: 114 | Thanked: 298 times | Joined on Jan 2011 @ Berlin
#54
To investigate the Text item bug mentioned above, I've put a question on stackoverflow:
http://stackoverflow.com/questions/1...-on-the-screen
If you have an account there and like to help porting Qt5 to the N900, please upvote it.
Edit: I've now started a bounty there, let's see if that helps.

Last edited by frafI; 2013-02-23 at 22:14.
 
Alecsandru's Avatar
Posts: 439 | Thanked: 282 times | Joined on Oct 2012
#55
any news on this?
 
Posts: 114 | Thanked: 298 times | Joined on Jan 2011 @ Berlin
#56
No news, the problem is still the same. Sorry that I didn't answer earlier but I didn't receive a mail although I'm subscribed to this thread. The stackoverflow bounty expired without an answer. I'll post a question on qt-project.org soon.
 
Posts: 3,328 | Thanked: 4,476 times | Joined on May 2011 @ Poland
#57
Originally Posted by frafI View Post
No news, the problem is still the same. Sorry that I didn't answer earlier but I didn't receive a mail although I'm subscribed to this thread. The stackoverflow bounty expired without an answer. I'll post a question on qt-project.org soon.
Look at the maemo qt changelog entries, maybe the devs will help you. + the cssu qt devs
__________________
If you want to support my work, you can donate by PayPal or Flattr

Projects no longer actively developed: here
 
Posts: 3,074 | Thanked: 12,960 times | Joined on Mar 2010 @ Sofia,Bulgaria
#58
@frafI: does that text bug appear only with GL paint engine or it is the same with the raster? Did you try to compile with gcc 4.7.2? We hit a nasty bug in 4.2.1 in CSSU, the text in LineEdit were erased, as soon as you click on it. The solution was to change from -O3 to -O2.
__________________
Never fear. I is here.

720p video support on N900,SmartReflex on N900,Keyboard and mouse support on N900
Nothing is impossible - Stable thumb2 on n900

Community SSU developer
kernel-power developer and maintainer

 

The Following 4 Users Say Thank You to freemangordon For This Useful Post:
Posts: 114 | Thanked: 298 times | Joined on Jan 2011 @ Berlin
#59
@freemangordon: As far as I know OpenGL (ES2) is the only option for QtQuick2. I didn't try QtQuick1 but its implementation is totally different (didn't change that much since Qt4).
I didn't try changing the optimization level, that seems a good idea.

Does compiling with gcc4.7. require a recompilation of the libraries, too? I had a lot of issues using different versions of gcc in the past and I'd like to keep Qt5 builds compatible to stock libraries. Of course it should *also* compile with 4.7. in the end.
 

The Following User Says Thank You to frafI For This Useful Post:
Posts: 3,328 | Thanked: 4,476 times | Joined on May 2011 @ Poland
#60
Originally Posted by frafI View Post
@freemangordon: As far as I know OpenGL (ES2) is the only option for QtQuick2. I didn't try QtQuick1 but its implementation is totally different (didn't change that much since Qt4).
I didn't try changing the optimization level, that seems a good idea.

Does compiling with gcc4.7. require a recompilation of the libraries, too? I had a lot of issues using different versions of gcc in the past and I'd like to keep Qt5 builds compatible to stock libraries. Of course it should *also* compile with 4.7. in the end.
You can try raster with
/path/to/the/exec -graphicssystem raster
__________________
If you want to support my work, you can donate by PayPal or Flattr

Projects no longer actively developed: here
 
Reply


 
Forum Jump


All times are GMT. The time now is 20:27.