From f7e522a1cb57011af794ad0217ae68f07198932c Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg Date: Wed, 8 Aug 2018 15:51:54 +0200 Subject: [PATCH 1/4] ovis: add updateTexture function and allow grayscale texture format --- modules/ovis/include/opencv2/ovis.hpp | 9 +++++++++ modules/ovis/src/ovis.cpp | 29 +++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/modules/ovis/include/opencv2/ovis.hpp b/modules/ovis/include/opencv2/ovis.hpp index cd171a28e..afe2db967 100644 --- a/modules/ovis/include/opencv2/ovis.hpp +++ b/modules/ovis/include/opencv2/ovis.hpp @@ -281,6 +281,15 @@ CV_EXPORTS_W void createPointCloudMesh(const String& name, InputArray vertices, * @param segments number of segments per side */ CV_EXPORTS_W void createGridMesh(const String& name, const Size2f& size, const Size& segments = Size(1, 1)); + +/** + * updates an existing texture + * + * A new texture can be created with @ref createPlaneMesh + * @param name name of the texture + * @param image the image data + */ +CV_EXPORTS_W void updateTexture(const String& name, InputArray image); //! @} } } diff --git a/modules/ovis/src/ovis.cpp b/modules/ovis/src/ovis.cpp index bb798011f..3bccc25f5 100644 --- a/modules/ovis/src/ovis.cpp +++ b/modules/ovis/src/ovis.cpp @@ -31,11 +31,28 @@ WindowScene::~WindowScene() {} void _createTexture(const String& name, Mat image) { + PixelFormat format; + switch(image.type()) + { + case CV_8UC4: + format = PF_BYTE_BGRA; + break; + case CV_8UC3: + format = PF_BYTE_BGR; + break; + case CV_8UC1: + format = PF_BYTE_L; + break; + default: + CV_Error(Error::StsBadArg, "currently only CV_8UC1, CV_8UC3, CV_8UC4 textures are supported"); + break; + } + TextureManager& texMgr = TextureManager::getSingleton(); TexturePtr tex = texMgr.getByName(name, RESOURCEGROUP_NAME); Image im; - im.loadDynamicImage(image.ptr(), image.cols, image.rows, 1, PF_BYTE_BGR); + im.loadDynamicImage(image.ptr(), image.cols, image.rows, 1, format); if (tex) { @@ -323,7 +340,7 @@ public: void setBackground(InputArray image) { - CV_Assert(image.type() == CV_8UC3, bgplane); + CV_Assert(bgplane); String name = sceneMgr->getName() + "_Background"; @@ -770,5 +787,13 @@ void setMaterialProperty(const String& name, const String& prop, const Scalar& v if(!set) CV_Error_(Error::StsBadArg, ("shader parameter named '%s' not found", prop.c_str())); } + +void updateTexture(const String& name, InputArray image) +{ + CV_Assert(_app); + TexturePtr tex = TextureManager::getSingleton().getByName(name, RESOURCEGROUP_NAME); + CV_Assert(tex); + _createTexture(name, image.getMat()); +} } } From c655c31054a66c7bc1f3fac649066e52f224a17f Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg Date: Wed, 8 Aug 2018 17:05:46 +0200 Subject: [PATCH 2/4] ovis: allow up to 4 active texture units --- modules/ovis/include/opencv2/ovis.hpp | 6 +++++- modules/ovis/src/ovis.cpp | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/ovis/include/opencv2/ovis.hpp b/modules/ovis/include/opencv2/ovis.hpp index afe2db967..d9f684c07 100644 --- a/modules/ovis/include/opencv2/ovis.hpp +++ b/modules/ovis/include/opencv2/ovis.hpp @@ -35,7 +35,11 @@ enum MaterialProperty MATERIAL_POINT_SIZE, MATERIAL_OPACITY, MATERIAL_EMISSIVE, - MATERIAL_TEXTURE + MATERIAL_TEXTURE0, + MATERIAL_TEXTURE = MATERIAL_TEXTURE0, + MATERIAL_TEXTURE1, + MATERIAL_TEXTURE2, + MATERIAL_TEXTURE3, }; enum EntityProperty diff --git a/modules/ovis/src/ovis.cpp b/modules/ovis/src/ovis.cpp index 3bccc25f5..44723c2cc 100644 --- a/modules/ovis/src/ovis.cpp +++ b/modules/ovis/src/ovis.cpp @@ -717,20 +717,23 @@ void setMaterialProperty(const String& name, int prop, const Scalar& val) void setMaterialProperty(const String& name, int prop, const String& value) { - CV_Assert(prop == MATERIAL_TEXTURE, _app); + CV_Assert(prop >= MATERIAL_TEXTURE0, prop <= MATERIAL_TEXTURE3, _app); MaterialPtr mat = MaterialManager::getSingleton().getByName(name, RESOURCEGROUP_NAME); CV_Assert(mat); Pass* rpass = mat->getTechniques()[0]->getPasses()[0]; - if (rpass->getTextureUnitStates().empty()) + size_t texUnit = prop - MATERIAL_TEXTURE0; + CV_Assert(texUnit <= rpass->getTextureUnitStates().size()); + + if (rpass->getTextureUnitStates().size() <= texUnit) { rpass->createTextureUnitState(value); return; } - rpass->getTextureUnitStates()[0]->setTextureName(value); + rpass->getTextureUnitStates()[texUnit]->setTextureName(value); } static bool setShaderProperty(const GpuProgramParametersSharedPtr& params, const String& prop, From ac7d1ca613fa5206ff1641c288cbe818fbb6c224 Mon Sep 17 00:00:00 2001 From: trobro Date: Thu, 9 Aug 2018 22:06:13 +0200 Subject: [PATCH 3/4] optflow: is depending on opencv_flann --- modules/optflow/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/optflow/CMakeLists.txt b/modules/optflow/CMakeLists.txt index 8cd4e1073..39a37f143 100644 --- a/modules/optflow/CMakeLists.txt +++ b/modules/optflow/CMakeLists.txt @@ -1,2 +1,2 @@ set(the_description "Optical Flow Algorithms") -ocv_define_module(optflow opencv_core opencv_imgproc opencv_video opencv_ximgproc opencv_imgcodecs WRAP python) +ocv_define_module(optflow opencv_core opencv_imgproc opencv_video opencv_ximgproc opencv_imgcodecs opencv_flann WRAP python) From acad7bbee5f54e78eb0b9107e58f49fcf0782f4c Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 12 Aug 2018 21:52:41 +0000 Subject: [PATCH 4/4] build: replace big/little endianess check to WORDS_BIGENDIAN macro --- modules/surface_matching/src/hash_murmur86.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/surface_matching/src/hash_murmur86.hpp b/modules/surface_matching/src/hash_murmur86.hpp index 2c6b04601..1edf6bf42 100644 --- a/modules/surface_matching/src/hash_murmur86.hpp +++ b/modules/surface_matching/src/hash_murmur86.hpp @@ -8,6 +8,8 @@ * with support for progressive processing. */ +#include "cvconfig.h" + /* ------------------------------------------------------------------------- */ /* Determine what native type to use for uint32_t */ @@ -89,10 +91,9 @@ void hashMurmurx86 ( const void * key, const int len, const uint seed, void * ou #endif /* Now find best way we can to READ_UINT32 */ -#if (defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(i386)) \ - || (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#ifndef WORDS_BIGENDIAN # define READ_UINT32(ptr) (*((uint32_t*)(ptr))) -#elif (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#elif defined(WORDS_BIGENDIAN) && defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 && __GNUC_MINOR__>=3)) # define READ_UINT32(ptr) (__builtin_bswap32(*((uint32_t*)(ptr)))) #endif