Commit 9adf7a58 authored by Alexander Alekhin's avatar Alexander Alekhin

Merge remote-tracking branch 'upstream/3.4' into merge-3.4

parents fad9a51b f368d83f
set(the_description "Optical Flow Algorithms") 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)
...@@ -35,7 +35,11 @@ enum MaterialProperty ...@@ -35,7 +35,11 @@ enum MaterialProperty
MATERIAL_POINT_SIZE, MATERIAL_POINT_SIZE,
MATERIAL_OPACITY, MATERIAL_OPACITY,
MATERIAL_EMISSIVE, MATERIAL_EMISSIVE,
MATERIAL_TEXTURE MATERIAL_TEXTURE0,
MATERIAL_TEXTURE = MATERIAL_TEXTURE0,
MATERIAL_TEXTURE1,
MATERIAL_TEXTURE2,
MATERIAL_TEXTURE3,
}; };
enum EntityProperty enum EntityProperty
...@@ -281,6 +285,15 @@ CV_EXPORTS_W void createPointCloudMesh(const String& name, InputArray vertices, ...@@ -281,6 +285,15 @@ CV_EXPORTS_W void createPointCloudMesh(const String& name, InputArray vertices,
* @param segments number of segments per side * @param segments number of segments per side
*/ */
CV_EXPORTS_W void createGridMesh(const String& name, const Size2f& size, const Size& segments = Size(1, 1)); 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);
//! @} //! @}
} }
} }
......
...@@ -31,11 +31,28 @@ WindowScene::~WindowScene() {} ...@@ -31,11 +31,28 @@ WindowScene::~WindowScene() {}
void _createTexture(const String& name, Mat image) 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(); TextureManager& texMgr = TextureManager::getSingleton();
TexturePtr tex = texMgr.getByName(name, RESOURCEGROUP_NAME); TexturePtr tex = texMgr.getByName(name, RESOURCEGROUP_NAME);
Image im; 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) if (tex)
{ {
...@@ -323,7 +340,7 @@ public: ...@@ -323,7 +340,7 @@ public:
void setBackground(InputArray image) void setBackground(InputArray image)
{ {
CV_Assert(image.type() == CV_8UC3, bgplane); CV_Assert(bgplane);
String name = sceneMgr->getName() + "_Background"; String name = sceneMgr->getName() + "_Background";
...@@ -700,20 +717,23 @@ void setMaterialProperty(const String& name, int prop, const Scalar& val) ...@@ -700,20 +717,23 @@ void setMaterialProperty(const String& name, int prop, const Scalar& val)
void setMaterialProperty(const String& name, int prop, const String& value) 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); MaterialPtr mat = MaterialManager::getSingleton().getByName(name, RESOURCEGROUP_NAME);
CV_Assert(mat); CV_Assert(mat);
Pass* rpass = mat->getTechniques()[0]->getPasses()[0]; 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); rpass->createTextureUnitState(value);
return; return;
} }
rpass->getTextureUnitStates()[0]->setTextureName(value); rpass->getTextureUnitStates()[texUnit]->setTextureName(value);
} }
static bool setShaderProperty(const GpuProgramParametersSharedPtr& params, const String& prop, static bool setShaderProperty(const GpuProgramParametersSharedPtr& params, const String& prop,
...@@ -770,5 +790,13 @@ void setMaterialProperty(const String& name, const String& prop, const Scalar& v ...@@ -770,5 +790,13 @@ void setMaterialProperty(const String& name, const String& prop, const Scalar& v
if(!set) if(!set)
CV_Error_(Error::StsBadArg, ("shader parameter named '%s' not found", prop.c_str())); 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());
}
} }
} }
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
* with support for progressive processing. * with support for progressive processing.
*/ */
#include "cvconfig.h"
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* Determine what native type to use for uint32_t */ /* 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 ...@@ -89,10 +91,9 @@ void hashMurmurx86 ( const void * key, const int len, const uint seed, void * ou
#endif #endif
/* Now find best way we can to READ_UINT32 */ /* Now find best way we can to READ_UINT32 */
#if (defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(i386)) \ #ifndef WORDS_BIGENDIAN
|| (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
# define READ_UINT32(ptr) (*((uint32_t*)(ptr))) # 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)) && defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 && __GNUC_MINOR__>=3))
# define READ_UINT32(ptr) (__builtin_bswap32(*((uint32_t*)(ptr)))) # define READ_UINT32(ptr) (__builtin_bswap32(*((uint32_t*)(ptr))))
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment