| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Reviewed-by: trustme
|
|
|
|
|
|
|
| |
and y-axis inversion and overall less conversion, making significantly faster
for plain usecases
Reviewed-by: Trond
|
|
|
|
|
|
|
|
|
| |
The PBO code path causes a crash on certain AMD graphics cards, plus
seems to perform worse than the straight forward glTexImage2D code path
on several configurations.
Task-number: 257353
Reviewed-by: Gunnar Sletta
|
|
|
|
| |
Reviewed-by: Trust Me
|
|
|
|
|
|
|
|
| |
Make a clear seperation between the GL texture and the GLX pixmap. A
GLXPixmap is valid in any GL context and thus does not need to be
re-created every time the pixmap has changed.
Reviewed-By: Samuel
|
|
|
|
|
|
|
| |
The new class alows more than one hook to be installed at a time and,
for QPixmaps, the hook is told which pixmap is getting deleted.
Reviewed-By: Samuel
|
|
|
|
|
|
|
|
|
| |
The texture_from_pixmap patch removed a bindTexture overload from
QGLContextPrivate which is actually needed by all architectures. It was
just it's use in the mac compat methods which broke the build and
highlighted the issue.
Reviewed-By: Trustme
|
|
|
|
|
|
|
|
|
| |
~QGLTexture wouldn't make the texture's context current if the current
context was zero, meaning the texture would leak. This also means
deleteBoundPixmap doesn't need to make the context currnet anymore (as
it's only called from ~QGLTexture).
Reviewed-By: Kim
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The patch tries to use texture_from_pixmap extentions on glX to properly
bind an X Pixmap to a texture in QGLContextPrivate::bindTexture(QPixmap,).
Because GL & X have different coordinate systems, the pixmap will be
inverted about the y-axis. The extension does however allow a
GLX_Y_INVERTED_EXT attribute to be set which will bind the pixmap the
correct way up. If the underlying driver doesn't support this,
texture_from_pixmap can't be used for QGLContext::bindTexture, because
that function expects the resulting texture to be the right way up.
However, it can still be used internally by the paint engine for
drawPixmap operations. For these cases, if the pixmap is inverted, the
paint engine can simply invert the texture coords to compensate. This is
why this patch also moves QGLTexture into qgl_p.h.
QGLContextPrivate::bindTexture(QPixmap,) now returns a QGLTexture which
the paint engine can inspect to see if it needs to invert the texture
coords.
Finally, it seems on some (probably all) drivers, deleting an X pixmap
which has been bound to a texture before calling glFinish/swapBuffers
renders garbage. Presumably this is because X deletes the pixmap behind
the driver's back before it's had a chance to use it. To fix this, we
reference all QPixmaps which have been bound to stop them being deleted
and only deref them after we swap the buffer, when they can be safely
deleted.
Reviewed-By: Kim
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I added a QGLContextResource class which can be used internally in Qt
for sharing resources between contexts. The QGLContextResource is a
hash map where the context is used as 'key', and the resource is the
'value'. All the sharing contexts point to the same resource, and the
resource is automatically deleted when it is not referenced any more.
Now, the shader manager uses the QGLContextResource class.
I also added a pointer to a struct in the QGLContextPrivate class. The
struct is shared between all the sharing contexts and is deleted
automatically. Currently, the struct only contains the resolved OpenGL
function pointers.
The shared context register code has been simplified.
Reviewed-by: Tom
|
|
|
|
|
|
|
| |
This could potentially crash when a context was destroyed before
the actual font engine holding the QGLTextureGlyphCache was destroyed.
Reviewed-by: Samuel
|
|\ |
|
| |
| |
| |
| | |
Reviewed-by: Trust Me
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The NSOpenGLContext seems to be tied to the window. So if the view
changes from one window to another, the OpenGL context needs to be
cleared. We can do this by hooking into the viewWillChangeWindow and
viewDidChangeWindow events and clear and reset the drawable
respectively. We also found out that QCocoaOpenGLView was not being used
at all, so just remove it to get rid of any confusion.
Task-number: 250066
Reviewed-by: Trond
|
| |
|
|
|
|
| |
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
|
|
|
| |
To allow mixing QPainter and raw OpenGL commands we need to have some
way for the user to say that's he's about to use raw OpenGL so that we
are free to do buffering optimizations in the paint engines and use
either GL1 or GL2 paint engine. As there's already a syncState()
function in QPaintEngine we've reused this and added
QPaintEngineEx::sync() which takes care of syncing/flushing the paint
engine.
Reviewed-by: Trond
|
|
|
|
|
|
|
|
| |
QWidgets are filled with Qt::transparent when WA_TranslucentBackground
is set, reguardless of what their background colour has been set to.
This patch makes QGLWidgets behave the same way.
Reviewed-By: Samuel Rødal
|
|
|
|
|
|
|
| |
Make sure makeCurrent() on a window surface unbinds any active FBO, and
simplify ensureActive() code in GL2 paint engine a bit. We don't need
the last_engine pointer as ensureActive() will take care of ensuring the
correct engine is active anway.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Using GL 2 as default engine breaks the use cases where OpenGL commands
are inter-mixed with QPainter commands, such as when using raw OpenGL in
graphicsview.
For now we'll use the old OpenGL engine for QGLWidget, QGLPixelBuffer,
and QGLFramebufferObject on desktop, and the OpenGL 2 paint engine when
the OpenGL graphics system is used.
Reviewed-by: Trond
|
|
|
|
|
|
|
| |
Compile both GL and GL2 paint engine on desktop, and choose between them
at run-time based on GL version flags.
Reviewed-by: Tom
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| | |
We now use FBOs to implement render-to-pixmap for the GL pixmap backend.
A multisample FBO is used for rendering, and is then blitted onto a
non-multisample FBO dynamically bound to the relevant texture.
Reviewed-by: Tom
|
|\ \
| |/
|/|
| |
| | |
Conflicts:
src/opengl/opengl.pro
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The NSOpenGLContext seems to be tied to the window. So if the view
changes from one window to another, the OpenGL context needs to be
cleared. We can do this by hooking into the viewWillChangeWindow and
viewDidChangeWindow events and clear and reset the drawable
respectively. We also found out that QCocoaOpenGLView was not being used
at all, so just remove it to get rid of any confusion.
Task-number: 250066
Reviewed-by: Trond
|
| |
| |
| |
| |
| |
| | |
RevBy: Trond
Details: Support GL_EXT_framebuffer_multisample and GL_EXT_framebuffer_blit
in the QGLFramebufferObject API.
|
| | |
|
|/
|
|
|
|
|
|
| |
paint engine.
RevBy: Tom
Details: Now we can use the GL 2 paint engine on non-widget paint devices like pixel buffers,
framebuffer objects, and GL window surfaces. Using -graphicssystem opengl works now.
|
|
|