Compare commits
261 Commits
refactor-v
...
node-group
Author | SHA1 | Date | |
---|---|---|---|
fd7e8634fa | |||
![]() |
aa32121174 | ||
f2fb5b6ff2 | |||
9bff211ac9 | |||
c971c851d3 | |||
a2ccd0e495 | |||
1029577a51 | |||
05c7d935e7 | |||
8fe0aecfde | |||
ede1ce6e9a | |||
8031326262 | |||
![]() |
2beff6197e | ||
3123f33380 | |||
![]() |
a092baa7f9 | ||
5e3d0840a3 | |||
c41b93bda5 | |||
eb43477851 | |||
239a74a130 | |||
6ac378e685 | |||
25fc77f46c | |||
de2c4ee587 | |||
f23b14091f | |||
ced94bc11c | |||
7ce0d9d791 | |||
36c0649d32 | |||
66548007a8 | |||
eea65cbd42 | |||
66dfef10a7 | |||
fd9fc809b7 | |||
39b2a7bb7e | |||
4ba06ad0a8 | |||
3fb47956c0 | |||
![]() |
fafd21b14c | ||
49e68f15f2 | |||
f76dfe8fb4 | |||
524d172742 | |||
![]() |
f013e3de81 | ||
e77a1dc6b0 | |||
1b44b47f69 | |||
1a91c57320 | |||
b1bf4c2a05 | |||
48e27ad122 | |||
91e2b1dcaf | |||
5f28a90b34 | |||
97712b018d | |||
![]() |
0e8d1c6bcf | ||
320f34af86 | |||
19b597c55d | |||
f2cce48698 | |||
0eccf57161 | |||
![]() |
574995478a | ||
![]() |
57668d84cf | ||
8d5b9478a2 | |||
64bb49fa4e | |||
![]() |
178086d581 | ||
785d87ee42 | |||
c830c5b16b | |||
e850c2b06d | |||
10e28bd270 | |||
8de2b6a020 | |||
952ded57de | |||
581a6da804 | |||
63da2c4082 | |||
![]() |
22bef356ae | ||
3cfd6439c6 | |||
16804297e6 | |||
d1e1d6c491 | |||
bbcc8330f7 | |||
e7082fbdb0 | |||
ab101d444d | |||
8b0fac4116 | |||
82ff5dd911 | |||
9aa0a3f533 | |||
75e41b1279 | |||
265c3a4724 | |||
![]() |
dc8a924efa | ||
![]() |
14d5a45750 | ||
807bb450a0 | |||
bfe6b55aa7 | |||
d3445496b1 | |||
cb0b017d8f | |||
0af08cea40 | |||
e99801390c | |||
5a1b1c0ed2 | |||
207df439e1 | |||
36fb03e2b9 | |||
8ffc3ee257 | |||
aeee7f390d | |||
cf28398471 | |||
1e063a0242 | |||
b65ec08bbb | |||
![]() |
26b2a35dd4 | ||
f53ca7e41c | |||
6754d7aef6 | |||
c4f71f3193 | |||
3e4c98429b | |||
f763929486 | |||
3ea4c6b9c9 | |||
f164188a6d | |||
3e29175af3 | |||
![]() |
83b6fcc70c | ||
76a3ff70d5 | |||
c3a400b73f | |||
48a45c43e4 | |||
9e1fdd1f14 | |||
6c5f8bf5aa | |||
9471715720 | |||
75c9788c27 | |||
d218ba8009 | |||
77e927b58f | |||
fe2f43a15c | |||
59eb71afa1 | |||
0e9c04a3ea | |||
cf8ea741f2 | |||
0733926a34 | |||
24aae7ed63 | |||
3021f9b48c | |||
468765d29e | |||
9aa88a6604 | |||
b35efa932e | |||
300fe84bf0 | |||
b848d5cdf5 | |||
0a0c2c0217 | |||
45b46e5de9 | |||
582c5530b6 | |||
ebe32e01e1 | |||
07a77816a1 | |||
bae1b64525 | |||
132522cba8 | |||
ceb612a79c | |||
62a2faa7ef | |||
101a493ab5 | |||
ff01070b5c | |||
ee857cc266 | |||
ad7455cd14 | |||
83883ae66a | |||
75ae328d62 | |||
76f0ef294a | |||
72d1ddfc9c | |||
4ed029fc02 | |||
![]() |
e7a800c52f | ||
24801e0a4a | |||
fc32567cda | |||
![]() |
9eafdb985d | ||
3c8d261557 | |||
![]() |
e82c5c6607 | ||
118803893e | |||
0793ced8ad | |||
e7b441a05c | |||
53743adc29 | |||
1dcf0f9cf1 | |||
feba1fe974 | |||
c4df8ac1a4 | |||
6025897cd6 | |||
802a59a58a | |||
1ab6d5c1dc | |||
a770faa811 | |||
15cfb375a3 | |||
e78e235cc5 | |||
3ec9681ac4 | |||
23209dc8f9 | |||
038345fa56 | |||
04379b5bde | |||
38131cc5e5 | |||
f61f4c89bb | |||
e26887598f | |||
42017b006e | |||
bf5b1fa726 | |||
09b89da349 | |||
d3c454d66c | |||
![]() |
98c4224ff0 | ||
![]() |
eccd03a826 | ||
7d618b4dde | |||
a566dc25aa | |||
9d9c879f4b | |||
0cc2a72f94 | |||
3af0e1f6fd | |||
34771cc9f5 | |||
72c34068cb | |||
f52e3aa210 | |||
8925d3b7bf | |||
6bd42baaeb | |||
26b098c04f | |||
bc4f99aa86 | |||
0c83ef567c | |||
89fd3afd1e | |||
87c1c8112f | |||
8edcb3af96 | |||
ae1dc8f5f9 | |||
00c7ea68a8 | |||
788d380460 | |||
6e01b52100 | |||
f3610a23d1 | |||
28dc07a153 | |||
9473c61b36 | |||
b40e05fcd1 | |||
637731dc61 | |||
55d48defc5 | |||
a26a059244 | |||
add6fa0924 | |||
35affaa971 | |||
3feb3ce32d | |||
7898089de3 | |||
![]() |
59f9a5e6ac | ||
60fee69682 | |||
![]() |
3df40cc343 | ||
![]() |
468d59e496 | ||
709e443152 | |||
ddc7e5f1b6 | |||
e509f9c3a0 | |||
e7e5fd96c4 | |||
2e8641e45e | |||
ae30f72c80 | |||
49b798ca7e | |||
c614eadb47 | |||
757ec00f83 | |||
de913516dd | |||
c27ef1e9e8 | |||
d5e626b243 | |||
8e8a6b80cf | |||
a63a0ee24b | |||
d35b14449e | |||
41e0a5b5ed | |||
15cdcb4e90 | |||
5cd1aaf080 | |||
4be166b6b5 | |||
4e65b1ef6c | |||
ebf7673f83 | |||
093074aefe | |||
2829caa9f8 | |||
c202d38659 | |||
37a5ff4a84 | |||
2acebcae24 | |||
3de3c3c23a | |||
c9e9a42215 | |||
f0ddbcb31d | |||
7cd91a06eb | |||
efe90944ee | |||
765406cb51 | |||
2761679180 | |||
5583d51773 | |||
192f0c9e17 | |||
271f34f77e | |||
3e125d12af | |||
6644e96f01 | |||
ae379714e4 | |||
96a4b54cfb | |||
538f452ea9 | |||
2ea47057d3 | |||
209aff0a35 | |||
3b6ee8cee7 | |||
52b94049f2 | |||
c21fc1687e | |||
f83f5ef6e7 | |||
0e8542ebb7 | |||
94f1726526 | |||
add2815723 | |||
7d66c04841 | |||
a91212e147 | |||
3366fc265b | |||
8cab5afe46 |
@@ -217,7 +217,7 @@ if(UNIX AND NOT (APPLE OR HAIKU))
|
|||||||
option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
|
option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
|
||||||
mark_as_advanced(WITH_GHOST_X11)
|
mark_as_advanced(WITH_GHOST_X11)
|
||||||
|
|
||||||
option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for windowing (under development)" OFF)
|
option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for windowing" ON)
|
||||||
mark_as_advanced(WITH_GHOST_WAYLAND)
|
mark_as_advanced(WITH_GHOST_WAYLAND)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -1705,22 +1705,18 @@ if(WITH_PYTHON)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
# Select C++17 as the standard for C++ projects.
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /std:c++17")
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
# If C++17 is not available, downgrading to an earlier standard is NOT OK.
|
||||||
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
# of the C++ standard chosen above
|
# Do not enable compiler specific language extentions.
|
||||||
if(MSVC_VERSION GREATER 1913)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
|
|
||||||
endif()
|
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
||||||
elseif(
|
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
|
||||||
CMAKE_COMPILER_IS_GNUCC OR
|
# of the C++ standard chosen above.
|
||||||
CMAKE_C_COMPILER_ID MATCHES "Clang" OR
|
if(MSVC AND MSVC_VERSION GREATER 1913)
|
||||||
CMAKE_C_COMPILER_ID MATCHES "Intel"
|
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
|
||||||
)
|
|
||||||
string(APPEND CMAKE_CXX_FLAGS " -std=c++17")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unknown compiler ${CMAKE_C_COMPILER_ID}, can't enable C++17 build")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Visual Studio has all standards it supports available by default
|
# Visual Studio has all standards it supports available by default
|
||||||
|
@@ -56,6 +56,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(cmake/zlib.cmake)
|
include(cmake/zlib.cmake)
|
||||||
|
include(cmake/zstd.cmake)
|
||||||
include(cmake/openal.cmake)
|
include(cmake/openal.cmake)
|
||||||
include(cmake/png.cmake)
|
include(cmake/png.cmake)
|
||||||
include(cmake/jpeg.cmake)
|
include(cmake/jpeg.cmake)
|
||||||
|
@@ -92,3 +92,4 @@ download_source(ISPC)
|
|||||||
download_source(GMP)
|
download_source(GMP)
|
||||||
download_source(POTRACE)
|
download_source(POTRACE)
|
||||||
download_source(HARU)
|
download_source(HARU)
|
||||||
|
download_source(ZSTD)
|
||||||
|
@@ -192,6 +192,8 @@ harvest(potrace/include potrace/include "*.h")
|
|||||||
harvest(potrace/lib potrace/lib "*.a")
|
harvest(potrace/lib potrace/lib "*.a")
|
||||||
harvest(haru/include haru/include "*.h")
|
harvest(haru/include haru/include "*.h")
|
||||||
harvest(haru/lib haru/lib "*.a")
|
harvest(haru/lib haru/lib "*.a")
|
||||||
|
harvest(zstd/include zstd/include "*.h")
|
||||||
|
harvest(zstd/lib zstd/lib "*.a")
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
harvest(libglu/lib mesa/lib "*.so*")
|
harvest(libglu/lib mesa/lib "*.so*")
|
||||||
|
@@ -500,5 +500,11 @@ set(HARU_HASH 4f916aa49c3069b3a10850013c507460)
|
|||||||
set(HARU_HASH_TYPE MD5)
|
set(HARU_HASH_TYPE MD5)
|
||||||
set(HARU_FILE libharu-${HARU_VERSION}.tar.gz)
|
set(HARU_FILE libharu-${HARU_VERSION}.tar.gz)
|
||||||
|
|
||||||
|
set(ZSTD_VERSION 1.5.0)
|
||||||
|
set(ZSTD_URI https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz)
|
||||||
|
set(ZSTD_HASH 5194fbfa781fcf45b98c5e849651aa7b3b0a008c6b72d4a0db760f3002291e94)
|
||||||
|
set(ZSTD_HASH_TYPE SHA256)
|
||||||
|
set(ZSTD_FILE zstd-${ZSTD_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
||||||
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
||||||
|
51
build_files/build_environment/cmake/zstd.cmake
Normal file
51
build_files/build_environment/cmake/zstd.cmake
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
|
set(ZSTD_EXTRA_ARGS
|
||||||
|
-DZSTD_BUILD_PROGRAMS=OFF
|
||||||
|
-DZSTD_BUILD_SHARED=OFF
|
||||||
|
-DZSTD_BUILD_STATIC=ON
|
||||||
|
-DZSTD_BUILD_TESTS=OFF
|
||||||
|
-DZSTD_LEGACY_SUPPORT=OFF
|
||||||
|
-DZSTD_LZ4_SUPPORT=OFF
|
||||||
|
-DZSTD_LZMA_SUPPORT=OFF
|
||||||
|
-DZSTD_MULTITHREAD_SUPPORT=ON
|
||||||
|
-DZSTD_PROGRAMS_LINK_SHARED=OFF
|
||||||
|
-DZSTD_USE_STATIC_RUNTIME=OFF
|
||||||
|
-DZSTD_ZLIB_SUPPORT=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
ExternalProject_Add(external_zstd
|
||||||
|
URL file://${PACKAGE_DIR}/${ZSTD_FILE}
|
||||||
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
URL_HASH ${ZSTD_HASH_TYPE}=${ZSTD_HASH}
|
||||||
|
PREFIX ${BUILD_DIR}/zstd
|
||||||
|
SOURCE_SUBDIR build/cmake
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/zstd ${DEFAULT_CMAKE_FLAGS} ${ZSTD_EXTRA_ARGS}
|
||||||
|
INSTALL_DIR ${LIBDIR}/zstd
|
||||||
|
)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
if(BUILD_MODE STREQUAL Release)
|
||||||
|
ExternalProject_Add_Step(external_zstd after_install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/zstd/lib/zstd_static${LIBEXT} ${HARVEST_TARGET}/zstd/lib/zstd_static${LIBEXT}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/zstd/include/ ${HARVEST_TARGET}/zstd/include/
|
||||||
|
DEPENDEES install
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
@@ -8,6 +8,9 @@ IGNORE_SOURCE = (
|
|||||||
# specific source files
|
# specific source files
|
||||||
"extern/audaspace/",
|
"extern/audaspace/",
|
||||||
|
|
||||||
|
# Use for `WIN32` only.
|
||||||
|
"source/creator/blender_launcher_win32.c",
|
||||||
|
|
||||||
# specific source files
|
# specific source files
|
||||||
"extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp",
|
"extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp",
|
||||||
"extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp",
|
"extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp",
|
||||||
|
@@ -82,7 +82,7 @@ def create_nb_project_main():
|
|||||||
make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM")
|
make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM")
|
||||||
make_exe_basename = os.path.basename(make_exe)
|
make_exe_basename = os.path.basename(make_exe)
|
||||||
|
|
||||||
# --------------- NB specific
|
# --------------- NetBeans specific.
|
||||||
defines = [("%s=%s" % cdef) if cdef[1] else cdef[0] for cdef in defines]
|
defines = [("%s=%s" % cdef) if cdef[1] else cdef[0] for cdef in defines]
|
||||||
defines += [cdef.replace("#define", "").strip() for cdef in cmake_compiler_defines()]
|
defines += [cdef.replace("#define", "").strip() for cdef in cmake_compiler_defines()]
|
||||||
|
|
||||||
|
@@ -122,7 +122,7 @@ is a full-featured 3D application. It supports the entirety of the 3D pipeline -
|
|||||||
'''modeling, rigging, animation, simulation, rendering, compositing, motion tracking, and video editing.
|
'''modeling, rigging, animation, simulation, rendering, compositing, motion tracking, and video editing.
|
||||||
|
|
||||||
Use Blender to create 3D images and animations, films and commercials, content for games, '''
|
Use Blender to create 3D images and animations, films and commercials, content for games, '''
|
||||||
r'''architectural and industrial visualizatons, and scientific visualizations.
|
r'''architectural and industrial visualizations, and scientific visualizations.
|
||||||
|
|
||||||
https://www.blender.org''')
|
https://www.blender.org''')
|
||||||
|
|
||||||
|
@@ -1047,6 +1047,7 @@ context_type_map = {
|
|||||||
"annotation_data": ("GreasePencil", False),
|
"annotation_data": ("GreasePencil", False),
|
||||||
"annotation_data_owner": ("ID", False),
|
"annotation_data_owner": ("ID", False),
|
||||||
"armature": ("Armature", False),
|
"armature": ("Armature", False),
|
||||||
|
"asset_library": ("AssetLibraryReference", False),
|
||||||
"bone": ("Bone", False),
|
"bone": ("Bone", False),
|
||||||
"brush": ("Brush", False),
|
"brush": ("Brush", False),
|
||||||
"camera": ("Camera", False),
|
"camera": ("Camera", False),
|
||||||
@@ -1113,6 +1114,7 @@ context_type_map = {
|
|||||||
"texture_slot": ("MaterialTextureSlot", False),
|
"texture_slot": ("MaterialTextureSlot", False),
|
||||||
"texture_user": ("ID", False),
|
"texture_user": ("ID", False),
|
||||||
"texture_user_property": ("Property", False),
|
"texture_user_property": ("Property", False),
|
||||||
|
"ui_list": ("UIList", False),
|
||||||
"vertex_paint_object": ("Object", False),
|
"vertex_paint_object": ("Object", False),
|
||||||
"view_layer": ("ViewLayer", False),
|
"view_layer": ("ViewLayer", False),
|
||||||
"visible_bones": ("EditBone", True),
|
"visible_bones": ("EditBone", True),
|
||||||
|
1
extern/glog/README.blender
vendored
1
extern/glog/README.blender
vendored
@@ -7,3 +7,4 @@ Local modifications:
|
|||||||
checks for functions and so are needed.
|
checks for functions and so are needed.
|
||||||
* Added special definitions of HAVE_SNPRINTF and HAVE_LIB_GFLAGS
|
* Added special definitions of HAVE_SNPRINTF and HAVE_LIB_GFLAGS
|
||||||
in Windows' specific config.h.
|
in Windows' specific config.h.
|
||||||
|
* Silenced syscall deprecation warnings on macOS >= 10.12.
|
||||||
|
2
extern/glog/src/raw_logging.cc
vendored
2
extern/glog/src/raw_logging.cc
vendored
@@ -59,7 +59,7 @@
|
|||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)
|
#if (defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)) && (!(defined OS_MACOSX))
|
||||||
# define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
|
# define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
|
||||||
#else
|
#else
|
||||||
// Not so safe, but what can you do?
|
// Not so safe, but what can you do?
|
||||||
|
6
extern/glog/src/utilities.cc
vendored
6
extern/glog/src/utilities.cc
vendored
@@ -259,7 +259,13 @@ pid_t GetTID() {
|
|||||||
#endif
|
#endif
|
||||||
static bool lacks_gettid = false;
|
static bool lacks_gettid = false;
|
||||||
if (!lacks_gettid) {
|
if (!lacks_gettid) {
|
||||||
|
#ifdef OS_MACOSX
|
||||||
|
uint64_t tid64;
|
||||||
|
const int error = pthread_threadid_np(NULL, &tid64);
|
||||||
|
pid_t tid = error ? -1 : (pid_t)tid64;
|
||||||
|
#else
|
||||||
pid_t tid = syscall(__NR_gettid);
|
pid_t tid = syscall(__NR_gettid);
|
||||||
|
#endif
|
||||||
if (tid != -1) {
|
if (tid != -1) {
|
||||||
return tid;
|
return tid;
|
||||||
}
|
}
|
||||||
|
2
extern/rangetree/intern/generic_alloc_impl.h
vendored
2
extern/rangetree/intern/generic_alloc_impl.h
vendored
@@ -32,7 +32,7 @@
|
|||||||
* - #TPOOL_STRUCT: Name for pool struct name.
|
* - #TPOOL_STRUCT: Name for pool struct name.
|
||||||
* - #TPOOL_CHUNK_SIZE: Chunk size (optional), use 64kb when not defined.
|
* - #TPOOL_CHUNK_SIZE: Chunk size (optional), use 64kb when not defined.
|
||||||
*
|
*
|
||||||
* \note #TPOOL_ALLOC_TYPE must be at least ``sizeof(void *)``.
|
* \note #TPOOL_ALLOC_TYPE must be at least `sizeof(void *)`.
|
||||||
*
|
*
|
||||||
* Defines the API, uses #TPOOL_IMPL_PREFIX to prefix each function.
|
* Defines the API, uses #TPOOL_IMPL_PREFIX to prefix each function.
|
||||||
*
|
*
|
||||||
|
@@ -49,9 +49,9 @@
|
|||||||
|
|
||||||
#include "atomic_ops_utils.h"
|
#include "atomic_ops_utils.h"
|
||||||
|
|
||||||
#if defined(__arm__)
|
#if defined(__arm__) || defined(__riscv)
|
||||||
/* Attempt to fix compilation error on Debian armel kernel.
|
/* Attempt to fix compilation error on Debian armel and RISC-V kernels.
|
||||||
* arm7 architecture does have both 32 and 64bit atomics, however
|
* Both architectures do have both 32 and 64bit atomics, however
|
||||||
* its gcc doesn't have __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n defined.
|
* its gcc doesn't have __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n defined.
|
||||||
*/
|
*/
|
||||||
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_1
|
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_1
|
||||||
|
@@ -1136,7 +1136,7 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||||||
col = row.column(align=True)
|
col = row.column(align=True)
|
||||||
col.operator("object.material_slot_add", icon='ADD', text="")
|
col.operator("object.material_slot_add", icon='ADD', text="")
|
||||||
col.operator("object.material_slot_remove", icon='REMOVE', text="")
|
col.operator("object.material_slot_remove", icon='REMOVE', text="")
|
||||||
|
col.separator()
|
||||||
col.menu("MATERIAL_MT_context_menu", icon='DOWNARROW_HLT', text="")
|
col.menu("MATERIAL_MT_context_menu", icon='DOWNARROW_HLT', text="")
|
||||||
|
|
||||||
if is_sortable:
|
if is_sortable:
|
||||||
@@ -1151,16 +1151,15 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||||||
row.operator("object.material_slot_select", text="Select")
|
row.operator("object.material_slot_select", text="Select")
|
||||||
row.operator("object.material_slot_deselect", text="Deselect")
|
row.operator("object.material_slot_deselect", text="Deselect")
|
||||||
|
|
||||||
split = layout.split(factor=0.65)
|
row = layout.row()
|
||||||
|
|
||||||
if ob:
|
if ob:
|
||||||
split.template_ID(ob, "active_material", new="material.new")
|
row.template_ID(ob, "active_material", new="material.new")
|
||||||
row = split.row()
|
|
||||||
|
|
||||||
if slot:
|
if slot:
|
||||||
row.prop(slot, "link", text="")
|
icon_link = 'MESH_DATA' if slot.link == 'DATA' else 'OBJECT_DATA'
|
||||||
else:
|
row.prop(slot, "link", text="", icon=icon_link, icon_only=True)
|
||||||
row.label()
|
|
||||||
elif mat:
|
elif mat:
|
||||||
split.template_ID(space, "pin_id")
|
split.template_ID(space, "pin_id")
|
||||||
split.separator()
|
split.separator()
|
||||||
|
@@ -50,24 +50,29 @@ ccl_device void svm_node_vector_rotate(ShaderData *sd,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
float3 axis;
|
float3 axis;
|
||||||
|
float axis_length;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case NODE_VECTOR_ROTATE_TYPE_AXIS_X:
|
case NODE_VECTOR_ROTATE_TYPE_AXIS_X:
|
||||||
axis = make_float3(1.0f, 0.0f, 0.0f);
|
axis = make_float3(1.0f, 0.0f, 0.0f);
|
||||||
|
axis_length = 1.0f;
|
||||||
break;
|
break;
|
||||||
case NODE_VECTOR_ROTATE_TYPE_AXIS_Y:
|
case NODE_VECTOR_ROTATE_TYPE_AXIS_Y:
|
||||||
axis = make_float3(0.0f, 1.0f, 0.0f);
|
axis = make_float3(0.0f, 1.0f, 0.0f);
|
||||||
|
axis_length = 1.0f;
|
||||||
break;
|
break;
|
||||||
case NODE_VECTOR_ROTATE_TYPE_AXIS_Z:
|
case NODE_VECTOR_ROTATE_TYPE_AXIS_Z:
|
||||||
axis = make_float3(0.0f, 0.0f, 1.0f);
|
axis = make_float3(0.0f, 0.0f, 1.0f);
|
||||||
|
axis_length = 1.0f;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
axis = normalize(stack_load_float3(stack, axis_stack_offset));
|
axis = stack_load_float3(stack, axis_stack_offset);
|
||||||
|
axis_length = len(axis);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
float angle = stack_load_float(stack, angle_stack_offset);
|
float angle = stack_load_float(stack, angle_stack_offset);
|
||||||
angle = invert ? -angle : angle;
|
angle = invert ? -angle : angle;
|
||||||
result = (len_squared(axis) != 0.0f) ?
|
result = (axis_length != 0.0f) ?
|
||||||
rotate_around_axis(vector - center, axis, angle) + center :
|
rotate_around_axis(vector - center, axis / axis_length, angle) + center :
|
||||||
vector;
|
vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -993,7 +993,7 @@ void OSLCompiler::parameter_array(const char *name, const float f[], int arrayle
|
|||||||
|
|
||||||
void OSLCompiler::parameter_color_array(const char *name, const array<float3> &f)
|
void OSLCompiler::parameter_color_array(const char *name, const array<float3> &f)
|
||||||
{
|
{
|
||||||
/* NB: cycles float3 type is actually 4 floats! need to use an explicit array */
|
/* NOTE: cycles float3 type is actually 4 floats! need to use an explicit array. */
|
||||||
array<float[3]> table(f.size());
|
array<float[3]> table(f.size());
|
||||||
|
|
||||||
for (int i = 0; i < f.size(); ++i) {
|
for (int i = 0; i < f.size(); ++i) {
|
||||||
|
@@ -288,6 +288,13 @@ elseif(WITH_GHOST_X11 OR WITH_GHOST_WAYLAND)
|
|||||||
${dbus_INCLUDE_DIRS}
|
${dbus_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
include(CheckSymbolExists)
|
||||||
|
set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
|
||||||
|
check_symbol_exists(memfd_create "sys/mman.h" HAVE_MEMFD_CREATE)
|
||||||
|
if (HAVE_MEMFD_CREATE)
|
||||||
|
add_definitions(-DHAVE_MEMFD_CREATE)
|
||||||
|
endif()
|
||||||
|
|
||||||
list(APPEND SRC
|
list(APPEND SRC
|
||||||
intern/GHOST_SystemWayland.cpp
|
intern/GHOST_SystemWayland.cpp
|
||||||
intern/GHOST_WindowWayland.cpp
|
intern/GHOST_WindowWayland.cpp
|
||||||
|
@@ -628,7 +628,7 @@ extern void GHOST_ScreenToClient(
|
|||||||
GHOST_WindowHandle windowhandle, int32_t inX, int32_t inY, int32_t *outX, int32_t *outY);
|
GHOST_WindowHandle windowhandle, int32_t inX, int32_t inY, int32_t *outX, int32_t *outY);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a point in screen coordinates to client rectangle coordinates
|
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||||
* \param windowhandle: The handle to the window.
|
* \param windowhandle: The handle to the window.
|
||||||
* \param inX: The x-coordinate in the client rectangle.
|
* \param inX: The x-coordinate in the client rectangle.
|
||||||
* \param inY: The y-coordinate in the client rectangle.
|
* \param inY: The y-coordinate in the client rectangle.
|
||||||
|
@@ -133,7 +133,7 @@ class GHOST_IWindow {
|
|||||||
virtual void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const = 0;
|
virtual void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a point in screen coordinates to client rectangle coordinates
|
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||||
* \param inX: The x-coordinate in the client rectangle.
|
* \param inX: The x-coordinate in the client rectangle.
|
||||||
* \param inY: The y-coordinate in the client rectangle.
|
* \param inY: The y-coordinate in the client rectangle.
|
||||||
* \param outX: The x-coordinate on the screen.
|
* \param outX: The x-coordinate on the screen.
|
||||||
|
@@ -683,6 +683,10 @@ typedef struct GHOST_XrDrawViewInfo {
|
|||||||
|
|
||||||
/** Set if the buffer should be submitted with a SRGB transfer applied. */
|
/** Set if the buffer should be submitted with a SRGB transfer applied. */
|
||||||
char expects_srgb_buffer;
|
char expects_srgb_buffer;
|
||||||
|
|
||||||
|
/** The view that this info represents. Not necessarily the "eye index" (e.g. for quad view
|
||||||
|
* systems, etc). */
|
||||||
|
char view_idx;
|
||||||
} GHOST_XrDrawViewInfo;
|
} GHOST_XrDrawViewInfo;
|
||||||
|
|
||||||
typedef struct GHOST_XrError {
|
typedef struct GHOST_XrError {
|
||||||
|
@@ -217,7 +217,7 @@ static void makeAttribList(std::vector<NSOpenGLPixelFormatAttribute> &attribs,
|
|||||||
attribs.push_back(NSOpenGLPFAOpenGLProfile);
|
attribs.push_back(NSOpenGLPFAOpenGLProfile);
|
||||||
attribs.push_back(coreProfile ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy);
|
attribs.push_back(coreProfile ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy);
|
||||||
|
|
||||||
// Pixel Format Attributes for the windowed NSOpenGLContext
|
/* Pixel Format Attributes for the windowed NSOpenGLContext. */
|
||||||
attribs.push_back(NSOpenGLPFADoubleBuffer);
|
attribs.push_back(NSOpenGLPFADoubleBuffer);
|
||||||
|
|
||||||
if (softwareGL) {
|
if (softwareGL) {
|
||||||
@@ -250,7 +250,8 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
|
|||||||
static const bool needAlpha = false;
|
static const bool needAlpha = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static bool softwareGL = getenv("BLENDER_SOFTWAREGL"); // command-line argument would be better
|
/* Command-line argument would be better. */
|
||||||
|
static bool softwareGL = getenv("BLENDER_SOFTWAREGL");
|
||||||
|
|
||||||
std::vector<NSOpenGLPixelFormatAttribute> attribs;
|
std::vector<NSOpenGLPixelFormatAttribute> attribs;
|
||||||
attribs.reserve(40);
|
attribs.reserve(40);
|
||||||
@@ -287,7 +288,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
|
|||||||
|
|
||||||
if (m_metalView) {
|
if (m_metalView) {
|
||||||
if (m_defaultFramebuffer == 0) {
|
if (m_defaultFramebuffer == 0) {
|
||||||
// Create a virtual framebuffer
|
/* Create a virtual frame-buffer. */
|
||||||
[m_openGLContext makeCurrentContext];
|
[m_openGLContext makeCurrentContext];
|
||||||
metalInitFramebuffer();
|
metalInitFramebuffer();
|
||||||
initClearGL();
|
initClearGL();
|
||||||
@@ -342,11 +343,11 @@ void GHOST_ContextCGL::metalInit()
|
|||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
id<MTLDevice> device = m_metalLayer.device;
|
id<MTLDevice> device = m_metalLayer.device;
|
||||||
|
|
||||||
// Create a command queue for blit/present operation
|
/* Create a command queue for blit/present operation. */
|
||||||
m_metalCmdQueue = (MTLCommandQueue *)[device newCommandQueue];
|
m_metalCmdQueue = (MTLCommandQueue *)[device newCommandQueue];
|
||||||
[m_metalCmdQueue retain];
|
[m_metalCmdQueue retain];
|
||||||
|
|
||||||
// Create shaders for blit operation
|
/* Create shaders for blit operation. */
|
||||||
NSString *source = @R"msl(
|
NSString *source = @R"msl(
|
||||||
using namespace metal;
|
using namespace metal;
|
||||||
|
|
||||||
@@ -387,7 +388,7 @@ void GHOST_ContextCGL::metalInit()
|
|||||||
"GHOST_ContextCGL::metalInit: newLibraryWithSource:options:error: failed!");
|
"GHOST_ContextCGL::metalInit: newLibraryWithSource:options:error: failed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a render pipeline for blit operation
|
/* Create a render pipeline for blit operation. */
|
||||||
MTLRenderPipelineDescriptor *desc = [[[MTLRenderPipelineDescriptor alloc] init] autorelease];
|
MTLRenderPipelineDescriptor *desc = [[[MTLRenderPipelineDescriptor alloc] init] autorelease];
|
||||||
|
|
||||||
desc.fragmentFunction = [library newFunctionWithName:@"fragment_shader"];
|
desc.fragmentFunction = [library newFunctionWithName:@"fragment_shader"];
|
||||||
@@ -460,7 +461,7 @@ void GHOST_ContextCGL::metalUpdateFramebuffer()
|
|||||||
"GHOST_ContextCGL::metalUpdateFramebuffer: CVPixelBufferCreate failed!");
|
"GHOST_ContextCGL::metalUpdateFramebuffer: CVPixelBufferCreate failed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create an OpenGL texture
|
/* Create an OpenGL texture. */
|
||||||
CVOpenGLTextureCacheRef cvGLTexCache = nil;
|
CVOpenGLTextureCacheRef cvGLTexCache = nil;
|
||||||
cvret = CVOpenGLTextureCacheCreate(kCFAllocatorDefault,
|
cvret = CVOpenGLTextureCacheCreate(kCFAllocatorDefault,
|
||||||
nil,
|
nil,
|
||||||
@@ -485,7 +486,7 @@ void GHOST_ContextCGL::metalUpdateFramebuffer()
|
|||||||
unsigned int glTex;
|
unsigned int glTex;
|
||||||
glTex = CVOpenGLTextureGetName(cvGLTex);
|
glTex = CVOpenGLTextureGetName(cvGLTex);
|
||||||
|
|
||||||
// Create a Metal texture
|
/* Create a Metal texture. */
|
||||||
CVMetalTextureCacheRef cvMetalTexCache = nil;
|
CVMetalTextureCacheRef cvMetalTexCache = nil;
|
||||||
cvret = CVMetalTextureCacheCreate(
|
cvret = CVMetalTextureCacheCreate(
|
||||||
kCFAllocatorDefault, nil, m_metalLayer.device, nil, &cvMetalTexCache);
|
kCFAllocatorDefault, nil, m_metalLayer.device, nil, &cvMetalTexCache);
|
||||||
|
@@ -283,8 +283,8 @@ GHOST_TSuccess GHOST_ContextEGL::setSwapInterval(int interval)
|
|||||||
|
|
||||||
GHOST_TSuccess GHOST_ContextEGL::getSwapInterval(int &intervalOut)
|
GHOST_TSuccess GHOST_ContextEGL::getSwapInterval(int &intervalOut)
|
||||||
{
|
{
|
||||||
// This is a bit of a kludge because there does not seem to
|
/* This is a bit of a kludge because there does not seem to
|
||||||
// be a way to query the swap interval with EGL.
|
* be a way to query the swap interval with EGL. */
|
||||||
intervalOut = m_swap_interval;
|
intervalOut = m_swap_interval;
|
||||||
|
|
||||||
return GHOST_kSuccess;
|
return GHOST_kSuccess;
|
||||||
@@ -365,21 +365,21 @@ static const std::string &api_string(EGLenum api)
|
|||||||
|
|
||||||
GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
||||||
{
|
{
|
||||||
// objects have to be declared here due to the use of goto
|
/* Objects have to be declared here due to the use of `goto`. */
|
||||||
std::vector<EGLint> attrib_list;
|
std::vector<EGLint> attrib_list;
|
||||||
EGLint num_config = 0;
|
EGLint num_config = 0;
|
||||||
|
|
||||||
if (m_stereoVisual)
|
if (m_stereoVisual)
|
||||||
fprintf(stderr, "Warning! Stereo OpenGL ES contexts are not supported.\n");
|
fprintf(stderr, "Warning! Stereo OpenGL ES contexts are not supported.\n");
|
||||||
|
|
||||||
m_stereoVisual = false; // It doesn't matter what the Window wants.
|
m_stereoVisual = false; /* It doesn't matter what the Window wants. */
|
||||||
|
|
||||||
if (!initContextEGLEW()) {
|
if (!initContextEGLEW()) {
|
||||||
return GHOST_kFailure;
|
return GHOST_kFailure;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WITH_GL_ANGLE
|
#ifdef WITH_GL_ANGLE
|
||||||
// d3dcompiler_XX.dll needs to be loaded before ANGLE will work
|
/* `d3dcompiler_XX.dll` needs to be loaded before ANGLE will work. */
|
||||||
if (s_d3dcompiler == NULL) {
|
if (s_d3dcompiler == NULL) {
|
||||||
s_d3dcompiler = LoadLibrary(D3DCOMPILER);
|
s_d3dcompiler = LoadLibrary(D3DCOMPILER);
|
||||||
|
|
||||||
@@ -410,13 +410,13 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||||||
if (!bindAPI(m_api))
|
if (!bindAPI(m_api))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
// build attribute list
|
/* Build attribute list. */
|
||||||
|
|
||||||
attrib_list.reserve(20);
|
attrib_list.reserve(20);
|
||||||
|
|
||||||
if (m_api == EGL_OPENGL_ES_API && EGLEW_VERSION_1_2) {
|
if (m_api == EGL_OPENGL_ES_API && EGLEW_VERSION_1_2) {
|
||||||
// According to the spec it seems that you are required to set EGL_RENDERABLE_TYPE,
|
/* According to the spec it seems that you are required to set EGL_RENDERABLE_TYPE,
|
||||||
// but some implementations (ANGLE) do not seem to care.
|
* but some implementations (ANGLE) do not seem to care. */
|
||||||
|
|
||||||
if (m_contextMajorVersion == 1) {
|
if (m_contextMajorVersion == 1) {
|
||||||
attrib_list.push_back(EGL_RENDERABLE_TYPE);
|
attrib_list.push_back(EGL_RENDERABLE_TYPE);
|
||||||
@@ -469,7 +469,7 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (m_nativeWindow == 0) {
|
if (m_nativeWindow == 0) {
|
||||||
// off-screen surface
|
/* Off-screen surface. */
|
||||||
attrib_list.push_back(EGL_SURFACE_TYPE);
|
attrib_list.push_back(EGL_SURFACE_TYPE);
|
||||||
attrib_list.push_back(EGL_PBUFFER_BIT);
|
attrib_list.push_back(EGL_PBUFFER_BIT);
|
||||||
}
|
}
|
||||||
@@ -479,8 +479,8 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||||||
if (!EGL_CHK(::eglChooseConfig(m_display, &(attrib_list[0]), &m_config, 1, &num_config)))
|
if (!EGL_CHK(::eglChooseConfig(m_display, &(attrib_list[0]), &m_config, 1, &num_config)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
// A common error is to assume that ChooseConfig worked because it returned EGL_TRUE
|
/* A common error is to assume that ChooseConfig worked because it returned EGL_TRUE. */
|
||||||
if (num_config != 1) // num_config should be exactly 1
|
if (num_config != 1) /* `num_config` should be exactly 1. */
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (m_nativeWindow != 0) {
|
if (m_nativeWindow != 0) {
|
||||||
|
@@ -335,10 +335,11 @@ void GHOST_ContextWGL::initContextWGLEW(PIXELFORMATDESCRIPTOR &preferredPFD)
|
|||||||
if (!WIN32_CHK(::wglMakeCurrent(dummyHDC, dummyHGLRC)))
|
if (!WIN32_CHK(::wglMakeCurrent(dummyHDC, dummyHGLRC)))
|
||||||
goto finalize;
|
goto finalize;
|
||||||
|
|
||||||
if (GLEW_CHK(glewInit()) != GLEW_OK)
|
if (GLEW_CHK(glewInit()) != GLEW_OK) {
|
||||||
fprintf(stderr, "Warning! Dummy GLEW/WGLEW failed to initialize properly.\n");
|
fprintf(stderr, "Warning! Dummy GLEW/WGLEW failed to initialize properly.\n");
|
||||||
|
}
|
||||||
|
|
||||||
// the following are not technially WGLEW, but they also require a context to work
|
/* The following are not technically WGLEW, but they also require a context to work. */
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
free((void *)m_dummyRenderer);
|
free((void *)m_dummyRenderer);
|
||||||
|
@@ -51,7 +51,7 @@ GHOST_TSuccess GHOST_DisplayManager::initialize(void)
|
|||||||
|
|
||||||
GHOST_TSuccess GHOST_DisplayManager::getNumDisplays(uint8_t & /*numDisplays*/) const
|
GHOST_TSuccess GHOST_DisplayManager::getNumDisplays(uint8_t & /*numDisplays*/) const
|
||||||
{
|
{
|
||||||
// Don't know if we have a display...
|
/* Don't know if we have a display. */
|
||||||
return GHOST_kFailure;
|
return GHOST_kFailure;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,18 +120,18 @@ GHOST_TSuccess GHOST_DisplayManager::findMatch(uint8_t display,
|
|||||||
(int)setting.xPixels, (int)setting.yPixels, (int)setting.bpp, (int)setting.frequency};
|
(int)setting.xPixels, (int)setting.yPixels, (int)setting.bpp, (int)setting.frequency};
|
||||||
int capabilities[4];
|
int capabilities[4];
|
||||||
double field, score;
|
double field, score;
|
||||||
double best = 1e12; // A big number
|
double best = 1e12; /* A big number. */
|
||||||
int found = 0;
|
int found = 0;
|
||||||
|
|
||||||
// Look at all the display modes
|
/* Look at all the display modes. */
|
||||||
for (int i = 0; (i < (int)m_settings[display].size()); i++) {
|
for (int i = 0; (i < (int)m_settings[display].size()); i++) {
|
||||||
// Store the capabilities of the display device
|
/* Store the capabilities of the display device. */
|
||||||
capabilities[0] = m_settings[display][i].xPixels;
|
capabilities[0] = m_settings[display][i].xPixels;
|
||||||
capabilities[1] = m_settings[display][i].yPixels;
|
capabilities[1] = m_settings[display][i].yPixels;
|
||||||
capabilities[2] = m_settings[display][i].bpp;
|
capabilities[2] = m_settings[display][i].bpp;
|
||||||
capabilities[3] = m_settings[display][i].frequency;
|
capabilities[3] = m_settings[display][i].frequency;
|
||||||
|
|
||||||
// Match against all the fields of the display settings
|
/* Match against all the fields of the display settings. */
|
||||||
score = 0;
|
score = 0;
|
||||||
for (int j = 0; j < 4; j++) {
|
for (int j = 0; j < 4; j++) {
|
||||||
field = capabilities[j] - criteria[j];
|
field = capabilities[j] - criteria[j];
|
||||||
|
@@ -115,8 +115,10 @@ GHOST_DropTargetX11::~GHOST_DropTargetX11()
|
|||||||
/* Based on: https://stackoverflow.com/a/2766963/432509 */
|
/* Based on: https://stackoverflow.com/a/2766963/432509 */
|
||||||
|
|
||||||
typedef enum DecodeState_e {
|
typedef enum DecodeState_e {
|
||||||
STATE_SEARCH = 0, ///< searching for an ampersand to convert
|
/** Searching for an ampersand to convert. */
|
||||||
STATE_CONVERTING ///< convert the two proceeding characters from hex
|
STATE_SEARCH = 0,
|
||||||
|
/** Convert the two proceeding characters from hex. */
|
||||||
|
STATE_CONVERTING
|
||||||
} DecodeState_e;
|
} DecodeState_e;
|
||||||
|
|
||||||
void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char *encodedIn)
|
void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char *encodedIn)
|
||||||
|
@@ -90,7 +90,7 @@ class GHOST_EventDragnDrop : public GHOST_Event {
|
|||||||
|
|
||||||
~GHOST_EventDragnDrop()
|
~GHOST_EventDragnDrop()
|
||||||
{
|
{
|
||||||
// Free the dropped object data
|
/* Free the dropped object data. */
|
||||||
if (m_dragnDropEventData.data == NULL)
|
if (m_dragnDropEventData.data == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@@ -108,12 +108,12 @@ GHOST_TSuccess GHOST_EventManager::addConsumer(GHOST_IEventConsumer *consumer)
|
|||||||
GHOST_TSuccess success;
|
GHOST_TSuccess success;
|
||||||
GHOST_ASSERT(consumer, "invalid consumer");
|
GHOST_ASSERT(consumer, "invalid consumer");
|
||||||
|
|
||||||
// Check to see whether the consumer is already in our list
|
/* Check to see whether the consumer is already in our list. */
|
||||||
TConsumerVector::const_iterator iter = std::find(
|
TConsumerVector::const_iterator iter = std::find(
|
||||||
m_consumers.begin(), m_consumers.end(), consumer);
|
m_consumers.begin(), m_consumers.end(), consumer);
|
||||||
|
|
||||||
if (iter == m_consumers.end()) {
|
if (iter == m_consumers.end()) {
|
||||||
// Add the consumer
|
/* Add the consumer. */
|
||||||
m_consumers.push_back(consumer);
|
m_consumers.push_back(consumer);
|
||||||
success = GHOST_kSuccess;
|
success = GHOST_kSuccess;
|
||||||
}
|
}
|
||||||
@@ -128,11 +128,11 @@ GHOST_TSuccess GHOST_EventManager::removeConsumer(GHOST_IEventConsumer *consumer
|
|||||||
GHOST_TSuccess success;
|
GHOST_TSuccess success;
|
||||||
GHOST_ASSERT(consumer, "invalid consumer");
|
GHOST_ASSERT(consumer, "invalid consumer");
|
||||||
|
|
||||||
// Check to see whether the consumer is in our list
|
/* Check to see whether the consumer is in our list. */
|
||||||
TConsumerVector::iterator iter = std::find(m_consumers.begin(), m_consumers.end(), consumer);
|
TConsumerVector::iterator iter = std::find(m_consumers.begin(), m_consumers.end(), consumer);
|
||||||
|
|
||||||
if (iter != m_consumers.end()) {
|
if (iter != m_consumers.end()) {
|
||||||
// Remove the consumer
|
/* Remove the consumer. */
|
||||||
m_consumers.erase(iter);
|
m_consumers.erase(iter);
|
||||||
success = GHOST_kSuccess;
|
success = GHOST_kSuccess;
|
||||||
}
|
}
|
||||||
|
@@ -57,9 +57,17 @@ GHOST_TSuccess GHOST_ISystem::createSystem()
|
|||||||
/* Special case, try Wayland, fall back to X11. */
|
/* Special case, try Wayland, fall back to X11. */
|
||||||
try {
|
try {
|
||||||
m_system = new GHOST_SystemWayland();
|
m_system = new GHOST_SystemWayland();
|
||||||
|
if (!std::getenv("BLENDER_WAYLAND")) {
|
||||||
|
printf("Connected to a Wayland compositor but Wayland is disabled at "\
|
||||||
|
"runtime.\nSet environment variable 'BLENDER_WAYLAND' (e.g. "\
|
||||||
|
"BLENDER_WAYLAND= blender) to use Wayland.\n");
|
||||||
|
throw std::runtime_error(std::string());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (const std::runtime_error &) {
|
catch (const std::runtime_error &) {
|
||||||
/* fallback to X11. */
|
/* fallback to X11. */
|
||||||
|
delete m_system;
|
||||||
|
m_system = nullptr;
|
||||||
}
|
}
|
||||||
if (!m_system) {
|
if (!m_system) {
|
||||||
m_system = new GHOST_SystemX11();
|
m_system = new GHOST_SystemX11();
|
||||||
|
@@ -22,51 +22,51 @@
|
|||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdio.h> // for error/info reporting
|
#include <stdio.h> /* For error/info reporting. */
|
||||||
#include <string.h> // for memory functions
|
#include <string.h> /* For memory functions. */
|
||||||
|
|
||||||
#ifdef DEBUG_NDOF_MOTION
|
#ifdef DEBUG_NDOF_MOTION
|
||||||
// printable version of each GHOST_TProgress value
|
/* Printable version of each GHOST_TProgress value. */
|
||||||
static const char *progress_string[] = {
|
static const char *progress_string[] = {
|
||||||
"not started", "starting", "in progress", "finishing", "finished"};
|
"not started", "starting", "in progress", "finishing", "finished"};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_NDOF_BUTTONS
|
#ifdef DEBUG_NDOF_BUTTONS
|
||||||
static const char *ndof_button_names[] = {
|
static const char *ndof_button_names[] = {
|
||||||
// used internally, never sent
|
/* used internally, never sent */
|
||||||
"NDOF_BUTTON_NONE",
|
"NDOF_BUTTON_NONE",
|
||||||
// these two are available from any 3Dconnexion device
|
/* these two are available from any 3Dconnexion device */
|
||||||
"NDOF_BUTTON_MENU",
|
"NDOF_BUTTON_MENU",
|
||||||
"NDOF_BUTTON_FIT",
|
"NDOF_BUTTON_FIT",
|
||||||
// standard views
|
/* standard views */
|
||||||
"NDOF_BUTTON_TOP",
|
"NDOF_BUTTON_TOP",
|
||||||
"NDOF_BUTTON_BOTTOM",
|
"NDOF_BUTTON_BOTTOM",
|
||||||
"NDOF_BUTTON_LEFT",
|
"NDOF_BUTTON_LEFT",
|
||||||
"NDOF_BUTTON_RIGHT",
|
"NDOF_BUTTON_RIGHT",
|
||||||
"NDOF_BUTTON_FRONT",
|
"NDOF_BUTTON_FRONT",
|
||||||
"NDOF_BUTTON_BACK",
|
"NDOF_BUTTON_BACK",
|
||||||
// more views
|
/* more views */
|
||||||
"NDOF_BUTTON_ISO1",
|
"NDOF_BUTTON_ISO1",
|
||||||
"NDOF_BUTTON_ISO2",
|
"NDOF_BUTTON_ISO2",
|
||||||
// 90 degree rotations
|
/* 90 degree rotations */
|
||||||
"NDOF_BUTTON_ROLL_CW",
|
"NDOF_BUTTON_ROLL_CW",
|
||||||
"NDOF_BUTTON_ROLL_CCW",
|
"NDOF_BUTTON_ROLL_CCW",
|
||||||
"NDOF_BUTTON_SPIN_CW",
|
"NDOF_BUTTON_SPIN_CW",
|
||||||
"NDOF_BUTTON_SPIN_CCW",
|
"NDOF_BUTTON_SPIN_CCW",
|
||||||
"NDOF_BUTTON_TILT_CW",
|
"NDOF_BUTTON_TILT_CW",
|
||||||
"NDOF_BUTTON_TILT_CCW",
|
"NDOF_BUTTON_TILT_CCW",
|
||||||
// device control
|
/* device control */
|
||||||
"NDOF_BUTTON_ROTATE",
|
"NDOF_BUTTON_ROTATE",
|
||||||
"NDOF_BUTTON_PANZOOM",
|
"NDOF_BUTTON_PANZOOM",
|
||||||
"NDOF_BUTTON_DOMINANT",
|
"NDOF_BUTTON_DOMINANT",
|
||||||
"NDOF_BUTTON_PLUS",
|
"NDOF_BUTTON_PLUS",
|
||||||
"NDOF_BUTTON_MINUS",
|
"NDOF_BUTTON_MINUS",
|
||||||
// keyboard emulation
|
/* keyboard emulation */
|
||||||
"NDOF_BUTTON_ESC",
|
"NDOF_BUTTON_ESC",
|
||||||
"NDOF_BUTTON_ALT",
|
"NDOF_BUTTON_ALT",
|
||||||
"NDOF_BUTTON_SHIFT",
|
"NDOF_BUTTON_SHIFT",
|
||||||
"NDOF_BUTTON_CTRL",
|
"NDOF_BUTTON_CTRL",
|
||||||
// general-purpose buttons
|
/* general-purpose buttons */
|
||||||
"NDOF_BUTTON_1",
|
"NDOF_BUTTON_1",
|
||||||
"NDOF_BUTTON_2",
|
"NDOF_BUTTON_2",
|
||||||
"NDOF_BUTTON_3",
|
"NDOF_BUTTON_3",
|
||||||
@@ -77,17 +77,17 @@ static const char *ndof_button_names[] = {
|
|||||||
"NDOF_BUTTON_8",
|
"NDOF_BUTTON_8",
|
||||||
"NDOF_BUTTON_9",
|
"NDOF_BUTTON_9",
|
||||||
"NDOF_BUTTON_10",
|
"NDOF_BUTTON_10",
|
||||||
// more general-purpose buttons
|
/* more general-purpose buttons */
|
||||||
"NDOF_BUTTON_A",
|
"NDOF_BUTTON_A",
|
||||||
"NDOF_BUTTON_B",
|
"NDOF_BUTTON_B",
|
||||||
"NDOF_BUTTON_C",
|
"NDOF_BUTTON_C",
|
||||||
// the end
|
/* the end */
|
||||||
"NDOF_BUTTON_LAST"};
|
"NDOF_BUTTON_LAST"};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// shared by the latest 3Dconnexion hardware
|
/* Shared by the latest 3Dconnexion hardware
|
||||||
// SpacePilotPro uses all of these
|
* SpacePilotPro uses all of these
|
||||||
// smaller devices use only some, based on button mask
|
* smaller devices use only some, based on button mask. */
|
||||||
static const NDOF_ButtonT Modern3Dx_HID_map[] = {
|
static const NDOF_ButtonT Modern3Dx_HID_map[] = {
|
||||||
NDOF_BUTTON_MENU, NDOF_BUTTON_FIT, NDOF_BUTTON_TOP, NDOF_BUTTON_LEFT,
|
NDOF_BUTTON_MENU, NDOF_BUTTON_FIT, NDOF_BUTTON_TOP, NDOF_BUTTON_LEFT,
|
||||||
NDOF_BUTTON_RIGHT, NDOF_BUTTON_FRONT, NDOF_BUTTON_BOTTOM, NDOF_BUTTON_BACK,
|
NDOF_BUTTON_RIGHT, NDOF_BUTTON_FRONT, NDOF_BUTTON_BOTTOM, NDOF_BUTTON_BACK,
|
||||||
@@ -116,15 +116,15 @@ static const NDOF_ButtonT SpaceExplorer_HID_map[] = {
|
|||||||
NDOF_BUTTON_ROTATE,
|
NDOF_BUTTON_ROTATE,
|
||||||
};
|
};
|
||||||
|
|
||||||
// this is the older SpacePilot (sans Pro)
|
/* This is the older SpacePilot (sans Pro)
|
||||||
// thanks to polosson for info about this device
|
* thanks to polosson for info about this device. */
|
||||||
static const NDOF_ButtonT SpacePilot_HID_map[] = {
|
static const NDOF_ButtonT SpacePilot_HID_map[] = {
|
||||||
NDOF_BUTTON_1, NDOF_BUTTON_2, NDOF_BUTTON_3, NDOF_BUTTON_4,
|
NDOF_BUTTON_1, NDOF_BUTTON_2, NDOF_BUTTON_3, NDOF_BUTTON_4,
|
||||||
NDOF_BUTTON_5, NDOF_BUTTON_6, NDOF_BUTTON_TOP, NDOF_BUTTON_LEFT,
|
NDOF_BUTTON_5, NDOF_BUTTON_6, NDOF_BUTTON_TOP, NDOF_BUTTON_LEFT,
|
||||||
NDOF_BUTTON_RIGHT, NDOF_BUTTON_FRONT, NDOF_BUTTON_ESC, NDOF_BUTTON_ALT,
|
NDOF_BUTTON_RIGHT, NDOF_BUTTON_FRONT, NDOF_BUTTON_ESC, NDOF_BUTTON_ALT,
|
||||||
NDOF_BUTTON_SHIFT, NDOF_BUTTON_CTRL, NDOF_BUTTON_FIT, NDOF_BUTTON_MENU,
|
NDOF_BUTTON_SHIFT, NDOF_BUTTON_CTRL, NDOF_BUTTON_FIT, NDOF_BUTTON_MENU,
|
||||||
NDOF_BUTTON_PLUS, NDOF_BUTTON_MINUS, NDOF_BUTTON_DOMINANT, NDOF_BUTTON_ROTATE,
|
NDOF_BUTTON_PLUS, NDOF_BUTTON_MINUS, NDOF_BUTTON_DOMINANT, NDOF_BUTTON_ROTATE,
|
||||||
NDOF_BUTTON_NONE // the CONFIG button -- what does it do?
|
NDOF_BUTTON_NONE /* the CONFIG button -- what does it do? */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NDOF_ButtonT Generic_HID_map[] = {
|
static const NDOF_ButtonT Generic_HID_map[] = {
|
||||||
@@ -146,7 +146,7 @@ static const int genericButtonCount = sizeof(Generic_HID_map) / sizeof(NDOF_Butt
|
|||||||
|
|
||||||
GHOST_NDOFManager::GHOST_NDOFManager(GHOST_System &sys)
|
GHOST_NDOFManager::GHOST_NDOFManager(GHOST_System &sys)
|
||||||
: m_system(sys),
|
: m_system(sys),
|
||||||
m_deviceType(NDOF_UnknownDevice), // each platform has its own device detection code
|
m_deviceType(NDOF_UnknownDevice), /* Each platform has its own device detection code. */
|
||||||
m_buttonCount(genericButtonCount),
|
m_buttonCount(genericButtonCount),
|
||||||
m_buttonMask(0),
|
m_buttonMask(0),
|
||||||
m_hidMap(Generic_HID_map),
|
m_hidMap(Generic_HID_map),
|
||||||
@@ -157,37 +157,37 @@ GHOST_NDOFManager::GHOST_NDOFManager(GHOST_System &sys)
|
|||||||
m_motionEventPending(false),
|
m_motionEventPending(false),
|
||||||
m_deadZone(0.0f)
|
m_deadZone(0.0f)
|
||||||
{
|
{
|
||||||
// to avoid the rare situation where one triple is updated and
|
/* To avoid the rare situation where one triple is updated and
|
||||||
// the other is not, initialize them both here:
|
* the other is not, initialize them both here: */
|
||||||
memset(m_translation, 0, sizeof(m_translation));
|
memset(m_translation, 0, sizeof(m_translation));
|
||||||
memset(m_rotation, 0, sizeof(m_rotation));
|
memset(m_rotation, 0, sizeof(m_rotation));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GHOST_NDOFManager::setDevice(unsigned short vendor_id, unsigned short product_id)
|
bool GHOST_NDOFManager::setDevice(unsigned short vendor_id, unsigned short product_id)
|
||||||
{
|
{
|
||||||
// call this function until it returns true
|
/* Call this function until it returns true
|
||||||
// it's a good idea to stop calling it after that, as it will "forget"
|
* it's a good idea to stop calling it after that, as it will "forget"
|
||||||
// whichever device it already found
|
* whichever device it already found */
|
||||||
|
|
||||||
// default to safe generic behavior for "unknown" devices
|
/* Default to safe generic behavior for "unknown" devices
|
||||||
// unidentified devices will emit motion events like normal
|
* unidentified devices will emit motion events like normal
|
||||||
// rogue buttons do nothing by default, but can be customized by the user
|
* rogue buttons do nothing by default, but can be customized by the user. */
|
||||||
|
|
||||||
m_deviceType = NDOF_UnknownDevice;
|
m_deviceType = NDOF_UnknownDevice;
|
||||||
m_hidMap = Generic_HID_map;
|
m_hidMap = Generic_HID_map;
|
||||||
m_buttonCount = genericButtonCount;
|
m_buttonCount = genericButtonCount;
|
||||||
m_buttonMask = 0;
|
m_buttonMask = 0;
|
||||||
|
|
||||||
// "mystery device" owners can help build a HID_map for their hardware
|
/* "mystery device" owners can help build a HID_map for their hardware
|
||||||
// A few users have already contributed information about several older devices
|
* A few users have already contributed information about several older devices
|
||||||
// that I don't have access to. Thanks!
|
* that I don't have access to. Thanks! */
|
||||||
|
|
||||||
switch (vendor_id) {
|
switch (vendor_id) {
|
||||||
case 0x046D: // Logitech (3Dconnexion was a subsidiary)
|
case 0x046D: /* Logitech (3Dconnexion was a subsidiary). */
|
||||||
switch (product_id) {
|
switch (product_id) {
|
||||||
// -- current devices --
|
/* -- current devices -- */
|
||||||
case 0xC626: // full-size SpaceNavigator
|
case 0xC626: /* full-size SpaceNavigator */
|
||||||
case 0xC628: // the "for Notebooks" one
|
case 0xC628: /* the "for Notebooks" one */
|
||||||
puts("ndof: using SpaceNavigator");
|
puts("ndof: using SpaceNavigator");
|
||||||
m_deviceType = NDOF_SpaceNavigator;
|
m_deviceType = NDOF_SpaceNavigator;
|
||||||
m_buttonCount = 2;
|
m_buttonCount = 2;
|
||||||
@@ -209,12 +209,12 @@ bool GHOST_NDOFManager::setDevice(unsigned short vendor_id, unsigned short produ
|
|||||||
puts("ndof: using SpaceMouse Pro");
|
puts("ndof: using SpaceMouse Pro");
|
||||||
m_deviceType = NDOF_SpaceMousePro;
|
m_deviceType = NDOF_SpaceMousePro;
|
||||||
m_buttonCount = 27;
|
m_buttonCount = 27;
|
||||||
// ^^ actually has 15 buttons, but their HID codes range from 0 to 26
|
/* ^^ actually has 15 buttons, but their HID codes range from 0 to 26 */
|
||||||
m_buttonMask = 0x07C0F137;
|
m_buttonMask = 0x07C0F137;
|
||||||
m_hidMap = Modern3Dx_HID_map;
|
m_hidMap = Modern3Dx_HID_map;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// -- older devices --
|
/* -- older devices -- */
|
||||||
case 0xC625:
|
case 0xC625:
|
||||||
puts("ndof: using SpacePilot");
|
puts("ndof: using SpacePilot");
|
||||||
m_deviceType = NDOF_SpacePilot;
|
m_deviceType = NDOF_SpacePilot;
|
||||||
@@ -236,21 +236,21 @@ bool GHOST_NDOFManager::setDevice(unsigned short vendor_id, unsigned short produ
|
|||||||
printf("ndof: unknown Logitech product %04hx\n", product_id);
|
printf("ndof: unknown Logitech product %04hx\n", product_id);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x256F: // 3Dconnexion
|
case 0x256F: /* 3Dconnexion */
|
||||||
switch (product_id) {
|
switch (product_id) {
|
||||||
case 0xC62E: // plugged in
|
case 0xC62E: /* Plugged in. */
|
||||||
case 0xC62F: // wireless
|
case 0xC62F: /* Wireless. */
|
||||||
puts("ndof: using SpaceMouse Wireless");
|
puts("ndof: using SpaceMouse Wireless");
|
||||||
m_deviceType = NDOF_SpaceMouseWireless;
|
m_deviceType = NDOF_SpaceMouseWireless;
|
||||||
m_buttonCount = 2;
|
m_buttonCount = 2;
|
||||||
m_hidMap = Modern3Dx_HID_map;
|
m_hidMap = Modern3Dx_HID_map;
|
||||||
break;
|
break;
|
||||||
case 0xC631: // plugged in
|
case 0xC631: /* Plugged in. */
|
||||||
case 0xC632: // wireless
|
case 0xC632: /* Wireless. */
|
||||||
puts("ndof: using SpaceMouse Pro Wireless");
|
puts("ndof: using SpaceMouse Pro Wireless");
|
||||||
m_deviceType = NDOF_SpaceMouseProWireless;
|
m_deviceType = NDOF_SpaceMouseProWireless;
|
||||||
m_buttonCount = 27;
|
m_buttonCount = 27;
|
||||||
// ^^ actually has 15 buttons, but their HID codes range from 0 to 26
|
/* ^^ actually has 15 buttons, but their HID codes range from 0 to 26. */
|
||||||
m_buttonMask = 0x07C0F137;
|
m_buttonMask = 0x07C0F137;
|
||||||
m_hidMap = Modern3Dx_HID_map;
|
m_hidMap = Modern3Dx_HID_map;
|
||||||
break;
|
break;
|
||||||
@@ -364,16 +364,16 @@ void GHOST_NDOFManager::updateButton(int button_number, bool press, uint64_t tim
|
|||||||
|
|
||||||
int mask = 1 << button_number;
|
int mask = 1 << button_number;
|
||||||
if (press) {
|
if (press) {
|
||||||
m_buttons |= mask; // set this button's bit
|
m_buttons |= mask; /* Set this button's bit. */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_buttons &= ~mask; // clear this button's bit
|
m_buttons &= ~mask; /* Clear this button's bit. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GHOST_NDOFManager::updateButtons(int button_bits, uint64_t time)
|
void GHOST_NDOFManager::updateButtons(int button_bits, uint64_t time)
|
||||||
{
|
{
|
||||||
button_bits &= m_buttonMask; // discard any "garbage" bits
|
button_bits &= m_buttonMask; /* Discard any "garbage" bits. */
|
||||||
|
|
||||||
int diff = m_buttons ^ button_bits;
|
int diff = m_buttons ^ button_bits;
|
||||||
|
|
||||||
@@ -390,11 +390,11 @@ void GHOST_NDOFManager::updateButtons(int button_bits, uint64_t time)
|
|||||||
void GHOST_NDOFManager::setDeadZone(float dz)
|
void GHOST_NDOFManager::setDeadZone(float dz)
|
||||||
{
|
{
|
||||||
if (dz < 0.0f) {
|
if (dz < 0.0f) {
|
||||||
// negative values don't make sense, so clamp at zero
|
/* Negative values don't make sense, so clamp at zero. */
|
||||||
dz = 0.0f;
|
dz = 0.0f;
|
||||||
}
|
}
|
||||||
else if (dz > 0.5f) {
|
else if (dz > 0.5f) {
|
||||||
// warn the rogue user/developer, but allow it
|
/* Warn the rogue user/developer, but allow it. */
|
||||||
GHOST_PRINTF("ndof: dead zone of %.2f is rather high...\n", dz);
|
GHOST_PRINTF("ndof: dead zone of %.2f is rather high...\n", dz);
|
||||||
}
|
}
|
||||||
m_deadZone = dz;
|
m_deadZone = dz;
|
||||||
@@ -426,22 +426,22 @@ bool GHOST_NDOFManager::sendMotionEvent()
|
|||||||
if (!m_motionEventPending)
|
if (!m_motionEventPending)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_motionEventPending = false; // any pending motion is handled right now
|
m_motionEventPending = false; /* Any pending motion is handled right now. */
|
||||||
|
|
||||||
GHOST_IWindow *window = m_system.getWindowManager()->getActiveWindow();
|
GHOST_IWindow *window = m_system.getWindowManager()->getActiveWindow();
|
||||||
|
|
||||||
if (window == NULL) {
|
if (window == NULL) {
|
||||||
m_motionState = GHOST_kNotStarted; // avoid large 'dt' times when changing windows
|
m_motionState = GHOST_kNotStarted; /* Avoid large `dt` times when changing windows. */
|
||||||
return false; // delivery will fail, so don't bother sending
|
return false; /* Delivery will fail, so don't bother sending. */
|
||||||
}
|
}
|
||||||
|
|
||||||
GHOST_EventNDOFMotion *event = new GHOST_EventNDOFMotion(m_motionTime, window);
|
GHOST_EventNDOFMotion *event = new GHOST_EventNDOFMotion(m_motionTime, window);
|
||||||
GHOST_TEventNDOFMotionData *data = (GHOST_TEventNDOFMotionData *)event->getData();
|
GHOST_TEventNDOFMotionData *data = (GHOST_TEventNDOFMotionData *)event->getData();
|
||||||
|
|
||||||
// scale axis values here to normalize them to around +/- 1
|
/* Scale axis values here to normalize them to around +/- 1
|
||||||
// they are scaled again for overall sensitivity in the WM based on user prefs
|
* they are scaled again for overall sensitivity in the WM based on user preferences. */
|
||||||
|
|
||||||
const float scale = 1.0f / 350.0f; // 3Dconnexion devices send +/- 350 usually
|
const float scale = 1.0f / 350.0f; /* 3Dconnexion devices send +/- 350 usually */
|
||||||
|
|
||||||
data->tx = scale * m_translation[0];
|
data->tx = scale * m_translation[0];
|
||||||
data->ty = scale * m_translation[1];
|
data->ty = scale * m_translation[1];
|
||||||
@@ -451,24 +451,24 @@ bool GHOST_NDOFManager::sendMotionEvent()
|
|||||||
data->ry = scale * m_rotation[1];
|
data->ry = scale * m_rotation[1];
|
||||||
data->rz = scale * m_rotation[2];
|
data->rz = scale * m_rotation[2];
|
||||||
|
|
||||||
data->dt = 0.001f * (m_motionTime - m_prevMotionTime); // in seconds
|
data->dt = 0.001f * (m_motionTime - m_prevMotionTime); /* In seconds. */
|
||||||
m_prevMotionTime = m_motionTime;
|
m_prevMotionTime = m_motionTime;
|
||||||
|
|
||||||
bool weHaveMotion = !nearHomePosition(data, m_deadZone);
|
bool weHaveMotion = !nearHomePosition(data, m_deadZone);
|
||||||
|
|
||||||
// determine what kind of motion event to send (Starting, InProgress, Finishing)
|
/* Determine what kind of motion event to send `(Starting, InProgress, Finishing)`
|
||||||
// and where that leaves this NDOF manager (NotStarted, InProgress, Finished)
|
* and where that leaves this NDOF manager `(NotStarted, InProgress, Finished)`. */
|
||||||
switch (m_motionState) {
|
switch (m_motionState) {
|
||||||
case GHOST_kNotStarted:
|
case GHOST_kNotStarted:
|
||||||
case GHOST_kFinished:
|
case GHOST_kFinished:
|
||||||
if (weHaveMotion) {
|
if (weHaveMotion) {
|
||||||
data->progress = GHOST_kStarting;
|
data->progress = GHOST_kStarting;
|
||||||
m_motionState = GHOST_kInProgress;
|
m_motionState = GHOST_kInProgress;
|
||||||
// prev motion time will be ancient, so just make up a reasonable time delta
|
/* Previous motion time will be ancient, so just make up a reasonable time delta. */
|
||||||
data->dt = 0.0125f;
|
data->dt = 0.0125f;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// send no event and keep current state
|
/* Send no event and keep current state. */
|
||||||
#ifdef DEBUG_NDOF_MOTION
|
#ifdef DEBUG_NDOF_MOTION
|
||||||
printf("ndof motion ignored -- %s\n", progress_string[data->progress]);
|
printf("ndof motion ignored -- %s\n", progress_string[data->progress]);
|
||||||
#endif
|
#endif
|
||||||
@@ -479,20 +479,22 @@ bool GHOST_NDOFManager::sendMotionEvent()
|
|||||||
case GHOST_kInProgress:
|
case GHOST_kInProgress:
|
||||||
if (weHaveMotion) {
|
if (weHaveMotion) {
|
||||||
data->progress = GHOST_kInProgress;
|
data->progress = GHOST_kInProgress;
|
||||||
// remain 'InProgress'
|
/* Remain 'InProgress'. */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
data->progress = GHOST_kFinishing;
|
data->progress = GHOST_kFinishing;
|
||||||
m_motionState = GHOST_kFinished;
|
m_motionState = GHOST_kFinished;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:; // will always be one of the above
|
default:
|
||||||
|
/* Will always be one of the above. */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_NDOF_MOTION
|
#ifdef DEBUG_NDOF_MOTION
|
||||||
printf("ndof motion sent -- %s\n", progress_string[data->progress]);
|
printf("ndof motion sent -- %s\n", progress_string[data->progress]);
|
||||||
|
|
||||||
// show details about this motion event
|
/* Show details about this motion event. */
|
||||||
printf(" T=(%d,%d,%d) R=(%d,%d,%d) raw\n",
|
printf(" T=(%d,%d,%d) R=(%d,%d,%d) raw\n",
|
||||||
m_translation[0],
|
m_translation[0],
|
||||||
m_translation[1],
|
m_translation[1],
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
NDOF_UnknownDevice,
|
NDOF_UnknownDevice,
|
||||||
|
|
||||||
// current devices
|
/* Current devices. */
|
||||||
NDOF_SpaceNavigator,
|
NDOF_SpaceNavigator,
|
||||||
NDOF_SpaceExplorer,
|
NDOF_SpaceExplorer,
|
||||||
NDOF_SpacePilotPro,
|
NDOF_SpacePilotPro,
|
||||||
@@ -37,51 +37,51 @@ typedef enum {
|
|||||||
NDOF_SpaceMouseProWireless,
|
NDOF_SpaceMouseProWireless,
|
||||||
NDOF_SpaceMouseEnterprise,
|
NDOF_SpaceMouseEnterprise,
|
||||||
|
|
||||||
// older devices
|
/* Older devices. */
|
||||||
NDOF_SpacePilot,
|
NDOF_SpacePilot,
|
||||||
NDOF_Spaceball5000,
|
NDOF_Spaceball5000,
|
||||||
NDOF_SpaceTraveler
|
NDOF_SpaceTraveler
|
||||||
|
|
||||||
} NDOF_DeviceT;
|
} NDOF_DeviceT;
|
||||||
|
|
||||||
// NDOF device button event types
|
/* NDOF device button event types */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
// used internally, never sent
|
/* Used internally, never sent. */
|
||||||
NDOF_BUTTON_NONE,
|
NDOF_BUTTON_NONE,
|
||||||
// these two are available from any 3Dconnexion device
|
/* These two are available from any 3Dconnexion device. */
|
||||||
NDOF_BUTTON_MENU,
|
NDOF_BUTTON_MENU,
|
||||||
NDOF_BUTTON_FIT,
|
NDOF_BUTTON_FIT,
|
||||||
// standard views
|
/* Standard views. */
|
||||||
NDOF_BUTTON_TOP,
|
NDOF_BUTTON_TOP,
|
||||||
NDOF_BUTTON_BOTTOM,
|
NDOF_BUTTON_BOTTOM,
|
||||||
NDOF_BUTTON_LEFT,
|
NDOF_BUTTON_LEFT,
|
||||||
NDOF_BUTTON_RIGHT,
|
NDOF_BUTTON_RIGHT,
|
||||||
NDOF_BUTTON_FRONT,
|
NDOF_BUTTON_FRONT,
|
||||||
NDOF_BUTTON_BACK,
|
NDOF_BUTTON_BACK,
|
||||||
// more views
|
/* More views. */
|
||||||
NDOF_BUTTON_ISO1,
|
NDOF_BUTTON_ISO1,
|
||||||
NDOF_BUTTON_ISO2,
|
NDOF_BUTTON_ISO2,
|
||||||
// 90 degree rotations
|
/* 90 degree rotations.
|
||||||
// these don't all correspond to physical buttons
|
* These don't all correspond to physical buttons. */
|
||||||
NDOF_BUTTON_ROLL_CW,
|
NDOF_BUTTON_ROLL_CW,
|
||||||
NDOF_BUTTON_ROLL_CCW,
|
NDOF_BUTTON_ROLL_CCW,
|
||||||
NDOF_BUTTON_SPIN_CW,
|
NDOF_BUTTON_SPIN_CW,
|
||||||
NDOF_BUTTON_SPIN_CCW,
|
NDOF_BUTTON_SPIN_CCW,
|
||||||
NDOF_BUTTON_TILT_CW,
|
NDOF_BUTTON_TILT_CW,
|
||||||
NDOF_BUTTON_TILT_CCW,
|
NDOF_BUTTON_TILT_CCW,
|
||||||
// device control
|
/* Device control. */
|
||||||
NDOF_BUTTON_ROTATE,
|
NDOF_BUTTON_ROTATE,
|
||||||
NDOF_BUTTON_PANZOOM,
|
NDOF_BUTTON_PANZOOM,
|
||||||
NDOF_BUTTON_DOMINANT,
|
NDOF_BUTTON_DOMINANT,
|
||||||
NDOF_BUTTON_PLUS,
|
NDOF_BUTTON_PLUS,
|
||||||
NDOF_BUTTON_MINUS,
|
NDOF_BUTTON_MINUS,
|
||||||
// keyboard emulation
|
/* Keyboard emulation. */
|
||||||
NDOF_BUTTON_ESC,
|
NDOF_BUTTON_ESC,
|
||||||
NDOF_BUTTON_ALT,
|
NDOF_BUTTON_ALT,
|
||||||
NDOF_BUTTON_SHIFT,
|
NDOF_BUTTON_SHIFT,
|
||||||
NDOF_BUTTON_CTRL,
|
NDOF_BUTTON_CTRL,
|
||||||
// general-purpose buttons
|
/* General-purpose buttons.
|
||||||
// users can assign functions via keymap editor
|
* Users can assign functions via keymap editor. */
|
||||||
NDOF_BUTTON_1,
|
NDOF_BUTTON_1,
|
||||||
NDOF_BUTTON_2,
|
NDOF_BUTTON_2,
|
||||||
NDOF_BUTTON_3,
|
NDOF_BUTTON_3,
|
||||||
@@ -92,11 +92,11 @@ typedef enum {
|
|||||||
NDOF_BUTTON_8,
|
NDOF_BUTTON_8,
|
||||||
NDOF_BUTTON_9,
|
NDOF_BUTTON_9,
|
||||||
NDOF_BUTTON_10,
|
NDOF_BUTTON_10,
|
||||||
// more general-purpose buttons
|
/* More general-purpose buttons. */
|
||||||
NDOF_BUTTON_A,
|
NDOF_BUTTON_A,
|
||||||
NDOF_BUTTON_B,
|
NDOF_BUTTON_B,
|
||||||
NDOF_BUTTON_C,
|
NDOF_BUTTON_C,
|
||||||
// the end
|
/* The end. */
|
||||||
NDOF_BUTTON_LAST
|
NDOF_BUTTON_LAST
|
||||||
} NDOF_ButtonT;
|
} NDOF_ButtonT;
|
||||||
|
|
||||||
@@ -107,40 +107,53 @@ class GHOST_NDOFManager {
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// whether multi-axis functionality is available (via the OS or driver)
|
/**
|
||||||
// does not imply that a device is plugged in or being used
|
* Whether multi-axis functionality is available (via the OS or driver)
|
||||||
|
* does not imply that a device is plugged in or being used.
|
||||||
|
*/
|
||||||
virtual bool available() = 0;
|
virtual bool available() = 0;
|
||||||
|
|
||||||
// each platform's device detection should call this
|
/**
|
||||||
// use standard USB/HID identifiers
|
* Each platform's device detection should call this
|
||||||
|
* use standard USB/HID identifiers.
|
||||||
|
*/
|
||||||
bool setDevice(unsigned short vendor_id, unsigned short product_id);
|
bool setDevice(unsigned short vendor_id, unsigned short product_id);
|
||||||
|
|
||||||
// filter out small/accidental/uncalibrated motions by
|
/**
|
||||||
// setting up a "dead zone" around home position
|
* Filter out small/accidental/un-calibrated motions by
|
||||||
// set to 0 to disable
|
* setting up a "dead zone" around home position
|
||||||
// 0.1 is a safe and reasonable value
|
* set to 0 to disable
|
||||||
|
* 0.1 is a safe and reasonable value.
|
||||||
|
*/
|
||||||
void setDeadZone(float);
|
void setDeadZone(float);
|
||||||
|
|
||||||
// the latest raw axis data from the device
|
/**
|
||||||
// NOTE: axis data should be in blender view coordinates
|
* The latest raw axis data from the device.
|
||||||
// +X is to the right
|
*
|
||||||
// +Y is up
|
* \note axis data should be in blender view coordinates
|
||||||
// +Z is out of the screen
|
* - +X is to the right.
|
||||||
// for rotations, look from origin to each +axis
|
* - +Y is up.
|
||||||
// rotations are + when CCW, - when CW
|
* - +Z is out of the screen.
|
||||||
// each platform is responsible for getting axis data into this form
|
* - for rotations, look from origin to each +axis.
|
||||||
// these values should not be scaled (just shuffled or flipped)
|
* - rotations are + when CCW, - when CW.
|
||||||
|
* Each platform is responsible for getting axis data into this form
|
||||||
|
* these values should not be scaled (just shuffled or flipped).
|
||||||
|
*/
|
||||||
void updateTranslation(const int t[3], uint64_t time);
|
void updateTranslation(const int t[3], uint64_t time);
|
||||||
void updateRotation(const int r[3], uint64_t time);
|
void updateRotation(const int r[3], uint64_t time);
|
||||||
|
|
||||||
// the latest raw button data from the device
|
/**
|
||||||
// use HID button encoding (not NDOF_ButtonT)
|
* The latest raw button data from the device
|
||||||
|
* use HID button encoding (not #NDOF_ButtonT).
|
||||||
|
*/
|
||||||
void updateButton(int button_number, bool press, uint64_t time);
|
void updateButton(int button_number, bool press, uint64_t time);
|
||||||
void updateButtons(int button_bits, uint64_t time);
|
void updateButtons(int button_bits, uint64_t time);
|
||||||
// NDOFButton events are sent immediately
|
/* #NDOFButton events are sent immediately */
|
||||||
|
|
||||||
// processes and sends most recent raw data as an NDOFMotion event
|
/**
|
||||||
// returns whether an event was sent
|
* Processes and sends most recent raw data as an #NDOFMotion event
|
||||||
|
* returns whether an event was sent.
|
||||||
|
*/
|
||||||
bool sendMotionEvent();
|
bool sendMotionEvent();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -157,12 +170,12 @@ class GHOST_NDOFManager {
|
|||||||
|
|
||||||
int m_translation[3];
|
int m_translation[3];
|
||||||
int m_rotation[3];
|
int m_rotation[3];
|
||||||
int m_buttons; // bit field
|
int m_buttons; /* Bit field. */
|
||||||
|
|
||||||
uint64_t m_motionTime; // in milliseconds
|
uint64_t m_motionTime; /* In milliseconds. */
|
||||||
uint64_t m_prevMotionTime; // time of most recent Motion event sent
|
uint64_t m_prevMotionTime; /* Time of most recent motion event sent. */
|
||||||
|
|
||||||
GHOST_TProgress m_motionState;
|
GHOST_TProgress m_motionState;
|
||||||
bool m_motionEventPending;
|
bool m_motionEventPending;
|
||||||
float m_deadZone; // discard motion with each component < this
|
float m_deadZone; /* Discard motion with each component < this. */
|
||||||
};
|
};
|
||||||
|
@@ -26,14 +26,14 @@
|
|||||||
void GHOST_Rect::inset(int32_t i)
|
void GHOST_Rect::inset(int32_t i)
|
||||||
{
|
{
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
// Grow the rectangle
|
/* Grow the rectangle. */
|
||||||
m_l -= i;
|
m_l -= i;
|
||||||
m_r += i;
|
m_r += i;
|
||||||
m_t -= i;
|
m_t -= i;
|
||||||
m_b += i;
|
m_b += i;
|
||||||
}
|
}
|
||||||
else if (i < 0) {
|
else if (i < 0) {
|
||||||
// Shrink the rectangle, check for insets larger than half the size
|
/* Shrink the rectangle, check for insets larger than half the size. */
|
||||||
int32_t i2 = i * 2;
|
int32_t i2 = i * 2;
|
||||||
if (getWidth() > i2) {
|
if (getWidth() > i2) {
|
||||||
m_l += i;
|
m_l += i;
|
||||||
@@ -62,12 +62,12 @@ GHOST_TVisibility GHOST_Rect::getVisibility(GHOST_Rect &r) const
|
|||||||
bool rb = isInside(r.m_r, r.m_b);
|
bool rb = isInside(r.m_r, r.m_b);
|
||||||
GHOST_TVisibility v;
|
GHOST_TVisibility v;
|
||||||
if (lt && rt && lb && rb) {
|
if (lt && rt && lb && rb) {
|
||||||
// All points inside, rectangle is inside this
|
/* All points inside, rectangle is inside this. */
|
||||||
v = GHOST_kFullyVisible;
|
v = GHOST_kFullyVisible;
|
||||||
}
|
}
|
||||||
else if (!(lt || rt || lb || rb)) {
|
else if (!(lt || rt || lb || rb)) {
|
||||||
// None of the points inside
|
/* None of the points inside.
|
||||||
// Check to see whether the rectangle is larger than this one
|
* Check to see whether the rectangle is larger than this one. */
|
||||||
if ((r.m_l < m_l) && (r.m_t < m_t) && (r.m_r > m_r) && (r.m_b > m_b)) {
|
if ((r.m_l < m_l) && (r.m_t < m_t) && (r.m_r > m_r) && (r.m_b > m_b)) {
|
||||||
v = GHOST_kPartiallyVisible;
|
v = GHOST_kPartiallyVisible;
|
||||||
}
|
}
|
||||||
@@ -76,7 +76,7 @@ GHOST_TVisibility GHOST_Rect::getVisibility(GHOST_Rect &r) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Some of the points inside, rectangle is partially inside
|
/* Some of the points inside, rectangle is partially inside. */
|
||||||
v = GHOST_kPartiallyVisible;
|
v = GHOST_kPartiallyVisible;
|
||||||
}
|
}
|
||||||
return v;
|
return v;
|
||||||
|
@@ -72,7 +72,7 @@ GHOST_ITimerTask *GHOST_System::installTimer(uint64_t delay,
|
|||||||
GHOST_TimerTask *timer = new GHOST_TimerTask(millis + delay, interval, timerProc, userData);
|
GHOST_TimerTask *timer = new GHOST_TimerTask(millis + delay, interval, timerProc, userData);
|
||||||
if (timer) {
|
if (timer) {
|
||||||
if (m_timerManager->addTimer(timer) == GHOST_kSuccess) {
|
if (m_timerManager->addTimer(timer) == GHOST_kSuccess) {
|
||||||
// Check to see whether we need to fire the timer right away
|
/* Check to see whether we need to fire the timer right away. */
|
||||||
m_timerManager->fireTimers(millis);
|
m_timerManager->fireTimers(millis);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -208,7 +208,7 @@ bool GHOST_System::getFullScreen(void)
|
|||||||
void GHOST_System::dispatchEvents()
|
void GHOST_System::dispatchEvents()
|
||||||
{
|
{
|
||||||
#ifdef WITH_INPUT_NDOF
|
#ifdef WITH_INPUT_NDOF
|
||||||
// NDOF Motion event is sent only once per dispatch, so do it now:
|
/* NDOF Motion event is sent only once per dispatch, so do it now: */
|
||||||
if (m_ndofManager) {
|
if (m_ndofManager) {
|
||||||
m_ndofManager->sendMotionEvent();
|
m_ndofManager->sendMotionEvent();
|
||||||
}
|
}
|
||||||
@@ -260,10 +260,10 @@ GHOST_TSuccess GHOST_System::pushEvent(GHOST_IEvent *event)
|
|||||||
GHOST_TSuccess GHOST_System::getModifierKeyState(GHOST_TModifierKeyMask mask, bool &isDown) const
|
GHOST_TSuccess GHOST_System::getModifierKeyState(GHOST_TModifierKeyMask mask, bool &isDown) const
|
||||||
{
|
{
|
||||||
GHOST_ModifierKeys keys;
|
GHOST_ModifierKeys keys;
|
||||||
// Get the state of all modifier keys
|
/* Get the state of all modifier keys. */
|
||||||
GHOST_TSuccess success = getModifierKeys(keys);
|
GHOST_TSuccess success = getModifierKeys(keys);
|
||||||
if (success) {
|
if (success) {
|
||||||
// Isolate the state of the key requested
|
/* Isolate the state of the key requested. */
|
||||||
isDown = keys.get(mask);
|
isDown = keys.get(mask);
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
@@ -272,10 +272,10 @@ GHOST_TSuccess GHOST_System::getModifierKeyState(GHOST_TModifierKeyMask mask, bo
|
|||||||
GHOST_TSuccess GHOST_System::getButtonState(GHOST_TButtonMask mask, bool &isDown) const
|
GHOST_TSuccess GHOST_System::getButtonState(GHOST_TButtonMask mask, bool &isDown) const
|
||||||
{
|
{
|
||||||
GHOST_Buttons buttons;
|
GHOST_Buttons buttons;
|
||||||
// Get the state of all mouse buttons
|
/* Get the state of all mouse buttons. */
|
||||||
GHOST_TSuccess success = getButtons(buttons);
|
GHOST_TSuccess success = getButtons(buttons);
|
||||||
if (success) {
|
if (success) {
|
||||||
// Isolate the state of the mouse button requested
|
/* Isolate the state of the mouse button requested. */
|
||||||
isDown = buttons.get(mask);
|
isDown = buttons.get(mask);
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
@@ -311,7 +311,7 @@ GHOST_TSuccess GHOST_System::init()
|
|||||||
m_eventPrinter = new GHOST_EventPrinter();
|
m_eventPrinter = new GHOST_EventPrinter();
|
||||||
m_eventManager->addConsumer(m_eventPrinter);
|
m_eventManager->addConsumer(m_eventPrinter);
|
||||||
}
|
}
|
||||||
#endif // WITH_GHOST_DEBUG
|
#endif /* WITH_GHOST_DEBUG */
|
||||||
|
|
||||||
if (m_timerManager && m_windowManager && m_eventManager) {
|
if (m_timerManager && m_windowManager && m_eventManager) {
|
||||||
return GHOST_kSuccess;
|
return GHOST_kSuccess;
|
||||||
@@ -359,7 +359,7 @@ GHOST_TSuccess GHOST_System::createFullScreenWindow(GHOST_Window **window,
|
|||||||
if (alphaBackground)
|
if (alphaBackground)
|
||||||
glSettings.flags |= GHOST_glAlphaBackground;
|
glSettings.flags |= GHOST_glAlphaBackground;
|
||||||
|
|
||||||
/* note: don't use getCurrentDisplaySetting() because on X11 we may
|
/* NOTE: don't use #getCurrentDisplaySetting() because on X11 we may
|
||||||
* be zoomed in and the desktop may be bigger than the viewport. */
|
* be zoomed in and the desktop may be bigger than the viewport. */
|
||||||
GHOST_ASSERT(m_displayManager,
|
GHOST_ASSERT(m_displayManager,
|
||||||
"GHOST_System::createFullScreenWindow(): invalid display manager");
|
"GHOST_System::createFullScreenWindow(): invalid display manager");
|
||||||
|
@@ -143,7 +143,7 @@ GHOST_IContext *GHOST_SystemSDL::createOffscreenContext(GHOST_GLSettings glSetti
|
|||||||
{
|
{
|
||||||
GHOST_Context *context = new GHOST_ContextSDL(0,
|
GHOST_Context *context = new GHOST_ContextSDL(0,
|
||||||
NULL,
|
NULL,
|
||||||
0, // profile bit
|
0, /* Profile bit. */
|
||||||
3,
|
3,
|
||||||
3,
|
3,
|
||||||
GHOST_OPENGL_SDL_CONTEXT_FLAGS,
|
GHOST_OPENGL_SDL_CONTEXT_FLAGS,
|
||||||
@@ -279,7 +279,7 @@ static GHOST_TKey convertSDLKey(SDL_Scancode key)
|
|||||||
GXMAP(type, SDL_SCANCODE_AUDIOPLAY, GHOST_kKeyMediaPlay);
|
GXMAP(type, SDL_SCANCODE_AUDIOPLAY, GHOST_kKeyMediaPlay);
|
||||||
GXMAP(type, SDL_SCANCODE_AUDIOSTOP, GHOST_kKeyMediaStop);
|
GXMAP(type, SDL_SCANCODE_AUDIOSTOP, GHOST_kKeyMediaStop);
|
||||||
GXMAP(type, SDL_SCANCODE_AUDIOPREV, GHOST_kKeyMediaFirst);
|
GXMAP(type, SDL_SCANCODE_AUDIOPREV, GHOST_kKeyMediaFirst);
|
||||||
// GXMAP(type,XF86XK_AudioRewind, GHOST_kKeyMediaFirst);
|
// GXMAP(type, XF86XK_AudioRewind, GHOST_kKeyMediaFirst);
|
||||||
GXMAP(type, SDL_SCANCODE_AUDIONEXT, GHOST_kKeyMediaLast);
|
GXMAP(type, SDL_SCANCODE_AUDIONEXT, GHOST_kKeyMediaLast);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -315,7 +315,10 @@ void GHOST_SystemSDL::processEvent(SDL_Event *sdl_event)
|
|||||||
SDL_WindowEvent &sdl_sub_evt = sdl_event->window;
|
SDL_WindowEvent &sdl_sub_evt = sdl_event->window;
|
||||||
GHOST_WindowSDL *window = findGhostWindow(
|
GHOST_WindowSDL *window = findGhostWindow(
|
||||||
SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
|
SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
|
||||||
// assert(window != NULL); // can be NULL on close window.
|
/* Can be NULL on close window. */
|
||||||
|
#if 0
|
||||||
|
assert(window != NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (sdl_sub_evt.event) {
|
switch (sdl_sub_evt.event) {
|
||||||
case SDL_WINDOWEVENT_EXPOSED:
|
case SDL_WINDOWEVENT_EXPOSED:
|
||||||
@@ -376,14 +379,14 @@ void GHOST_SystemSDL::processEvent(SDL_Event *sdl_event)
|
|||||||
bounds.wrapPoint(x_new, y_new, 8, window->getCursorGrabAxis());
|
bounds.wrapPoint(x_new, y_new, 8, window->getCursorGrabAxis());
|
||||||
window->getCursorGrabAccum(x_accum, y_accum);
|
window->getCursorGrabAccum(x_accum, y_accum);
|
||||||
|
|
||||||
// can't use setCursorPosition because the mouse may have no focus!
|
/* Can't use #setCursorPosition because the mouse may have no focus! */
|
||||||
if (x_new != x_root || y_new != y_root) {
|
if (x_new != x_root || y_new != y_root) {
|
||||||
if (1) { //xme.time > m_last_warp) {
|
if (1 /* `xme.time > m_last_warp` */ ) {
|
||||||
/* when wrapping we don't need to add an event because the
|
/* when wrapping we don't need to add an event because the
|
||||||
* setCursorPosition call will cause a new event after */
|
* #setCursorPosition call will cause a new event after */
|
||||||
SDL_WarpMouseInWindow(sdl_win, x_new - x_win, y_new - y_win); /* wrap */
|
SDL_WarpMouseInWindow(sdl_win, x_new - x_win, y_new - y_win); /* wrap */
|
||||||
window->setCursorGrabAccum(x_accum + (x_root - x_new), y_accum + (y_root - y_new));
|
window->setCursorGrabAccum(x_accum + (x_root - x_new), y_accum + (y_root - y_new));
|
||||||
// m_last_warp= lastEventTime(xme.time);
|
// m_last_warp = lastEventTime(xme.time);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// setCursorPosition(x_new, y_new); /* wrap but don't accumulate */
|
// setCursorPosition(x_new, y_new); /* wrap but don't accumulate */
|
||||||
@@ -659,8 +662,8 @@ bool GHOST_SystemSDL::generateWindowExposeEvents()
|
|||||||
|
|
||||||
bool GHOST_SystemSDL::processEvents(bool waitForEvent)
|
bool GHOST_SystemSDL::processEvents(bool waitForEvent)
|
||||||
{
|
{
|
||||||
// Get all the current events -- translate them into
|
/* Get all the current events - translate them into
|
||||||
// ghost events and call base class pushEvent() method.
|
* ghost events and call base class #pushEvent() method. */
|
||||||
|
|
||||||
bool anyProcessed = false;
|
bool anyProcessed = false;
|
||||||
|
|
||||||
@@ -679,7 +682,7 @@ bool GHOST_SystemSDL::processEvents(bool waitForEvent)
|
|||||||
|
|
||||||
if (maxSleep >= 0) {
|
if (maxSleep >= 0) {
|
||||||
SDL_WaitEventTimeout(NULL, next - getMilliSeconds());
|
SDL_WaitEventTimeout(NULL, next - getMilliSeconds());
|
||||||
// SleepTillEvent(m_display, next - getMilliSeconds()); // X11
|
// SleepTillEvent(m_display, next - getMilliSeconds()); /* X11. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -707,10 +710,10 @@ GHOST_WindowSDL *GHOST_SystemSDL::findGhostWindow(SDL_Window *sdl_win)
|
|||||||
if (sdl_win == NULL)
|
if (sdl_win == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
// It is not entirely safe to do this as the backptr may point
|
/* It is not entirely safe to do this as the backptr may point
|
||||||
// to a window that has recently been removed.
|
* to a window that has recently been removed.
|
||||||
// We should always check the window manager's list of windows
|
* We should always check the window manager's list of windows
|
||||||
// and only process events on these windows.
|
* and only process events on these windows. */
|
||||||
|
|
||||||
const std::vector<GHOST_IWindow *> &win_vec = m_windowManager->getWindows();
|
const std::vector<GHOST_IWindow *> &win_vec = m_windowManager->getWindows();
|
||||||
|
|
||||||
|
@@ -1804,13 +1804,43 @@ GHOST_TSuccess GHOST_SystemWayland::setCustomCursorShape(uint8_t *bitmap,
|
|||||||
static const int32_t stride = sizex * 4; /* ARGB */
|
static const int32_t stride = sizex * 4; /* ARGB */
|
||||||
cursor->file_buffer->size = size_t(stride * sizey);
|
cursor->file_buffer->size = size_t(stride * sizey);
|
||||||
|
|
||||||
|
#ifdef HAVE_MEMFD_CREATE
|
||||||
const int fd = memfd_create("blender-cursor-custom", MFD_CLOEXEC | MFD_ALLOW_SEALING);
|
const int fd = memfd_create("blender-cursor-custom", MFD_CLOEXEC | MFD_ALLOW_SEALING);
|
||||||
fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK);
|
if (fd >= 0) {
|
||||||
posix_fallocate(fd, 0, int32_t(cursor->file_buffer->size));
|
fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
char *path = getenv("XDG_RUNTIME_DIR");
|
||||||
|
if (!path) {
|
||||||
|
errno = ENOENT;
|
||||||
|
return GHOST_kFailure;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *tmpname;
|
||||||
|
asprintf(&tmpname, "%s/%s", path, "blender-XXXXXX");
|
||||||
|
const int fd = mkostemp(tmpname, O_CLOEXEC);
|
||||||
|
if (fd >= 0) {
|
||||||
|
unlink(tmpname);
|
||||||
|
}
|
||||||
|
free(tmpname);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (fd < 0) {
|
||||||
|
return GHOST_kFailure;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (posix_fallocate(fd, 0, int32_t(cursor->file_buffer->size)) != 0) {
|
||||||
|
return GHOST_kFailure;
|
||||||
|
}
|
||||||
|
|
||||||
cursor->file_buffer->data = mmap(
|
cursor->file_buffer->data = mmap(
|
||||||
nullptr, cursor->file_buffer->size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
nullptr, cursor->file_buffer->size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||||
|
|
||||||
|
if (cursor->file_buffer->data == MAP_FAILED) {
|
||||||
|
close(fd);
|
||||||
|
return GHOST_kFailure;
|
||||||
|
}
|
||||||
|
|
||||||
struct wl_shm_pool *pool = wl_shm_create_pool(d->shm, fd, int32_t(cursor->file_buffer->size));
|
struct wl_shm_pool *pool = wl_shm_create_pool(d->shm, fd, int32_t(cursor->file_buffer->size));
|
||||||
|
|
||||||
wl_buffer *buffer = wl_shm_pool_create_buffer(
|
wl_buffer *buffer = wl_shm_pool_create_buffer(
|
||||||
|
@@ -360,8 +360,8 @@ class GHOST_SystemWin32 : public GHOST_System {
|
|||||||
static GHOST_EventKey *processKeyEvent(GHOST_WindowWin32 *window, RAWINPUT const &raw);
|
static GHOST_EventKey *processKeyEvent(GHOST_WindowWin32 *window, RAWINPUT const &raw);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process special keys (VK_OEM_*), to see if current key layout
|
* Process special keys `VK_OEM_*`, to see if current key layout
|
||||||
* gives us anything special, like ! on french AZERTY.
|
* gives us anything special, like `!` on French AZERTY.
|
||||||
* \param vKey: The virtual key from #hardKey.
|
* \param vKey: The virtual key from #hardKey.
|
||||||
* \param scanCode: The ScanCode of pressed key (similar to PS/2 Set 1).
|
* \param scanCode: The ScanCode of pressed key (similar to PS/2 Set 1).
|
||||||
*/
|
*/
|
||||||
|
@@ -396,15 +396,15 @@ GHOST_IWindow *GHOST_SystemX11::createWindow(const char *title,
|
|||||||
*/
|
*/
|
||||||
GHOST_IContext *GHOST_SystemX11::createOffscreenContext(GHOST_GLSettings glSettings)
|
GHOST_IContext *GHOST_SystemX11::createOffscreenContext(GHOST_GLSettings glSettings)
|
||||||
{
|
{
|
||||||
// During development:
|
/* During development:
|
||||||
// try 4.x compatibility profile
|
* try 4.x compatibility profile
|
||||||
// try 3.3 compatibility profile
|
* try 3.3 compatibility profile
|
||||||
// fall back to 3.0 if needed
|
* fall back to 3.0 if needed
|
||||||
//
|
*
|
||||||
// Final Blender 2.8:
|
* Final Blender 2.8:
|
||||||
// try 4.x core profile
|
* try 4.x core profile
|
||||||
// try 3.3 core profile
|
* try 3.3 core profile
|
||||||
// no fallbacks
|
* no fall-backs. */
|
||||||
|
|
||||||
const bool debug_context = (glSettings.flags & GHOST_glDebugContext) != 0;
|
const bool debug_context = (glSettings.flags & GHOST_glDebugContext) != 0;
|
||||||
|
|
||||||
@@ -2014,7 +2014,7 @@ void GHOST_SystemX11::getClipboard_xcout(const XEvent *evt,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// not using INCR mechanism, just read the property
|
/* Not using INCR mechanism, just read the property. */
|
||||||
XGetWindowProperty(m_display,
|
XGetWindowProperty(m_display,
|
||||||
win,
|
win,
|
||||||
m_atom.XCLIP_OUT,
|
m_atom.XCLIP_OUT,
|
||||||
|
@@ -55,7 +55,7 @@ GHOST_TSuccess GHOST_TimerManager::addTimer(GHOST_TimerTask *timer)
|
|||||||
{
|
{
|
||||||
GHOST_TSuccess success;
|
GHOST_TSuccess success;
|
||||||
if (!getTimerFound(timer)) {
|
if (!getTimerFound(timer)) {
|
||||||
// Add the timer task
|
/* Add the timer task. */
|
||||||
m_timers.push_back(timer);
|
m_timers.push_back(timer);
|
||||||
success = GHOST_kSuccess;
|
success = GHOST_kSuccess;
|
||||||
}
|
}
|
||||||
@@ -70,7 +70,7 @@ GHOST_TSuccess GHOST_TimerManager::removeTimer(GHOST_TimerTask *timer)
|
|||||||
GHOST_TSuccess success;
|
GHOST_TSuccess success;
|
||||||
TTimerVector::iterator iter = std::find(m_timers.begin(), m_timers.end(), timer);
|
TTimerVector::iterator iter = std::find(m_timers.begin(), m_timers.end(), timer);
|
||||||
if (iter != m_timers.end()) {
|
if (iter != m_timers.end()) {
|
||||||
// Remove the timer task
|
/* Remove the timer task. */
|
||||||
m_timers.erase(iter);
|
m_timers.erase(iter);
|
||||||
delete timer;
|
delete timer;
|
||||||
success = GHOST_kSuccess;
|
success = GHOST_kSuccess;
|
||||||
@@ -113,14 +113,14 @@ bool GHOST_TimerManager::fireTimer(uint64_t time, GHOST_TimerTask *task)
|
|||||||
{
|
{
|
||||||
uint64_t next = task->getNext();
|
uint64_t next = task->getNext();
|
||||||
|
|
||||||
// Check if the timer should be fired
|
/* Check if the timer should be fired. */
|
||||||
if (time > next) {
|
if (time > next) {
|
||||||
// Fire the timer
|
/* Fire the timer. */
|
||||||
GHOST_TimerProcPtr timerProc = task->getTimerProc();
|
GHOST_TimerProcPtr timerProc = task->getTimerProc();
|
||||||
uint64_t start = task->getStart();
|
uint64_t start = task->getStart();
|
||||||
timerProc(task, time - start);
|
timerProc(task, time - start);
|
||||||
|
|
||||||
// Update the time at which we will fire it again
|
/* Update the time at which we will fire it again. */
|
||||||
uint64_t interval = task->getInterval();
|
uint64_t interval = task->getInterval();
|
||||||
uint64_t numCalls = (next - start) / interval;
|
uint64_t numCalls = (next - start) / interval;
|
||||||
numCalls++;
|
numCalls++;
|
||||||
|
@@ -157,7 +157,7 @@ class GHOST_WindowCocoa : public GHOST_Window {
|
|||||||
void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a point in screen coordinates to client rectangle coordinates
|
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||||
* \param inX: The x-coordinate in the client rectangle.
|
* \param inX: The x-coordinate in the client rectangle.
|
||||||
* \param inY: The y-coordinate in the client rectangle.
|
* \param inY: The y-coordinate in the client rectangle.
|
||||||
* \param outX: The x-coordinate on the screen.
|
* \param outX: The x-coordinate on the screen.
|
||||||
@@ -166,7 +166,7 @@ class GHOST_WindowCocoa : public GHOST_Window {
|
|||||||
void clientToScreen(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
void clientToScreen(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a point in screen coordinates to client rectangle coordinates
|
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||||
* but without the y coordinate conversion needed for ghost compatibility.
|
* but without the y coordinate conversion needed for ghost compatibility.
|
||||||
* \param inX: The x-coordinate in the client rectangle.
|
* \param inX: The x-coordinate in the client rectangle.
|
||||||
* \param inY: The y-coordinate in the client rectangle.
|
* \param inY: The y-coordinate in the client rectangle.
|
||||||
@@ -178,10 +178,10 @@ class GHOST_WindowCocoa : public GHOST_Window {
|
|||||||
/**
|
/**
|
||||||
* Converts a point in screen coordinates to client rectangle coordinates,
|
* Converts a point in screen coordinates to client rectangle coordinates,
|
||||||
* but without the y coordinate conversion needed for ghost compatibility.
|
* but without the y coordinate conversion needed for ghost compatibility.
|
||||||
* \param inX: The x-coordinate in the client rectangle.
|
* \param inX: The x-coordinate on the screen.
|
||||||
* \param inY: The y-coordinate in the client rectangle.
|
* \param inY: The y-coordinate on the screen.
|
||||||
* \param outX: The x-coordinate on the screen.
|
* \param outX: The x-coordinate in the client rectangle.
|
||||||
* \param outY: The y-coordinate on the screen.
|
* \param outY: The y-coordinate in the client rectangle.
|
||||||
*/
|
*/
|
||||||
void screenToClientIntern(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
void screenToClientIntern(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
||||||
|
|
||||||
|
@@ -45,7 +45,7 @@ GHOST_TSuccess GHOST_WindowManager::addWindow(GHOST_IWindow *window)
|
|||||||
GHOST_TSuccess success = GHOST_kFailure;
|
GHOST_TSuccess success = GHOST_kFailure;
|
||||||
if (window) {
|
if (window) {
|
||||||
if (!getWindowFound(window)) {
|
if (!getWindowFound(window)) {
|
||||||
// Store the pointer to the window
|
/* Store the pointer to the window. */
|
||||||
m_windows.push_back(window);
|
m_windows.push_back(window);
|
||||||
success = GHOST_kSuccess;
|
success = GHOST_kSuccess;
|
||||||
}
|
}
|
||||||
|
@@ -34,7 +34,7 @@ static constexpr size_t base_dpi = 96;
|
|||||||
struct window_t {
|
struct window_t {
|
||||||
GHOST_WindowWayland *w;
|
GHOST_WindowWayland *w;
|
||||||
wl_surface *surface;
|
wl_surface *surface;
|
||||||
// outputs on which the window is currently shown on
|
/* Outputs on which the window is currently shown on. */
|
||||||
std::unordered_set<const output_t *> outputs;
|
std::unordered_set<const output_t *> outputs;
|
||||||
uint16_t dpi = 0;
|
uint16_t dpi = 0;
|
||||||
int scale = 1;
|
int scale = 1;
|
||||||
@@ -154,8 +154,8 @@ static bool update_scale(GHOST_WindowWayland *window)
|
|||||||
|
|
||||||
if (scale > 0 && window->scale() != scale) {
|
if (scale > 0 && window->scale() != scale) {
|
||||||
window->scale() = scale;
|
window->scale() = scale;
|
||||||
// using the real DPI will cause wrong scaling of the UI
|
/* Using the real DPI will cause wrong scaling of the UI
|
||||||
// use a multiplier for the default DPI as workaround
|
* use a multiplier for the default DPI as workaround. */
|
||||||
window->dpi() = scale * base_dpi;
|
window->dpi() = scale * base_dpi;
|
||||||
wl_surface_set_buffer_scale(window->surface(), scale);
|
wl_surface_set_buffer_scale(window->surface(), scale);
|
||||||
return true;
|
return true;
|
||||||
|
@@ -29,9 +29,9 @@
|
|||||||
|
|
||||||
class GHOST_SystemWayland;
|
class GHOST_SystemWayland;
|
||||||
|
|
||||||
|
struct output_t;
|
||||||
struct window_t;
|
struct window_t;
|
||||||
struct wl_surface;
|
struct wl_surface;
|
||||||
struct output_t;
|
|
||||||
|
|
||||||
class GHOST_WindowWayland : public GHOST_Window {
|
class GHOST_WindowWayland : public GHOST_Window {
|
||||||
public:
|
public:
|
||||||
|
@@ -183,7 +183,7 @@ class GHOST_WindowWin32 : public GHOST_Window {
|
|||||||
void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a point in screen coordinates to client rectangle coordinates
|
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||||
* \param inX: The x-coordinate in the client rectangle.
|
* \param inX: The x-coordinate in the client rectangle.
|
||||||
* \param inY: The y-coordinate in the client rectangle.
|
* \param inY: The y-coordinate in the client rectangle.
|
||||||
* \param outX: The x-coordinate on the screen.
|
* \param outX: The x-coordinate on the screen.
|
||||||
|
@@ -120,7 +120,7 @@ static void create_reference_spaces(OpenXRSessionData &oxr, const GHOST_XrPose &
|
|||||||
XrReferenceSpaceCreateInfo create_info = {XR_TYPE_REFERENCE_SPACE_CREATE_INFO};
|
XrReferenceSpaceCreateInfo create_info = {XR_TYPE_REFERENCE_SPACE_CREATE_INFO};
|
||||||
create_info.poseInReferenceSpace.orientation.w = 1.0f;
|
create_info.poseInReferenceSpace.orientation.w = 1.0f;
|
||||||
|
|
||||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;
|
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_STAGE;
|
||||||
#if 0
|
#if 0
|
||||||
/* TODO
|
/* TODO
|
||||||
*
|
*
|
||||||
@@ -144,8 +144,47 @@ static void create_reference_spaces(OpenXRSessionData &oxr, const GHOST_XrPose &
|
|||||||
(void)base_pose;
|
(void)base_pose;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space),
|
XrResult result = xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space);
|
||||||
"Failed to create reference space.");
|
|
||||||
|
if (XR_FAILED(result)) {
|
||||||
|
/* One of the rare cases where we don't want to immediately throw an exception on failure,
|
||||||
|
* since runtimes are not required to support the stage reference space. Although we need the
|
||||||
|
* stage reference space for absolute tracking, if the runtime doesn't support it then just
|
||||||
|
* fallback to the local space. */
|
||||||
|
if (result == XR_ERROR_REFERENCE_SPACE_UNSUPPORTED) {
|
||||||
|
printf(
|
||||||
|
"Warning: XR runtime does not support stage reference space, disabling absolute "
|
||||||
|
"tracking.\n");
|
||||||
|
|
||||||
|
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;
|
||||||
|
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space),
|
||||||
|
"Failed to create local reference space.");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw GHOST_XrException("Failed to create stage reference space.", result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* Check if tracking bounds are valid. Tracking bounds may be invalid if the user did not
|
||||||
|
* define a tracking space via the XR runtime. */
|
||||||
|
XrExtent2Df extents;
|
||||||
|
CHECK_XR(xrGetReferenceSpaceBoundsRect(oxr.session, XR_REFERENCE_SPACE_TYPE_STAGE, &extents),
|
||||||
|
"Failed to get stage reference space bounds.");
|
||||||
|
if (extents.width == 0.0f || extents.height == 0.0f) {
|
||||||
|
printf(
|
||||||
|
"Warning: Invalid stage reference space bounds, disabling absolute tracking. To enable "
|
||||||
|
"absolute tracking, please define a tracking space via the XR runtime.\n");
|
||||||
|
|
||||||
|
/* Fallback to local space. */
|
||||||
|
if (oxr.reference_space != XR_NULL_HANDLE) {
|
||||||
|
CHECK_XR(xrDestroySpace(oxr.reference_space), "Failed to destroy stage reference space.");
|
||||||
|
}
|
||||||
|
|
||||||
|
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;
|
||||||
|
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space),
|
||||||
|
"Failed to create local reference space.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_VIEW;
|
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_VIEW;
|
||||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.view_space),
|
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.view_space),
|
||||||
@@ -370,6 +409,7 @@ void GHOST_XrSession::drawView(GHOST_XrSwapchain &swapchain,
|
|||||||
XrCompositionLayerProjectionView &r_proj_layer_view,
|
XrCompositionLayerProjectionView &r_proj_layer_view,
|
||||||
XrSpaceLocation &view_location,
|
XrSpaceLocation &view_location,
|
||||||
XrView &view,
|
XrView &view,
|
||||||
|
uint32_t view_idx,
|
||||||
void *draw_customdata)
|
void *draw_customdata)
|
||||||
{
|
{
|
||||||
XrSwapchainImageBaseHeader *swapchain_image = swapchain.acquireDrawableSwapchainImage();
|
XrSwapchainImageBaseHeader *swapchain_image = swapchain.acquireDrawableSwapchainImage();
|
||||||
@@ -380,6 +420,8 @@ void GHOST_XrSession::drawView(GHOST_XrSwapchain &swapchain,
|
|||||||
r_proj_layer_view.fov = view.fov;
|
r_proj_layer_view.fov = view.fov;
|
||||||
swapchain.updateCompositionLayerProjectViewSubImage(r_proj_layer_view.subImage);
|
swapchain.updateCompositionLayerProjectViewSubImage(r_proj_layer_view.subImage);
|
||||||
|
|
||||||
|
assert(view_idx < 256);
|
||||||
|
draw_view_info.view_idx = (char)view_idx;
|
||||||
draw_view_info.expects_srgb_buffer = swapchain.isBufferSRGB();
|
draw_view_info.expects_srgb_buffer = swapchain.isBufferSRGB();
|
||||||
draw_view_info.ofsx = r_proj_layer_view.subImage.imageRect.offset.x;
|
draw_view_info.ofsx = r_proj_layer_view.subImage.imageRect.offset.x;
|
||||||
draw_view_info.ofsy = r_proj_layer_view.subImage.imageRect.offset.y;
|
draw_view_info.ofsy = r_proj_layer_view.subImage.imageRect.offset.y;
|
||||||
@@ -429,6 +471,7 @@ XrCompositionLayerProjection GHOST_XrSession::drawLayer(
|
|||||||
r_proj_layer_views[view_idx],
|
r_proj_layer_views[view_idx],
|
||||||
view_location,
|
view_location,
|
||||||
m_oxr->views[view_idx],
|
m_oxr->views[view_idx],
|
||||||
|
view_idx,
|
||||||
draw_customdata);
|
draw_customdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -117,6 +117,7 @@ class GHOST_XrSession {
|
|||||||
XrCompositionLayerProjectionView &r_proj_layer_view,
|
XrCompositionLayerProjectionView &r_proj_layer_view,
|
||||||
XrSpaceLocation &view_location,
|
XrSpaceLocation &view_location,
|
||||||
XrView &view,
|
XrView &view,
|
||||||
|
uint32_t view_idx,
|
||||||
void *draw_customdata);
|
void *draw_customdata);
|
||||||
void beginFrameDrawing();
|
void beginFrameDrawing();
|
||||||
void endFrameDrawing(std::vector<XrCompositionLayerBaseHeader *> &layers);
|
void endFrameDrawing(std::vector<XrCompositionLayerBaseHeader *> &layers);
|
||||||
|
@@ -217,39 +217,39 @@ if(WITH_LIBMV)
|
|||||||
if(WITH_GTESTS)
|
if(WITH_GTESTS)
|
||||||
include(GTestTesting)
|
include(GTestTesting)
|
||||||
|
|
||||||
blender_add_lib(libmv_test_dataset "./libmv/multiview/test_data_sets.cc" "" "" "")
|
blender_add_lib(libmv_test_dataset "./libmv/multiview/test_data_sets.cc" "${INC}" "${INC_SYS}" "")
|
||||||
|
|
||||||
BLENDER_SRC_GTEST("libmv_predict_tracks" "./libmv/autotrack/predict_tracks_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_predict_tracks" "./libmv/autotrack/predict_tracks_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_tracks" "./libmv/autotrack/tracks_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_tracks" "./libmv/autotrack/tracks_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_scoped_ptr" "./libmv/base/scoped_ptr_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_scoped_ptr" "./libmv/base/scoped_ptr_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_vector" "./libmv/base/vector_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_vector" "./libmv/base/vector_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_array_nd" "./libmv/image/array_nd_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_array_nd" "./libmv/image/array_nd_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_convolve" "./libmv/image/convolve_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_convolve" "./libmv/image/convolve_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_image" "./libmv/image/image_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_image" "./libmv/image/image_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_sample" "./libmv/image/sample_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_sample" "./libmv/image/sample_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_tuple" "./libmv/image/tuple_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_tuple" "./libmv/image/tuple_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_euclidean_resection" "./libmv/multiview/euclidean_resection_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_euclidean_resection" "./libmv/multiview/euclidean_resection_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_fundamental" "./libmv/multiview/fundamental_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_fundamental" "./libmv/multiview/fundamental_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_homography" "./libmv/multiview/homography_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_homography" "./libmv/multiview/homography_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_nviewtriangulation" "./libmv/multiview/nviewtriangulation_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_nviewtriangulation" "./libmv/multiview/nviewtriangulation_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_panography" "./libmv/multiview/panography_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_panography" "./libmv/multiview/panography_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_projection" "./libmv/multiview/projection_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_projection" "./libmv/multiview/projection_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_resection" "./libmv/multiview/resection_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_resection" "./libmv/multiview/resection_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_triangulation" "./libmv/multiview/triangulation_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_triangulation" "./libmv/multiview/triangulation_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_dogleg" "./libmv/numeric/dogleg_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_dogleg" "./libmv/numeric/dogleg_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_function_derivative" "./libmv/numeric/function_derivative_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_function_derivative" "./libmv/numeric/function_derivative_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_levenberg_marquardt" "./libmv/numeric/levenberg_marquardt_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_levenberg_marquardt" "./libmv/numeric/levenberg_marquardt_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_numeric" "./libmv/numeric/numeric_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_numeric" "./libmv/numeric/numeric_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_poly" "./libmv/numeric/poly_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_poly" "./libmv/numeric/poly_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_camera_intrinsics" "./libmv/simple_pipeline/camera_intrinsics_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_camera_intrinsics" "./libmv/simple_pipeline/camera_intrinsics_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_detect" "./libmv/simple_pipeline/detect_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_detect" "./libmv/simple_pipeline/detect_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_intersect" "./libmv/simple_pipeline/intersect_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_intersect" "./libmv/simple_pipeline/intersect_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_keyframe_selection" "./libmv/simple_pipeline/keyframe_selection_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_keyframe_selection" "./libmv/simple_pipeline/keyframe_selection_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_modal_solver" "./libmv/simple_pipeline/modal_solver_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_modal_solver" "./libmv/simple_pipeline/modal_solver_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_resect" "./libmv/simple_pipeline/resect_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_resect" "./libmv/simple_pipeline/resect_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_brute_region_tracker" "./libmv/tracking/brute_region_tracker_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_brute_region_tracker" "./libmv/tracking/brute_region_tracker_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_klt_region_tracker" "./libmv/tracking/klt_region_tracker_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_klt_region_tracker" "./libmv/tracking/klt_region_tracker_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
BLENDER_SRC_GTEST("libmv_pyramid_region_tracker" "./libmv/tracking/pyramid_region_tracker_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
blender_add_test_executable("libmv_pyramid_region_tracker" "./libmv/tracking/pyramid_region_tracker_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
list(APPEND SRC
|
list(APPEND SRC
|
||||||
|
@@ -62,8 +62,8 @@ template<typename _Tp> struct MEM_Allocator {
|
|||||||
return &__x;
|
return &__x;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NB: __n is permitted to be 0. The C++ standard says nothing
|
/* NOTE: `__n` is permitted to be 0.
|
||||||
// about what the return value is when __n == 0.
|
* The C++ standard says nothing about what the return value is when `__n == 0`. */
|
||||||
_Tp *allocate(size_type __n, const void * = 0)
|
_Tp *allocate(size_type __n, const void * = 0)
|
||||||
{
|
{
|
||||||
_Tp *__ret = NULL;
|
_Tp *__ret = NULL;
|
||||||
|
@@ -324,6 +324,16 @@
|
|||||||
# define ARCH_CPU_ARM64 1
|
# define ARCH_CPU_ARM64 1
|
||||||
# define ARCH_CPU_64_BITS 1
|
# define ARCH_CPU_64_BITS 1
|
||||||
# define ARCH_CPU_LITTLE_ENDIAN 1
|
# define ARCH_CPU_LITTLE_ENDIAN 1
|
||||||
|
#elif defined(__riscv) && __riscv_xlen == 32
|
||||||
|
# define ARCH_CPU_RISCV_FAMILY 1
|
||||||
|
# define ARCH_CPU_RISCV32 1
|
||||||
|
# define ARCH_CPU_64_BITS 0
|
||||||
|
# define ARCH_CPU_LITTLE_ENDIAN 1
|
||||||
|
#elif defined(__riscv) && __riscv_xlen == 64
|
||||||
|
# define ARCH_CPU_RISCV_FAMILY 1
|
||||||
|
# define ARCH_CPU_RISCV64 1
|
||||||
|
# define ARCH_CPU_64_BITS 1
|
||||||
|
# define ARCH_CPU_LITTLE_ENDIAN 1
|
||||||
#elif defined(__pnacl__) || defined(__asmjs__) || defined(__wasm__)
|
#elif defined(__pnacl__) || defined(__asmjs__) || defined(__wasm__)
|
||||||
# define ARCH_CPU_32_BITS 1
|
# define ARCH_CPU_32_BITS 1
|
||||||
# define ARCH_CPU_LITTLE_ENDIAN 1
|
# define ARCH_CPU_LITTLE_ENDIAN 1
|
||||||
@@ -381,6 +391,9 @@
|
|||||||
#if !defined(ARCH_CPU_PPC64_FAMILY)
|
#if !defined(ARCH_CPU_PPC64_FAMILY)
|
||||||
# define ARCH_CPU_PPC64_FAMILY 0
|
# define ARCH_CPU_PPC64_FAMILY 0
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(ARCH_CPU_RISCV_FAMILY)
|
||||||
|
# define ARCH_CPU_RISCV_FAMILY 0
|
||||||
|
#endif
|
||||||
#if !defined(ARCH_CPU_S390_FAMILY)
|
#if !defined(ARCH_CPU_S390_FAMILY)
|
||||||
# define ARCH_CPU_S390_FAMILY 0
|
# define ARCH_CPU_S390_FAMILY 0
|
||||||
#endif
|
#endif
|
||||||
|
@@ -129,5 +129,5 @@ if(WITH_GTESTS AND WITH_OPENSUBDIV)
|
|||||||
add_definitions(${GLOG_DEFINES})
|
add_definitions(${GLOG_DEFINES})
|
||||||
add_definitions(-DBLENDER_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
|
add_definitions(-DBLENDER_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
|
||||||
|
|
||||||
BLENDER_SRC_GTEST(opensubdiv_mesh_topology_test "internal/topology/mesh_topology_test.cc" "${LIB};bf_intern_opensubdiv")
|
blender_add_test_executable(opensubdiv_mesh_topology_test "internal/topology/mesh_topology_test.cc" "${INC}" "${INC_SYS}" "${LIB};bf_intern_opensubdiv")
|
||||||
endif()
|
endif()
|
||||||
|
@@ -64,7 +64,7 @@ typedef struct rbConstraint rbConstraint;
|
|||||||
/* Setup ---------------------------- */
|
/* Setup ---------------------------- */
|
||||||
|
|
||||||
/* Create a new dynamics world instance */
|
/* Create a new dynamics world instance */
|
||||||
// TODO: add args to set the type of constraint solvers, etc.
|
/* TODO: add args to set the type of constraint solvers, etc. */
|
||||||
rbDynamicsWorld *RB_dworld_new(const float gravity[3]);
|
rbDynamicsWorld *RB_dworld_new(const float gravity[3]);
|
||||||
|
|
||||||
/* Delete the given dynamics world, and free any extra data it may require */
|
/* Delete the given dynamics world, and free any extra data it may require */
|
||||||
|
Submodule release/datafiles/locale updated: 4833954c0a...62e82958a7
@@ -113,7 +113,7 @@ const UserDef U_default = {
|
|||||||
.gp_eraser = 25,
|
.gp_eraser = 25,
|
||||||
.gp_settings = 0,
|
.gp_settings = 0,
|
||||||
|
|
||||||
/** Initialized by: #BKE_studiolight_default . */
|
/** Initialized by: #BKE_studiolight_default. */
|
||||||
.light_param = {{0}},
|
.light_param = {{0}},
|
||||||
.light_ambient = {0, 0, 0},
|
.light_ambient = {0, 0, 0},
|
||||||
|
|
||||||
|
Submodule release/scripts/addons updated: f86f25e622...1adb56d8b0
Submodule release/scripts/addons_contrib updated: 5a82baad9f...788441f293
@@ -71,7 +71,7 @@ def rtl_process_po(args, settings):
|
|||||||
po.write(kind="PO", dest=args.dst)
|
po.write(kind="PO", dest=args.dst)
|
||||||
|
|
||||||
|
|
||||||
def language_menu(_args, settings):
|
def language_menu(args, settings):
|
||||||
# 'DEFAULT' and en_US are always valid, fully-translated "languages"!
|
# 'DEFAULT' and en_US are always valid, fully-translated "languages"!
|
||||||
stats = {"DEFAULT": 1.0, "en_US": 1.0}
|
stats = {"DEFAULT": 1.0, "en_US": 1.0}
|
||||||
|
|
||||||
|
@@ -56,6 +56,17 @@ class AssetBrowserPanel:
|
|||||||
return SpaceAssetInfo.is_asset_browser_poll(context)
|
return SpaceAssetInfo.is_asset_browser_poll(context)
|
||||||
|
|
||||||
|
|
||||||
|
class AssetBrowserSpecificCategoryPanel(AssetBrowserPanel):
|
||||||
|
asset_categories = set() # Set of strings like 'ANIMATIONS', see `asset_category_items` in rna_space.c
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
return (
|
||||||
|
SpaceAssetInfo.is_asset_browser_poll(context)
|
||||||
|
and context.space_data.params.asset_category in cls.asset_categories
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class AssetMetaDataPanel:
|
class AssetMetaDataPanel:
|
||||||
bl_space_type = 'FILE_BROWSER'
|
bl_space_type = 'FILE_BROWSER'
|
||||||
bl_region_type = 'TOOL_PROPS'
|
bl_region_type = 'TOOL_PROPS'
|
||||||
|
@@ -77,7 +77,7 @@ class NodeItem:
|
|||||||
else:
|
else:
|
||||||
return bpy.app.translations.contexts.default
|
return bpy.app.translations.contexts.default
|
||||||
|
|
||||||
# NB: is a staticmethod because called with an explicit self argument
|
# NOTE: is a staticmethod because called with an explicit self argument
|
||||||
# NodeItemCustom sets this as a variable attribute in __init__
|
# NodeItemCustom sets this as a variable attribute in __init__
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def draw(self, layout, _context):
|
def draw(self, layout, _context):
|
||||||
|
@@ -139,6 +139,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.fluiddomainsettings.use_resumable_cache*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-use-resumable-cache"),
|
("bpy.types.fluiddomainsettings.use_resumable_cache*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-use-resumable-cache"),
|
||||||
("bpy.types.fluiddomainsettings.use_spray_particles*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-use-spray-particles"),
|
("bpy.types.fluiddomainsettings.use_spray_particles*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-use-spray-particles"),
|
||||||
("bpy.types.fluiddomainsettings.vector_display_type*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-display-type"),
|
("bpy.types.fluiddomainsettings.vector_display_type*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-display-type"),
|
||||||
|
("bpy.types.geometrynodecurveprimitivebeziersegment*", "modeling/geometry_nodes/curve_primitives/bezier_segment.html#bpy-types-geometrynodecurveprimitivebeziersegment"),
|
||||||
("bpy.types.linestylegeometrymodifier_perlinnoise1d*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/perlin_noise_1d.html#bpy-types-linestylegeometrymodifier-perlinnoise1d"),
|
("bpy.types.linestylegeometrymodifier_perlinnoise1d*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/perlin_noise_1d.html#bpy-types-linestylegeometrymodifier-perlinnoise1d"),
|
||||||
("bpy.types.linestylegeometrymodifier_perlinnoise2d*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/perlin_noise_2d.html#bpy-types-linestylegeometrymodifier-perlinnoise2d"),
|
("bpy.types.linestylegeometrymodifier_perlinnoise2d*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/perlin_noise_2d.html#bpy-types-linestylegeometrymodifier-perlinnoise2d"),
|
||||||
("bpy.types.materialgpencilstyle.use_stroke_holdout*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-use-stroke-holdout"),
|
("bpy.types.materialgpencilstyle.use_stroke_holdout*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-use-stroke-holdout"),
|
||||||
@@ -215,6 +216,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.spacesequenceeditor.proxy_render_size*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-proxy-render-size"),
|
("bpy.types.spacesequenceeditor.proxy_render_size*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-proxy-render-size"),
|
||||||
("bpy.types.spacesequenceeditor.show_strip_offset*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-offset"),
|
("bpy.types.spacesequenceeditor.show_strip_offset*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-offset"),
|
||||||
("bpy.types.spacesequenceeditor.show_strip_source*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-source"),
|
("bpy.types.spacesequenceeditor.show_strip_source*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-source"),
|
||||||
|
("bpy.types.spacespreadsheetrowfilter.column_name*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-column-name"),
|
||||||
("bpy.types.toolsettings.gpencil_stroke_placement*", "grease_pencil/modes/draw/stroke_placement.html#bpy-types-toolsettings-gpencil-stroke-placement"),
|
("bpy.types.toolsettings.gpencil_stroke_placement*", "grease_pencil/modes/draw/stroke_placement.html#bpy-types-toolsettings-gpencil-stroke-placement"),
|
||||||
("bpy.types.toolsettings.use_keyframe_cycle_aware*", "editors/timeline.html#bpy-types-toolsettings-use-keyframe-cycle-aware"),
|
("bpy.types.toolsettings.use_keyframe_cycle_aware*", "editors/timeline.html#bpy-types-toolsettings-use-keyframe-cycle-aware"),
|
||||||
("bpy.types.toolsettings.use_keyframe_insert_auto*", "editors/timeline.html#bpy-types-toolsettings-use-keyframe-insert-auto"),
|
("bpy.types.toolsettings.use_keyframe_insert_auto*", "editors/timeline.html#bpy-types-toolsettings-use-keyframe-insert-auto"),
|
||||||
@@ -233,6 +235,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.rendersettings.resolution_percentage*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-percentage"),
|
("bpy.types.rendersettings.resolution_percentage*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-percentage"),
|
||||||
("bpy.types.rendersettings_simplify_gpencil_tint*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-tint"),
|
("bpy.types.rendersettings_simplify_gpencil_tint*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-tint"),
|
||||||
("bpy.types.spaceoutliner.use_filter_object_mesh*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-mesh"),
|
("bpy.types.spaceoutliner.use_filter_object_mesh*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-mesh"),
|
||||||
|
("bpy.types.spaceoutliner.use_filter_view_layers*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-view-layers"),
|
||||||
("bpy.types.spacesequenceeditor.show_overexposed*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-show-overexposed"),
|
("bpy.types.spacesequenceeditor.show_overexposed*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-show-overexposed"),
|
||||||
("bpy.types.toolsettings.use_gpencil_draw_onback*", "grease_pencil/modes/draw/introduction.html#bpy-types-toolsettings-use-gpencil-draw-onback"),
|
("bpy.types.toolsettings.use_gpencil_draw_onback*", "grease_pencil/modes/draw/introduction.html#bpy-types-toolsettings-use-gpencil-draw-onback"),
|
||||||
("bpy.types.toolsettings.use_snap_align_rotation*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-align-rotation"),
|
("bpy.types.toolsettings.use_snap_align_rotation*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-align-rotation"),
|
||||||
@@ -273,6 +276,8 @@ url_manual_mapping = (
|
|||||||
("bpy.types.spacesequenceeditor.show_safe_areas*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-safe-areas"),
|
("bpy.types.spacesequenceeditor.show_safe_areas*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-safe-areas"),
|
||||||
("bpy.types.spacesequenceeditor.show_strip_name*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-name"),
|
("bpy.types.spacesequenceeditor.show_strip_name*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-name"),
|
||||||
("bpy.types.spacespreadsheet.show_only_selected*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-show-only-selected"),
|
("bpy.types.spacespreadsheet.show_only_selected*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-show-only-selected"),
|
||||||
|
("bpy.types.spacespreadsheetrowfilter.operation*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-operation"),
|
||||||
|
("bpy.types.spacespreadsheetrowfilter.threshold*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-threshold"),
|
||||||
("bpy.types.toolsettings.use_snap_grid_absolute*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-grid-absolute"),
|
("bpy.types.toolsettings.use_snap_grid_absolute*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-grid-absolute"),
|
||||||
("bpy.types.view3doverlay.show_face_orientation*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-show-face-orientation"),
|
("bpy.types.view3doverlay.show_face_orientation*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-show-face-orientation"),
|
||||||
("bpy.ops.object.blenderkit_material_thumbnail*", "addons/3d_view/blenderkit.html#bpy-ops-object-blenderkit-material-thumbnail"),
|
("bpy.ops.object.blenderkit_material_thumbnail*", "addons/3d_view/blenderkit.html#bpy-ops-object-blenderkit-material-thumbnail"),
|
||||||
@@ -343,6 +348,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.spaceoutliner.use_filter_complete*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-complete"),
|
("bpy.types.spaceoutliner.use_filter_complete*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-complete"),
|
||||||
("bpy.types.spacesequenceeditor.show_metadata*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-metadata"),
|
("bpy.types.spacesequenceeditor.show_metadata*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-metadata"),
|
||||||
("bpy.types.spacespreadsheet.attribute_domain*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-attribute-domain"),
|
("bpy.types.spacespreadsheet.attribute_domain*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-attribute-domain"),
|
||||||
|
("bpy.types.spacespreadsheetrowfilter.enabled*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-enabled"),
|
||||||
("bpy.types.spaceview3d.transform_orientation*", "editors/3dview/controls/orientation.html#bpy-types-spaceview3d-transform-orientation"),
|
("bpy.types.spaceview3d.transform_orientation*", "editors/3dview/controls/orientation.html#bpy-types-spaceview3d-transform-orientation"),
|
||||||
("bpy.types.spaceview3d.use_local_collections*", "editors/3dview/sidebar.html#bpy-types-spaceview3d-use-local-collections"),
|
("bpy.types.spaceview3d.use_local_collections*", "editors/3dview/sidebar.html#bpy-types-spaceview3d-use-local-collections"),
|
||||||
("bpy.types.toolsettings.use_snap_peel_object*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-peel-object"),
|
("bpy.types.toolsettings.use_snap_peel_object*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-peel-object"),
|
||||||
@@ -350,7 +356,6 @@ url_manual_mapping = (
|
|||||||
("bpy.types.view3doverlay.wireframe_threshold*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-wireframe-threshold"),
|
("bpy.types.view3doverlay.wireframe_threshold*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-wireframe-threshold"),
|
||||||
("bpy.ops.object.constraint_add_with_targets*", "animation/constraints/interface/adding_removing.html#bpy-ops-object-constraint-add-with-targets"),
|
("bpy.ops.object.constraint_add_with_targets*", "animation/constraints/interface/adding_removing.html#bpy-ops-object-constraint-add-with-targets"),
|
||||||
("bpy.ops.object.material_slot_remove_unused*", "scene_layout/object/editing/cleanup.html#bpy-ops-object-material-slot-remove-unused"),
|
("bpy.ops.object.material_slot_remove_unused*", "scene_layout/object/editing/cleanup.html#bpy-ops-object-material-slot-remove-unused"),
|
||||||
("bpy.ops.object.vertex_group_copy_to_linked*", "modeling/meshes/properties/vertex_groups/vertex_groups.html#bpy-ops-object-vertex-group-copy-to-linked"),
|
|
||||||
("bpy.ops.outliner.collection_disable_render*", "editors/outliner/editing.html#bpy-ops-outliner-collection-disable-render"),
|
("bpy.ops.outliner.collection_disable_render*", "editors/outliner/editing.html#bpy-ops-outliner-collection-disable-render"),
|
||||||
("bpy.types.brush.cloth_simulation_area_type*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-simulation-area-type"),
|
("bpy.types.brush.cloth_simulation_area_type*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-simulation-area-type"),
|
||||||
("bpy.types.brushgpencilsettings.fill_factor*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-fill-factor"),
|
("bpy.types.brushgpencilsettings.fill_factor*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-fill-factor"),
|
||||||
@@ -372,6 +377,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.fluidflowsettings.use_plane_init*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-use-plane-init"),
|
("bpy.types.fluidflowsettings.use_plane_init*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-use-plane-init"),
|
||||||
("bpy.types.fluidflowsettings.velocity_coord*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-velocity-coord"),
|
("bpy.types.fluidflowsettings.velocity_coord*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-velocity-coord"),
|
||||||
("bpy.types.fluidflowsettings.volume_density*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-volume-density"),
|
("bpy.types.fluidflowsettings.volume_density*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-volume-density"),
|
||||||
|
("bpy.types.geometrynodecurvequadraticbezier*", "modeling/geometry_nodes/curve_primitives/quadratic_bezier.html#bpy-types-geometrynodecurvequadraticbezier"),
|
||||||
("bpy.types.materialgpencilstyle.show_stroke*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-show-stroke"),
|
("bpy.types.materialgpencilstyle.show_stroke*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-show-stroke"),
|
||||||
("bpy.types.movietrackingcamera.focal_length*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-focal-length"),
|
("bpy.types.movietrackingcamera.focal_length*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-focal-length"),
|
||||||
("bpy.types.movietrackingcamera.pixel_aspect*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-pixel-aspect"),
|
("bpy.types.movietrackingcamera.pixel_aspect*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-pixel-aspect"),
|
||||||
@@ -471,6 +477,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.geometrynodeattributecolorramp*", "modeling/geometry_nodes/attribute/attribute_color_ramp.html#bpy-types-geometrynodeattributecolorramp"),
|
("bpy.types.geometrynodeattributecolorramp*", "modeling/geometry_nodes/attribute/attribute_color_ramp.html#bpy-types-geometrynodeattributecolorramp"),
|
||||||
("bpy.types.geometrynodeattributeproximity*", "modeling/geometry_nodes/attribute/attribute_proximity.html#bpy-types-geometrynodeattributeproximity"),
|
("bpy.types.geometrynodeattributeproximity*", "modeling/geometry_nodes/attribute/attribute_proximity.html#bpy-types-geometrynodeattributeproximity"),
|
||||||
("bpy.types.geometrynodeattributerandomize*", "modeling/geometry_nodes/attribute/attribute_randomize.html#bpy-types-geometrynodeattributerandomize"),
|
("bpy.types.geometrynodeattributerandomize*", "modeling/geometry_nodes/attribute/attribute_randomize.html#bpy-types-geometrynodeattributerandomize"),
|
||||||
|
("bpy.types.geometrynodecurvequadrilateral*", "modeling/geometry_nodes/curve_primitives/quadrilateral.html#bpy-types-geometrynodecurvequadrilateral"),
|
||||||
("bpy.types.geometrynodeseparatecomponents*", "modeling/geometry_nodes/geometry/separate_components.html#bpy-types-geometrynodeseparatecomponents"),
|
("bpy.types.geometrynodeseparatecomponents*", "modeling/geometry_nodes/geometry/separate_components.html#bpy-types-geometrynodeseparatecomponents"),
|
||||||
("bpy.types.geometrynodesubdivisionsurface*", "modeling/geometry_nodes/mesh/subdivision_surface.html#bpy-types-geometrynodesubdivisionsurface"),
|
("bpy.types.geometrynodesubdivisionsurface*", "modeling/geometry_nodes/mesh/subdivision_surface.html#bpy-types-geometrynodesubdivisionsurface"),
|
||||||
("bpy.types.imageformatsettings.color_mode*", "render/output/properties/output.html#bpy-types-imageformatsettings-color-mode"),
|
("bpy.types.imageformatsettings.color_mode*", "render/output/properties/output.html#bpy-types-imageformatsettings-color-mode"),
|
||||||
@@ -490,7 +497,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.rendersettings.use_compositing*", "render/output/properties/post_processing.html#bpy-types-rendersettings-use-compositing"),
|
("bpy.types.rendersettings.use_compositing*", "render/output/properties/post_processing.html#bpy-types-rendersettings-use-compositing"),
|
||||||
("bpy.types.rendersettings.use_placeholder*", "render/output/properties/output.html#bpy-types-rendersettings-use-placeholder"),
|
("bpy.types.rendersettings.use_placeholder*", "render/output/properties/output.html#bpy-types-rendersettings-use-placeholder"),
|
||||||
("bpy.types.shadernodesubsurfacescattering*", "render/shader_nodes/shader/sss.html#bpy-types-shadernodesubsurfacescattering"),
|
("bpy.types.shadernodesubsurfacescattering*", "render/shader_nodes/shader/sss.html#bpy-types-shadernodesubsurfacescattering"),
|
||||||
("bpy.types.spaceclipeditor.lock_selection*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-lock-selection"),
|
("bpy.types.spaceclipeditor.lock_selection*", "editors/clip/introduction.html#bpy-types-spaceclipeditor-lock-selection"),
|
||||||
("bpy.types.spacedopesheeteditor.auto_snap*", "editors/dope_sheet/editing.html#bpy-types-spacedopesheeteditor-auto-snap"),
|
("bpy.types.spacedopesheeteditor.auto_snap*", "editors/dope_sheet/editing.html#bpy-types-spacedopesheeteditor-auto-snap"),
|
||||||
("bpy.types.spaceoutliner.show_mode_column*", "editors/outliner/interface.html#bpy-types-spaceoutliner-show-mode-column"),
|
("bpy.types.spaceoutliner.show_mode_column*", "editors/outliner/interface.html#bpy-types-spaceoutliner-show-mode-column"),
|
||||||
("bpy.types.spacetexteditor.use_match_case*", "editors/text_editor.html#bpy-types-spacetexteditor-use-match-case"),
|
("bpy.types.spacetexteditor.use_match_case*", "editors/text_editor.html#bpy-types-spacetexteditor-use-match-case"),
|
||||||
@@ -508,6 +515,7 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.outliner.collection_show_inside*", "editors/outliner/editing.html#bpy-ops-outliner-collection-show-inside"),
|
("bpy.ops.outliner.collection_show_inside*", "editors/outliner/editing.html#bpy-ops-outliner-collection-show-inside"),
|
||||||
("bpy.ops.preferences.reset_default_theme*", "editors/preferences/themes.html#bpy-ops-preferences-reset-default-theme"),
|
("bpy.ops.preferences.reset_default_theme*", "editors/preferences/themes.html#bpy-ops-preferences-reset-default-theme"),
|
||||||
("bpy.ops.sequencer.strip_transform_clear*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-strip-transform-clear"),
|
("bpy.ops.sequencer.strip_transform_clear*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-strip-transform-clear"),
|
||||||
|
("bpy.ops.spreadsheet.add_row_filter_rule*", "editors/spreadsheet.html#bpy-ops-spreadsheet-add-row-filter-rule"),
|
||||||
("bpy.types.animdata.action_extrapolation*", "editors/nla/sidebar.html#bpy-types-animdata-action-extrapolation"),
|
("bpy.types.animdata.action_extrapolation*", "editors/nla/sidebar.html#bpy-types-animdata-action-extrapolation"),
|
||||||
("bpy.types.bakesettings.max_ray_distance*", "render/cycles/baking.html#bpy-types-bakesettings-max-ray-distance"),
|
("bpy.types.bakesettings.max_ray_distance*", "render/cycles/baking.html#bpy-types-bakesettings-max-ray-distance"),
|
||||||
("bpy.types.brush.multiplane_scrape_angle*", "sculpt_paint/sculpting/tools/multiplane_scrape.html#bpy-types-brush-multiplane-scrape-angle"),
|
("bpy.types.brush.multiplane_scrape_angle*", "sculpt_paint/sculpting/tools/multiplane_scrape.html#bpy-types-brush-multiplane-scrape-angle"),
|
||||||
@@ -695,6 +703,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.fmodifierfunctiongenerator*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierfunctiongenerator"),
|
("bpy.types.fmodifierfunctiongenerator*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierfunctiongenerator"),
|
||||||
("bpy.types.geometrynodeattributeclamp*", "modeling/geometry_nodes/attribute/attribute_clamp.html#bpy-types-geometrynodeattributeclamp"),
|
("bpy.types.geometrynodeattributeclamp*", "modeling/geometry_nodes/attribute/attribute_clamp.html#bpy-types-geometrynodeattributeclamp"),
|
||||||
("bpy.types.geometrynodecollectioninfo*", "modeling/geometry_nodes/input/collection_info.html#bpy-types-geometrynodecollectioninfo"),
|
("bpy.types.geometrynodecollectioninfo*", "modeling/geometry_nodes/input/collection_info.html#bpy-types-geometrynodecollectioninfo"),
|
||||||
|
("bpy.types.geometrynodecurveendpoints*", "modeling/geometry_nodes/curve/curve_endpoints.html#bpy-types-geometrynodecurveendpoints"),
|
||||||
("bpy.types.geometrynodecurvesubdivide*", "modeling/geometry_nodes/curve/curve_subdivide.html#bpy-types-geometrynodecurvesubdivide"),
|
("bpy.types.geometrynodecurvesubdivide*", "modeling/geometry_nodes/curve/curve_subdivide.html#bpy-types-geometrynodecurvesubdivide"),
|
||||||
("bpy.types.geometrynodedeletegeometry*", "modeling/geometry_nodes/geometry/delete_geometry.html#bpy-types-geometrynodedeletegeometry"),
|
("bpy.types.geometrynodedeletegeometry*", "modeling/geometry_nodes/geometry/delete_geometry.html#bpy-types-geometrynodedeletegeometry"),
|
||||||
("bpy.types.geometrynodematerialassign*", "modeling/geometry_nodes/material/assign.html#bpy-types-geometrynodematerialassign"),
|
("bpy.types.geometrynodematerialassign*", "modeling/geometry_nodes/material/assign.html#bpy-types-geometrynodematerialassign"),
|
||||||
@@ -765,6 +774,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.geometrynodecurvetopoints*", "modeling/geometry_nodes/curve/curve_to_points.html#bpy-types-geometrynodecurvetopoints"),
|
("bpy.types.geometrynodecurvetopoints*", "modeling/geometry_nodes/curve/curve_to_points.html#bpy-types-geometrynodecurvetopoints"),
|
||||||
("bpy.types.geometrynodeinputmaterial*", "modeling/geometry_nodes/input/material.html#bpy-types-geometrynodeinputmaterial"),
|
("bpy.types.geometrynodeinputmaterial*", "modeling/geometry_nodes/input/material.html#bpy-types-geometrynodeinputmaterial"),
|
||||||
("bpy.types.geometrynodemeshicosphere*", "modeling/geometry_nodes/mesh_primitives/icosphere.html#bpy-types-geometrynodemeshicosphere"),
|
("bpy.types.geometrynodemeshicosphere*", "modeling/geometry_nodes/mesh_primitives/icosphere.html#bpy-types-geometrynodemeshicosphere"),
|
||||||
|
("bpy.types.geometrynodemeshsubdivide*", "modeling/geometry_nodes/mesh/subdivide.html#bpy-types-geometrynodemeshsubdivide"),
|
||||||
("bpy.types.geometrynodepointinstance*", "modeling/geometry_nodes/point/point_instance.html#bpy-types-geometrynodepointinstance"),
|
("bpy.types.geometrynodepointinstance*", "modeling/geometry_nodes/point/point_instance.html#bpy-types-geometrynodepointinstance"),
|
||||||
("bpy.types.geometrynodepointseparate*", "modeling/geometry_nodes/point/point_separate.html#bpy-types-geometrynodepointseparate"),
|
("bpy.types.geometrynodepointseparate*", "modeling/geometry_nodes/point/point_separate.html#bpy-types-geometrynodepointseparate"),
|
||||||
("bpy.types.geometrynoderesamplecurve*", "modeling/geometry_nodes/curve/resample_curve.html#bpy-types-geometrynoderesamplecurve"),
|
("bpy.types.geometrynoderesamplecurve*", "modeling/geometry_nodes/curve/resample_curve.html#bpy-types-geometrynoderesamplecurve"),
|
||||||
@@ -795,6 +805,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.spline.tilt_interpolation*", "modeling/curves/properties/active_spline.html#bpy-types-spline-tilt-interpolation"),
|
("bpy.types.spline.tilt_interpolation*", "modeling/curves/properties/active_spline.html#bpy-types-spline-tilt-interpolation"),
|
||||||
("bpy.types.transformorientation.name*", "editors/3dview/controls/orientation.html#bpy-types-transformorientation-name"),
|
("bpy.types.transformorientation.name*", "editors/3dview/controls/orientation.html#bpy-types-transformorientation-name"),
|
||||||
("bpy.types.volumedisplay.slice_depth*", "modeling/volumes/properties.html#bpy-types-volumedisplay-slice-depth"),
|
("bpy.types.volumedisplay.slice_depth*", "modeling/volumes/properties.html#bpy-types-volumedisplay-slice-depth"),
|
||||||
|
("bpy.ops.clip.lock_selection_toggle*", "editors/clip/introduction.html#bpy-ops-clip-lock-selection-toggle"),
|
||||||
("bpy.ops.mesh.customdata_mask_clear*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-mesh-customdata-mask-clear"),
|
("bpy.ops.mesh.customdata_mask_clear*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-mesh-customdata-mask-clear"),
|
||||||
("bpy.ops.mesh.extrude_vertices_move*", "modeling/meshes/editing/vertex/extrude_vertices.html#bpy-ops-mesh-extrude-vertices-move"),
|
("bpy.ops.mesh.extrude_vertices_move*", "modeling/meshes/editing/vertex/extrude_vertices.html#bpy-ops-mesh-extrude-vertices-move"),
|
||||||
("bpy.ops.mesh.mod_weighted_strength*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-mesh-mod-weighted-strength"),
|
("bpy.ops.mesh.mod_weighted_strength*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-mesh-mod-weighted-strength"),
|
||||||
@@ -802,7 +813,6 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.mesh.select_interior_faces*", "modeling/meshes/selecting/all_by_trait.html#bpy-ops-mesh-select-interior-faces"),
|
("bpy.ops.mesh.select_interior_faces*", "modeling/meshes/selecting/all_by_trait.html#bpy-ops-mesh-select-interior-faces"),
|
||||||
("bpy.ops.mesh.select_similar_region*", "modeling/meshes/selecting/similar.html#bpy-ops-mesh-select-similar-region"),
|
("bpy.ops.mesh.select_similar_region*", "modeling/meshes/selecting/similar.html#bpy-ops-mesh-select-similar-region"),
|
||||||
("bpy.ops.mesh.tris_convert_to_quads*", "modeling/meshes/editing/face/triangles_quads.html#bpy-ops-mesh-tris-convert-to-quads"),
|
("bpy.ops.mesh.tris_convert_to_quads*", "modeling/meshes/editing/face/triangles_quads.html#bpy-ops-mesh-tris-convert-to-quads"),
|
||||||
("bpy.ops.node.active_preview_toggle*", "modeling/geometry_nodes/introduction.html#bpy-ops-node-active-preview-toggle"),
|
|
||||||
("bpy.ops.object.datalayout_transfer*", "scene_layout/object/editing/link_transfer/transfer_mesh_data_layout.html#bpy-ops-object-datalayout-transfer"),
|
("bpy.ops.object.datalayout_transfer*", "scene_layout/object/editing/link_transfer/transfer_mesh_data_layout.html#bpy-ops-object-datalayout-transfer"),
|
||||||
("bpy.ops.object.multires_base_apply*", "modeling/modifiers/generate/multiresolution.html#bpy-ops-object-multires-base-apply"),
|
("bpy.ops.object.multires_base_apply*", "modeling/modifiers/generate/multiresolution.html#bpy-ops-object-multires-base-apply"),
|
||||||
("bpy.ops.object.randomize_transform*", "scene_layout/object/editing/transform/randomize.html#bpy-ops-object-randomize-transform"),
|
("bpy.ops.object.randomize_transform*", "scene_layout/object/editing/transform/randomize.html#bpy-ops-object-randomize-transform"),
|
||||||
@@ -872,6 +882,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.volumedisplay.slice_axis*", "modeling/volumes/properties.html#bpy-types-volumedisplay-slice-axis"),
|
("bpy.types.volumedisplay.slice_axis*", "modeling/volumes/properties.html#bpy-types-volumedisplay-slice-axis"),
|
||||||
("bpy.ops.anim.channels_clean_empty*", "editors/nla/editing.html#bpy-ops-anim-channels-clean-empty"),
|
("bpy.ops.anim.channels_clean_empty*", "editors/nla/editing.html#bpy-ops-anim-channels-clean-empty"),
|
||||||
("bpy.ops.armature.select_hierarchy*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-hierarchy"),
|
("bpy.ops.armature.select_hierarchy*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-hierarchy"),
|
||||||
|
("bpy.ops.armature.switch_direction*", "animation/armatures/bones/editing/switch_direction.html#bpy-ops-armature-switch-direction"),
|
||||||
("bpy.ops.clip.apply_solution_scale*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-apply-solution-scale"),
|
("bpy.ops.clip.apply_solution_scale*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-apply-solution-scale"),
|
||||||
("bpy.ops.clip.set_center_principal*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-set-center-principal"),
|
("bpy.ops.clip.set_center_principal*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-set-center-principal"),
|
||||||
("bpy.ops.clip.setup_tracking_scene*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-setup-tracking-scene"),
|
("bpy.ops.clip.setup_tracking_scene*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-setup-tracking-scene"),
|
||||||
@@ -925,7 +936,9 @@ url_manual_mapping = (
|
|||||||
("bpy.types.functionnodeinputstring*", "modeling/geometry_nodes/input/string.html#bpy-types-functionnodeinputstring"),
|
("bpy.types.functionnodeinputstring*", "modeling/geometry_nodes/input/string.html#bpy-types-functionnodeinputstring"),
|
||||||
("bpy.types.functionnodeinputvector*", "modeling/geometry_nodes/input/vector.html#bpy-types-functionnodeinputvector"),
|
("bpy.types.functionnodeinputvector*", "modeling/geometry_nodes/input/vector.html#bpy-types-functionnodeinputvector"),
|
||||||
("bpy.types.functionnoderandomfloat*", "modeling/geometry_nodes/input/random_float.html#bpy-types-functionnoderandomfloat"),
|
("bpy.types.functionnoderandomfloat*", "modeling/geometry_nodes/input/random_float.html#bpy-types-functionnoderandomfloat"),
|
||||||
|
("bpy.types.geometrynodecurvecircle*", "modeling/geometry_nodes/curve_primitives/circle.html#bpy-types-geometrynodecurvecircle"),
|
||||||
("bpy.types.geometrynodecurvelength*", "modeling/geometry_nodes/curve/curve_length.html#bpy-types-geometrynodecurvelength"),
|
("bpy.types.geometrynodecurvelength*", "modeling/geometry_nodes/curve/curve_length.html#bpy-types-geometrynodecurvelength"),
|
||||||
|
("bpy.types.geometrynodecurvespiral*", "modeling/geometry_nodes/curve_primitives/spiral.html#bpy-types-geometrynodecurvespiral"),
|
||||||
("bpy.types.geometrynodecurvetomesh*", "modeling/geometry_nodes/curve/curve_to_mesh.html#bpy-types-geometrynodecurvetomesh"),
|
("bpy.types.geometrynodecurvetomesh*", "modeling/geometry_nodes/curve/curve_to_mesh.html#bpy-types-geometrynodecurvetomesh"),
|
||||||
("bpy.types.geometrynodemeshtocurve*", "modeling/geometry_nodes/curve/mesh_to_curve.html#bpy-types-geometrynodemeshtocurve"),
|
("bpy.types.geometrynodemeshtocurve*", "modeling/geometry_nodes/curve/mesh_to_curve.html#bpy-types-geometrynodemeshtocurve"),
|
||||||
("bpy.types.geometrynodepointrotate*", "modeling/geometry_nodes/point/point_rotate.html#bpy-types-geometrynodepointrotate"),
|
("bpy.types.geometrynodepointrotate*", "modeling/geometry_nodes/point/point_rotate.html#bpy-types-geometrynodepointrotate"),
|
||||||
@@ -989,6 +1002,7 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.sequencer.select_handles*", "video_editing/sequencer/selecting.html#bpy-ops-sequencer-select-handles"),
|
("bpy.ops.sequencer.select_handles*", "video_editing/sequencer/selecting.html#bpy-ops-sequencer-select-handles"),
|
||||||
("bpy.ops.uv.average_islands_scale*", "modeling/meshes/uv/editing.html#bpy-ops-uv-average-islands-scale"),
|
("bpy.ops.uv.average_islands_scale*", "modeling/meshes/uv/editing.html#bpy-ops-uv-average-islands-scale"),
|
||||||
("bpy.ops.view3d.blenderkit_search*", "addons/3d_view/blenderkit.html#bpy-ops-view3d-blenderkit-search"),
|
("bpy.ops.view3d.blenderkit_search*", "addons/3d_view/blenderkit.html#bpy-ops-view3d-blenderkit-search"),
|
||||||
|
("bpy.types.armature.axes_position*", "animation/armatures/properties/display.html#bpy-types-armature-axes-position"),
|
||||||
("bpy.types.armature.pose_position*", "animation/armatures/properties/skeleton.html#bpy-types-armature-pose-position"),
|
("bpy.types.armature.pose_position*", "animation/armatures/properties/skeleton.html#bpy-types-armature-pose-position"),
|
||||||
("bpy.types.bakesettings.use_clear*", "render/cycles/baking.html#bpy-types-bakesettings-use-clear"),
|
("bpy.types.bakesettings.use_clear*", "render/cycles/baking.html#bpy-types-bakesettings-use-clear"),
|
||||||
("bpy.types.bone.envelope_distance*", "animation/armatures/bones/properties/deform.html#bpy-types-bone-envelope-distance"),
|
("bpy.types.bone.envelope_distance*", "animation/armatures/bones/properties/deform.html#bpy-types-bone-envelope-distance"),
|
||||||
@@ -1024,6 +1038,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.editbone.bbone_scalein*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-scalein"),
|
("bpy.types.editbone.bbone_scalein*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-scalein"),
|
||||||
("bpy.types.editbone.inherit_scale*", "animation/armatures/bones/properties/relations.html#bpy-types-editbone-inherit-scale"),
|
("bpy.types.editbone.inherit_scale*", "animation/armatures/bones/properties/relations.html#bpy-types-editbone-inherit-scale"),
|
||||||
("bpy.types.geometrynodeconvexhull*", "modeling/geometry_nodes/geometry/convex_hull.html#bpy-types-geometrynodeconvexhull"),
|
("bpy.types.geometrynodeconvexhull*", "modeling/geometry_nodes/geometry/convex_hull.html#bpy-types-geometrynodeconvexhull"),
|
||||||
|
("bpy.types.geometrynodefloattoint*", "modeling/geometry_nodes/utilities/float_to_int.html#bpy-types-geometrynodefloattoint"),
|
||||||
("bpy.types.geometrynodeisviewport*", "modeling/geometry_nodes/input/is_viewport.html#bpy-types-geometrynodeisviewport"),
|
("bpy.types.geometrynodeisviewport*", "modeling/geometry_nodes/input/is_viewport.html#bpy-types-geometrynodeisviewport"),
|
||||||
("bpy.types.geometrynodemeshcircle*", "modeling/geometry_nodes/mesh_primitives/circle.html#bpy-types-geometrynodemeshcircle"),
|
("bpy.types.geometrynodemeshcircle*", "modeling/geometry_nodes/mesh_primitives/circle.html#bpy-types-geometrynodemeshcircle"),
|
||||||
("bpy.types.geometrynodeobjectinfo*", "modeling/geometry_nodes/input/object_info.html#bpy-types-geometrynodeobjectinfo"),
|
("bpy.types.geometrynodeobjectinfo*", "modeling/geometry_nodes/input/object_info.html#bpy-types-geometrynodeobjectinfo"),
|
||||||
@@ -1051,6 +1066,8 @@ url_manual_mapping = (
|
|||||||
("bpy.types.volumerender.step_size*", "modeling/volumes/properties.html#bpy-types-volumerender-step-size"),
|
("bpy.types.volumerender.step_size*", "modeling/volumes/properties.html#bpy-types-volumerender-step-size"),
|
||||||
("bpy.types.weightednormalmodifier*", "modeling/modifiers/modify/weighted_normal.html#bpy-types-weightednormalmodifier"),
|
("bpy.types.weightednormalmodifier*", "modeling/modifiers/modify/weighted_normal.html#bpy-types-weightednormalmodifier"),
|
||||||
("bpy.ops.armature.autoside_names*", "animation/armatures/bones/editing/naming.html#bpy-ops-armature-autoside-names"),
|
("bpy.ops.armature.autoside_names*", "animation/armatures/bones/editing/naming.html#bpy-ops-armature-autoside-names"),
|
||||||
|
("bpy.ops.armature.calculate_roll*", "animation/armatures/bones/editing/bone_roll.html#bpy-ops-armature-calculate-roll"),
|
||||||
|
("bpy.ops.armature.duplicate_move*", "animation/armatures/bones/editing/duplicate.html#bpy-ops-armature-duplicate-move"),
|
||||||
("bpy.ops.armature.select_similar*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-similar"),
|
("bpy.ops.armature.select_similar*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-similar"),
|
||||||
("bpy.ops.clip.create_plane_track*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-create-plane-track"),
|
("bpy.ops.clip.create_plane_track*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-create-plane-track"),
|
||||||
("bpy.ops.curve.spline_weight_set*", "modeling/curves/editing/other.html#bpy-ops-curve-spline-weight-set"),
|
("bpy.ops.curve.spline_weight_set*", "modeling/curves/editing/other.html#bpy-ops-curve-spline-weight-set"),
|
||||||
@@ -1099,6 +1116,7 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.wm.operator_cheat_sheet*", "advanced/operators.html#bpy-ops-wm-operator-cheat-sheet"),
|
("bpy.ops.wm.operator_cheat_sheet*", "advanced/operators.html#bpy-ops-wm-operator-cheat-sheet"),
|
||||||
("bpy.ops.wm.previews_batch_clear*", "files/blend/previews.html#bpy-ops-wm-previews-batch-clear"),
|
("bpy.ops.wm.previews_batch_clear*", "files/blend/previews.html#bpy-ops-wm-previews-batch-clear"),
|
||||||
("bpy.ops.wm.recover_last_session*", "files/blend/open_save.html#bpy-ops-wm-recover-last-session"),
|
("bpy.ops.wm.recover_last_session*", "files/blend/open_save.html#bpy-ops-wm-recover-last-session"),
|
||||||
|
("bpy.types.armature.display_type*", "animation/armatures/properties/display.html#bpy-types-armature-display-type"),
|
||||||
("bpy.types.armature.use_mirror_x*", "animation/armatures/bones/tools/tool_settings.html#bpy-types-armature-use-mirror-x"),
|
("bpy.types.armature.use_mirror_x*", "animation/armatures/bones/tools/tool_settings.html#bpy-types-armature-use-mirror-x"),
|
||||||
("bpy.types.bakesettings.normal_b*", "render/cycles/baking.html#bpy-types-bakesettings-normal-b"),
|
("bpy.types.bakesettings.normal_b*", "render/cycles/baking.html#bpy-types-bakesettings-normal-b"),
|
||||||
("bpy.types.bakesettings.normal_g*", "render/cycles/baking.html#bpy-types-bakesettings-normal-g"),
|
("bpy.types.bakesettings.normal_g*", "render/cycles/baking.html#bpy-types-bakesettings-normal-g"),
|
||||||
@@ -1127,8 +1145,10 @@ url_manual_mapping = (
|
|||||||
("bpy.types.editbone.bbone_rollin*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-rollin"),
|
("bpy.types.editbone.bbone_rollin*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-rollin"),
|
||||||
("bpy.types.fluideffectorsettings*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings"),
|
("bpy.types.fluideffectorsettings*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings"),
|
||||||
("bpy.types.followtrackconstraint*", "animation/constraints/motion_tracking/follow_track.html#bpy-types-followtrackconstraint"),
|
("bpy.types.followtrackconstraint*", "animation/constraints/motion_tracking/follow_track.html#bpy-types-followtrackconstraint"),
|
||||||
|
("bpy.types.geometrynodecurveline*", "modeling/geometry_nodes/curve_primitives/line.html#bpy-types-geometrynodecurveline"),
|
||||||
|
("bpy.types.geometrynodecurvestar*", "modeling/geometry_nodes/curve_primitives/star.html#bpy-types-geometrynodecurvestar"),
|
||||||
|
("bpy.types.geometrynodecurvetrim*", "modeling/geometry_nodes/curve/curve_trim.html#bpy-types-geometrynodecurvetrim"),
|
||||||
("bpy.types.geometrynodeedgesplit*", "modeling/geometry_nodes/mesh/edge_split.html#bpy-types-geometrynodeedgesplit"),
|
("bpy.types.geometrynodeedgesplit*", "modeling/geometry_nodes/mesh/edge_split.html#bpy-types-geometrynodeedgesplit"),
|
||||||
("bpy.types.geometrynodesubdivide*", "modeling/geometry_nodes/mesh/subdivide.html#bpy-types-geometrynodesubdivide"),
|
|
||||||
("bpy.types.geometrynodetransform*", "modeling/geometry_nodes/geometry/transform.html#bpy-types-geometrynodetransform"),
|
("bpy.types.geometrynodetransform*", "modeling/geometry_nodes/geometry/transform.html#bpy-types-geometrynodetransform"),
|
||||||
("bpy.types.gpencilsculptsettings*", "grease_pencil/properties/index.html#bpy-types-gpencilsculptsettings"),
|
("bpy.types.gpencilsculptsettings*", "grease_pencil/properties/index.html#bpy-types-gpencilsculptsettings"),
|
||||||
("bpy.types.light.cutoff_distance*", "render/eevee/lighting.html#bpy-types-light-cutoff-distance"),
|
("bpy.types.light.cutoff_distance*", "render/eevee/lighting.html#bpy-types-light-cutoff-distance"),
|
||||||
@@ -1247,6 +1267,8 @@ url_manual_mapping = (
|
|||||||
("bpy.types.volumetomeshmodifier*", "modeling/modifiers/generate/volume_to_mesh.html#bpy-types-volumetomeshmodifier"),
|
("bpy.types.volumetomeshmodifier*", "modeling/modifiers/generate/volume_to_mesh.html#bpy-types-volumetomeshmodifier"),
|
||||||
("bpy.types.whitebalancemodifier*", "video_editing/sequencer/sidebar/modifiers.html#bpy-types-whitebalancemodifier"),
|
("bpy.types.whitebalancemodifier*", "video_editing/sequencer/sidebar/modifiers.html#bpy-types-whitebalancemodifier"),
|
||||||
("bpy.ops.anim.channels_ungroup*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-ungroup"),
|
("bpy.ops.anim.channels_ungroup*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-ungroup"),
|
||||||
|
("bpy.ops.armature.extrude_move*", "animation/armatures/bones/editing/extrude.html#bpy-ops-armature-extrude-move"),
|
||||||
|
("bpy.ops.armature.parent_clear*", "animation/armatures/bones/editing/parenting.html#bpy-ops-armature-parent-clear"),
|
||||||
("bpy.ops.clip.clear_track_path*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-clear-track-path"),
|
("bpy.ops.clip.clear_track_path*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-clear-track-path"),
|
||||||
("bpy.ops.clip.set_scene_frames*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-set-scene-frames"),
|
("bpy.ops.clip.set_scene_frames*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-set-scene-frames"),
|
||||||
("bpy.ops.curve.handle_type_set*", "modeling/curves/editing/control_points.html#bpy-ops-curve-handle-type-set"),
|
("bpy.ops.curve.handle_type_set*", "modeling/curves/editing/control_points.html#bpy-ops-curve-handle-type-set"),
|
||||||
@@ -1424,6 +1446,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.freestylelinestyle*", "render/freestyle/parameter_editor/line_style/index.html#bpy-types-freestylelinestyle"),
|
("bpy.types.freestylelinestyle*", "render/freestyle/parameter_editor/line_style/index.html#bpy-types-freestylelinestyle"),
|
||||||
("bpy.types.gammacrosssequence*", "video_editing/sequencer/strips/transitions/gamma_cross.html#bpy-types-gammacrosssequence"),
|
("bpy.types.gammacrosssequence*", "video_editing/sequencer/strips/transitions/gamma_cross.html#bpy-types-gammacrosssequence"),
|
||||||
("bpy.types.geometrynodeswitch*", "modeling/geometry_nodes/utilities/switch.html#bpy-types-geometrynodeswitch"),
|
("bpy.types.geometrynodeswitch*", "modeling/geometry_nodes/utilities/switch.html#bpy-types-geometrynodeswitch"),
|
||||||
|
("bpy.types.geometrynodeviewer*", "modeling/geometry_nodes/output/viewer.html#bpy-types-geometrynodeviewer"),
|
||||||
("bpy.types.gpencilsculptguide*", "grease_pencil/modes/draw/guides.html#bpy-types-gpencilsculptguide"),
|
("bpy.types.gpencilsculptguide*", "grease_pencil/modes/draw/guides.html#bpy-types-gpencilsculptguide"),
|
||||||
("bpy.types.huecorrectmodifier*", "video_editing/sequencer/sidebar/modifiers.html#bpy-types-huecorrectmodifier"),
|
("bpy.types.huecorrectmodifier*", "video_editing/sequencer/sidebar/modifiers.html#bpy-types-huecorrectmodifier"),
|
||||||
("bpy.types.imagepaint.stencil*", "sculpt_paint/texture_paint/tool_settings/mask.html#bpy-types-imagepaint-stencil"),
|
("bpy.types.imagepaint.stencil*", "sculpt_paint/texture_paint/tool_settings/mask.html#bpy-types-imagepaint-stencil"),
|
||||||
@@ -1462,7 +1485,9 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.anim.channels_group*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-group"),
|
("bpy.ops.anim.channels_group*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-group"),
|
||||||
("bpy.ops.anim.keyframe_clear*", "animation/keyframes/editing.html#bpy-ops-anim-keyframe-clear"),
|
("bpy.ops.anim.keyframe_clear*", "animation/keyframes/editing.html#bpy-ops-anim-keyframe-clear"),
|
||||||
("bpy.ops.armature.flip_names*", "animation/armatures/bones/editing/naming.html#bpy-ops-armature-flip-names"),
|
("bpy.ops.armature.flip_names*", "animation/armatures/bones/editing/naming.html#bpy-ops-armature-flip-names"),
|
||||||
|
("bpy.ops.armature.parent_set*", "animation/armatures/bones/editing/parenting.html#bpy-ops-armature-parent-set"),
|
||||||
("bpy.ops.armature.select_all*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-all"),
|
("bpy.ops.armature.select_all*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-all"),
|
||||||
|
("bpy.ops.armature.symmetrize*", "animation/armatures/bones/editing/symmetrize.html#bpy-ops-armature-symmetrize"),
|
||||||
("bpy.ops.clip.average_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-average-tracks"),
|
("bpy.ops.clip.average_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-average-tracks"),
|
||||||
("bpy.ops.clip.refine_markers*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-refine-markers"),
|
("bpy.ops.clip.refine_markers*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-refine-markers"),
|
||||||
("bpy.ops.clip.select_grouped*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-grouped"),
|
("bpy.ops.clip.select_grouped*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-grouped"),
|
||||||
@@ -1501,6 +1526,8 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.object.shade_smooth*", "scene_layout/object/editing/shading.html#bpy-ops-object-shade-smooth"),
|
("bpy.ops.object.shade_smooth*", "scene_layout/object/editing/shading.html#bpy-ops-object-shade-smooth"),
|
||||||
("bpy.ops.object.voxel_remesh*", "modeling/meshes/retopology.html#bpy-ops-object-voxel-remesh"),
|
("bpy.ops.object.voxel_remesh*", "modeling/meshes/retopology.html#bpy-ops-object-voxel-remesh"),
|
||||||
("bpy.ops.pose.armature_apply*", "animation/armatures/posing/editing/apply.html#bpy-ops-pose-armature-apply"),
|
("bpy.ops.pose.armature_apply*", "animation/armatures/posing/editing/apply.html#bpy-ops-pose-armature-apply"),
|
||||||
|
("bpy.ops.pose.group_deselect*", "animation/armatures/properties/bone_groups.html#bpy-ops-pose-group-deselect"),
|
||||||
|
("bpy.ops.pose.group_unassign*", "animation/armatures/properties/bone_groups.html#bpy-ops-pose-group-unassign"),
|
||||||
("bpy.ops.pose.select_grouped*", "animation/armatures/posing/selecting.html#bpy-ops-pose-select-grouped"),
|
("bpy.ops.pose.select_grouped*", "animation/armatures/posing/selecting.html#bpy-ops-pose-select-grouped"),
|
||||||
("bpy.ops.poselib.pose_remove*", "animation/armatures/posing/editing/pose_library.html#bpy-ops-poselib-pose-remove"),
|
("bpy.ops.poselib.pose_remove*", "animation/armatures/posing/editing/pose_library.html#bpy-ops-poselib-pose-remove"),
|
||||||
("bpy.ops.poselib.pose_rename*", "animation/armatures/posing/editing/pose_library.html#bpy-ops-poselib-pose-rename"),
|
("bpy.ops.poselib.pose_rename*", "animation/armatures/posing/editing/pose_library.html#bpy-ops-poselib-pose-rename"),
|
||||||
@@ -1574,6 +1601,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.wireframemodifier*", "modeling/modifiers/generate/wireframe.html#bpy-types-wireframemodifier"),
|
("bpy.types.wireframemodifier*", "modeling/modifiers/generate/wireframe.html#bpy-types-wireframemodifier"),
|
||||||
("bpy.types.worldmistsettings*", "render/cycles/world_settings.html#bpy-types-worldmistsettings"),
|
("bpy.types.worldmistsettings*", "render/cycles/world_settings.html#bpy-types-worldmistsettings"),
|
||||||
("bpy.ops.anim.channels_move*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-move"),
|
("bpy.ops.anim.channels_move*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-move"),
|
||||||
|
("bpy.ops.armature.subdivide*", "animation/armatures/bones/editing/subdivide.html#bpy-ops-armature-subdivide"),
|
||||||
("bpy.ops.buttons.toggle_pin*", "editors/properties_editor.html#bpy-ops-buttons-toggle-pin"),
|
("bpy.ops.buttons.toggle_pin*", "editors/properties_editor.html#bpy-ops-buttons-toggle-pin"),
|
||||||
("bpy.ops.clip.filter_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-filter-tracks"),
|
("bpy.ops.clip.filter_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-filter-tracks"),
|
||||||
("bpy.ops.clip.select_circle*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-circle"),
|
("bpy.ops.clip.select_circle*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-circle"),
|
||||||
@@ -1675,6 +1703,8 @@ url_manual_mapping = (
|
|||||||
("bpy.types.texturenodegroup*", "editors/texture_node/types/groups.html#bpy-types-texturenodegroup"),
|
("bpy.types.texturenodegroup*", "editors/texture_node/types/groups.html#bpy-types-texturenodegroup"),
|
||||||
("bpy.types.texturenodeimage*", "editors/texture_node/types/input/image.html#bpy-types-texturenodeimage"),
|
("bpy.types.texturenodeimage*", "editors/texture_node/types/input/image.html#bpy-types-texturenodeimage"),
|
||||||
("bpy.types.viewlayer.use_ao*", "render/layers/introduction.html#bpy-types-viewlayer-use-ao"),
|
("bpy.types.viewlayer.use_ao*", "render/layers/introduction.html#bpy-types-viewlayer-use-ao"),
|
||||||
|
("bpy.ops.armature.dissolve*", "animation/armatures/bones/editing/delete.html#bpy-ops-armature-dissolve"),
|
||||||
|
("bpy.ops.armature.separate*", "animation/armatures/bones/editing/separate_bones.html#bpy-ops-armature-separate"),
|
||||||
("bpy.ops.clip.clean_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-clean-tracks"),
|
("bpy.ops.clip.clean_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-clean-tracks"),
|
||||||
("bpy.ops.clip.delete_track*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-delete-track"),
|
("bpy.ops.clip.delete_track*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-delete-track"),
|
||||||
("bpy.ops.clip.solve_camera*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-solve-camera"),
|
("bpy.ops.clip.solve_camera*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-solve-camera"),
|
||||||
@@ -1703,6 +1733,8 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.object.proxy_make*", "files/linked_libraries/library_proxies.html#bpy-ops-object-proxy-make"),
|
("bpy.ops.object.proxy_make*", "files/linked_libraries/library_proxies.html#bpy-ops-object-proxy-make"),
|
||||||
("bpy.ops.object.select_all*", "scene_layout/object/selecting.html#bpy-ops-object-select-all"),
|
("bpy.ops.object.select_all*", "scene_layout/object/selecting.html#bpy-ops-object-select-all"),
|
||||||
("bpy.ops.object.shade_flat*", "scene_layout/object/editing/shading.html#bpy-ops-object-shade-flat"),
|
("bpy.ops.object.shade_flat*", "scene_layout/object/editing/shading.html#bpy-ops-object-shade-flat"),
|
||||||
|
("bpy.ops.pose.group_assign*", "animation/armatures/properties/bone_groups.html#bpy-ops-pose-group-assign"),
|
||||||
|
("bpy.ops.pose.group_select*", "animation/armatures/properties/bone_groups.html#bpy-ops-pose-group-select"),
|
||||||
("bpy.ops.poselib.pose_move*", "animation/armatures/properties/pose_library.html#bpy-ops-poselib-pose-move"),
|
("bpy.ops.poselib.pose_move*", "animation/armatures/properties/pose_library.html#bpy-ops-poselib-pose-move"),
|
||||||
("bpy.ops.preferences.addon*", "editors/preferences/addons.html#bpy-ops-preferences-addon"),
|
("bpy.ops.preferences.addon*", "editors/preferences/addons.html#bpy-ops-preferences-addon"),
|
||||||
("bpy.ops.scene.light_cache*", "render/eevee/render_settings/indirect_lighting.html#bpy-ops-scene-light-cache"),
|
("bpy.ops.scene.light_cache*", "render/eevee/render_settings/indirect_lighting.html#bpy-ops-scene-light-cache"),
|
||||||
@@ -1872,6 +1904,7 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.wm.owner_enable*", "interface/window_system/workspaces.html#bpy-ops-wm-owner-enable"),
|
("bpy.ops.wm.owner_enable*", "interface/window_system/workspaces.html#bpy-ops-wm-owner-enable"),
|
||||||
("bpy.ops.wm.redraw_timer*", "advanced/operators.html#bpy-ops-wm-redraw-timer"),
|
("bpy.ops.wm.redraw_timer*", "advanced/operators.html#bpy-ops-wm-redraw-timer"),
|
||||||
("bpy.types.*light.shadow*", "render/eevee/lighting.html#bpy-types-light-shadow"),
|
("bpy.types.*light.shadow*", "render/eevee/lighting.html#bpy-types-light-shadow"),
|
||||||
|
("bpy.types.armature.show*", "animation/armatures/properties/display.html#bpy-types-armature-show"),
|
||||||
("bpy.types.armaturebones*", "animation/armatures/bones/index.html#bpy-types-armaturebones"),
|
("bpy.types.armaturebones*", "animation/armatures/bones/index.html#bpy-types-armaturebones"),
|
||||||
("bpy.types.arraymodifier*", "modeling/modifiers/generate/array.html#bpy-types-arraymodifier"),
|
("bpy.types.arraymodifier*", "modeling/modifiers/generate/array.html#bpy-types-arraymodifier"),
|
||||||
("bpy.types.bevelmodifier*", "modeling/modifiers/generate/bevel.html#bpy-types-bevelmodifier"),
|
("bpy.types.bevelmodifier*", "modeling/modifiers/generate/bevel.html#bpy-types-bevelmodifier"),
|
||||||
@@ -1919,6 +1952,8 @@ url_manual_mapping = (
|
|||||||
("bpy.types.volumedisplay*", "modeling/volumes/properties.html#bpy-types-volumedisplay"),
|
("bpy.types.volumedisplay*", "modeling/volumes/properties.html#bpy-types-volumedisplay"),
|
||||||
("bpy.types.windowmanager*", "interface/index.html#bpy-types-windowmanager"),
|
("bpy.types.windowmanager*", "interface/index.html#bpy-types-windowmanager"),
|
||||||
("bpy.ops.*.select_lasso*", "interface/selecting.html#bpy-ops-select-lasso"),
|
("bpy.ops.*.select_lasso*", "interface/selecting.html#bpy-ops-select-lasso"),
|
||||||
|
("bpy.ops.armature.align*", "animation/armatures/bones/editing/transform.html#bpy-ops-armature-align"),
|
||||||
|
("bpy.ops.armature.split*", "animation/armatures/bones/editing/split.html#bpy-ops-armature-split"),
|
||||||
("bpy.ops.clip.set_plane*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-plane"),
|
("bpy.ops.clip.set_plane*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-plane"),
|
||||||
("bpy.ops.clip.set_scale*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-scale"),
|
("bpy.ops.clip.set_scale*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-scale"),
|
||||||
("bpy.ops.curve.decimate*", "modeling/curves/editing/curve.html#bpy-ops-curve-decimate"),
|
("bpy.ops.curve.decimate*", "modeling/curves/editing/curve.html#bpy-ops-curve-decimate"),
|
||||||
@@ -1993,6 +2028,7 @@ url_manual_mapping = (
|
|||||||
("bpy.types.wavemodifier*", "modeling/modifiers/deform/wave.html#bpy-types-wavemodifier"),
|
("bpy.types.wavemodifier*", "modeling/modifiers/deform/wave.html#bpy-types-wavemodifier"),
|
||||||
("bpy.types.weldmodifier*", "modeling/modifiers/generate/weld.html#bpy-types-weldmodifier"),
|
("bpy.types.weldmodifier*", "modeling/modifiers/generate/weld.html#bpy-types-weldmodifier"),
|
||||||
("bpy.types.wipesequence*", "video_editing/sequencer/strips/transitions/wipe.html#bpy-types-wipesequence"),
|
("bpy.types.wipesequence*", "video_editing/sequencer/strips/transitions/wipe.html#bpy-types-wipesequence"),
|
||||||
|
("bpy.ops.armature.fill*", "animation/armatures/bones/editing/fill_between_joints.html#bpy-ops-armature-fill"),
|
||||||
("bpy.ops.clip.prefetch*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-prefetch"),
|
("bpy.ops.clip.prefetch*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-prefetch"),
|
||||||
("bpy.ops.clip.set_axis*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-axis"),
|
("bpy.ops.clip.set_axis*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-axis"),
|
||||||
("bpy.ops.file.pack_all*", "files/blend/packed_data.html#bpy-ops-file-pack-all"),
|
("bpy.ops.file.pack_all*", "files/blend/packed_data.html#bpy-ops-file-pack-all"),
|
||||||
@@ -2064,6 +2100,7 @@ url_manual_mapping = (
|
|||||||
("bpy.ops.uv.mark_seam*", "modeling/meshes/uv/unwrapping/seams.html#bpy-ops-uv-mark-seam"),
|
("bpy.ops.uv.mark_seam*", "modeling/meshes/uv/unwrapping/seams.html#bpy-ops-uv-mark-seam"),
|
||||||
("bpy.ops.view3d.ruler*", "editors/3dview/toolbar/measure.html#bpy-ops-view3d-ruler"),
|
("bpy.ops.view3d.ruler*", "editors/3dview/toolbar/measure.html#bpy-ops-view3d-ruler"),
|
||||||
("bpy.types.areaspaces*", "interface/window_system/areas.html#bpy-types-areaspaces"),
|
("bpy.types.areaspaces*", "interface/window_system/areas.html#bpy-types-areaspaces"),
|
||||||
|
("bpy.types.bonegroups*", "animation/armatures/properties/bone_groups.html#bpy-types-bonegroups"),
|
||||||
("bpy.types.bpy_struct*", "files/data_blocks.html#bpy-types-bpy-struct"),
|
("bpy.types.bpy_struct*", "files/data_blocks.html#bpy-types-bpy-struct"),
|
||||||
("bpy.types.collection*", "scene_layout/collections/collections.html#bpy-types-collection"),
|
("bpy.types.collection*", "scene_layout/collections/collections.html#bpy-types-collection"),
|
||||||
("bpy.types.compositor*", "compositing/index.html#bpy-types-compositor"),
|
("bpy.types.compositor*", "compositing/index.html#bpy-types-compositor"),
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 13.2
|
bpy.context.camera.sensor_width = 13.2
|
||||||
bpy.context.camera.sensor_height = 8.80
|
bpy.context.camera.sensor_height = 8.80
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 7.18
|
bpy.context.camera.sensor_width = 7.18
|
||||||
bpy.context.camera.sensor_height = 5.32
|
bpy.context.camera.sensor_height = 5.32
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 6.17
|
bpy.context.camera.sensor_width = 6.17
|
||||||
bpy.context.camera.sensor_height = 4.55
|
bpy.context.camera.sensor_height = 4.55
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 5.76
|
bpy.context.camera.sensor_width = 5.76
|
||||||
bpy.context.camera.sensor_height = 4.29
|
bpy.context.camera.sensor_height = 4.29
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 5.37
|
bpy.context.camera.sensor_width = 5.37
|
||||||
bpy.context.camera.sensor_height = 4.04
|
bpy.context.camera.sensor_height = 4.04
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 4.54
|
bpy.context.camera.sensor_width = 4.54
|
||||||
bpy.context.camera.sensor_height = 3.42
|
bpy.context.camera.sensor_height = 3.42
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 8.8
|
bpy.context.camera.sensor_width = 8.8
|
||||||
bpy.context.camera.sensor_height = 6.6
|
bpy.context.camera.sensor_height = 6.6
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 23.6
|
bpy.context.camera.sensor_width = 23.6
|
||||||
bpy.context.camera.sensor_height = 15.6
|
bpy.context.camera.sensor_height = 15.6
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 22.30
|
bpy.context.camera.sensor_width = 22.30
|
||||||
bpy.context.camera.sensor_height = 14.90
|
bpy.context.camera.sensor_height = 14.90
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 27.90
|
bpy.context.camera.sensor_width = 27.90
|
||||||
bpy.context.camera.sensor_height = 18.60
|
bpy.context.camera.sensor_height = 18.60
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 10.26
|
bpy.context.camera.sensor_width = 10.26
|
||||||
bpy.context.camera.sensor_height = 7.49
|
bpy.context.camera.sensor_height = 7.49
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 22
|
bpy.context.camera.sensor_width = 22
|
||||||
bpy.context.camera.sensor_height = 16
|
bpy.context.camera.sensor_height = 16
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 52.45
|
bpy.context.camera.sensor_width = 52.45
|
||||||
bpy.context.camera.sensor_height = 23.01
|
bpy.context.camera.sensor_height = 23.01
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 71.41
|
bpy.context.camera.sensor_width = 71.41
|
||||||
bpy.context.camera.sensor_height = 52.63
|
bpy.context.camera.sensor_height = 52.63
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 12.35
|
bpy.context.camera.sensor_width = 12.35
|
||||||
bpy.context.camera.sensor_height = 7.42
|
bpy.context.camera.sensor_height = 7.42
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 24.89
|
bpy.context.camera.sensor_width = 24.89
|
||||||
bpy.context.camera.sensor_height = 18.66
|
bpy.context.camera.sensor_height = 18.66
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 54.12
|
bpy.context.camera.sensor_width = 54.12
|
||||||
bpy.context.camera.sensor_height = 25.58
|
bpy.context.camera.sensor_height = 25.58
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 36.70
|
bpy.context.camera.sensor_width = 36.70
|
||||||
bpy.context.camera.sensor_height = 25.54
|
bpy.context.camera.sensor_height = 25.54
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 29.90
|
bpy.context.camera.sensor_width = 29.90
|
||||||
bpy.context.camera.sensor_height = 15.77
|
bpy.context.camera.sensor_height = 15.77
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 12.48
|
bpy.context.camera.sensor_width = 12.48
|
||||||
bpy.context.camera.sensor_height = 7.02
|
bpy.context.camera.sensor_height = 7.02
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 18.96
|
bpy.context.camera.sensor_width = 18.96
|
||||||
bpy.context.camera.sensor_height = 10.00
|
bpy.context.camera.sensor_height = 10.00
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 23.10
|
bpy.context.camera.sensor_width = 23.10
|
||||||
bpy.context.camera.sensor_height = 12.99
|
bpy.context.camera.sensor_height = 12.99
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 25.34
|
bpy.context.camera.sensor_width = 25.34
|
||||||
bpy.context.camera.sensor_height = 14.25
|
bpy.context.camera.sensor_height = 14.25
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 20.70
|
bpy.context.camera.sensor_width = 20.70
|
||||||
bpy.context.camera.sensor_height = 13.80
|
bpy.context.camera.sensor_height = 13.80
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 36
|
bpy.context.camera.sensor_width = 36
|
||||||
bpy.context.camera.sensor_height = 24
|
bpy.context.camera.sensor_height = 24
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 17.3
|
bpy.context.camera.sensor_width = 17.3
|
||||||
bpy.context.camera.sensor_height = 13.0
|
bpy.context.camera.sensor_height = 13.0
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 44
|
bpy.context.camera.sensor_width = 44
|
||||||
bpy.context.camera.sensor_height = 33
|
bpy.context.camera.sensor_height = 33
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 25.60
|
bpy.context.camera.sensor_width = 25.60
|
||||||
bpy.context.camera.sensor_height = 13.5
|
bpy.context.camera.sensor_height = 13.5
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 30.70
|
bpy.context.camera.sensor_width = 30.70
|
||||||
bpy.context.camera.sensor_height = 15.80
|
bpy.context.camera.sensor_height = 15.80
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 29.90
|
bpy.context.camera.sensor_width = 29.90
|
||||||
bpy.context.camera.sensor_height = 15.77
|
bpy.context.camera.sensor_height = 15.77
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 40.96
|
bpy.context.camera.sensor_width = 40.96
|
||||||
bpy.context.camera.sensor_height = 21.60
|
bpy.context.camera.sensor_height = 21.60
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -103,8 +103,8 @@ class Prefs(bpy.types.KeyConfigPreferences):
|
|||||||
v3d_tilde_action: EnumProperty(
|
v3d_tilde_action: EnumProperty(
|
||||||
name="Tilde Action",
|
name="Tilde Action",
|
||||||
items=(
|
items=(
|
||||||
('OBJECT_SWITCH', "Object Switch",
|
('VIEW', "Navigate",
|
||||||
"Switch the active object under the cursor (when not in object mode)",
|
"View operations (useful for keyboards without a numpad)",
|
||||||
0),
|
0),
|
||||||
('GIZMO', "Gizmos",
|
('GIZMO', "Gizmos",
|
||||||
"Control transform gizmos",
|
"Control transform gizmos",
|
||||||
@@ -113,7 +113,7 @@ class Prefs(bpy.types.KeyConfigPreferences):
|
|||||||
description=(
|
description=(
|
||||||
"Action when 'Tilde' is pressed"
|
"Action when 'Tilde' is pressed"
|
||||||
),
|
),
|
||||||
default='OBJECT_SWITCH',
|
default='VIEW',
|
||||||
update=update_fn,
|
update=update_fn,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -730,6 +730,8 @@ def km_user_interface(_params):
|
|||||||
("anim.keyingset_button_add", {"type": 'K', "value": 'PRESS'}, None),
|
("anim.keyingset_button_add", {"type": 'K', "value": 'PRESS'}, None),
|
||||||
("anim.keyingset_button_remove", {"type": 'K', "value": 'PRESS', "alt": True}, None),
|
("anim.keyingset_button_remove", {"type": 'K', "value": 'PRESS', "alt": True}, None),
|
||||||
("ui.reset_default_button", {"type": 'BACK_SPACE', "value": 'PRESS'}, {"properties": [("all", True)]}),
|
("ui.reset_default_button", {"type": 'BACK_SPACE', "value": 'PRESS'}, {"properties": [("all", True)]}),
|
||||||
|
# UI lists (polls check if there's a UI list under the cursor).
|
||||||
|
("ui.list_start_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None),
|
||||||
])
|
])
|
||||||
|
|
||||||
return keymap
|
return keymap
|
||||||
@@ -1084,7 +1086,13 @@ def km_view3d(params):
|
|||||||
{"properties": [("use_all_regions", True), ("center", False)]}),
|
{"properties": [("use_all_regions", True), ("center", False)]}),
|
||||||
("view3d.view_all", {"type": 'C', "value": 'PRESS', "shift": True},
|
("view3d.view_all", {"type": 'C', "value": 'PRESS', "shift": True},
|
||||||
{"properties": [("center", True)]}),
|
{"properties": [("center", True)]}),
|
||||||
op_menu_pie("VIEW3D_MT_view_pie", {"type": 'D', "value": 'CLICK_DRAG'}),
|
op_menu_pie(
|
||||||
|
"VIEW3D_MT_view_pie" if params.v3d_tilde_action == 'VIEW' else "VIEW3D_MT_transform_gizmo_pie",
|
||||||
|
{"type": 'ACCENT_GRAVE', "value": params.pie_value},
|
||||||
|
),
|
||||||
|
*(() if not params.use_pie_click_drag else
|
||||||
|
(("view3d.navigate", {"type": 'ACCENT_GRAVE', "value": 'CLICK'}, None),)),
|
||||||
|
("view3d.navigate", {"type": 'ACCENT_GRAVE', "value": 'PRESS', "shift": True}, None),
|
||||||
("view3d.navigate", {"type": 'ACCENT_GRAVE', "value": 'PRESS', "shift": True}, None),
|
("view3d.navigate", {"type": 'ACCENT_GRAVE', "value": 'PRESS', "shift": True}, None),
|
||||||
# Numpad views.
|
# Numpad views.
|
||||||
("view3d.view_camera", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
|
("view3d.view_camera", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
|
||||||
@@ -1328,32 +1336,6 @@ def km_view3d(params):
|
|||||||
op_tool_cycle("builtin.select_box", {"type": 'W', "value": 'PRESS'}),
|
op_tool_cycle("builtin.select_box", {"type": 'W', "value": 'PRESS'}),
|
||||||
])
|
])
|
||||||
|
|
||||||
# Tilda key.
|
|
||||||
if params.use_pie_click_drag:
|
|
||||||
items.extend([
|
|
||||||
("object.transfer_mode",
|
|
||||||
{"type": 'ACCENT_GRAVE', "value": 'CLICK' if params.use_pie_click_drag else 'PRESS'},
|
|
||||||
None),
|
|
||||||
op_menu_pie(
|
|
||||||
"VIEW3D_MT_transform_gizmo_pie",
|
|
||||||
{"type": 'ACCENT_GRAVE', "value": 'CLICK_DRAG'},
|
|
||||||
)
|
|
||||||
])
|
|
||||||
else:
|
|
||||||
if params.v3d_tilde_action == 'OBJECT_SWITCH':
|
|
||||||
items.append(
|
|
||||||
("object.transfer_mode",
|
|
||||||
{"type": 'ACCENT_GRAVE', "value": 'PRESS'},
|
|
||||||
{"properties": [("use_eyedropper", False)]})
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
items.append(
|
|
||||||
op_menu_pie(
|
|
||||||
"VIEW3D_MT_transform_gizmo_pie",
|
|
||||||
{"type": 'ACCENT_GRAVE', "value": 'PRESS'},
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return keymap
|
return keymap
|
||||||
|
|
||||||
|
|
||||||
@@ -2679,7 +2661,8 @@ def km_sequencer(params):
|
|||||||
{"properties": [("side", 'LEFT')]}),
|
{"properties": [("side", 'LEFT')]}),
|
||||||
("sequencer.select_side_of_frame", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
|
("sequencer.select_side_of_frame", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
|
||||||
{"properties": [("side", 'RIGHT')]}),
|
{"properties": [("side", 'RIGHT')]}),
|
||||||
|
("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True},
|
||||||
|
{"properties": [("data_path", 'tool_settings.use_snap_sequencer')]}),
|
||||||
*_template_items_context_menu("SEQUENCER_MT_context_menu", params.context_menu_event),
|
*_template_items_context_menu("SEQUENCER_MT_context_menu", params.context_menu_event),
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -5071,6 +5054,11 @@ def km_object_non_modal(params):
|
|||||||
("object.origin_set", {"type": 'C', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None),
|
("object.origin_set", {"type": 'C', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None),
|
||||||
])
|
])
|
||||||
else:
|
else:
|
||||||
|
items.extend([
|
||||||
|
# NOTE: this shortcut (while not temporary) is not ideal, see: T89757.
|
||||||
|
("object.transfer_mode", {"type": 'Q', "value": 'PRESS', "alt": True}, None),
|
||||||
|
])
|
||||||
|
|
||||||
if params.use_pie_click_drag:
|
if params.use_pie_click_drag:
|
||||||
items.extend([
|
items.extend([
|
||||||
("object.mode_set", {"type": 'TAB', "value": 'CLICK'},
|
("object.mode_set", {"type": 'TAB', "value": 'CLICK'},
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 13.2
|
bpy.context.camera.sensor_width = 13.2
|
||||||
bpy.context.camera.sensor_height = 8.80
|
bpy.context.camera.sensor_height = 8.80
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 7.18
|
bpy.context.camera.sensor_width = 7.18
|
||||||
bpy.context.camera.sensor_height = 5.32
|
bpy.context.camera.sensor_height = 5.32
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 6.17
|
bpy.context.camera.sensor_width = 6.17
|
||||||
bpy.context.camera.sensor_height = 4.55
|
bpy.context.camera.sensor_height = 4.55
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 5.76
|
bpy.context.camera.sensor_width = 5.76
|
||||||
bpy.context.camera.sensor_height = 4.29
|
bpy.context.camera.sensor_height = 4.29
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 5.37
|
bpy.context.camera.sensor_width = 5.37
|
||||||
bpy.context.camera.sensor_height = 4.04
|
bpy.context.camera.sensor_height = 4.04
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 4.54
|
bpy.context.camera.sensor_width = 4.54
|
||||||
bpy.context.camera.sensor_height = 3.42
|
bpy.context.camera.sensor_height = 3.42
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 8.8
|
bpy.context.camera.sensor_width = 8.8
|
||||||
bpy.context.camera.sensor_height = 6.6
|
bpy.context.camera.sensor_height = 6.6
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import bpy
|
import bpy
|
||||||
bpy.context.camera.sensor_width = 23.6
|
bpy.context.camera.sensor_width = 23.6
|
||||||
bpy.context.camera.sensor_height = 15.6
|
bpy.context.camera.sensor_height = 15.6
|
||||||
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
bpy.context.camera.sensor_fit = 'HORIZONTAL'
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user