When the relative mode was used, the calculation of the total number of vertices was not done and it was using the total number of vertices in the datablock. This worked for small files, but with complex files the time to allocate all the data was too long and the performance was very bad.
Now, for relative mode the real number of vertex is calculated.
Also fixed the same problem when onion and multiedit is enabled.
The onion skin was nos displayed in secondary screens when disable the Onion switch or the Overlay in the main window.
Added a check to verify if the main overlay and onion switches are enabled in any screen in order to generate the cache data.
This is required to generate the onion skin and limit the times the cache is updated because the cache is generated only in the first screen and if the first screen has the onion disabled the cache for onion skin is not generated. The loop adds time, but always is faster than regenerate the cache all the times.
Reviewed By: mendio, pepeland
Differential Revision: https://developer.blender.org/D6049
Before, the modifiers were evaluated in Draw Engine and this required to calculate a factor to increase the VBO size.
Now, the modifiers are evaluated in Depsgraph and the Draw Engine receives the evaluated stroke with the final number of vertices. As the number of vertices is the final value already, if Draw Manager increases the number with the modifiers only increases the memory with empty space because never would be used. This commit removes this double calculation, reducing the memory usage and removes a loop to calculate the size by modifier too.
Also, the function getDuplicationFactor() has been removed because is not required anymore.
Due the internal design of the drawing engine and the special requirements for 2D inside 3D, it's required to keep the original stroke visible in order to display the particles. If the original stroke is hidden, the particles are hidden too.
This commit only fix the segmentation fault. Make visible the particles when the original is hidden would require a complete redesign and maybe would break some 2D features.
Now the grid matrix is calculated when the shading group is created.
Also, the grid pass is only created when needed and reduce memory usage when the scene is not using grease pencil objects.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5966
The first element of the loop was not calculated for all onion modes. For select mode the first selected is used, for other modes the first frame in the layer is used.
Before when Onion or Multiframe was enabled the VBO length was the total of points on the object for all frames and this results in a big size when the scene had a lot of frames.
Now, the size of VBO length is calculated more precisely and reduce the time to alloc the VBO.This also reduce memory footprint.
The main switch was not checked and the function was doing all calculations, but the data was not used. This makes all slower than expected because the user had the Onion Skinning disabled, but internally was running.
Now the fade layer uses the same logic used to fade objects and also is available in all modes.
Reviewers: mendio, pepeland
Reviewed By: mendio, pepeland
Differential Revision: https://developer.blender.org/D5707
Before, it was only possible to fade the active object. The new option allows to fade all non gpencil selected object. This is a common request by artists.
{F7719513}
Reviewers: mendio, pepeland
Reviewed By: mendio
Differential Revision: https://developer.blender.org/D5704
Now, when it's selected the stroke select mode, the points are not displayed and the stroke is fully selected automatically extending the selection.
Differential Revision: https://developer.blender.org/D5622
Before, the evaluation of modifers were done in draw manager. The reason of the old design was grease pencil was designed before depsgraph was in place.
This commit moves this logic to depsgraph to follow general design and reduce Draw Manager complexity. Also, this is required in order to use modifiers in Edit modes.
Really, there is nothing really new in the creation of derived data, only the logic has been moved to depsgraph, but the main logic is the same. In order to get a reference to the original stroke and points, a pointer is added to Runtime data as part of the evaluated data. These pointers allow to know and use the original data.
As the modifiers now are evaluated in Depsgraph, the evaluated stroke is usable in Edit modes, so now it's possible to work with the evaluated version instead to use a "ghost" of the final image over the original geometry as work today.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5470
There was a fixed limit to the number of points available in a buffer stroke.
Now, the array is expanded as needed using a predefined number of points for each expansion, instead to add one by one. This is done to reduce the number of times the memory allocation is required.
As part of the fix, some variables have been renamed to reflect better their use.
The constant variable was passed as reference to constant variable, but it's better use the new function to copy values.
This could be the problem with T67772
After testing the file, the problem was related to the fill material. As the fill material had the alpha channel set to 1.0, the fill triangulation was calculated, but the fill was disabled.
Now, the fill flag is checked in order to avoid fill triangulation update.
Following the advices of @Germano Cavalcante (mano-wii) , I have exposed as a workaround the free function to be called from draw manager for selection.
Now, the free function is not called for selection inside gpencil draw_scene, but it's called from draw_manager.c.
The real fix would be create a new Scene_finish callback in draw manager, but as the release of 2.80 is almost here, we fix this with a workaround that must be removed when new callback is in place.
Differential Revision: http://developer.blender.org/D5193