Compare commits

...

11 Commits

Author SHA1 Message Date
Pratik Borhade
40298b66da Merge branch 'blender-v5.0-release'
Some checks failed
Close GitHub Pull Requests / Close Pull Requests (push) Has been cancelled
2025-10-18 16:47:28 +05:30
Pratik Borhade
74586023fb Fix #147698: Prevent drag drop inside packed nodetree interface
When node tree is packed, prevent drag-drop operation from rearranging
the socket/panel inside node-tree interface.

Pull Request: https://projects.blender.org/blender/blender/pulls/147794
2025-10-18 13:14:39 +02:00
Pablo Vazquez
88c2c67ae4 UI: Color Interpolation Icons
Color the interpolation icons matching the new interpolation theme
settings added in 75eaecf350

This makes a clearer connection with the lines drawn in Dope Sheet.

See PR for details and screenshots.

Pull Request: https://projects.blender.org/blender/blender/pulls/148215
2025-10-18 00:05:23 +02:00
Harley Acheson
3de61b7f7f Merge branch 'blender-v5.0-release' 2025-10-17 14:53:20 -07:00
Harley Acheson
e259769e9d Fix #148143: Increase Curve Mapping Point Size
This PR increases the points shown on the Curve Mapping widget a bit,
with the selected ones ever larger. This is more in line with what we
saw in 4.5. This also draws the points with AA by changing to a
different shader - which means drawing the selected ones separate from
the unselected ones.

Pull Request: https://projects.blender.org/blender/blender/pulls/148176
2025-10-17 23:51:46 +02:00
Philipp Oeser
cc44420912 Cleanup: rename region_evaulate_visibility > region_evaluate_visibility
_No response_

Pull Request: https://projects.blender.org/blender/blender/pulls/148268
2025-10-17 19:44:59 +02:00
Pablo Vazquez
4340d5fff9 Merge branch 'blender-v5.0-release'
# Conflicts:
#	source/blender/blenkernel/BKE_blender_version.h
#	source/blender/blenloader/intern/versioning_userdef.cc
2025-10-17 18:53:10 +02:00
Pablo Vazquez
829c6a7b98 Fix #141889: Broken themes in 5.0
Blender 5.0 got a theme overhaul, removing hundreds of options and
adding some more. While versioning was attempted to keep themes
looking as close as possible, some settings are impossible to guess
so they require manual editing.

Reset the theme to the default. Similarly to how it was done in other
major overhauls (2.80, 3.0).

Documentation and tools to migrate themes will be available at:
https://developer.blender.org/docs/release_notes/5.0/user_interface/

Pull Request: https://projects.blender.org/blender/blender/pulls/147637
2025-10-17 18:50:29 +02:00
Clément Foucault
a003b27244 Refactor: Compositor: Use template instead of macros for compositor_parallel_reduction.glsl
Rel #143582

This also adds support for C++ compilation of this shader.
See https://developer.blender.org/docs/features/gpu/tools/cpp_shader_compilation/

Pull Request: https://projects.blender.org/blender/blender/pulls/144904
2025-10-17 18:38:07 +02:00
Falk David
e1ca851276 Merge branch 'blender-v5.0-release' 2025-10-17 17:22:16 +02:00
Casey Bianco-Davis
316fe67295 Fix #147756: Grease Pencil: Join Operator crash because of resolution attribute
When strokes from to different layers get joined together, if one layer
had the `resolution` attribute and the other did not. The new
`resolution` attribute would be left with uninitialized values and then
a crash would happen.

This fixes this by filling all attributes that didn't exist with their
default value.

This also ensures that when strokes are removed, the drawing is
tagged as dirty.

Pull Request: https://projects.blender.org/blender/blender/pulls/147948
2025-10-17 17:21:33 +02:00
24 changed files with 684 additions and 210 deletions

View File

@@ -1 +1 @@
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><path d="m375.5 201a.50005.50005 0 0 0 -.47852.35547c-.97912 3.26329-1.65795 6.01658-2.41406 7.89453-.37805.93897-.77714 1.65307-1.20117 2.10156-.42403.4485-.83753.64844-1.40625.64844-.81989 0-1.77194-.85368-2.74219-1.84961-.48512-.49796-.97309-1.01146-1.49609-1.41992-.52301-.40846-1.09998-.73047-1.76172-.73047h-.5a.50005.50005 0 1 0 0 1h.5c.32338 0 .70916.17799 1.14648.51953s.9074.82804 1.39649 1.33008c.97818 1.00407 2.04085 2.15039 3.45703 2.15039.83577 0 1.56694-.36242 2.13281-.96094.56587-.59851 1.00027-1.41738 1.40235-2.41601.7683-1.90825 1.43134-4.57357 2.33398-7.62305h.63086a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -36200 -19999.998)"/></g></svg>
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff" id="blender_ipo_other"><path d="m375.5 201a.50005.50005 0 0 0 -.47852.35547c-.97912 3.26329-1.65795 6.01658-2.41406 7.89453-.37805.93897-.77714 1.65307-1.20117 2.10156-.42403.4485-.83753.64844-1.40625.64844-.81989 0-1.77194-.85368-2.74219-1.84961-.48512-.49796-.97309-1.01146-1.49609-1.41992-.52301-.40846-1.09998-.73047-1.76172-.73047h-.5a.50005.50005 0 1 0 0 1h.5c.32338 0 .70916.17799 1.14648.51953s.9074.82804 1.39649 1.33008c.97818 1.00407 2.04085 2.15039 3.45703 2.15039.83577 0 1.56694-.36242 2.13281-.96094.56587-.59851 1.00027-1.41738 1.40235-2.41601.7683-1.90825 1.43134-4.57357 2.33398-7.62305h.63086a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -36200 -19999.998)"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +1 @@
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><path d="m321.5 201a.50005.50005 0 1 0 0 1h.5c.11714 0 .21825.0354.36133.1582.14308.12279.30922.33684.46875.63282.31905.59195.61443 1.49542.87109 2.55468.51334 2.11854.89163 4.86411 1.30664 7.24024a.50005.50005 0 0 0 .98242.008c.24141-1.26736.60565-2.19557.98829-2.76953s.74023-.76172 1.02148-.76172.63884.18776 1.02148.76172.74688 1.50217.98829 2.76953a.50005.50005 0 0 0 .96093.0762c.24086-.66235.48023-1.14224.6836-1.42187.20337-.27964.32487-.31055.3457-.31055.0208 0 .14233.0309.3457.31055.20337.27963.44274.75952.6836 1.42187a.50005.50005 0 0 0 .4707.32986h1a.50005.50005 0 1 0 0-1h-.69141c-.20925-.52074-.41629-1.01454-.65429-1.3418-.29663-.40786-.67513-.7207-1.1543-.7207s-.85767.31284-1.1543.7207c-.10194.14017-.18655.39972-.28125.57422-.21984-.70238-.40285-1.50076-.71093-1.96289-.49236-.73854-1.13477-1.20703-1.85352-1.20703s-1.36116.46849-1.85352 1.20703c-.20879.3132-.31334.90706-.48242 1.33008-.30463-1.87209-.5915-3.83467-.99218-5.48828-.26658-1.10016-.56623-2.0626-.96094-2.79492-.19736-.36617-.41893-.67716-.69727-.91602s-.63359-.40039-1.01367-.40039z" transform="matrix(100 0 0 100 -32000 -20000)"/></g></svg>
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff" id="blender_ipo_other"><path d="m321.5 201a.50005.50005 0 1 0 0 1h.5c.11714 0 .21825.0354.36133.1582.14308.12279.30922.33684.46875.63282.31905.59195.61443 1.49542.87109 2.55468.51334 2.11854.89163 4.86411 1.30664 7.24024a.50005.50005 0 0 0 .98242.008c.24141-1.26736.60565-2.19557.98829-2.76953s.74023-.76172 1.02148-.76172.63884.18776 1.02148.76172.74688 1.50217.98829 2.76953a.50005.50005 0 0 0 .96093.0762c.24086-.66235.48023-1.14224.6836-1.42187.20337-.27964.32487-.31055.3457-.31055.0208 0 .14233.0309.3457.31055.20337.27963.44274.75952.6836 1.42187a.50005.50005 0 0 0 .4707.32986h1a.50005.50005 0 1 0 0-1h-.69141c-.20925-.52074-.41629-1.01454-.65429-1.3418-.29663-.40786-.67513-.7207-1.1543-.7207s-.85767.31284-1.1543.7207c-.10194.14017-.18655.39972-.28125.57422-.21984-.70238-.40285-1.50076-.71093-1.96289-.49236-.73854-1.13477-1.20703-1.85352-1.20703s-1.36116.46849-1.85352 1.20703c-.20879.3132-.31334.90706-.48242 1.33008-.30463-1.87209-.5915-3.83467-.99218-5.48828-.26658-1.10016-.56623-2.0626-.96094-2.79492-.19736-.36617-.41893-.67716-.69727-.91602s-.63359-.40039-1.01367-.40039z" transform="matrix(100 0 0 100 -32000 -20000)"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +1 @@
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><path d="m312.5 201a.50005.50005 0 0 0 -.5.5c0 3.43021-1.19149 5.7903-3.2168 7.45898-2.0253 1.66869-4.93239 2.63003-8.34375 3.04493a.50005.50005 0 1 0 .1211.99218c3.52614-.42885 6.61905-1.41978 8.85937-3.26562 2.13154-1.75622 3.41037-4.32825 3.5332-7.73047h.54688a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -29899.525 -20000.101)"/></g></svg>
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff" id="blender_ipo_other"><path d="m312.5 201a.50005.50005 0 0 0 -.5.5c0 3.43021-1.19149 5.7903-3.2168 7.45898-2.0253 1.66869-4.93239 2.63003-8.34375 3.04493a.50005.50005 0 1 0 .1211.99218c3.52614-.42885 6.61905-1.41978 8.85937-3.26562 2.13154-1.75622 3.41037-4.32825 3.5332-7.73047h.54688a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -29899.525 -20000.101)"/></g></svg>

Before

Width:  |  Height:  |  Size: 780 B

After

Width:  |  Height:  |  Size: 804 B

View File

@@ -1 +1 @@
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><path d="m118.5 201a.50005.50005 0 0 0 -.5.5v10.5h-6.5a.50005.50005 0 1 0 0 1h7a.50005.50005 0 0 0 .5-.5v-10.5h5.5a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -11000 -20000)"/></g></svg>
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff" id="blender_ipo_constant"><path d="m118.5 201a.50005.50005 0 0 0 -.5.5v10.5h-6.5a.50005.50005 0 1 0 0 1h7a.50005.50005 0 0 0 .5-.5v-10.5h5.5a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -11000 -20000)"/></g></svg>

Before

Width:  |  Height:  |  Size: 623 B

After

Width:  |  Height:  |  Size: 650 B

View File

@@ -1 +1 @@
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -21500 -19899.802)"><path d="m228.5 201a.50005.50005 0 0 0 -.47461.3418c-.75176 2.25527-1.61792 4.94183-3.29101 7.0332-1.6731 2.09137-4.11183 3.625-8.23438 3.625a.50005.50005 0 1 0 0 1c4.37745 0 7.18872-1.71637 9.01562-4 1.74159-2.17699 2.6089-4.81175 3.33594-7h.64844a.50005.50005 0 1 0 0-1z"/><path d="m218.99805 199.99609c-.79172 0-1.70536.42738-1.98047 1.35938a.50005.50005 0 1 0 .95898.2832c.12417-.42064.57962-.64258 1.02149-.64258.26387 0 .51715.0894.69531.24805.17816.15864.30325.37905.30664.75586.001.39768-.25396.75725-.76367 1.07422a.50005.50005 0 0 0 0 .84766c.51034.31737.7656.67798.76367 1.07617-.004.37528-.12888.59561-.30664.7539-.17816.15864-.43144.24805-.69531.24805-.44187 0-.89732-.21999-1.02149-.64062a.50005.50005 0 1 0 -.95898.28124c.27511.93201 1.18875 1.35938 1.98047 1.35938.48612 0 .97796-.16058 1.36133-.50195.38336-.34137.63501-.871.64062-1.49414a.50005.50005 0 0 0 0-.002c.003-.61795-.34308-1.09989-.77734-1.5039.43425-.40402.78027-.88601.77734-1.50391a.50005.50005 0 0 0 0-.002c-.006-.62314-.25726-1.15277-.64062-1.49414-.38337-.34137-.87521-.50196-1.36133-.50196z"/></g></g></svg>
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -21500 -19899.802)"><g fill="#fff" id="blender_ipo_other"><path d="m228.5 201a.50005.50005 0 0 0 -.47461.3418c-.75176 2.25527-1.61792 4.94183-3.29101 7.0332-1.6731 2.09137-4.11183 3.625-8.23438 3.625a.50005.50005 0 1 0 0 1c4.37745 0 7.18872-1.71637 9.01562-4 1.74159-2.17699 2.6089-4.81175 3.33594-7h.64844a.50005.50005 0 1 0 0-1z"/></g><g fill="#fff" id="blender_text"><path opacity="0.8" d="m218.99805 199.99609c-.79172 0-1.70536.42738-1.98047 1.35938a.50005.50005 0 1 0 .95898.2832c.12417-.42064.57962-.64258 1.02149-.64258.26387 0 .51715.0894.69531.24805.17816.15864.30325.37905.30664.75586.001.39768-.25396.75725-.76367 1.07422a.50005.50005 0 0 0 0 .84766c.51034.31737.7656.67798.76367 1.07617-.004.37528-.12888.59561-.30664.7539-.17816.15864-.43144.24805-.69531.24805-.44187 0-.89732-.21999-1.02149-.64062a.50005.50005 0 1 0 -.95898.28124c.27511.93201 1.18875 1.35938 1.98047 1.35938.48612 0 .97796-.16058 1.36133-.50195.38336-.34137.63501-.871.64062-1.49414a.50005.50005 0 0 0 0-.002c.003-.61795-.34308-1.09989-.77734-1.5039.43425-.40402.78027-.88601.77734-1.50391a.50005.50005 0 0 0 0-.002c-.006-.62314-.25726-1.15277-.64062-1.49414-.38337-.34137-.87521-.50196-1.36133-.50196z"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1 +1 @@
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><path d="m342.45117 201a.50059574.50059574 0 0 0 .0488 1c.0215.00002.18225-.00017.33398 0 .0105.42607.0502 2.52232.33594 5.05664.15671 1.39002.37504 2.78188.69727 3.86719.16111.54265.34457 1.00922.59179 1.38086.24723.37163.61429.69531 1.09375.69531.39174 0 .74881-.20864.97657-.48047.22775-.27182.37091-.59987.48632-.96289.23084-.72603.34622-1.61436.46876-2.48828.12253-.87392.25275-1.73314.44921-2.31641.0982-.29163.21467-.50852.31446-.62109.09982-.11257.14484-.13086.25198-.13086.16824 0 .2932.0848.48633.39062.19312.30582.37727.78401.5625 1.28321.18523.49919.37171 1.01992.64453 1.46289.27281.44297.71019.86328 1.30664.86328.41993 0 .77613-.23568.99219-.49219.21606-.2565.34747-.53797.4707-.78906s.23849-.47074.33594-.58984c.09745-.11911.11768-.12891.20117-.12891.0859 0 .18647.0811.39844.32617.10598.12255.22449.26923.39453.40625.17003.13703.41807.26758.70703.26758.008 0 .14542-.00028.27539 0 .065.00014.13031.00006.18164 0 .0513-.00006.0312.005.12109 0a.50080138.50080138 0 1 0 -.0566-1c.0748-.004-.0172-.00005-.0664 0s-.11331.00014-.17774 0c-.12885-.00028-.25041 0-.27734 0-.0108 0-.0173.004-.0801-.0469-.0628-.0506-.15527-.15364-.26562-.28124-.22074-.25519-.57045-.67186-1.15432-.67186-.4167 0-.76719.23824-.97656.49414s-.33683.53625-.45899.78516c-.12215.24891-.23808.46744-.33789.58593-.09981.1185-.12821.13477-.22656.13477-.14972 0-.26794-.0816-.45703-.38867-.18909-.30703-.37082-.78435-.55664-1.28516-.18583-.5008-.37575-1.02457-.65625-1.46875s-.72872-.85742-1.33008-.85742c-.39664 0-.76041.19848-1 .46875s-.39279.60017-.51562.96484c-.24567.72934-.36739 1.61988-.49024 2.4961-.12285.87621-.24515 1.73764-.43164 2.32422-.0933.29328-.20581.51202-.29883.62304-.093.11102-.1237.12305-.21094.12305-.027 0-.10877-.0201-.26171-.25-.15295-.22991-.31979-.62276-.46485-1.11133-.29011-.97714-.5088-2.33541-.66211-3.69531-.30662-2.7198-.36328-5.45313-.36328-5.45313a.50005.50005 0 0 0 -.5-.49023c-.0468 0-.74734.00005-.80078 0a.50005.50005 0 0 0 -.0488 0z" transform="matrix(100 0 0 100 -34101.37600000001 -19999.97)"/></g></svg>
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff" id="blender_ipo_other"><path d="m342.45117 201a.50059574.50059574 0 0 0 .0488 1c.0215.00002.18225-.00017.33398 0 .0105.42607.0502 2.52232.33594 5.05664.15671 1.39002.37504 2.78188.69727 3.86719.16111.54265.34457 1.00922.59179 1.38086.24723.37163.61429.69531 1.09375.69531.39174 0 .74881-.20864.97657-.48047.22775-.27182.37091-.59987.48632-.96289.23084-.72603.34622-1.61436.46876-2.48828.12253-.87392.25275-1.73314.44921-2.31641.0982-.29163.21467-.50852.31446-.62109.09982-.11257.14484-.13086.25198-.13086.16824 0 .2932.0848.48633.39062.19312.30582.37727.78401.5625 1.28321.18523.49919.37171 1.01992.64453 1.46289.27281.44297.71019.86328 1.30664.86328.41993 0 .77613-.23568.99219-.49219.21606-.2565.34747-.53797.4707-.78906s.23849-.47074.33594-.58984c.09745-.11911.11768-.12891.20117-.12891.0859 0 .18647.0811.39844.32617.10598.12255.22449.26923.39453.40625.17003.13703.41807.26758.70703.26758.008 0 .14542-.00028.27539 0 .065.00014.13031.00006.18164 0 .0513-.00006.0312.005.12109 0a.50080138.50080138 0 1 0 -.0566-1c.0748-.004-.0172-.00005-.0664 0s-.11331.00014-.17774 0c-.12885-.00028-.25041 0-.27734 0-.0108 0-.0173.004-.0801-.0469-.0628-.0506-.15527-.15364-.26562-.28124-.22074-.25519-.57045-.67186-1.15432-.67186-.4167 0-.76719.23824-.97656.49414s-.33683.53625-.45899.78516c-.12215.24891-.23808.46744-.33789.58593-.09981.1185-.12821.13477-.22656.13477-.14972 0-.26794-.0816-.45703-.38867-.18909-.30703-.37082-.78435-.55664-1.28516-.18583-.5008-.37575-1.02457-.65625-1.46875s-.72872-.85742-1.33008-.85742c-.39664 0-.76041.19848-1 .46875s-.39279.60017-.51562.96484c-.24567.72934-.36739 1.61988-.49024 2.4961-.12285.87621-.24515 1.73764-.43164 2.32422-.0933.29328-.20581.51202-.29883.62304-.093.11102-.1237.12305-.21094.12305-.027 0-.10877-.0201-.26171-.25-.15295-.22991-.31979-.62276-.46485-1.11133-.29011-.97714-.5088-2.33541-.66211-3.69531-.30662-2.7198-.36328-5.45313-.36328-5.45313a.50005.50005 0 0 0 -.5-.49023c-.0468 0-.74734.00005-.80078 0a.50005.50005 0 0 0 -.0488 0z" transform="matrix(100 0 0 100 -34101.37600000001 -19999.97)"/></g></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -1 +1 @@
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><path d="m291.5 201a.50005.50005 0 0 0 -.5.5c0 2.47889-.15954 4.38104-.52734 5.8125-.36781 1.43146-.92559 2.38009-1.74024 3.05273-1.6293 1.3453-4.51671 1.63477-9.23242 1.63477a.50005.50005 0 1 0 0 1c4.75093 0 7.86511-.21053 9.86914-1.86523 1.00202-.82736 1.66924-2.00373 2.07227-3.57227.36978-1.43916.48747-3.33151.51171-5.5625h.54688a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -27800 -20000)"/></g></svg>
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff" id="blender_ipo_other"><path d="m291.5 201a.50005.50005 0 0 0 -.5.5c0 2.47889-.15954 4.38104-.52734 5.8125-.36781 1.43146-.92559 2.38009-1.74024 3.05273-1.6293 1.3453-4.51671 1.63477-9.23242 1.63477a.50005.50005 0 1 0 0 1c4.75093 0 7.86511-.21053 9.86914-1.86523 1.00202-.82736 1.66924-2.00373 2.07227-3.57227.36978-1.43916.48747-3.33151.51171-5.5625h.54688a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -27800 -20000)"/></g></svg>

Before

Width:  |  Height:  |  Size: 843 B

After

Width:  |  Height:  |  Size: 867 B

View File

@@ -1 +1 @@
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><path d="m144.5 201a.50005.50005 0 0 0 -.35352.14648l-10.85351 10.85352h-.79297a.50005.50005 0 1 0 0 1h1a.50005.50005 0 0 0 .35352-.14648l10.85351-10.85352h.79297a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -13100 -20000)"/></g></svg>
<svg height="1400" viewBox="0 0 1600 1400" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff" id="blender_ipo_linear"><path d="m144.5 201a.50005.50005 0 0 0 -.35352.14648l-10.85351 10.85352h-.79297a.50005.50005 0 1 0 0 1h1a.50005.50005 0 0 0 .35352-.14648l10.85351-10.85352h.79297a.50005.50005 0 1 0 0-1z" transform="matrix(100 0 0 100 -13100 -20000)"/></g></svg>

Before

Width:  |  Height:  |  Size: 671 B

After

Width:  |  Height:  |  Size: 696 B

View File

@@ -1 +1 @@
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -19400 -19899.805)"><path d="m207.5 201a.50005.50005 0 0 0 -.40039.19922c-1.548 2.064-2.85356 4.80197-4.58594 6.99023-1.73238 2.18827-3.81151 3.81055-7.01367 3.81055a.50005.50005 0 1 0 0 1c3.54784 0 5.96871-1.87772 7.79883-4.18945 1.7781-2.24603 3.06678-4.88493 4.4707-6.81055h.73047a.50005.50005 0 1 0 0-1z"/><path d="m197 199.99609c-.79172 0-1.70536.42738-1.98047 1.35938a.50090117.50090117 0 1 0 .96094.2832c.12417-.42064.57767-.64258 1.01953-.64258.26308 0 .50603.0889.67773.2461.17133.15683.29488.38005.29883.75976.001.2095-.10056.41777-.33789.6875s-.59584.56699-.97656.90235c-.76143.67072-1.65792 1.5571-1.66211 2.90234a.50005.50005 0 0 0 .5.50195h3a.50005.50005 0 1 0 0-1h-2.33398c.18416-.62502.58645-1.15066 1.1582-1.65429.36326-.31999.74752-.62977 1.0664-.99219.31889-.36243.58851-.81103.58594-1.35156a.50005.50005 0 0 0 0-.002c-.006-.61869-.24656-1.14755-.62304-1.49218-.37648-.34464-.8666-.50782-1.35352-.50782z"/></g></g></svg>
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -19400 -19899.805)"><g fill="#fff" id="blender_ipo_other"><path d="m207.5 201a.50005.50005 0 0 0 -.40039.19922c-1.548 2.064-2.85356 4.80197-4.58594 6.99023-1.73238 2.18827-3.81151 3.81055-7.01367 3.81055a.50005.50005 0 1 0 0 1c3.54784 0 5.96871-1.87772 7.79883-4.18945 1.7781-2.24603 3.06678-4.88493 4.4707-6.81055h.73047a.50005.50005 0 1 0 0-1z"/></g><g fill="#fff" id="blender_text"><path opacity="0.8" d="m197 199.99609c-.79172 0-1.70536.42738-1.98047 1.35938a.50090117.50090117 0 1 0 .96094.2832c.12417-.42064.57767-.64258 1.01953-.64258.26308 0 .50603.0889.67773.2461.17133.15683.29488.38005.29883.75976.001.2095-.10056.41777-.33789.6875s-.59584.56699-.97656.90235c-.76143.67072-1.65792 1.5571-1.66211 2.90234a.50005.50005 0 0 0 .5.50195h3a.50005.50005 0 1 0 0-1h-2.33398c.18416-.62502.58645-1.15066 1.1582-1.65429.36326-.31999.74752-.62977 1.0664-.99219.31889-.36243.58851-.81103.58594-1.35156a.50005.50005 0 0 0 0-.002c-.006-.61869-.24656-1.14755-.62304-1.49218-.37648-.34464-.8666-.50782-1.35352-.50782z"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +1 @@
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -23600 -19899.649)"><path d="m249.5 201a.50005.50005 0 0 0 -.49805.45508c-.24047 2.64524-1.32572 5.28945-3.23633 7.25976-1.9106 1.97032-4.63784 3.28516-8.26562 3.28516a.50005.50005 0 1 0 0 1c3.87222 0 6.89498-1.43516 8.98438-3.58984 1.97612-2.03788 3.06007-4.712 3.39843-7.41016h.61719a.50005.50005 0 1 0 0-1z"/><path d="m238.4668 199.99414c-.21842.0156-.40126.17156-.45118.38477l-1 4c-.0786.31522.15949.62057.48438.62109h2.5v1.5c-.01.67616 1.00956.67616 1 0v-4c-.009-.6573-.9907-.6573-1 0v1.5h-1.85938l.84376-3.37891c.0877-.33109-.17587-.65038-.51758-.62695z"/></g></g></svg>
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -23600 -19899.649)"><g fill="#fff" id="blender_ipo_other"><path d="m249.5 201a.50005.50005 0 0 0 -.49805.45508c-.24047 2.64524-1.32572 5.28945-3.23633 7.25976-1.9106 1.97032-4.63784 3.28516-8.26562 3.28516a.50005.50005 0 1 0 0 1c3.87222 0 6.89498-1.43516 8.98438-3.58984 1.97612-2.03788 3.06007-4.712 3.39843-7.41016h.61719a.50005.50005 0 1 0 0-1z"/></g><g fill="#fff" id="blender_text"><path opacity="0.8" d="m238.4668 199.99414c-.21842.0156-.40126.17156-.45118.38477l-1 4c-.0786.31522.15949.62057.48438.62109h2.5v1.5c-.01.67616 1.00956.67616 1 0v-4c-.009-.6573-.9907-.6573-1 0v1.5h-1.85938l.84376-3.37891c.0877-.33109-.17587-.65038-.51758-.62695z"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +1 @@
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -25699.895 -19899.804)"><path d="m270.5 201a.50005.50005 0 0 0 -.5.5c0 3.44341-1.07548 6.03173-3.02344 7.79102-1.94795 1.75928-4.81327 2.70898-8.47656 2.70898a.50005.50005 0 1 0 0 1c3.83671 0 6.97139-1.00062 9.14844-2.9668 2.06597-1.86586 3.15029-4.63736 3.26367-8.0332h.58789a.50005.50005 0 1 0 0-1z"/><path d="m258.5 199.99609a.50005.50005 0 0 0 -.5.5v2.00391a.50005.50005 0 0 0 .5.5h1.5c.41667 0 1 .45 1 1.5 0 1.04998-.58056 1.4941-1.00195 1.49609-.52634.003-.86013-.33871-1.05078-.72265a.50005.50005 0 1 0 -.89454.44531c.30945.62316.97566 1.28254 1.94922 1.27734 1.07859-.0051 1.99805-1.04607 1.99805-2.49609 0-1.45-.91667-2.5-2-2.5h-1v-1.00391h2.5a.50005.50005 0 1 0 0-1z"/></g></g></svg>
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -25699.895 -19899.804)"><g fill="#fff" id="blender_ipo_other"><path d="m270.5 201a.50005.50005 0 0 0 -.5.5c0 3.44341-1.07548 6.03173-3.02344 7.79102-1.94795 1.75928-4.81327 2.70898-8.47656 2.70898a.50005.50005 0 1 0 0 1c3.83671 0 6.97139-1.00062 9.14844-2.9668 2.06597-1.86586 3.15029-4.63736 3.26367-8.0332h.58789a.50005.50005 0 1 0 0-1z"/></g><g fill="#fff" id="blender_text"><path opacity="0.8" d="m258.5 199.99609a.50005.50005 0 0 0 -.5.5v2.00391a.50005.50005 0 0 0 .5.5h1.5c.41667 0 1 .45 1 1.5 0 1.04998-.58056 1.4941-1.00195 1.49609-.52634.003-.86013-.33871-1.05078-.72265a.50005.50005 0 1 0 -.89454.44531c.30945.62316.97566 1.28254 1.94922 1.27734 1.07859-.0051 1.99805-1.04607 1.99805-2.49609 0-1.45-.91667-2.5-2-2.5h-1v-1.00391h2.5a.50005.50005 0 1 0 0-1z"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1 +1 @@
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -17299.999 -19899.795)"><path d="m186.5 201a.50005.50005 0 0 0 -.40039.19922c-1.548 2.064-2.85356 4.80197-4.58594 6.99023-1.73238 2.18827-3.81151 3.81055-7.01367 3.81055a.50005.50005 0 1 0 0 1c3.54784 0 5.96871-1.87772 7.79883-4.18945 1.7781-2.24603 3.06678-4.88493 4.4707-6.81055h.73047a.50005.50005 0 1 0 0-1z"/><path d="m176.48438 199.99609a.50005.50005 0 0 0 -.3379.14649l-2 2a.50005.50005 0 1 0 .70704.70703l1.14648-1.14649v4.79688a.50005.50005 0 1 0 1 0v-6.00391a.50005.50005 0 0 0 -.51562-.5z"/></g></g></svg>
<svg height="1500" viewBox="0 0 1600 1500" width="1600" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"><sodipodi:namedview pagecolor="#303030" showgrid="true"><inkscape:grid id="grid5" units="px" spacingx="100" spacingy="100" color="#4772b3" opacity="0.2" visible="true" /></sodipodi:namedview><g fill="#fff"><g enable-background="new" transform="matrix(100 0 0 100 -17299.999 -19899.795)"><g fill="#fff" id="blender_ipo_other"><path d="m186.5 201a.50005.50005 0 0 0 -.40039.19922c-1.548 2.064-2.85356 4.80197-4.58594 6.99023-1.73238 2.18827-3.81151 3.81055-7.01367 3.81055a.50005.50005 0 1 0 0 1c3.54784 0 5.96871-1.87772 7.79883-4.18945 1.7781-2.24603 3.06678-4.88493 4.4707-6.81055h.73047a.50005.50005 0 1 0 0-1z"/></g><g fill="#fff" id="blender_text"><path opacity="0.8" d="m176.48438 199.99609a.50005.50005 0 0 0 -.3379.14649l-2 2a.50005.50005 0 1 0 .70704.70703l1.14648-1.14649v4.79688a.50005.50005 0 1 0 1 0v-6.00391a.50005.50005 0 0 0 -.51562-.5z"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 999 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -289,7 +289,7 @@ const bTheme U_theme_default = {
},
.regions = {
.asset_shelf = {
.back = RGBA(0x303030ff),
.back = RGBA(0x303030e6),
.header_back = RGBA(0x1d1d1dff),
},
.channels = {
@@ -298,10 +298,10 @@ const bTheme U_theme_default = {
.text_selected = RGBA(0xffaf23ff),
},
.scrubbing = {
.back = RGBA(0x161616ff),
.text = RGBA(0xc3c3c3ff),
.time_marker = RGBA(0xffffff4d),
.time_marker_selected = RGBA(0xffffffb3),
.back = RGBA(0x1d1d1dff),
.text = RGBA(0x808080ff),
.time_marker = RGBA(0xffffff80),
.time_marker_selected = RGBA(0xffffffff),
},
.sidebars = {
.back = RGBA(0x30303000),
@@ -312,7 +312,6 @@ const bTheme U_theme_default = {
.anim = {
.playhead = RGBA(0x4772b3ff),
.preview_range = RGBA(0xa14d0066),
.scene_strip_range = RGBA(0x00000080),
.channels = RGBA(0x194e8080),
.channels_sub = RGBA(0x0f2c4d80),
.channel_group = RGBA(0x1a332d37),
@@ -333,6 +332,7 @@ const bTheme U_theme_default = {
.keyframe_generated_selected = RGBA(0xa28962ff),
.long_key = RGBA(0xffffff1f),
.long_key_selected = RGBA(0xff8c0099),
.scene_strip_range = RGBA(0x00000080),
},
.curves = {
.handle_free = RGBA(0x745900ff),
@@ -648,15 +648,15 @@ const bTheme U_theme_default = {
.row_alternate = RGBA(0xffffff04),
},
.space_node = {
.back = RGBA(0x1d1d1d00),
.back = RGBA(0x1a1a1a00),
.title = RGBA(0xeeeeeeff),
.text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x1d1d1db3),
.header = RGBA(0x1a1a1ab3),
.header_text = RGBA(0xeeeeeeff),
.header_text_hi = RGBA(0xffffffff),
.shade2 = RGBA(0x7f7f7f64),
.grid = RGBA(0x28282800),
.grid = RGBA(0x30303000),
.wire = RGBA(0x1a1a1aff),
.select = RGBA(0xed5700ff),
.active = RGBA(0xffffffff),

View File

@@ -1135,11 +1135,30 @@ void copy_attributes_group_to_group(const AttributeAccessor src_attributes,
return;
}
const GVArraySpan src = *iter.get(src_domain);
const bool dst_already_exists = dst_attributes.contains(iter.name);
GSpanAttributeWriter dst = dst_attributes.lookup_or_add_for_write_only_span(
iter.name, dst_domain, iter.data_type);
if (!dst) {
return;
}
if (!dst_already_exists) {
/* Skip filling with the default value if all of the data is going to be filled. */
if (!(dst_offsets.total_size() == dst.span.size() && selection.size() == dst_offsets.size()))
{
const CPPType &type = dst.span.type();
if (dst_attributes.is_builtin(iter.name)) {
if (const GPointer value = dst_attributes.get_builtin_default(iter.name)) {
type.fill_construct_n(value.get(), dst.span.data(), dst.span.size());
}
else {
type.fill_construct_n(type.default_value(), dst.span.data(), dst.span.size());
}
}
else {
type.fill_construct_n(type.default_value(), dst.span.data(), dst.span.size());
}
}
}
array_utils::copy_group_to_group(src_offsets, dst_offsets, selection, src, dst.span);
dst.finish();
});

View File

@@ -390,6 +390,26 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
FROM_DEFAULT_V4_UCHAR(common.anim.scene_strip_range);
}
/* Reset the theme due to compatibility breaking changes in 5.0. */
if (!USER_VERSION_ATLEAST(500, 111)) {
MEMCPY_STRUCT_AFTER(btheme, &U_theme_default, name);
/* Update text styles to match. */
LISTBASE_FOREACH (uiStyle *, style, &userdef->uistyles) {
style->paneltitle.points = 11.0f;
style->paneltitle.shadow = 3;
style->paneltitle.shadowalpha = 0.5f;
style->paneltitle.shadowcolor = 0.0f;
style->widget.points = 11.0f;
style->widget.shadow = 1;
style->widget.shadowalpha = 0.5f;
style->widget.shadowcolor = 0.0f;
style->tooltip.shadow = 1;
style->tooltip.points = 11.0f;
style->tooltip.shadowalpha = 0.5f;
style->tooltip.shadowcolor = 0.0f;
}
}
if (!USER_VERSION_ATLEAST(501, 3)) {
FROM_DEFAULT_V4_UCHAR(space_action.anim_interpolation_other);
FROM_DEFAULT_V4_UCHAR(space_action.anim_interpolation_constant);

View File

@@ -1,6 +1,7 @@
# SPDX-FileCopyrightText: 2024 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(INC_GLSL
.
..
@@ -11,6 +12,7 @@ set(INC_GLSL
../../gpu/shaders/common
../../gpu/shaders/infos
)
set(SRC_GLSL_COMP
# TODO: Port to C++ compilation
# compositor_alpha_crop.glsl
@@ -86,7 +88,7 @@ set(SRC_GLSL_COMP
# compositor_movie_distortion.glsl
# compositor_normalize.glsl
# compositor_pad.glsl
# compositor_parallel_reduction.glsl
compositor_parallel_reduction.glsl
# compositor_pixelate.glsl
# compositor_plane_deform_anisotropic.glsl
# compositor_plane_deform_mask.glsl
@@ -123,14 +125,17 @@ set(SRC_GLSL_COMP
# compositor_z_combine_simple_depth.glsl
# compositor_z_combine_simple_image.glsl
)
set(SRC_GLSL_LIB
library/gpu_shader_compositor_texture_utilities.glsl
)
# Compile shaders with shader code.
if(WITH_GPU_SHADER_CPP_COMPILATION)
with_shader_cpp_compilation_config()
#compile_sources_as_cpp(compositor_cpp_shaders_comp "${SRC_GLSL_COMP}" "GPU_COMPUTE_SHADER")
compile_sources_as_cpp(compositor_cpp_shaders_comp "${SRC_GLSL_COMP}" "GPU_COMPUTE_SHADER")
# Only enable to make sure they compile on their own.
# Otherwise it creates a warning about `pragma once`.
compile_sources_as_cpp(compositor_cpp_shaders_lib "${SRC_GLSL_LIB}" "GPU_LIBRARY_SHADER")
endif()
endif()

View File

@@ -48,15 +48,229 @@
* expected to define the TYPE macro to be a float or a vec4, depending on the type of data being
* reduced. */
#include "infos/compositor_parallel_reduction_infos.hh"
COMPUTE_SHADER_CREATE_INFO(compositor_parallel_reduction_shared)
COMPUTE_SHADER_CREATE_INFO(compositor_parallel_reduction_output_float4)
#include "gpu_shader_compositor_texture_utilities.glsl"
#include "gpu_shader_math_base_lib.glsl"
#include "gpu_shader_math_vector_lib.glsl"
#include "gpu_shader_math_vector_reduce_lib.glsl"
#include "gpu_shader_utildefines_lib.glsl"
#define reduction_size (gl_WorkGroupSize.x * gl_WorkGroupSize.y)
shared TYPE reduction_data[reduction_size];
void main()
/* Operations */
template<typename T> struct Min {
static T identity()
{
return T(0);
}
static T initialize(T value)
{
return value;
}
static T reduce(T lhs, T rhs)
{
return min(lhs, rhs);
}
};
template struct Min<float>;
template<typename T> struct Max {
static T identity()
{
return T(0);
}
static T initialize(T value)
{
return value;
}
static T reduce(T lhs, T rhs)
{
return max(lhs, rhs);
}
};
template struct Max<float>;
template struct Max<float2>;
template struct Max<float4>;
template<typename T> struct Sum {
static T identity()
{
return T(0);
}
static T initialize(T value)
{
return value;
}
static T reduce(T lhs, T rhs)
{
return lhs + rhs;
}
};
template struct Sum<float>;
template struct Sum<float4>;
template<typename T> struct MaxVelocity {
static T identity()
{
return T(0);
}
static T initialize(T value)
{
return value;
}
static T reduce(T lhs, T rhs)
{
return float4(dot(lhs.xy, lhs.xy) > dot(rhs.xy, rhs.xy) ? lhs.xy : rhs.xy,
dot(lhs.zw, lhs.zw) > dot(rhs.zw, rhs.zw) ? lhs.zw : rhs.zw);
}
};
template struct MaxVelocity<float4>;
template<typename T> struct MaxInRange {
static T identity()
{
return T(0);
}
static T initialize(T value)
{
float max = push_constant_get(compositor_maximum_float_in_range, upper_bound);
float min = push_constant_get(compositor_maximum_float_in_range, lower_bound);
return ((value <= max) && (value >= min)) ? value : min;
}
static T reduce(T lhs, T rhs)
{
float max = push_constant_get(compositor_maximum_float_in_range, upper_bound);
return ((rhs > lhs) && (rhs <= max)) ? rhs : lhs;
}
};
template struct MaxInRange<float>;
template<typename T> struct MinInRange {
static T identity()
{
return T(0);
}
static T initialize(T value)
{
float max = push_constant_get(compositor_minimum_float_in_range, upper_bound);
float min = push_constant_get(compositor_minimum_float_in_range, lower_bound);
return ((value <= max) && (value >= min)) ? value : max;
}
static T reduce(T lhs, T rhs)
{
float min = push_constant_get(compositor_minimum_float_in_range, lower_bound);
return ((rhs < lhs) && (rhs >= min)) ? rhs : lhs;
}
};
template struct MinInRange<float>;
template<typename T> struct SumSquareDifference {
static T identity()
{
return T(0);
}
static T initialize(T value)
{
float sub = push_constant_get(compositor_sum_squared_difference_float_shared, subtrahend);
return square(value - sub);
}
static T reduce(T lhs, T rhs)
{
return lhs + rhs;
}
};
template struct SumSquareDifference<float>;
/* ChannelMix */
struct ChannelR {};
struct ChannelG {};
struct ChannelB {};
struct ChannelRG {};
struct ChannelRGBA {};
struct ChannelLuma {};
struct ChannelLogLuma {};
struct ChannelMax {};
template<typename T, typename ChannelMix> T channel_mix(float4 value)
{
return value;
}
template float4 channel_mix<float4, ChannelRGBA>(float4);
/* clang-format off */
template<> float channel_mix<float, ChannelR>(float4 value) { return value.r; }
template<> float channel_mix<float, ChannelG>(float4 value) { return value.g; }
template<> float channel_mix<float, ChannelB>(float4 value) { return value.b; }
template<> float channel_mix<float, ChannelMax>(float4 value) { return reduce_max(value.rgb); }
template<> float2 channel_mix<float2, ChannelRG>(float4 value) { return value.rg; }
/* clang-format on */
template<> float channel_mix<float, ChannelLuma>(float4 value)
{
float3 coefficients = push_constant_get(compositor_luminance_shared, luminance_coefficients);
return dot(value.rgb, coefficients);
}
template<> float channel_mix<float, ChannelLogLuma>(float4 value)
{
float3 coefficients = push_constant_get(compositor_luminance_shared, luminance_coefficients);
return log(max(dot(value.rgb, coefficients), 1e-5f));
}
/* clang-format off */
template<typename T> T load(float4 value) { return value; }
template float4 load<float4>(float4);
template<> float load<float>(float4 value) { return value.x; }
template<> float2 load<float2>(float4 value) { return value.xy; }
float4 to_float4(float value) { return float4(value); }
float4 to_float4(float2 value) { return value.xyyy; }
float4 to_float4(float4 value) { return value; }
/* clang-format on */
void load_shared_data(uint index, float &r_data)
{
r_data = shared_variable_get(compositor_parallel_reduction_float_shared, reduction_data)[index];
}
void load_shared_data(uint index, float2 &r_data)
{
r_data = shared_variable_get(compositor_parallel_reduction_float2_shared, reduction_data)[index];
}
void load_shared_data(uint index, float4 &r_data)
{
r_data = shared_variable_get(compositor_parallel_reduction_float4_shared, reduction_data)[index];
}
void store_shared_data(uint index, float data)
{
shared_variable_get(compositor_parallel_reduction_float_shared, reduction_data)[index] = data;
}
void store_shared_data(uint index, float2 data)
{
shared_variable_get(compositor_parallel_reduction_float2_shared, reduction_data)[index] = data;
}
void store_shared_data(uint index, float4 data)
{
shared_variable_get(compositor_parallel_reduction_float4_shared, reduction_data)[index] = data;
}
template<typename T, typename Operation, typename ChannelMix> void reduction()
{
int2 texel = int2(gl_GlobalInvocationID.xy);
@@ -65,7 +279,7 @@ void main()
* not affect the output of the reduction. For instance, sum reductions have an identity of 0.0,
* while max value reductions have an identity of FLT_MIN */
if (any(lessThan(texel, int2(0))) || any(greaterThanEqual(texel, texture_size(input_tx)))) {
reduction_data[gl_LocalInvocationIndex] = IDENTITY;
store_shared_data(gl_LocalInvocationIndex, Operation::identity());
}
else {
float4 value = texture_load_unbound(input_tx, texel);
@@ -82,8 +296,9 @@ void main()
* will be loaded directly and reduced without extra processing. So the developer is expected
* to define the INITIALIZE and LOAD macros to be expressions that derive the needed value from
* the loaded value for the initial reduction pass and latter ones respectively. */
reduction_data[gl_LocalInvocationIndex] = is_initial_reduction ? INITIALIZE(value) :
LOAD(value);
T data = is_initial_reduction ? Operation::initialize(channel_mix<T, ChannelMix>(value)) :
load<T>(value);
store_shared_data(gl_LocalInvocationIndex, data);
}
/* Reduce the reduction data by half on every iteration until only one element remains. See the
@@ -101,8 +316,11 @@ void main()
* lower index, as can be seen in the diagram above. The developer is expected to define the
* REDUCE macro to be a commutative and associative binary operator suitable for parallel
* reduction. */
reduction_data[gl_LocalInvocationIndex] = REDUCE(
reduction_data[gl_LocalInvocationIndex], reduction_data[gl_LocalInvocationIndex + stride]);
T lhs, rhs;
load_shared_data(gl_LocalInvocationIndex, lhs);
load_shared_data(gl_LocalInvocationIndex + stride, rhs);
T result = Operation::reduce(lhs, rhs);
store_shared_data(gl_LocalInvocationIndex, result);
}
/* Finally, the result of the reduction is available as the first element in the reduction data,
@@ -110,12 +328,117 @@ void main()
* it. */
barrier();
if (gl_LocalInvocationIndex == 0) {
/* If no WRITE macro is provided, we assume the reduction type can be passed to the float4
* constructor. If not, WRITE is expected to be defined to construct the output value. */
#if defined(WRITE)
imageStore(output_img, int2(gl_WorkGroupID.xy), WRITE(reduction_data[0]));
#else
imageStore(output_img, int2(gl_WorkGroupID.xy), float4(reduction_data[0]));
#endif
T data;
load_shared_data(0, data);
imageStore(output_img, int2(gl_WorkGroupID.xy), to_float4(data));
}
}
template void reduction<float, Min<float>, ChannelLuma>();
template void reduction<float, Min<float>, ChannelR>();
template void reduction<float, Max<float>, ChannelLuma>();
template void reduction<float, Max<float>, ChannelMax>();
template void reduction<float, Max<float>, ChannelR>();
template void reduction<float2, Max<float2>, ChannelRG>();
template void reduction<float, Sum<float>, ChannelR>();
template void reduction<float, Sum<float>, ChannelG>();
template void reduction<float, Sum<float>, ChannelB>();
template void reduction<float, Sum<float>, ChannelLuma>();
template void reduction<float, Sum<float>, ChannelLogLuma>();
template void reduction<float4, Sum<float4>, ChannelRGBA>();
template void reduction<float, SumSquareDifference<float>, ChannelR>();
template void reduction<float, SumSquareDifference<float>, ChannelG>();
template void reduction<float, SumSquareDifference<float>, ChannelB>();
template void reduction<float, SumSquareDifference<float>, ChannelLuma>();
template void reduction<float, MaxInRange<float>, ChannelR>();
template void reduction<float, MinInRange<float>, ChannelR>();
template void reduction<float4, MaxVelocity<float4>, ChannelRGBA>();
void reduce_sum_red()
{
reduction<float, Sum<float>, ChannelR>();
}
void reduce_sum_green()
{
reduction<float, Sum<float>, ChannelG>();
}
void reduce_sum_blue()
{
reduction<float, Sum<float>, ChannelB>();
}
void reduce_sum_luminance()
{
reduction<float, Sum<float>, ChannelLuma>();
}
void reduce_sum_log_luminance()
{
reduction<float, Sum<float>, ChannelLogLuma>();
}
void reduce_sum_color()
{
reduction<float4, Sum<float4>, ChannelRGBA>();
}
void reduce_sum_red_squared_difference()
{
reduction<float, SumSquareDifference<float>, ChannelR>();
}
void reduce_sum_green_squared_difference()
{
reduction<float, SumSquareDifference<float>, ChannelG>();
}
void reduce_sum_blue_squared_difference()
{
reduction<float, SumSquareDifference<float>, ChannelB>();
}
void reduce_sum_luminance_squared_difference()
{
reduction<float, SumSquareDifference<float>, ChannelLuma>();
}
void reduce_maximum_luminance()
{
reduction<float, Max<float>, ChannelLuma>();
}
void reduce_maximum_brightness()
{
reduction<float, Max<float>, ChannelMax>();
}
void reduce_maximum_float()
{
reduction<float, Max<float>, ChannelR>();
}
void reduce_maximum_float2()
{
reduction<float2, Max<float2>, ChannelRG>();
}
void reduce_maximum_float_in_range()
{
reduction<float, MaxInRange<float>, ChannelR>();
}
void reduce_minimum_luminance()
{
reduction<float, Min<float>, ChannelLuma>();
}
void reduce_minimum_float()
{
reduction<float, Min<float>, ChannelR>();
}
void reduce_minimum_float_in_range()
{
reduction<float, MinInRange<float>, ChannelR>();
}
void reduce_max_velocity()
{
reduction<float4, MaxVelocity<float4>, ChannelRGBA>();
}

View File

@@ -2,6 +2,12 @@
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#ifdef GPU_SHADER
# include "gpu_shader_compat.hh"
#endif
#include "gpu_shader_create_info.hh"
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_shared)
@@ -11,62 +17,89 @@ SAMPLER(0, sampler2D, input_tx)
COMPUTE_SOURCE("compositor_parallel_reduction.glsl")
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_luminance_shared)
PUSH_CONSTANT(float3, luminance_coefficients)
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_float_shared)
GROUP_SHARED(float, reduction_data[gl_WorkGroupSize.x * gl_WorkGroupSize.y])
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_float2_shared)
GROUP_SHARED(float2, reduction_data[gl_WorkGroupSize.x * gl_WorkGroupSize.y])
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_float4_shared)
GROUP_SHARED(float4, reduction_data[gl_WorkGroupSize.x * gl_WorkGroupSize.y])
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_half4_shared)
GROUP_SHARED(float4, reduction_data[gl_WorkGroupSize.x * gl_WorkGroupSize.y])
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_output_float)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_output_float2)
IMAGE(0, SFLOAT_32_32, write, image2D, output_img)
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_output_float4)
IMAGE(0, SFLOAT_32_32_32_32, write, image2D, output_img)
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_parallel_reduction_output_half4)
IMAGE(0, SFLOAT_16_16_16_16, write, image2D, output_img)
GPU_SHADER_CREATE_END()
/* --------------------------------------------------------------------
* Sum Reductions.
*/
GPU_SHADER_CREATE_INFO(compositor_sum_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
DEFINE_VALUE("REDUCE(lhs, rhs)", "lhs + rhs")
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_float_shared)
ADDITIONAL_INFO(compositor_sum_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "0.0f")
DEFINE_VALUE("LOAD(value)", "value.x")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_red)
COMPUTE_FUNCTION("reduce_sum_red")
ADDITIONAL_INFO(compositor_sum_float_shared)
DEFINE_VALUE("INITIALIZE(value)", "value.r")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_green)
COMPUTE_FUNCTION("reduce_sum_green")
ADDITIONAL_INFO(compositor_sum_float_shared)
DEFINE_VALUE("INITIALIZE(value)", "value.g")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_blue)
COMPUTE_FUNCTION("reduce_sum_blue")
ADDITIONAL_INFO(compositor_sum_float_shared)
DEFINE_VALUE("INITIALIZE(value)", "value.b")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_luminance)
COMPUTE_FUNCTION("reduce_sum_luminance")
ADDITIONAL_INFO(compositor_sum_float_shared)
PUSH_CONSTANT(float3, luminance_coefficients)
DEFINE_VALUE("INITIALIZE(value)", "dot(value.rgb, luminance_coefficients)")
ADDITIONAL_INFO(compositor_luminance_shared)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_log_luminance)
COMPUTE_FUNCTION("reduce_sum_log_luminance")
ADDITIONAL_INFO(compositor_sum_float_shared)
PUSH_CONSTANT(float3, luminance_coefficients)
DEFINE_VALUE("INITIALIZE(value)", "log(max(dot(value.rgb, luminance_coefficients), 1e-5f))")
ADDITIONAL_INFO(compositor_luminance_shared)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_color)
ADDITIONAL_INFO(compositor_sum_shared)
IMAGE(0, SFLOAT_32_32_32_32, write, image2D, output_img)
DEFINE_VALUE("TYPE", "vec4")
DEFINE_VALUE("IDENTITY", "vec4(0.0f)")
DEFINE_VALUE("INITIALIZE(value)", "value")
DEFINE_VALUE("LOAD(value)", "value")
COMPUTE_FUNCTION("reduce_sum_color")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float4)
GROUP_SHARED(float4, reduction_data[gl_WorkGroupSize.x * gl_WorkGroupSize.y])
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
@@ -76,36 +109,33 @@ GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_squared_difference_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
PUSH_CONSTANT(float, subtrahend)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "0.0f")
DEFINE_VALUE("LOAD(value)", "value.x")
DEFINE_VALUE("REDUCE(lhs, rhs)", "lhs + rhs")
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_red_squared_difference)
COMPUTE_FUNCTION("reduce_sum_red_squared_difference")
ADDITIONAL_INFO(compositor_sum_squared_difference_float_shared)
DEFINE_VALUE("INITIALIZE(value)", "pow(value.r - subtrahend, 2.0f)")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_green_squared_difference)
COMPUTE_FUNCTION("reduce_sum_green_squared_difference")
ADDITIONAL_INFO(compositor_sum_squared_difference_float_shared)
DEFINE_VALUE("INITIALIZE(value)", "pow(value.g - subtrahend, 2.0f)")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_blue_squared_difference)
COMPUTE_FUNCTION("reduce_sum_blue_squared_difference")
ADDITIONAL_INFO(compositor_sum_squared_difference_float_shared)
DEFINE_VALUE("INITIALIZE(value)", "pow(value.b - subtrahend, 2.0f)")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_sum_luminance_squared_difference)
COMPUTE_FUNCTION("reduce_sum_luminance_squared_difference")
ADDITIONAL_INFO(compositor_sum_squared_difference_float_shared)
PUSH_CONSTANT(float3, luminance_coefficients)
DEFINE_VALUE("INITIALIZE(value)", "pow(dot(value.rgb, luminance_coefficients) - subtrahend, 2.0f)")
ADDITIONAL_INFO(compositor_luminance_shared)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
@@ -114,61 +144,45 @@ GPU_SHADER_CREATE_END()
*/
GPU_SHADER_CREATE_INFO(compositor_maximum_luminance)
COMPUTE_FUNCTION("reduce_maximum_luminance")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
PUSH_CONSTANT(float3, luminance_coefficients)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "FLT_MIN")
DEFINE_VALUE("INITIALIZE(value)", "dot(value.rgb, luminance_coefficients)")
DEFINE_VALUE("LOAD(value)", "value.x")
DEFINE_VALUE("REDUCE(lhs, rhs)", "max(lhs, rhs)")
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
ADDITIONAL_INFO(compositor_luminance_shared)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_maximum_brightness)
COMPUTE_FUNCTION("reduce_maximum_brightness")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "FLT_MIN")
DEFINE_VALUE("INITIALIZE(value)", "reduce_max(value.rgb)")
DEFINE_VALUE("LOAD(value)", "value.x")
DEFINE_VALUE("REDUCE(lhs, rhs)", "max(lhs, rhs)")
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_maximum_float)
COMPUTE_FUNCTION("reduce_maximum_float")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "FLT_MIN")
DEFINE_VALUE("INITIALIZE(value)", "value.x")
DEFINE_VALUE("LOAD(value)", "value.x")
DEFINE_VALUE("REDUCE(lhs, rhs)", "max(rhs, lhs)")
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_maximum_float2)
COMPUTE_FUNCTION("reduce_maximum_float2")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32_32, write, image2D, output_img)
DEFINE_VALUE("TYPE", "vec2")
DEFINE_VALUE("IDENTITY", "vec2(FLT_MIN)")
DEFINE_VALUE("INITIALIZE(value)", "value.xy")
DEFINE_VALUE("LOAD(value)", "value.xy")
DEFINE_VALUE("REDUCE(lhs, rhs)", "max(rhs, lhs)")
DEFINE_VALUE("WRITE(value)", "vec4(value, vec2(0.0f))")
ADDITIONAL_INFO(compositor_parallel_reduction_float2_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float2)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_maximum_float_in_range)
COMPUTE_FUNCTION("reduce_maximum_float_in_range")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
PUSH_CONSTANT(float, lower_bound)
PUSH_CONSTANT(float, upper_bound)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "lower_bound")
DEFINE_VALUE("INITIALIZE(v)", "((v.x <= upper_bound) && (v.x >= lower_bound)) ? v.x : lower_bound")
DEFINE_VALUE("LOAD(value)", "value.x")
DEFINE_VALUE("REDUCE(lhs, rhs)", "((rhs > lhs) && (rhs <= upper_bound)) ? rhs : lhs")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
@@ -177,38 +191,29 @@ GPU_SHADER_CREATE_END()
*/
GPU_SHADER_CREATE_INFO(compositor_minimum_luminance)
COMPUTE_FUNCTION("reduce_minimum_luminance")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
PUSH_CONSTANT(float3, luminance_coefficients)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "FLT_MAX")
DEFINE_VALUE("INITIALIZE(value)", "dot(value.rgb, luminance_coefficients)")
DEFINE_VALUE("LOAD(value)", "value.x")
DEFINE_VALUE("REDUCE(lhs, rhs)", "min(lhs, rhs)")
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
ADDITIONAL_INFO(compositor_luminance_shared)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_minimum_float)
COMPUTE_FUNCTION("reduce_minimum_float")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "FLT_MAX")
DEFINE_VALUE("INITIALIZE(value)", "value.x")
DEFINE_VALUE("LOAD(value)", "value.x")
DEFINE_VALUE("REDUCE(lhs, rhs)", "min(rhs, lhs)")
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
GPU_SHADER_CREATE_INFO(compositor_minimum_float_in_range)
COMPUTE_FUNCTION("reduce_minimum_float_in_range")
ADDITIONAL_INFO(compositor_parallel_reduction_shared)
IMAGE(0, SFLOAT_32, write, image2D, output_img)
ADDITIONAL_INFO(compositor_parallel_reduction_float_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_float)
PUSH_CONSTANT(float, lower_bound)
PUSH_CONSTANT(float, upper_bound)
DEFINE_VALUE("TYPE", "float")
DEFINE_VALUE("IDENTITY", "upper_bound")
DEFINE_VALUE("INITIALIZE(v)", "((v.x <= upper_bound) && (v.x >= lower_bound)) ? v.x : upper_bound")
DEFINE_VALUE("LOAD(value)", "value.x")
DEFINE_VALUE("REDUCE(lhs, rhs)", "((rhs < lhs) && (rhs >= lower_bound)) ? rhs : lhs")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()
@@ -217,17 +222,12 @@ GPU_SHADER_CREATE_END()
*/
GPU_SHADER_CREATE_INFO(compositor_max_velocity)
ADDITIONAL_INFO(compositor_parallel_reduction_float4_shared)
ADDITIONAL_INFO(compositor_parallel_reduction_output_half4)
COMPUTE_FUNCTION("reduce_max_velocity")
LOCAL_GROUP_SIZE(32, 32)
PUSH_CONSTANT(bool, is_initial_reduction)
SAMPLER(0, sampler2D, input_tx)
IMAGE(0, SFLOAT_16_16_16_16, write, image2D, output_img)
DEFINE_VALUE("TYPE", "vec4")
DEFINE_VALUE("IDENTITY", "vec4(0.0f)")
DEFINE_VALUE("INITIALIZE(value)", "value")
DEFINE_VALUE("LOAD(value)", "value")
DEFINE_VALUE("REDUCE(lhs, rhs)",
"vec4(dot(lhs.xy, lhs.xy) > dot(rhs.xy, rhs.xy) ? lhs.xy : rhs.xy,"
" dot(lhs.zw, lhs.zw) > dot(rhs.zw, rhs.zw) ? lhs.zw : rhs.zw)")
COMPUTE_SOURCE("compositor_parallel_reduction.glsl")
DO_STATIC_COMPILATION()
GPU_SHADER_CREATE_END()

View File

@@ -437,6 +437,7 @@ void remove_selected_points(Span<PointsRange> ranges_selected)
IndexMaskMemory memory;
const IndexMask combined_mask = IndexMask::from_union(item.value, memory);
dst_curves.remove_points(combined_mask, {});
item.key->tag_topology_changed();
}
}

View File

@@ -593,22 +593,22 @@ DEF_ICON(HANDLE_AUTO)
DEF_ICON(HANDLE_AUTOCLAMPED)
DEF_ICON(HANDLE_FREE)
DEF_ICON(HANDLE_VECTOR)
DEF_ICON(IPO_BACK)
DEF_ICON_COLOR(IPO_BACK)
DEF_ICON(IPO_BEZIER)
DEF_ICON(IPO_BOUNCE)
DEF_ICON(IPO_CIRC)
DEF_ICON(IPO_CONSTANT)
DEF_ICON(IPO_CUBIC)
DEF_ICON_COLOR(IPO_BOUNCE)
DEF_ICON_COLOR(IPO_CIRC)
DEF_ICON_COLOR(IPO_CONSTANT)
DEF_ICON_COLOR(IPO_CUBIC)
DEF_ICON(IPO_EASE_IN_OUT)
DEF_ICON(IPO_EASE_IN)
DEF_ICON(IPO_EASE_OUT)
DEF_ICON(IPO_ELASTIC)
DEF_ICON(IPO_EXPO)
DEF_ICON(IPO_LINEAR)
DEF_ICON(IPO_QUAD)
DEF_ICON(IPO_QUART)
DEF_ICON(IPO_QUINT)
DEF_ICON(IPO_SINE)
DEF_ICON_COLOR(IPO_ELASTIC)
DEF_ICON_COLOR(IPO_EXPO)
DEF_ICON_COLOR(IPO_LINEAR)
DEF_ICON_COLOR(IPO_QUAD)
DEF_ICON_COLOR(IPO_QUART)
DEF_ICON_COLOR(IPO_QUINT)
DEF_ICON_COLOR(IPO_SINE)
DEF_ICON(KEY_DEHLT)
DEF_ICON(KEY_HLT)
DEF_ICON(KEYFRAME_HLT)

View File

@@ -1614,13 +1614,13 @@ void ui_draw_but_CURVE(ARegion *region, uiBut *but, const uiWidgetColors *wcol,
}
/* calculate offset and zoom */
const float zoomx = (BLI_rcti_size_x(rect) - 2.0f) / clip_size_x;
const float zoomy = (BLI_rcti_size_y(rect) - 2.0f) / clip_size_y;
const float zoomx = (BLI_rcti_size_x(rect) - 1.0f) / clip_size_x;
const float zoomy = (BLI_rcti_size_y(rect) - 1.0f) / clip_size_y;
const float offsx = cumap->curr.xmin - (1.0f / zoomx);
const float offsy = cumap->curr.ymin - (1.0f / zoomy);
/* exit early if too narrow */
if (zoomx == 0.0f) {
if (zoomx <= 0.0f) {
return;
}
@@ -1827,16 +1827,13 @@ void ui_draw_but_CURVE(ARegion *region, uiBut *but, const uiWidgetColors *wcol,
/* Reset state for fill & line. */
GPU_line_smooth(false);
GPU_blend(GPU_BLEND_NONE);
GPU_blend(GPU_BLEND_ALPHA);
immUnbindProgram();
/* The points, use aspect to make them visible on edges. */
format = immVertexFormat();
pos = GPU_vertformat_attr_add(format, "pos", blender::gpu::VertAttrType::SFLOAT_32_32);
const uint col = GPU_vertformat_attr_add(
format, "color", blender::gpu::VertAttrType::SFLOAT_32_32_32_32);
const uint size = GPU_vertformat_attr_add(format, "size", blender::gpu::VertAttrType::SFLOAT_32);
immBindBuiltinProgram(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR);
immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
GPU_program_point_size(true);
@@ -1850,37 +1847,82 @@ void ui_draw_but_CURVE(ARegion *region, uiBut *but, const uiWidgetColors *wcol,
cmp = cuma->curve;
const float point_size = max_ff(U.pixelsize * 2.0f,
min_ff(UI_SCALE_FAC / but->block->aspect * 4.0f, 20.0f));
GPU_blend(GPU_BLEND_ALPHA);
min_ff(UI_SCALE_FAC / but->block->aspect * 6.0f, 20.0f));
int selected = 0;
/* Find the total number of selected points. */
for (int i = 0; i < cuma->totpoint; i++) {
if (cmp[i].flag & CUMA_SELECT) {
selected++;
}
}
/* Curve widgets using a gradient background (such as Hue Correct), draw
* an additional point in the back, forming an outline so they stand out. */
if (but_cumap->gradient_type == UI_GRAD_H) {
immBegin(GPU_PRIM_POINTS, cuma->totpoint);
if ((cuma->totpoint - selected) > 0) {
/* Background (outline) for unselected points. */
immUniform4fv("color", color_point_outline);
immUniform1f("size", point_size * 1.4f);
immBegin(GPU_PRIM_POINTS, cuma->totpoint - selected);
for (int a = 0; a < cuma->totpoint; a++) {
if (cmp[a].flag & CUMA_SELECT) {
continue;
}
const float fx = rect->xmin + zoomx * (cmp[a].x - offsx);
const float fy = rect->ymin + zoomy * (cmp[a].y - offsy);
immVertex2f(pos, fx, fy);
}
immEnd();
}
if (selected > 0) {
/* Background (outline) for selected points. */
immUniform1f("size", point_size * 1.8f);
immBegin(GPU_PRIM_POINTS, selected);
for (int a = 0; a < cuma->totpoint; a++) {
if (!(cmp[a].flag & CUMA_SELECT)) {
continue;
}
const float fx = rect->xmin + zoomx * (cmp[a].x - offsx);
const float fy = rect->ymin + zoomy * (cmp[a].y - offsy);
immVertex2f(pos, fx, fy);
}
immEnd();
}
}
if ((cuma->totpoint - selected) > 0) {
/* Unselected points. */
immUniform1f("size", point_size);
immUniform4fv("color", color_point);
immBegin(GPU_PRIM_POINTS, cuma->totpoint - selected);
for (int a = 0; a < cuma->totpoint; a++) {
if (cmp[a].flag & CUMA_SELECT) {
continue;
}
const float fx = rect->xmin + zoomx * (cmp[a].x - offsx);
const float fy = rect->ymin + zoomy * (cmp[a].y - offsy);
const float size_factor = (cmp[a].flag & CUMA_SELECT) ? 1.4f : 1.2f;
/* First the point the back, slightly larger so it makes an outline. */
immAttr4fv(col, color_point_outline);
immAttr1f(size, point_size * size_factor);
immVertex2f(pos, fx, fy);
}
immEnd();
}
immBegin(GPU_PRIM_POINTS, cuma->totpoint);
for (int a = 0; a < cuma->totpoint; a++) {
const float fx = rect->xmin + zoomx * (cmp[a].x - offsx);
const float fy = rect->ymin + zoomy * (cmp[a].y - offsy);
/* The point in front. */
immAttr4fv(col, (cmp[a].flag & CUMA_SELECT) ? color_point_select : color_point);
immAttr1f(size, point_size);
immVertex2f(pos, fx, fy);
if (selected > 0) {
/* Selected points. */
immUniform1f("size", point_size * 1.2f);
immUniform4fv("color", color_point_select);
immBegin(GPU_PRIM_POINTS, selected);
for (int a = 0; a < cuma->totpoint; a++) {
if (!(cmp[a].flag & CUMA_SELECT)) {
continue;
}
const float fx = rect->xmin + zoomx * (cmp[a].x - offsx);
const float fy = rect->ymin + zoomy * (cmp[a].y - offsy);
immVertex2f(pos, fx, fy);
}
immEnd();
}
immEnd();
immUnbindProgram();
GPU_blend(GPU_BLEND_NONE);
@@ -1920,13 +1962,13 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
but_profile->edit_profile;
/* Calculate offset and zoom. */
const float zoomx = (BLI_rcti_size_x(rect) - 2.0f) / BLI_rctf_size_x(&profile->view_rect);
const float zoomy = (BLI_rcti_size_y(rect) - 2.0f) / BLI_rctf_size_y(&profile->view_rect);
const float zoomx = (BLI_rcti_size_x(rect) - 1.0f) / BLI_rctf_size_x(&profile->view_rect);
const float zoomy = (BLI_rcti_size_y(rect) - 1.0f) / BLI_rctf_size_y(&profile->view_rect);
const float offsx = profile->view_rect.xmin - (1.0f / zoomx);
const float offsy = profile->view_rect.ymin - (1.0f / zoomy);
/* Exit early if too narrow. */
if (zoomx == 0.0f) {
if (zoomx <= 0.0f) {
return;
}
@@ -2106,62 +2148,116 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
/* New GPU instructions for control points and sampled points. */
format = immVertexFormat();
pos = GPU_vertformat_attr_add(format, "pos", blender::gpu::VertAttrType::SFLOAT_32_32);
const uint col = GPU_vertformat_attr_add(
format, "color", blender::gpu::VertAttrType::SFLOAT_32_32_32_32);
const uint size = GPU_vertformat_attr_add(format, "size", blender::gpu::VertAttrType::SFLOAT_32);
immBindBuiltinProgram(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR);
immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
GPU_program_point_size(true);
float color_point[4], color_point_select[4], color_point_outline[4], color_sample[4];
float color_point[4], color_point_select[4], color_sample[4];
rgba_uchar_to_float(color_point, wcol->text);
color_point[3] = 1.0f;
rgba_uchar_to_float(color_point_select, wcol->text_sel);
rgba_uchar_to_float(color_point_outline, wcol->inner_sel);
color_point_select[3] = 1.0f;
color_sample[0] = float(wcol->item[0]) / 255.0f;
color_sample[1] = float(wcol->item[1]) / 255.0f;
color_sample[2] = float(wcol->item[2]) / 255.0f;
color_sample[3] = float(wcol->item[3]) / 255.0f;
float point_size;
int selected = 0;
for (int i = 0; i < path_len; i++) {
if (pts[i].flag & PROF_SELECT) {
selected++;
}
}
/* Draw the control points. */
GPU_line_smooth(false);
if (path_len > 0) {
GPU_blend(GPU_BLEND_NONE);
point_size = max_ff(U.pixelsize * 2.0f,
min_ff(UI_SCALE_FAC / but->block->aspect * 4.0f, 20.0f));
GPU_blend(GPU_BLEND_ALPHA);
const float point_size = max_ff(U.pixelsize * 2.0f,
min_ff(UI_SCALE_FAC / but->block->aspect * 6.0f, 20.0f));
immBegin(GPU_PRIM_POINTS, path_len);
if ((path_len - selected) > 0) {
/* Unselected control points. */
immUniform4fv("color", color_point);
immUniform1f("size", point_size);
immBegin(GPU_PRIM_POINTS, path_len - selected);
for (int i = 0; i < path_len; i++) {
if (pts[i].flag & PROF_SELECT) {
continue;
}
fx = rect->xmin + zoomx * (pts[i].x - offsx);
fy = rect->ymin + zoomy * (pts[i].y - offsy);
immVertex2f(pos, fx, fy);
}
immEnd();
}
if (selected > 0) {
/* Selected control points. */
immUniform4fv("color", color_point_select);
immUniform1f("size", point_size * 1.2f);
immBegin(GPU_PRIM_POINTS, selected);
for (int i = 0; i < path_len; i++) {
if (!(pts[i].flag & PROF_SELECT)) {
continue;
}
fx = rect->xmin + zoomx * (pts[i].x - offsx);
fy = rect->ymin + zoomy * (pts[i].y - offsy);
const float size_factor = (pts[i].flag & PROF_SELECT) ? 1.5f : 1.0f;
immAttr1f(size, point_size * size_factor);
immAttr4fv(col, (pts[i].flag & PROF_SELECT) ? color_point_select : color_point);
immVertex2f(pos, fx, fy);
}
immEnd();
}
/* Draw the handle points. */
if (selected_free_points > 0) {
GPU_line_smooth(false);
GPU_blend(GPU_BLEND_NONE);
point_size = max_ff(U.pixelsize * 2.0f,
min_ff(UI_SCALE_FAC / but->block->aspect * 4.0f, 20.0f));
immBegin(GPU_PRIM_POINTS, selected_free_points * 2);
/* Find the total number of selected handles. */
selected = 0;
for (int i = 0; i < path_len; i++) {
if (point_draw_handles(&pts[i])) {
if (pts[i].flag & PROF_H1_SELECT) {
selected++;
}
if (pts[i].flag & PROF_H2_SELECT) {
selected++;
}
}
}
if (((selected_free_points * 2) - selected) > 0) {
/* Unselected handles. */
immUniform4fv("color", color_point);
immUniform1f("size", point_size);
immBegin(GPU_PRIM_POINTS, (selected_free_points * 2) - selected);
for (int i = 0; i < path_len; i++) {
if (point_draw_handles(&pts[i])) {
fx = rect->xmin + zoomx * (pts[i].h1_loc[0] - offsx);
fy = rect->ymin + zoomy * (pts[i].h1_loc[1] - offsy);
immAttr1f(size, point_size);
immAttr4fv(col, (pts[i].flag & PROF_H1_SELECT) ? color_point_select : color_point);
immVertex2f(pos, fx, fy);
fx = rect->xmin + zoomx * (pts[i].h2_loc[0] - offsx);
fy = rect->ymin + zoomy * (pts[i].h2_loc[1] - offsy);
immAttr4fv(col, (pts[i].flag & PROF_H2_SELECT) ? color_point_select : color_point);
immVertex2f(pos, fx, fy);
if (!(pts[i].flag & PROF_H1_SELECT)) {
fx = rect->xmin + zoomx * (pts[i].h1_loc[0] - offsx);
fy = rect->ymin + zoomy * (pts[i].h1_loc[1] - offsy);
immVertex2f(pos, fx, fy);
}
if (!(pts[i].flag & PROF_H2_SELECT)) {
fx = rect->xmin + zoomx * (pts[i].h2_loc[0] - offsx);
fy = rect->ymin + zoomy * (pts[i].h2_loc[1] - offsy);
immVertex2f(pos, fx, fy);
}
}
}
immEnd();
}
if (selected > 0) {
/* Selected Handles. */
immUniform4fv("color", color_point_select);
immUniform1f("size", point_size * 1.2f);
immBegin(GPU_PRIM_POINTS, selected);
for (int i = 0; i < path_len; i++) {
if (point_draw_handles(&pts[i])) {
if (pts[i].flag & PROF_H1_SELECT) {
fx = rect->xmin + zoomx * (pts[i].h1_loc[0] - offsx);
fy = rect->ymin + zoomy * (pts[i].h1_loc[1] - offsy);
immVertex2f(pos, fx, fy);
}
if (pts[i].flag & PROF_H2_SELECT) {
fx = rect->xmin + zoomx * (pts[i].h2_loc[0] - offsx);
fy = rect->ymin + zoomy * (pts[i].h2_loc[1] - offsy);
immVertex2f(pos, fx, fy);
}
}
}
immEnd();
@@ -2171,13 +2267,12 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
pts = profile->segments;
const int segments_len = uint(profile->segments_len);
if (segments_len > 0 && pts) {
point_size = max_ff(2.0f, min_ff(UI_SCALE_FAC / but->block->aspect * 3.0f, 3.0f));
immUniform4fv("color", color_sample);
immUniform1f("size", point_size);
immBegin(GPU_PRIM_POINTS, segments_len);
for (int i = 0; i < segments_len; i++) {
fx = rect->xmin + zoomx * (pts[i].x - offsx);
fy = rect->ymin + zoomy * (pts[i].y - offsy);
immAttr1f(size, point_size);
immAttr4fv(col, color_sample);
immVertex2f(pos, fx, fy);
}
immEnd();
@@ -2195,6 +2290,7 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
immUniformColor3ubv((const uchar *)wcol->outline);
imm_draw_box_wire_2d(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
immUnbindProgram();
GPU_blend(GPU_BLEND_NONE);
}
void ui_draw_but_TRACKPREVIEW(ARegion *region,

View File

@@ -1517,6 +1517,9 @@ static void svg_replace_color_attributes(std::string &svg,
{"blender_crease", nullptr, TH_CREASE},
{"blender_seam", nullptr, TH_SEAM},
{"blender_sharp", nullptr, TH_SHARP},
{"blender_ipo_linear", btheme->space_action.anim_interpolation_linear},
{"blender_ipo_constant", btheme->space_action.anim_interpolation_constant},
{"blender_ipo_other", btheme->space_action.anim_interpolation_other},
};
for (const ColorItem &item : items) {

View File

@@ -7,6 +7,7 @@
*/
#include "BKE_context.hh"
#include "BKE_library.hh"
#include "BKE_main_invariants.hh"
#include "BKE_node_tree_interface.hh"
@@ -332,6 +333,9 @@ class NodeTreeInterfaceView : public AbstractTreeView {
std::unique_ptr<AbstractViewItemDragController> NodeSocketViewItem::create_drag_controller() const
{
if (!ID_IS_EDITABLE(&nodetree_.id)) {
return nullptr;
}
return std::make_unique<NodeTreeInterfaceDragController>(
static_cast<NodeTreeInterfaceView &>(this->get_tree_view()), socket_.item, nodetree_);
}
@@ -343,6 +347,9 @@ std::unique_ptr<TreeViewItemDropTarget> NodeSocketViewItem::create_drop_target()
std::unique_ptr<AbstractViewItemDragController> NodePanelViewItem::create_drag_controller() const
{
if (!ID_IS_EDITABLE(&nodetree_.id)) {
return nullptr;
}
return std::make_unique<NodeTreeInterfaceDragController>(
static_cast<NodeTreeInterfaceView &>(this->get_tree_view()), panel_.item, nodetree_);
}

View File

@@ -1921,7 +1921,7 @@ static void area_calc_totrct(const bScreen *screen, ScrArea *area, const rcti *w
/**
* Update the `ARegion::visible` flag.
*/
static void region_evaulate_visibility(ARegion *region)
static void region_evaluate_visibility(ARegion *region)
{
bool hidden = (region->flag & (RGN_FLAG_POLL_FAILED | RGN_FLAG_HIDDEN | RGN_FLAG_TOO_SMALL)) !=
0;
@@ -2067,7 +2067,7 @@ void ED_area_update_region_sizes(wmWindowManager *wm, wmWindow *win, ScrArea *ar
if (region->flag & RGN_FLAG_POLL_FAILED) {
continue;
}
region_evaulate_visibility(region);
region_evaluate_visibility(region);
/* region size may have changed, init does necessary adjustments */
if (region->runtime->type->init) {
@@ -2178,7 +2178,7 @@ void ED_area_init(bContext *C, const wmWindow *win, ScrArea *area)
/* region windows, default and own handlers */
LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
region_evaulate_visibility(region);
region_evaluate_visibility(region);
if (region->runtime->visible) {
/* default region handlers */
@@ -2303,7 +2303,7 @@ void ED_region_floating_init(ARegion *region)
BLI_assert(region->alignment == RGN_ALIGN_FLOAT);
/* refresh can be called before window opened */
region_evaulate_visibility(region);
region_evaluate_visibility(region);
region_update_rect(region);
}