From 2a5b5030bad3438c1afcf3e21b615bbe8a8e55c7 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 4 Aug 2021 13:18:14 +0200 Subject: [PATCH 1/4] dtoolbase: Fix ability to use std::round() compiling for macOS 10.6 --- dtool/src/dtoolbase/dtoolbase_cc.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dtool/src/dtoolbase/dtoolbase_cc.h b/dtool/src/dtoolbase/dtoolbase_cc.h index 8894469422..dd73c7554d 100644 --- a/dtool/src/dtoolbase/dtoolbase_cc.h +++ b/dtool/src/dtoolbase/dtoolbase_cc.h @@ -162,6 +162,18 @@ namespace std { __atomic_clear(&_flag, order); } }; + + ALWAYS_INLINE float round(float arg) { + return ::roundf(arg); + } + ALWAYS_INLINE double round(double arg) { + return ::round(arg); + } + ALWAYS_INLINE long double round(long double arg) { + return ::roundl(arg); + } + using ::roundf; + using ::roundl; }; #else // Expect that we have access to the header. From 4a33e8866ee2cd02b9d48570f7d7ef20c63c7e0e Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 4 Aug 2021 13:35:27 +0200 Subject: [PATCH 2/4] dtoolbase: Add missing overloads for std::round on macOS 10.6 --- dtool/src/dtoolbase/dtoolbase_cc.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/dtool/src/dtoolbase/dtoolbase_cc.h b/dtool/src/dtoolbase/dtoolbase_cc.h index dd73c7554d..9845adfcc1 100644 --- a/dtool/src/dtoolbase/dtoolbase_cc.h +++ b/dtool/src/dtoolbase/dtoolbase_cc.h @@ -172,6 +172,36 @@ namespace std { ALWAYS_INLINE long double round(long double arg) { return ::roundl(arg); } + ALWAYS_INLINE double round(signed char arg) { + return (double)arg; + } + ALWAYS_INLINE double round(unsigned char arg) { + return (double)arg; + } + ALWAYS_INLINE double round(short arg) { + return (double)arg; + } + ALWAYS_INLINE double round(unsigned short arg) { + return (double)arg; + } + ALWAYS_INLINE double round(int arg) { + return (double)arg; + } + ALWAYS_INLINE double round(unsigned int arg) { + return (double)arg; + } + ALWAYS_INLINE double round(long arg) { + return (double)arg; + } + ALWAYS_INLINE double round(unsigned long arg) { + return (double)arg; + } + ALWAYS_INLINE double round(long long arg) { + return (double)arg; + } + ALWAYS_INLINE double round(unsigned long long arg) { + return (double)arg; + } using ::roundf; using ::roundl; }; From 20e081482fb052fab2c48ba5fb7c0a4cda21335f Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 5 Aug 2021 09:36:51 +0200 Subject: [PATCH 3/4] glgsg: detect and fix overlapping SSBO bindings Fixes #1176 --- .../src/glstuff/glGraphicsStateGuardian_src.cxx | 2 ++ panda/src/glstuff/glGraphicsStateGuardian_src.h | 1 + panda/src/glstuff/glShaderContext_src.cxx | 16 ++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index 95521ece40..4f0a30df8a 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -2134,6 +2134,8 @@ reset() { get_extension_func("glGetProgramResourceName"); _glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC) get_extension_func("glGetProgramResourceiv"); + _glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC) + get_extension_func("glShaderStorageBlockBinding"); } else #endif { diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.h b/panda/src/glstuff/glGraphicsStateGuardian_src.h index 02e22961ce..19d4a63d68 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.h +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.h @@ -1068,6 +1068,7 @@ public: PFNGLGETPROGRAMINTERFACEIVPROC _glGetProgramInterfaceiv; PFNGLGETPROGRAMRESOURCENAMEPROC _glGetProgramResourceName; PFNGLGETPROGRAMRESOURCEIVPROC _glGetProgramResourceiv; + PFNGLSHADERSTORAGEBLOCKBINDINGPROC _glShaderStorageBlockBinding; #endif // !OPENGLES GLenum _edge_clamp; diff --git a/panda/src/glstuff/glShaderContext_src.cxx b/panda/src/glstuff/glShaderContext_src.cxx index 2abe4659ea..e0db33e350 100644 --- a/panda/src/glstuff/glShaderContext_src.cxx +++ b/panda/src/glstuff/glShaderContext_src.cxx @@ -341,6 +341,8 @@ CLP(ShaderContext)(CLP(GraphicsStateGuardian) *glgsg, Shader *s) : ShaderContext block_maxlength = max(64, block_maxlength); char *block_name_cstr = (char *)alloca(block_maxlength); + BitArray bindings; + for (int i = 0; i < block_count; ++i) { block_name_cstr[0] = 0; _glgsg->_glGetProgramResourceName(_glsl_program, GL_SHADER_STORAGE_BLOCK, i, block_maxlength, nullptr, block_name_cstr); @@ -349,6 +351,20 @@ CLP(ShaderContext)(CLP(GraphicsStateGuardian) *glgsg, Shader *s) : ShaderContext GLint values[2]; _glgsg->_glGetProgramResourceiv(_glsl_program, GL_SHADER_STORAGE_BLOCK, i, 2, props, 2, nullptr, values); + if (bindings.get_bit(values[0])) { + // Binding index already in use, assign a different one. + values[0] = bindings.get_lowest_off_bit(); + _glgsg->_glShaderStorageBlockBinding(_glsl_program, i, values[0]); + } + bindings.set_bit(values[0]); + + if (GLCAT.is_debug()) { + GLCAT.debug() + << "Active shader storage block " << block_name_cstr + << " with size " << values[1] << " is bound to binding " + << values[0] << "\n"; + } + StorageBlock block; block._name = InternalName::make(block_name_cstr); block._binding_index = values[0]; From 8ad4234df8ac90131fadc161545c3ad159760c77 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 11 Aug 2021 09:19:03 +0200 Subject: [PATCH 4/4] pgui: prevent error when rendering in offscreen mode Fixes #1174 --- panda/src/pgui/pgTop.I | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/panda/src/pgui/pgTop.I b/panda/src/pgui/pgTop.I index 775e8cf827..24823b577b 100644 --- a/panda/src/pgui/pgTop.I +++ b/panda/src/pgui/pgTop.I @@ -74,6 +74,7 @@ get_start_sort() const { */ INLINE void PGTop:: add_region(MouseWatcherRegion *region) { - nassertv(_watcher_group != nullptr); - _watcher_group->add_region(region); + if (_watcher_group != nullptr) { + _watcher_group->add_region(region); + } }