summaryrefslogtreecommitdiffstats
path: root/src/gui/opengl/qopenglshaderprogram.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Add note to docs about normalization in setAttributeBufferLaszlo Agocs2014-03-171-0/+6
| | | | | | Task-number: QTBUG-37103 Change-Id: I0b1716b76e10c65871c6a96dab5d8d81c95095d7 Reviewed-by: Gunnar Sletta <[email protected]>
* Avoid using direct OpenGL calls in gui and widgetsLaszlo Agocs2014-03-101-1/+2
| | | | | Change-Id: I5d88a2e204ca23e178a4e3044b9cb13392c3e763 Reviewed-by: Jørgen Lind <[email protected]>
* Dynamic GL: remove exporting symbolsLaszlo Agocs2014-03-041-5/+5
| | | | | | | | | | | | | | | | | | | | | Remove the opengl proxy for now. Later it will either be moved into a separate library or replaced by a QOpenGLFunctions-based approach. This means that the -opengl dynamic configuration is not usable for the time being. The rest of the enablers remain in place. The convenience function QOpenGLFunctions::isES() is now moved to QOpenGLContext and is changed to check the renderable type. This is extremely useful since besides supporting dynamic GL it solves also the problem of GL_ARB_ES2_compatibility (i.e. it triggers the real ES path when creating an ES-compatible context with a desktop OpenGL implementation). Task-number: QTBUG-36483 Task-number: QTBUG-37172 Change-Id: I045be3fc16e9043e1528cf48e6bf0903da4fa7ca Reviewed-by: Friedemann Kleint <[email protected]> Reviewed-by: Jørgen Lind <[email protected]>
* Introducing QOpenGLShaderProgram::create()Gunnar Sletta2014-02-221-1/+22
| | | | | | | | | | | | Needed for QOpenGLShaderProgram to be usable with GL_OES_get_program_binary and potentially other extensions. [Changelog][QtGui] The function QOpenGLShaderProgram::create() has been added. It is can be used to force immediate allocation of the program's id. Change-Id: I36b3f45b00e7a439df12c54af7dc06c0ba913587 Reviewed-by: Lars Knoll <[email protected]>
* Dynamic GL switch on WindowsLaszlo Agocs2014-02-141-11/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The patch introduces a new build configuration on Windows which can be requested by passing -opengl dynamic to configure. Platforms other than Windows (including WinRT) are not affected. The existing Angle and desktop configurations are not affected. These continue to function as before and Angle remains the default. In the future, when all modules have added support for the dynamic path, as described below, the default configuration could be changed to be the dynamic one. This would allow providing a single set of binaries in the official builds instead of the current two. When requesting dynamic GL, Angle is built but QT_OPENGL_ES[_2] are never defined. Instead, the code path that has traditionally been desktop GL only becomes the dynamic path that has to do runtime checks. Qt modules and applications are not linked to opengl32.dll or libegl/glesv2.dll in this case. Instead, QtGui exports all necessary egl/egl/gl functions which will, under the hood, forward all requests to a dynamically loaded EGL/WGL/GL implementation. Porting guide (better said, changes needed to prepare your code to work with dynamic GL builds when the fallback to Angle is utilized): 1. In !QT_OPENGL_ES[_2] code branches use QOpenGLFunctions::isES() to differentiate between desktop and ES where needed. Keep in mind that it is the desktop GL header (plus qopenglext.h) that is included, not the GLES one. QtGui's proxy will handle some differences, for example calling glClearDepth will route to glClearDepthf when needed. The built-in eglGetProcAddress is able to retrieve pointers for standard GLES2 functions too so code resolving OpenGL 2 functions will function in any case. 2. QT_CONFIG will contain "opengl" and "dynamicgl" in dynamic builds, but never "angle" or "opengles2". 3. The preprocessor define QT_OPENGL_DYNAMIC is also available in dynamic builds. The usage of this is strongly discouraged and should not be needed anywhere except for QtGui and the platform plugin. 4. Code in need of the library handle can use QOpenGLFunctions::platformGLHandle(). The decision on which library to load is currently based on a simple test that creates a dummy window/context and tries to resolve an OpenGL 2 function. If this fails, it goes for Angle. This seems to work well on Win7 PCs for example that do not have proper graphics drivers providing OpenGL installed but are D3D9 capable using the default drivers. Setting QT_OPENGL to desktop or angle skips the test and forces usage of the given GL. There are also two new application attributes that could be used for the same purpose. If Angle is requested but the libraries are not present, desktop is tried. If desktop is requested, or if angle is requested but nothing works, the EGL/WGL functions will still be callable but will return 0. This conveniently means that eglInitialize() and such will report a failure. Debug messages can be enabled by setting QT_OPENGLPROXY_DEBUG. This will tell which implementation is chosen. The textures example application is ported to OpenGL 2, the GL 1 code path is removed. [ChangeLog][QtGui] Qt builds on Windows can now be configured for dynamic loading of the OpenGL implementation. This can be requested by passing -opengl dynamic to configure. In this mode no modules will link to opengl32.dll or Angle's libegl/libglesv2. Instead, QtGui will dynamically choose between desktop and Angle during the first GL/EGL/WGL call. This allows deploying applications with a single set of Qt libraries with the ability of transparently falling back to Angle in case the opengl32.dll is not suitable, due to missing graphics drivers for example. Task-number: QTBUG-36483 Change-Id: I716fdebbf60b355b7d9ef57d1e069eef366b4ab9 Reviewed-by: Friedemann Kleint <[email protected]> Reviewed-by: Jørgen Lind <[email protected]>
* Doc: Adding mark-up to boolean default values.Jerome Pasion2013-10-081-15/+15
| | | | | | | | | | | | | | | | | Default values should have mark-up to denote that they are code. This commit changes: -"property is true" to "property is \c true". -"Returns true" to "Returns \c true". -"property is false" to "property is \c false". -"returns true" to "returns \c true". -"returns false" to "returns \c false". src/3rdparty and non-documentation instances were ignored. Task-number: QTBUG-33360 Change-Id: Ie87eaa57af947caa1230602b61c5c46292a4cf4e Reviewed-by: Oswald Buddenhagen <[email protected]> Reviewed-by: Jerome Pasion <[email protected]>
* Add workaround for GL on Android emulatorEskil Abrahamsen Blomfeldt2013-07-291-1/+3
| | | | | | | | | | | | On the Android Emulator, the shaders will be compiled by a desktop GL driver, since the GL driver in the emulator is just a thin wrapper. The GL driver does not necessarily support the precision qualifiers, which can cause applications to break. We detect this at runtime in the platform plugin and set a workaround flag to Task-number: QTBUG-32557 Change-Id: Ied00cfe8e804d1f7862697dd379a14f3bed3d980 Reviewed-by: Gunnar Sletta <[email protected]>
* Prevent QOpenGLShaderProgram::link() from showing unnecessary warnings.Samuel Rødal2013-05-241-5/+7
| | | | | | | | | | | | | | | If the liking didn't fail there's no need to print out warnings. The warnings can still be accessed by the application after calling link() through the log() function. This prevents warnings such as these from appearing: QOpenGLShader::link: "No errors." Task-number: QTBUG-31326 Change-Id: I03c9be5dfada8822c3ab1c3610eac2fc0a91410b Reviewed-by: Gunnar Sletta <[email protected]> Reviewed-by: Sean Harmer <[email protected]>
* OpenGL: Add support for the Compute shader stageSean Harmer2013-03-021-1/+14
| | | | | Change-Id: Ibb1b79358758c2adf818af8c6fcd5c379efad8c3 Reviewed-by: Samuel Rødal <[email protected]>
* QOpenGLShaderProgram: insert precision defines based on runtime detectionGiuseppe D'Angelo2013-03-011-10/+14
| | | | | | | | | | | Given that we can create OpenGL/ES contexts even under a Desktop OpenGL implementation, we must check the type of the surface we're renderering on at runtime. Change-Id: I55004ce918889b3fc094702976500fcfc675bd1a Reviewed-by: Samuel Rødal <[email protected]> Reviewed-by: Sean Harmer <[email protected]> Reviewed-by: Gunnar Sletta <[email protected]>
* OpenGL: Add support for OpenGL 4 tessellation shader stagesSean Harmer2013-03-011-4/+229
| | | | | | | | | | This adds support for OpenGL 4 tessellation shader stages to QOpenGLShaderProgram and QOpenGLShader. Change-Id: Iefb2f411e00767990d54670c5d39413be694dd66 Reviewed-by: James Turner <[email protected]> Reviewed-by: Giuseppe D'Angelo <[email protected]> Reviewed-by: Gunnar Sletta <[email protected]>
* OpenGL: Reinstate support for OpenGL geometry shadersSean Harmer2013-02-281-3/+53
| | | | | | | | | Unlike QGLShader, this requires the OpenGL 3.2 core implementation of geometry shaders to keep the API simple. Change-Id: Icb07f430c4c5b5d950bcf6f7119becec4cfaad8a Reviewed-by: James Turner <[email protected]> Reviewed-by: Gunnar Sletta <[email protected]>
* Update copyright year in Digia's license headersSergio Ahumada2013-01-181-1/+1
| | | | | Change-Id: Ic804938fc352291d011800d21e549c10acac66fb Reviewed-by: Lars Knoll <[email protected]>
* OpenGL: Remove API for stubbed Geometry shader support in gui/openglSean Harmer2012-09-241-132/+1
| | | | | | | | | | | | | | | There is a pending patch to reinstate this for Qt 5.1 (the patch introduces new API top QOpenGLContext). I will fold the revert of this patch into: https://codereview.qt-project.org/#change,31231 Note that QGLShaderProgram still supports Geometry shaders so source compatibility with Qt 4.8 is maintained. Change-Id: I53faedd4e4a2a6c2a9765afdc1bee6df5ae2f711 Reviewed-by: Lars Knoll <[email protected]> Reviewed-by: Samuel Rødal <[email protected]>
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-221-24/+24
| | | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e Reviewed-by: Lars Knoll <[email protected]> Reviewed-by: Sergio Ahumada <[email protected]>
* Make gui/math3d classes use float rather than qrealSean Harmer2012-09-071-44/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This corrects the mismatch between using floats for internal storage and qreal in the API of QVector*D which leads to lots of implicit casts between double and float. This change also stops users from being surprised by the loss of precision when using these classes on desktop platforms and removes the need for the private constructors taking a dummy int as the final argument. The QMatrix4x4 and QQuaternion classes have been changed to use float for their internal storage since these are meant to be used in conjunction with the QVector*D classes. This is to prevent unexpected loss of precision and to improve performance. The on-disk format has also been changed from double to float thereby reducing the storage required when streaming vectors and matrices. This is potentially a large saving when working with complex 3D meshes etc. This also has a significant performance improvement when passing matrices to QOpenGLShaderProgram (and QGLShaderProgram) as we no longer have to iterate and convert the data to floats. This is an operation that could easily be needed many times per frame. This change also opens the door for further optimisations of these classes to be implemented by using SIMD intrinsics. This needs to be applied in conjunction with https://codereview.qt-project.org/#change,33548 Task-number: QTBUG-21035 Task-number: QTBUG-20661 Change-Id: I9321b06040ffb93ae1cbd72fd2013267ac901b2e Reviewed-by: Lars Knoll <[email protected]>
* Get started with patching up the Qt GUI docsGunnar Sletta2012-06-281-0/+2
| | | | | | | | Primary goal, make the front page of the Qt GUI module a bit more clarifying and avoid downstream references inside the Qt GUI docs. Change-Id: Icbcfbb64b93963add889bf83711daa9575885c02 Reviewed-by: Samuel Rødal <[email protected]>
* Fixed QOpenGLFunctions API.Samuel Rødal2012-06-181-1/+1
| | | | | | | | | We don't use the GL short term in the new API. Change-Id: I73a51f65f5f4216c1763b95dcddf68fe8fc229d1 Reviewed-by: Gunnar Sletta <[email protected]> Reviewed-by: Sean Harmer <[email protected]> Reviewed-by: Lars Knoll <[email protected]>
* Doc: Modularize QtGui documentation.Casper van Donderen2012-05-091-3/+3
| | | | | | | | This change moves the snippets and images to the modularized directories. Change-Id: I5f86f598fbe7c47d632c613b85d94ced89ba2c29 Reviewed-by: Marius Storm-Olsen <[email protected]>
* Allow creation of QOpenGLShaderProgram without a current contextSean Harmer2012-05-021-3/+3
| | | | | | | | | | | | | | This change prevents the qWarning() in QOpenGLFunctions from being triggered when creating a QOpenGLShaderProgram object without a current QOpenGLContext. This is a common case especially when the shader program is a member variable of a class. It now relies upon the QOpenGLShaderProgram::init() function to resolve the GL function pointers when the shader program is first used which of course should be done with an active context. Change-Id: Ib7dc345593f2a70d72ef8f650151cc90001058ca Reviewed-by: Samuel Rødal <[email protected]>
* Initialize QOpenGLFunctions before using it in QOpenGLShaderProgramSean Harmer2012-05-021-0/+1
| | | | | Change-Id: I472e97092b05f1721b7df5759d674c213d6018c6 Reviewed-by: Samuel Rødal <[email protected]>
* Remove "All rights reserved" line from license headers.Jason McDonald2012-01-301-1/+1
| | | | | | | | | | As in the past, to avoid rewriting various autotests that contain line-number information, an extra blank line has been inserted at the end of the license text to ensure that this commit does not change the total number of lines in the license header. Change-Id: I311e001373776812699d6efc045b5f742890c689 Reviewed-by: Rohan McGovern <[email protected]>
* Update contact information in license headers.Jason McDonald2012-01-231-1/+1
| | | | | | | Replace Nokia contact email address with Qt Project website. Change-Id: I431bbbf76d7c27d8b502f87947675c116994c415 Reviewed-by: Rohan McGovern <[email protected]>
* Fixed QOpenGLShader::log().Kim Motoyoshi Kalland2012-01-111-1/+0
| | | | | | | | log() returned an empty string because the compile log was stored in a local variable rather than the member variable. Change-Id: I60142fd0bccfcbb495cea430b583f81fb0241329 Reviewed-by: Samuel Rødal <[email protected]>
* Update copyright year in license headers.Jason McDonald2012-01-051-1/+1
| | | | | Change-Id: I02f2c620296fcd91d4967d58767ea33fc4e1e7dc Reviewed-by: Rohan McGovern <[email protected]>
* opengl: Do not crash when programGuard is a nullptrHolger Hans Peter Freyther2011-12-011-1/+1
| | | | | | | | The rest of the code is checking programGuard for nullptr, do it here as well to prevent a segmentation fault. Change-Id: I38a03f74d493b8f731157be1739707b39904f7ba Reviewed-by: Samuel Rødal <[email protected]>
* Fixed missing snippets for QOpenGLShaderProgram.Samuel Rødal2011-10-101-3/+3
| | | | | | | Change-Id: Ie44edb3379f6fef4c4c8b69bb5e36fc19154ab26 Reviewed-on: http://codereview.qt-project.org/6332 Sanity-Review: Qt Sanity Bot <[email protected]> Reviewed-by: Casper van Donderen <[email protected]>
* Easier shader debuggingJani Uusi-Rantala2011-10-101-8/+48
| | | | | | | | | | - Dumps out also the source code of the failed shader if available Change-Id: I9ae80e6a6749446c5ff54db1bc324cc7411a81a7 Signed-off-by: Jani Uusi-Rantala <[email protected]> Reviewed-on: http://codereview.qt-project.org/6269 Sanity-Review: Qt Sanity Bot <[email protected]> Reviewed-by: Samuel Rødal <[email protected]>
* Fix the \since 4.x tags in gui/opengl.Samuel Rødal2011-09-021-23/+1
| | | | | | | | | All this API is "new" since 5.0. Change-Id: I7ba1718a4a24eac00ccc4db1646200e9544ee5a4 Reviewed-on: http://codereview.qt.nokia.com/4131 Reviewed-by: Qt Sanity Bot <[email protected]> Reviewed-by: Gunnar Sletta <[email protected]>
* Build on Windows/clean build on Linux.Friedemann Kleint2011-08-291-0/+2
| | | | | | | Change-Id: I26552e85a8e8c63002db93b7d9b645981620f0af Reviewed-on: http://codereview.qt.nokia.com/3738 Reviewed-by: Qt Sanity Bot <[email protected]> Reviewed-by: Samuel Rødal <[email protected]>
* Compile without QT_DEBUG.Morten Sorvig2011-08-291-1/+1
| | | | | | | Change-Id: I3dadcdd83f45451d712703601d46adbc1691291b Reviewed-on: http://codereview.qt.nokia.com/3727 Reviewed-by: Qt Sanity Bot <[email protected]> Reviewed-by: Samuel Rødal <[email protected]>
* Clean up legacy defines in gui/opengl.Samuel Rødal2011-08-291-46/+0
| | | | | | | Change-Id: I14d477c3f7a98cecca2c0a240ff13ea8ec64a154 Reviewed-on: http://codereview.qt.nokia.com/3716 Reviewed-by: Qt Sanity Bot <[email protected]> Reviewed-by: Gunnar Sletta <[email protected]>
* Copy core GL functionality to QtGui with QGL -> QOpenGL naming.Samuel Rødal2011-08-291-0/+3171
Change-Id: Ibc989afa4a30dd184d41d1a1cd89f97196e48855 Reviewed-on: http://codereview.qt.nokia.com/3710 Reviewed-by: Gunnar Sletta <[email protected]>