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
This was a read after free error. This only fix the undefined behavior.
The result is still not correct in certain cases (see T67226).
We want to include this for 2.80
This was caused by TAA offset being computed as the 2nd sample even if the
sampling was reset afterwards.
The fix is to update the matrices after any potential reset.
`DRW_STATE_CLIP_PLANES` has to be enabled independent of the workbench material.
Reviewers: fclem, jbakker
Differential Revision: https://developer.blender.org/D5278
We check if the previous iteration (sample) was using a valid double buffer.
If it wasn't, we request another iteration.
This fix the issue for viewport,viewport render and image render.
Related to T65761 Eevee render inconsistency between 3D View, Viewport render, and F12 Render
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
When in texture paint mode and in solid mode the object that is being
texture painted will be rendered by the workbench engine with textures.
All other objects would render the same. For other cases the texture paint
draw engine will still draw the texture.
The texture mode draw engine now only drawn the masks. The opacity
sliders influences the texture mask.
This change has been implemented conserably. In the future we need to
look into making this better, like adding support that every object
can be colored differently. Currently when rendering in the workbench
we can have up to 3 different color types active (what the user selected,
the fallback in case no materials have been configured and this one,
forcing textures)
Reviewed By: fclem, brecht
Differential Revision: https://developer.blender.org/D5190
When doing image rendering with grease pencil, it reused the view of
workbench or EEVEE. These views might be offsetted due to TAA.
This shifted the view a tiny bit. We will not reset the view in between
render engines.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5171
... instead of overiding it (previous behavior).
In practice it's not really noticeable.
This means an object with alpha will never be more opaque when enabling
xray.
Memory leaks happened when using final multi view rendering together with workbench.
Workbench assumed that the textures were always NULL
Reviewers: fclem
Differential Revision: https://developer.blender.org/D5136
Grease Pencil already reset the default view so the draw_manager wouldn't assert. During multi view rendering the same assert still happened. This patch will reset the default view when starting to render a new view.
Reviewers: fclem
Differential Revision: https://developer.blender.org/D5137
Following @fclem comments, I have implemented the use of Stencil for Solid line strokes. For Dots, Boxes and Lines with texture, the stencil is not activated because "kill" some artistic effects.
We have done test in greasepencil-object branch and all it's working as expected and the FPS are equal, so the stencil hasn't any appreciable impact in the drawing time.
The Stencil is used in groups of 255 and the passes are done in the same way. If the stencil is not use for the type of stroke (Dot/Box/Texture), the drawing is grouped as much as possible to reduce GPU overhead and limit the times the stencil bit must be cleared.
For doing this patch I had to add 2 new functions for reading private data to Draw manager. We decided add these function as a temporary solution while the Draw Manager implements the option to clear the stencil by groups. When this option will be implemented, these functions must be removed.
Thanks to Clément for his help and support. It's always a pleasure working with him.
Review by: @fclem
Testers: @mendio @pepeland
See D5126 for more details
We fix by separating the drawing of wire xray objects.
These wire objects gets drawn before normal wires and set the stencil to
0x0 just like the solid counterparts. Also a prepass is done to "dig"
through non-xray solid.
The previous commit disable the fast drawing if the background texture was not ready, but it did not detect the Painting mode, so the fast was always disabled.
Now the check is done inside paint mode.
There were some problems in the engine because the data was saved inside e_data struct, but this struct is reset sometimes and the background texture is not valid.
Now, the data has been moved to stl->g_data and all creation and free has been moved to use stl->g_data. This fix also some small memory leak for the Buffer GPUBatch data.
The background texture has been moved to texture list because must be available all the time. When is not drawing, the texture is removed to safe memory. Also, if the mode is painting and the texture is not ready because it was removed by Draw Manager, the texture is reloaded with the background image again. This ensure the background image is always visible when painting.
Also I have used this patch to reduce the size of texture used for background to 16F instead of 32F and the blank texture to 1x1 pixels instead of 16x16.
Reviewed by: @fclem
See D5115 for more details
Migrate old legacy code to the draw mamager/object mode. The old legacy
version did not work with wireframe. By migrating the code
to modern draw manager code we have mode control on the drawing process.
Still background images do not work with OIT, the cause seems to be that the transparent pixels are treated as background pixels.
Also There are some artifacts when working with Holdouts and DoF, this
is because the draw engines do not pass the correct alpha values.
Reviewers: fclem, brecht
Differential Revision: https://developer.blender.org/D4638