1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042 |
- /* /////////////////////////////////////////////////////////////////////////////
- //
- // INTEL CORPORATION PROPRIETARY INFORMATION
- // This software is supplied under the terms of a license agreement or
- // nondisclosure agreement with Intel Corporation and may not be copied
- // or disclosed except in accordance with the terms of that agreement.
- // Copyright(c) 2006-2009 Intel Corporation. All Rights Reserved.
- //
- // Intel(R) Performance Primitives
- // Realistic Rendering Library (ippRR)
- //
- */
- #if !defined( __IPPR_H__ ) || defined( _OWN_BLDPCS )
- #define __IPPR_H__
- #if defined (_WIN32_WCE) && defined (_M_IX86) && defined (__stdcall)
- #define _IPP_STDCALL_CDECL
- #undef __stdcall
- #endif
- #ifndef __IPPDEFS_H__
- #include "ippdefs.h"
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if !defined( _OWN_BLDPCS )
- typedef float IppPoint2D_32f[2];
- typedef float IppPoint3D_32f[3];
- typedef float IppVector3D_32f[4];
- typedef IppPoint3D_32f IppBox3D_32f[2];
- typedef IppPoint3D_32f IppTriangle3D_32f[3];
- typedef struct TriangleAccel IpprTriangleAccel;
- typedef struct KDTreeNode{
- Ipp32s flag_k_ofs;
- union _tree_data{
- Ipp32f split;
- Ipp32s items;
- }tree_data;
- }IpprKDTreeNode;
- typedef struct IntersectContext{
- IppBox3D_32f *pBound; /* pointer to bounding box for a whole object */
- IpprTriangleAccel *pAccel; /* pointer to triangle acceleration structure */
- IpprKDTreeNode *pRootNode; /* pointer to KD-tree root node */
- }IpprIntersectContext;
- /* Tree building algorithm identifiers */
- typedef enum {
- ippKDTBuildSimple = 0x499d3dc2, /* Simple building mode */
- ippKDTBuildPureSAH = 0x2d07705b /* SAH building mode */
- }IpprKDTreeBuildAlg;
- /* Context for simple building mode */
- typedef struct SimpleBuilderContext{
- IpprKDTreeBuildAlg Alg; /* Must be equal to ippKDTBuildSimple constant */
- Ipp32s MaxDepth; /* Subdivision depth (with middle point subdivision) */
- }IpprSmplBldContext;
- /* Context for SAH building mode */
- typedef struct PSAHBuilderContext{
- IpprKDTreeBuildAlg Alg; /* Must be equal to ippKDTBuildPureSAH constant */
- Ipp32s MaxDepth; /* Maximum tree subdivision depth (minimum - 0, maximum - 51) */
- Ipp32f QoS; /* Termination criteria modifier */
- Ipp32s AvailMemory; /* Maximum available memory in Mb */
- IppBox3D_32f *Bounds; /* Cut-off bounding box */
- }IpprPSAHBldContext;
- typedef enum {
- ippNormInd = 3,
- ippTriInd = 4
- } IpprIndexType;
- typedef enum _IpprSHType{
- ipprSHNormDirect=0, /* Normalized Spherical harmonic functions, direct computation */
- ipprSHNormRecurr /* Normalized Spherical harmonic functions, recurrent computation */
- }IpprSHType;
- typedef struct rSHState IpprSHState;
- #endif /* _OWN_BLDPCS */
- /* /////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- // Functions declarations
- ////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////// */
- /* /////////////////////////////////////////////////////////////////////////////
- // Name: ipprGetLibVersion
- // Purpose: getting of the library version
- // Returns: the structure of information about version
- // of ippRR library
- // Parameters:
- //
- // Notes: not necessary to release the returned structure
- */
- IPPAPI( const IppLibraryVersion*, ipprGetLibVersion, (void) )
- /* /////////////////////////////////////////////////////////////////////////////
- // Acceleration Functions
- //////////////////////////////////////////////////////////////////////////////// */
- /* ///////////////////////////////////////////////////////////////////////////
- // Name:
- // ipprTriangleAccelInit
- // Purpose:
- // Initialize a IpprtTriangleAccel for future usage in ipprIntersect...
- // Input Arguments:
- // pVertexCoord - pointer to the array of vertex coordinate.
- // pTrnglIndex - pointer to the triangle's indexes.
- // cntTrngl - the number of triangles.
- // Input Arguments:
- // pTrnglAccel - pointer to the structure IpprTriangleAccel
- // Returns:
- // ippStsNoErr No error.
- */
- IPPAPI(IppStatus, ipprTriangleAccelInit,(
- IpprTriangleAccel* pTrnglAccel,const Ipp32f* pVertexCoord,const Ipp32s* pTrnglIndex,int cntTrngl ))
- /* ///////////////////////////////////////////////////////////////////////////
- // Name:
- // ipprTriangleAccelGetSize
- //
- // Purpose:
- // Return size of IpprtTriangleAccel
- // Parameters:
- // pTrnglAccelSize - pointer to the resulting size of the structure
- // IpprtTriangleAccel
- // Returns:
- // ippStsNoErr No error.
- // ippStsNullPtrErr Indicates an error when pointer pTrnglAccelSize is NULL.
- */
- IPPAPI(IppStatus, ipprTriangleAccelGetSize,(int* pTrnglAccelSize))
- /* ///////////////////////////////////////////////////////////////////////////
- Name:
- ippiKDTreeBuildAlloc
- Purpose:
- Build the k-D tree for the set of triangles using one of predefined construction
- algorithms controlled by service parameters context.
- Parameters:
- pDstKDTree - address of a pointer to the built tree;
- pSrcVert - pointer to the scene element vertices array;
- pSrcTriInx - pointer to the scene element indexed triangles array;
- SrcVertSize - size of vertices array;
- SrcTriSize - size of triangles array;
- pDstKDTreeSize - address of the built tree size;
- QoS - fuzzy quality control parameter. takes values from 0.0 to 1.0;
- AlgType - type of tree construction algorithm
- Returns:
- ippStsNoErr No error.
- ippStsNullPtrErr Indicates an error when one of the pointers is NULL.
- ippStsSizeErr Wrong (negative) size of one of arrays.
- ippStsOutOfRangeErr QoS is out of [0.0, 1.0] range.
- ippStsNoMemErr Not enough memory for the tree construction algorithm.
- ippStsBadArgErr Unknown algorithm type.
- */
- IPPAPI(IppStatus, ipprKDTreeBuildAlloc,(
- IpprKDTreeNode **pDstKDTree,
- const Ipp32f * const pSrcVert,
- const Ipp32s * const pSrcTriInx,
- Ipp32s SrcVertSize,
- Ipp32s SrcTriSize,
- Ipp32s *pDstKDTreeSize,
- const void * const pBldContext))
- /* ///////////////////////////////////////////////////////////////////////////
- Name:
- ippiKDTreeFree
- Purpose:
- Frees memory allocated for the k-D tree during ippiKDTreeBuildAlloc.
- Parameters:
- pSrcKDTree - a pointer to the k-D tree;
- Returns:
- */
- IPPAPI(void, ipprKDTreeFree,(
- IpprKDTreeNode *pSrcKDTree))
- /* /////////////////////////////////////////////////////////////////////////////
- // Ray-scene Intersection Engine
- ////////////////////////////////////////////////////////////////////////////// */
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprIntersectMO_32f
- // Purpose: Calculates intersection points of rays with triangles,the indexes those triangles,
- // the distances from origin points to intersection points.
- //
- // Input Arguments:
- // pOrigin - array of pointers to a separate coordinates(x,y,z)of planes of the origin points..
- // pDirection - array of pointers to a separate coordinates(x,y,z)of planes of the ray's directions.
- // pContext - pointer to the intersection's context.
- // blockSize - size of rays' block.
- // Input/Output Arguments:
- // pDist - pointer to the distance from origin to intersection point. Else it is input value.
- // As input pDist[i] should be 0.f if you don't want to process this ray.
- // Output Arguments:
- // pHit - pointer to the local surface parameters( u, v )at hit point in case of intersection was found.
- // pTrngl - pointer to the Triangle index in case of intersection was found. Else it is -1.
- // Returns:
- // ippStsNoErr No errors
- // ippStsNoMemErr The node stack is overfilled.
- */
- IPPAPI(IppStatus,ipprIntersectMO_32f,(
- const Ipp32f* const pOrigin[3],
- const Ipp32f* const pDirection[3],
- Ipp32f* pDist,
- Ipp32f* pHit[2],
- Ipp32s* pTrngl,
- const IpprIntersectContext* pContext,
- IppiSize blockSize
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprIntersectEyeSO_32f
- // Purpose: Calculates intersection points of rays with triangles,the indexes those triangles,
- // the distances from origin points to intersection points.
- //
- // Input Arguments:
- // originEye - origin point.All rays have a single origin.
- // pDirection - array of pointers to a separate coordinates(x,y,z)of planes of the ray's directions.
- // pContext - pointer to the intersection's context.
- // blockSize - size of rays' block.
- // Output Arguments:
- // pDist - pointer to the distance from origin to intersection point. Else it is IPP_MAXABS_32F.
- // pHit - pointer to the local surface parameters( u, v )at hit point in case of intersection was found.
- // pTrngl - pointer to the Triangle index in case of intersection was found. Else it is -1.
- // Returns:
- // ippStsNoErr No errors
- // ippStsNoMemErr The node stack is overfilled.
- */
- IPPAPI(IppStatus,ipprIntersectEyeSO_32f,(
- IppPoint3D_32f originEye,
- const Ipp32f* const pDirection[3],
- Ipp32f* pDist,
- Ipp32f* pHit[2],
- Ipp32s* pTrngl,
- const IpprIntersectContext* pContext,
- IppiSize blockSize
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprIntersectMultipleSO_32f
- // Purpose: Calculates intersection points of rays with triangles,the indexes those triangles,
- // the distances from origin points to intersection points.
- //
- //Input parameters:
- // originEye origin point.All rays have a single origin.
- // pDirection 2D array of pointers to the vectors of directions.
- // pContext Pointer to the intersection context.
- // blockVolume blockVolume.width * blockVolume.height is total number of the rays.
- // blockVolume.depth - the specified number of the scene triangles.
- //Input Output parameters:
- //pDist Pointer to the 3D array of distances between the hit point and origin of the rays.
- //Output parameters:
- //pHit 3D array of pointers to the local surface parameters (u, v) at the hit
- // point if the intersection is found.
- //pTrngl Pointer to the 3D array of triangle indexes if the intersection is found. If not it is set to-1.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus,ipprIntersectMultipleSO_32f,(
- IppPoint3D_32f originEye,
- const Ipp32f* const pDirection[3],
- Ipp32f* pDistance,
- Ipp32f* pHit[2],
- Ipp32s* pTrngl,
- IpprVolume blockVolume,
- const IpprIntersectContext* pContext
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprIntersectAnySO_32f
- // Purpose: performs occlusion tests for block of rays with single origin.
- //
- // Input Arguments:
- // originEye - origin point.All rays have a single origin.
- // pDirection - array of pointers to a separate coordinates(x,y,z)of planes of the ray's directions.
- // pContext - pointer to the intersection's context.
- // blockSize - size of rays' block.
- // Input/Output Arguments:
- // pMask - pointer to the array of the mask. If output pMask[i][j] = 0, occlusion test for this ray is true.
- // Else it is input value.
- // As input pMask[i][j] should be 0 if you don't want to process this ray.Else it should be -1.
- // pTrngl - pointer to the Triangle index in case of intersection was found. Else it is -1.
- // Returns:
- // ippStsNoErr No errors
- // ippStsNoMemErr The node stack is overfilled.
- */
- IPPAPI(IppStatus,ipprIntersectAnySO_32f,(
- IppPoint3D_32f originEye,
- const Ipp32f* const pDirection[3],
- Ipp32s* pOccluder,
- Ipp32s* pMask,
- IppiSize blockSize,
- const IpprIntersectContext* pContext
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Shaders Support Functions
- //////////////////////////////////////////////////////////////////////////////// */
- /* /////////////////////////////////////////////////////////////////////////////
- // Name: ipprMul_32f_C1P3IM
- // Purpose: Purpose: multiplies each element of three vectors of the accumulator (pSrcDst)
- // for which the corresponding element of a vector of a mask more or is equal to zero,
- // by an element of an source vector.
- // Name: ipprMul_32f_IM
- // Purpose: Multiplies an element of the accumulator (pSrcDst)
- // for which the corresponding element of a vector of a mask more or is equal to zero,
- // by an element of an source vector.
- // Input Arguments:
- // pSrc - pointer to the first source vector
- // pMask - pointer to the first mask's vector
- // len length of the vectors
- // Input/Output Arguments:
- // pSrcDst - pointer to the source/destination (accumulator) vectors.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus,ipprMul_32f_C1P3IM,( const Ipp32f* pSrc, const Ipp32s* pMask,
- Ipp32f* pSrcDst[3], int len ))
- IPPAPI(IppStatus,ipprMul_32f_C1IM,( const Ipp32f* pSrc, const Ipp32s* pMask,
- Ipp32f* pSrcDst, int len ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Name: ipprAddMulMul_32f_AC1P3IM
- // Purpose: multiplies elements of two triplex source vectors and adds product
- // to triplex of the accumulator vectors ???
- // Input Arguments:
- // point - source point.
- // pSrc0 - pointer to the first source vector
- // pSrc1 - pointer to the second source vector
- // pMask - pointer to the mask's vector
- // len - length of the vectors
- // Output Arguments:
- // pSrcDst - pointer to the source/destination (accumulator) vector.
- // Notes:
- // pSrcDst[0][n] = pSrcDst[0][n] + pSrc1[n] * pSrc2[n] * point[0], n=0,1,2,..len-1.
- // pSrcDst[1][n] = pSrcDst[1][n] + pSrc1[n] * pSrc2[n] * point[1],
- // pSrcDst[2][n] = pSrcDst[2][n] + pSrc1[n] * pSrc2[n] * point[2],
- // E.g for Lambertian cosine low.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus,ipprAddMulMul_32f_AC1P3IM,(
- IppPoint3D_32f point,
- const Ipp32f* pSrc0,
- const Ipp32f* const pSrc1[3],
- const Ipp32s* pMask,
- Ipp32f* pSrcDst[3],
- int len
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Name: ipprDiv_32f_C1IM
- // Purpose: divides an element of the accumulator (pSrcDst) for which the corresponding
- // element of a vector of a mask more or is equal to zero, into an element of an source vector.
- // Input Arguments:
- // pSrc - pointer to the divisor source vector
- // pMask - pointer to the mask vector.
- // len - vector's length, number of items.
- // Input-Output Argument:
- // pSrcDst - pointer to the source/destination (accumulator) vector.
- //
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus,ipprDiv_32f_C1IM,(const Ipp32f* pSrc, const Ipp32s* pMask, Ipp32f* pSrcDst, int len ))
- /* ///////////////////////////////////////////////////////////////////////////
- // Name:
- // ipprDot_32f_P3C1M
- // Purpose:
- // calculates dot product of the incident ray directions and normales of surface.
- // Input Arguments:
- // pDirection - pointer to array of pointers to a separate coordinates(x,y,z)of planes of the ray's directions.
- // pDist - pointer to the IpprPointsOnRays_SO structure
- // pSurfNorm - pointer to the surface's normals.
- // Output arguments:
- // pSurfDotIn - pointer to the dot product.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus, ipprDot_32f_P3C1M,( const Ipp32f* const pSrc0[3],
- const Ipp32f* const pSrc1[3],const Ipp32s* pMask, Ipp32f* pDot, int len ))
- IPPAPI(IppStatus, ipprDotChangeNorm_32f_IM,( const Ipp32f* const pSrc[3],
- const Ipp32s* pMask, Ipp32f* pSrcDst[3],Ipp32f* pDot,int len ))
- /* ///////////////////////////////////////////////////////////////////////////
- // Name:
- // ipprDot_32f_M
- */
- IPPAPI(IppStatus, ipprDistAttenuationSO_32f_M,( IppPoint3D_32f point, const Ipp32f* const pSurfHit[3],
- const Ipp32s* pMask, Ipp32f* pDist, int len ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Rays' casting
- //////////////////////////////////////////////////////////////////////////////// */
- /* /////////////////////////////////////////////////////////////////////////////
- // Name: ipprCastEye_32f
- // Purpose: to calculate the primary ray's vectors.
- // Input Arguments:
- // imPlaneOrg - the coordinate of origin the projection's plane.
- // dW - a step along width of the projection's plane.
- // dH - a step along height of the projection's plane.
- // wB - the number of block along width of Image.
- // hB - the number of block along height of Image.
- // cBlock - total number of rays in the block
- // blockSize - total number of the rays in the current block.
- // Input-Output Argument:
- // pDirection - pointer to the destination vector. It is not normalised.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus,ipprCastEye_32f,(
- IppPoint3D_32f imPlaneOrg,
- IppPoint3D_32f dW,
- IppPoint3D_32f dH,
- int wB,int hB,
- IppiSize cBlock,
- Ipp32f* pDirection[3],
- IppiSize blockSize ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprCastShadowSO_32f
- // Purpose: calculates block of shadow rays. for which the corresponding
- // element of a vector of a pMask more or is equal to zero.
- // Input Arguments:
- // pOrigin - pointer to the origin point.
- // pSurfDotIn - pointer to the vector of dot products of incident rays and normals
- // at intersections point.
- // pSurfNorm - pointer to array of pointers to a separate coordinates(x,y,z)of planes
- // of normals at intersections point.
- // pSurfHit - pointer to array of pointers to a separate coordinates(x,y,z)of planes of the intersection points.
- // pMask - pointer to the mask vector.
- // Output Arguments:
- // pDirection - pointer to the destination vector. Shouldn't be normalised.
- // pDist - . Here it is can be 0.f or 1.f
- // pDotRay - pointer to the vector of dot products of shadow rays and normals.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus,ipprCastShadowSO_32f,(
- IppPoint3D_32f pOrigin,
- const Ipp32f* pSurfDotIn,
- const Ipp32f* const pSurfNorm[3],
- const Ipp32f* const pSurfHit[3],
- Ipp32s* pMask,
- Ipp32f* pDotRay,
- Ipp32f* pDirection[3],
- int len
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprCastReflectionRay_32f
- // Purpose: calculates array of reflected rays, for which the corresponding
- // element of a vector of a mask more or is equal to zero.
- //
- // Input Arguments:
- // pIncident - pointer to the array of vectors of incident rays.
- // pMask - pointer to the mask vector.
- // pSurfNorm - pointer to array of pointers to a separate coordinates(x,y,z)of planes
- // of normals at intersections point.
- // Output Arguments:
- // pReflect - pointer to the array of rflected vectors.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus,ipprCastReflectionRay_32f,(
- const Ipp32f* const pInc[3],
- const Ipp32s* pMask,
- const Ipp32f* const pSurfNorm[3],
- Ipp32f* pReflect[3],
- int len ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Surface properties ( pSurfHit, pSurfNorm, pSurfDotIn )
- //////////////////////////////////////////////////////////////////////////////// */
- /* /////////////////////////////////////////////////////////////////////////////
- // Name:
- // ipprHitPoint3DS0_32f/ipprHitPoint3DM0_32f
- // Purpose:
- // calculates explicit intersection coordinates in world coordinate system for a block
- // of rays from single/multiple origin.
- // Input Arguments:
- // pDist - generalized distance from origin to intersection point.
- // originEye - origin point. All rays have a single origin.
- // pOrigin - pointer to array of pointers to a separate coordinates(x,y,z)of planes of the origin points.
- // pDirection - pointer to array of pointers to a separate coordinates(x,y,z)of planes of the ray's directions.
- // blockSize - size of rays' block.
- // Output arguments:
- // pSurfHit - pointer to array of pointers to a separate coordinates(x,y,z)of planes of the intersection points.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus, ipprHitPoint3DEpsS0_32f_M,(
- const IppPoint3D_32f originEye,
- const Ipp32f* const pDirection[3],
- const Ipp32f* pDist,
- const Ipp32s* pMask,
- Ipp32f* pSurfHit[3],
- int len,
- Ipp32f eps
- ))
- IPPAPI(IppStatus, ipprHitPoint3DEpsM0_32f_M,(
- const Ipp32f* const pOrigin[3],
- const Ipp32f* const pDirection[3],
- const Ipp32f* pDist,
- const Ipp32s* pMask,
- Ipp32f* pSurfHit[3],
- int len,
- Ipp32f eps
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprSurfTriangleNormal_32f
- // Purpose: calculates the surface's normals from triangles' normals.
- //
- // Input Arguments:
- // pTrnglNorm - pointer to the triangles' normal. Interlived
- // pTrngl - pointer to triangles' indexes
- // pHit - pointer to the local surface parameters( u, v )at hit point in case of intersection was found.
- // blockSize - size of rays' block.
- // Output Arguments:
- // pSurfNorm - pointer to the surface's normals.
- // sameTri ???
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus, ipprSurfFlatNormal_32f,(
- const Ipp32f* pTrnglNorm,
- const Ipp32s* pTrngl,
- Ipp32f* pSurfNorm[3],
- int len
- ))
- IPPAPI(IppStatus, ipprSurfSmoothNormal_32f,(
- const Ipp32f* pVertNorm,
- const Ipp32s* pIndexNorm,
- const Ipp32s* pTrngl,
- const Ipp32f* const pHit[2],
- Ipp32f* pSurfNorm[3], int len, IpprIndexType ippInd
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Helper Functions
- //////////////////////////////////////////////////////////////////////////////// */
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprSetBoundBox_32f
- // Purpose: Calculates an axis aligned bounding box for the object.
- //
- // Input Arguments:
- // pVertCoor - pointer to the coordinates of triangle's vertexes.
- // lenTri - the number of triangles in the mesh.
- // Output Arguments:
- // pBound - pointer to the axis aligned bounding box of current object.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus, ipprSetBoundBox_32f,(
- const Ipp32f* pVertCoor,
- int lenTri,
- IppBox3D_32f* pBound
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // Names: ipprTriangleNormal_32f
- // Purpose: calculates triangles' normals from object.
- //
- // Input Arguments:
- // pTrnglCoor - pointer to the coordinates of triangle's vertexes.
- // pTrnglIndex - pointer to the triangle's indexes.
- // lenTri - the number of triangles in the mesh.
- // Output Arguments:
- // pTrnglNorm - pointer to the triangles' normals.
- // Returns:
- // ippStsNoErr No errors
- */
- IPPAPI(IppStatus, ipprTriangleNormal_32f,(
- const Ipp32f* pTrnglCoor,
- const int* pTrnglIndex,
- Ipp32f* pTrnglNorm,
- int lenTrngl
- ))
- /* /////////////////////////////////////////////////////////////////////////////
- // 3D Geometric Transform Functions
- //////////////////////////////////////////////////////////////////////////////// */
- /*
- // Name: ipprResizeGetBufSize
- // Purpose: Computes the size of an external work buffer (in bytes)
- // Parameters:
- // srcVOI region of interest of source volume
- // dstVOI region of interest of destination volume
- // nChannel number of channels
- // interpolation type of interpolation to perform for resizing the input volume:
- // IPPI_INTER_NN nearest neighbor interpolation
- // IPPI_INTER_LINEAR trilinear interpolation
- // IPPI_INTER_CUBIC tricubic polynomial interpolation
- // including two-parameter cubic filters:
- // IPPI_INTER_CUBIC2P_BSPLINE B-spline filter (1, 0)
- // IPPI_INTER_CUBIC2P_CATMULLROM Catmull-Rom filter (0, 1/2)
- // IPPI_INTER_CUBIC2P_B05C03 special filter with parameters (1/2, 3/10)
- // pSize pointer to the external buffer`s size
- // Returns:
- // ippStsNoErr no errors
- // ippStsNullPtrErr pSize == NULL
- // ippStsSizeErr width or height or depth of volumes is less or equal zero
- // ippStsNumChannelsErr number of channels is not one
- // ippStsInterpolationErr (interpolation != IPPI_INTER_NN) &&
- // (interpolation != IPPI_INTER_LINEAR) &&
- // (interpolation != IPPI_INTER_CUBIC) &&
- // (interpolation != IPPI_INTER_CUBIC2P_BSPLINE) &&
- // (interpolation != IPPI_INTER_CUBIC2P_CATMULLROM) &&
- // (interpolation != IPPI_INTER_CUBIC2P_B05C03)
- */
- IPPAPI(IppStatus, ipprResizeGetBufSize, (
- IpprCuboid srcVOI, IpprCuboid dstVOI, int nChannel, int interpolation, int* pSize))
- /*
- // Name: ipprResize_<mode>
- // Purpose: Performs RESIZE transform of the source volume
- // by xFactor, yFactor, zFactor and xShift, yShift, zShift
- // |X'| |xFactor 0 0 | |X| |xShift|
- // |Y'| = | yFactor 0 | * |Y| + |yShift|
- // |Z'| | 0 0 zFactor| |Z| |zShift|
- // Parameters:
- // pSrc pointer to source volume data (8u_C1V, 16u_C1V, 32f_C1V modes)
- // or array of pointers to planes in source volume data
- // srcVolume size of source volume
- // srcStep step in every plane of source volume
- // srcPlaneStep step between planes of source volume (8u_C1V, 16u_C1V, 32f_C1V modes)
- // srcVOI volume of interest of source volume
- // pDst pointer to destination volume data (8u_C1V and 16u_C1V modes)
- // or array of pointers to planes in destination volume data
- // dstStep step in every plane of destination volume
- // dstPlaneStep step between planes of destination volume (8u_C1V, 16u_C1V, 32f_C1V modes)
- // dstVOI volume of interest of destination volume
- // xFactor they specify fraction of resizing in X direction
- // yFactor they specify fraction of resizing in Y direction
- // zFactor they specify fraction of resizing in Z direction
- // xShift they specify shifts of resizing in X direction
- // yShift they specify shifts of resizing in Y direction
- // zShift they specify shifts of resizing in Z direction
- // interpolation type of interpolation to perform for resizing the input volume:
- // IPPI_INTER_NN nearest neighbor interpolation
- // IPPI_INTER_LINEAR trilinear interpolation
- // IPPI_INTER_CUBIC tricubic polynomial interpolation
- // including two-parameter cubic filters:
- // IPPI_INTER_CUBIC2P_BSPLINE B-spline filter (1, 0)
- // IPPI_INTER_CUBIC2P_CATMULLROM Catmull-Rom filter (0, 1/2)
- // IPPI_INTER_CUBIC2P_B05C03 special filter with parameters (1/2, 3/10)
- // pBuffer pointer to work buffer
- // Returns:
- // ippStsNoErr no errors
- // ippStsNullPtrErr pSrc == NULL or pDst == NULL or pBuffer == NULL
- // ippStsSizeErr width or height or depth of volumes is less or equal zero
- // ippStsWrongIntersectVOI VOI hasn't an intersection with the source or destination volume
- // ippStsResizeFactorErr xFactor or yFactor or zFactor is less or equal zero
- // ippStsInterpolationErr (interpolation != IPPI_INTER_NN) &&
- // (interpolation != IPPI_INTER_LINEAR) &&
- // (interpolation != IPPI_INTER_CUBIC) &&
- // (interpolation != IPPI_INTER_CUBIC2P_BSPLINE) &&
- // (interpolation != IPPI_INTER_CUBIC2P_CATMULLROM) &&
- // (interpolation != IPPI_INTER_CUBIC2P_B05C03)
- // Notes:
- // <mode> are 8u_C1V or 16u_C1V or 32f_C1V or 8u_C1PV or 16u_C1PV or 32f_C1PV
- */
- IPPAPI(IppStatus, ipprResize_8u_C1V, (
- const Ipp8u* pSrc, IpprVolume srcVolume, int srcStep, int srcPlaneStep, IpprCuboid srcVOI,
- Ipp8u* pDst, int dstStep, int dstPlaneStep, IpprCuboid dstVOI,
- double xFactor, double yFactor, double zFactor, double xShift, double yShift, double zShift,
- int interpolation, Ipp8u* pBuffer))
- IPPAPI(IppStatus, ipprResize_16u_C1V, (
- const Ipp16u* pSrc, IpprVolume srcVolume, int srcStep, int srcPlaneStep, IpprCuboid srcVOI,
- Ipp16u* pDst, int dstStep, int dstPlaneStep, IpprCuboid dstVOI,
- double xFactor, double yFactor, double zFactor, double xShift, double yShift, double zShift,
- int interpolation, Ipp8u* pBuffer))
- IPPAPI(IppStatus, ipprResize_32f_C1V, (
- const Ipp32f* pSrc, IpprVolume srcVolume, int srcStep, int srcPlaneStep, IpprCuboid srcVOI,
- Ipp32f* pDst, int dstStep, int dstPlaneStep, IpprCuboid dstVOI,
- double xFactor, double yFactor, double zFactor, double xShift, double yShift, double zShift,
- int interpolation, Ipp8u* pBuffer))
- IPPAPI(IppStatus, ipprResize_8u_C1PV, (
- const Ipp8u* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- Ipp8u* const pDst[], int dstStep, IpprCuboid dstVOI,
- double xFactor, double yFactor, double zFactor, double xShift, double yShift, double zShift,
- int interpolation, Ipp8u* pBuffer))
- IPPAPI(IppStatus, ipprResize_16u_C1PV, (
- const Ipp16u* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- Ipp16u* const pDst[], int dstStep, IpprCuboid dstVOI,
- double xFactor, double yFactor, double zFactor, double xShift, double yShift, double zShift,
- int interpolation, Ipp8u* pBuffer))
- IPPAPI(IppStatus, ipprResize_32f_C1PV, (
- const Ipp32f* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- Ipp32f* const pDst[], int dstStep, IpprCuboid dstVOI,
- double xFactor, double yFactor, double zFactor, double xShift, double yShift, double zShift,
- int interpolation, Ipp8u* pBuffer))
- /*
- // Name: ipprWarpAffineGetBufSize
- // Purpose: Computes the size of an external work buffer (in bytes)
- // Parameters:
- // srcVOI region of interest of source volume
- // dstVOI region of interest of destination volume
- // nChannel number of channels
- // interpolation type of interpolation to perform for resizing the input volume:
- // IPPI_INTER_NN nearest neighbor interpolation
- // IPPI_INTER_LINEAR trilinear interpolation
- // IPPI_INTER_CUBIC tricubic polynomial interpolation
- // including two-parameter cubic filters:
- // IPPI_INTER_CUBIC2P_BSPLINE B-spline filter (1, 0)
- // IPPI_INTER_CUBIC2P_CATMULLROM Catmull-Rom filter (0, 1/2)
- // IPPI_INTER_CUBIC2P_B05C03 special filter with parameters (1/2, 3/10)
- // pSize pointer to the external buffer`s size
- // Returns:
- // ippStsNoErr no errors
- // ippStsNullPtrErr pSize == NULL
- // ippStsSizeErr size of source or destination volumes is less or equal zero
- // ippStsNumChannelsErr number of channels is not one
- // ippStsInterpolationErr (interpolation != IPPI_INTER_NN) &&
- // (interpolation != IPPI_INTER_LINEAR) &&
- // (interpolation != IPPI_INTER_CUBIC) &&
- // (interpolation != IPPI_INTER_CUBIC2P_BSPLINE) &&
- // (interpolation != IPPI_INTER_CUBIC2P_CATMULLROM) &&
- // (interpolation != IPPI_INTER_CUBIC2P_B05C03)
- */
- IPPAPI(IppStatus, ipprWarpAffineGetBufSize, (
- IpprCuboid srcVOI, IpprCuboid dstVOI, int nChannel, int interpolation, int* pSize))
- /*
- // Names: ipprWarpAffine_<mode>
- // Purpose: Performs AFFINE transform of the source volume by matrix a[3][4]
- // |X'| |a00 a01 a02| |X| |a03|
- // |Y'| = |a10 a11 a12| * |Y| + |a13|
- // |Z'| |a20 a21 a22| |Z| |a23|
- // Parameters:
- // pSrc array of pointers to planes in source volume data
- // srcVolume size of source volume
- // srcStep step in every plane of source volume
- // srcVOI volume of interest of source volume
- // pDst array of pointers to planes in destination volume data
- // dstStep step in every plane of destination volume
- // dstVOI volume of interest of destination volume
- // coeffs affine transform matrix
- // interpolation type of interpolation to perform for affine transform the input volume:
- // IPPI_INTER_NN nearest neighbor interpolation
- // IPPI_INTER_LINEAR trilinear interpolation
- // IPPI_INTER_CUBIC tricubic polynomial interpolation
- // including two-parameter cubic filters:
- // IPPI_INTER_CUBIC2P_BSPLINE B-spline filter (1, 0)
- // IPPI_INTER_CUBIC2P_CATMULLROM Catmull-Rom filter (0, 1/2)
- // IPPI_INTER_CUBIC2P_B05C03 special filter with parameters (1/2, 3/10)
- // pBuffer pointer to work buffer
- // Returns:
- // ippStsNoErr no errors
- // ippStsNullPtrErr pSrc == NULL or pDst == NULL or pBuffer == NULL
- // ippStsSizeErr width or height or depth of source volume is less or equal zero
- // ippStsWrongIntersectVOI VOI hasn't an intersection with the source or destination volume
- // ippStsCoeffErr determinant of the transform matrix Aij is equal to zero
- // ippStsInterpolationErr interpolation has an illegal value
- // Notes:
- // <mode> are 8u_C1PV or 16u_C1PV or 32f_C1PV
- */
- IPPAPI(IppStatus, ipprWarpAffine_8u_C1PV, (
- const Ipp8u* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- Ipp8u* const pDst[], int dstStep, IpprCuboid dstVOI,
- const double coeffs[3][4], int interpolation, Ipp8u* pBuffer))
- IPPAPI(IppStatus, ipprWarpAffine_16u_C1PV, (
- const Ipp16u* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- Ipp16u* const pDst[], int dstStep, IpprCuboid dstVOI,
- const double coeffs[3][4], int interpolation, Ipp8u* pBuffer))
- IPPAPI(IppStatus, ipprWarpAffine_32f_C1PV, (
- const Ipp32f* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- Ipp32f* const pDst[], int dstStep, IpprCuboid dstVOI,
- const double coeffs[3][4], int interpolation, Ipp8u* pBuffer))
- /*
- // Names: ipprRemap_<mode>
- // Purpose: Performs REMAP TRANSFORM of the source volume by remapping
- // dst[i,j,k] = src[xMap[i,j,k], yMap[i,j,k], zMap[i,j,k]]
- // Parameters:
- // pSrc array of pointers to planes in source volume data
- // srcVolume size of source volume
- // srcStep step in every plane of source volume
- // srcVOI volume of interest of source volume
- // pxMap array of pointers to images with X coordinates of map
- // pyMap array of pointers to images with Y coordinates of map
- // pzMap array of pointers to images with Z coordinates of map
- // mapStep step in every plane of each map volumes
- // pDst array of pointers to planes in destination volume data
- // dstStep step in every plane of destination volume
- // dstVolume size of destination volume
- // interpolation type of interpolation to perform for resizing the input volume:
- // IPPI_INTER_NN nearest neighbor interpolation
- // IPPI_INTER_LINEAR trilinear interpolation
- // IPPI_INTER_CUBIC tricubic polynomial interpolation
- // including two-parameter cubic filters:
- // IPPI_INTER_CUBIC2P_BSPLINE B-spline filter (1, 0)
- // IPPI_INTER_CUBIC2P_CATMULLROM Catmull-Rom filter (0, 1/2)
- // IPPI_INTER_CUBIC2P_B05C03 special filter with parameters (1/2, 3/10)
- // Returns:
- // ippStsNoErr no errors
- // ippStsNullPtrErr pSrc == NULL or pDst == NULL or
- // pxMap == NULL or pyMap == NULL or pzMap == NULL
- // ippStsSizeErr width or height or depth of volumes is less or equal zero
- // ippStsInterpolationErr interpolation has an illegal value
- // ippStsWrongIntersectVOI srcVOI hasn't intersection with the source volume, no operation
- // Notes:
- // <mode> are 8u_C1PV or 16u_C1PV or 32f_C1PV
- */
- IPPAPI(IppStatus, ipprRemap_8u_C1PV, (
- const Ipp8u* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- const Ipp32f* const pxMap[], const Ipp32f* const pyMap[], const Ipp32f* const pzMap[], int mapStep,
- Ipp8u* const pDst[], int dstStep, IpprVolume dstVolume, int interpolation))
- IPPAPI(IppStatus, ipprRemap_16u_C1PV, (
- const Ipp16u* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- const Ipp32f* const pxMap[], const Ipp32f* const pyMap[], const Ipp32f* const pzMap[], int mapStep,
- Ipp16u* const pDst[], int dstStep, IpprVolume dstVolume, int interpolation))
- IPPAPI(IppStatus, ipprRemap_32f_C1PV, (
- const Ipp32f* const pSrc[], IpprVolume srcVolume, int srcStep, IpprCuboid srcVOI,
- const Ipp32f* const pxMap[], const Ipp32f* const pyMap[], const Ipp32f* const pzMap[], int mapStep,
- Ipp32f* const pDst[], int dstStep, IpprVolume dstVolume, int interpolation))
- /* /////////////////////////////////////////////////////////////////////////////
- // 3D General Linear Filters
- //////////////////////////////////////////////////////////////////////////////// */
- /*
- // Name: ipprFilterGetBufSize
- // Purpose: Computes the size of an external work buffer (in bytes)
- // Parameters:
- // dstVolume size of the volume
- // kernelVolume size of the kernel volume
- // nChannel number of channels
- // pSize pointer to the external buffer`s size
- // Returns:
- // ippStsNoErr no errors
- // ippStsNullPtrErr pSize == NULL
- // ippStsSizeErr width or height or depth of volumes is less or equal zero
- // ippStsNumChannelsErr number of channels is not one
- */
- IPPAPI(IppStatus, ipprFilterGetBufSize, (
- IpprVolume dstVolume, IpprVolume kernelVolume, int nChannel, int* pSize))
- /*
- // Name: ipprFilter_16s_C1PV
- // Purpose: Filters a volume using a general integer cuboidal kernel
- // Parameters:
- // pSrc array of pointers to planes in source volume data
- // srcStep step in every plane of source volume
- // pDst array of pointers to planes in destination volume data
- // dstStep step in every plane of destination volume
- // dstVolume size of the processed volume
- // pKernel pointer to the kernel values
- // kernelVolume size of the kernel volume
- // anchor anchor 3d-cell specifying the cuboidal kernel alignment
- // with respect to the position of the input voxel
- // divisor the integer value by which the computed result is divided
- // pBuffer pointer to the external buffer`s size
- // Returns:
- // ippStsNoErr no errors
- // ippStsNullPtrErr one of the pointers is NULL
- // ippStsSizeErr width or height or depth of volumes is less or equal zero
- // ippStsDivisorErr divisor value is zero, function execution is interrupted
- */
- IPPAPI(IppStatus, ipprFilter_16s_C1PV, (
- const Ipp16s* const pSrc[], int srcStep,
- const Ipp16s* pDst[], int dstStep, IpprVolume dstVolume,
- const Ipp32s* pKernel, IpprVolume kernelVolume, IpprPoint anchor, int divisor,
- Ipp8u* pBuffer))
- /* /////////////////////////////////////////////////////////////////////////////
- // Spherical Harmonics lighting function
- ///////////////////////////////////////////////////////////////////////////// */
- /*
- // Name: ipprSHGetSize_32f
- // Purpose: Acquires the size of state structure used for Spherical Harmonic computations
- // Returns size of a memory buffer which is required for initialization of the state structure
- // used in various algorithms related to Spherical Harmonic functions.
- // Parameters:
- // maxL the maximal order for Spherical Harmonic to support after initialization
- // of SH structure by ipprSHInit function with given order and type
- // shType the type of algorithm used for SH calculation: ippSHNormDirect or ippSHNormRecurr.
- // pSize the size of memory in bytes required for this IppSHState instance to be initialized correctly
- //
- //
- // Returns:
- // ippStsNoErr Indicates no error.
- // ippStsSizeErr Indicates an error when maxL is greater then 15.
- // ippStsNullPtrErr Indicates an error when the pSize pointer is NULL.
- // ippStsRangeErr Indicates an error when shType is not equal to ippSHNormDirect or ippSHNormRecurr.
- */
- IPPAPI(IppStatus, ipprSHGetSize_32f,(Ipp32u maxL, IpprSHType shType, Ipp32u *pSize))
- /*
- // Name: ipprSHInit_32f
- // Purpose: Initializes the state structure used for Spherical Harmonic computations
- // in the buffer which must be provided of size not less than acquired by the ipprSHGetSize function.
- // Parameters:
- // pSHState pointer to the memory buffer used for pSHState structure initialization
- // maxL the maximal order of Spherical Harmonics to support after initialization
- // with using pSHState structure.
- // shType the type of algorithm to use for SH calculation with using this state structure:
- // ippSHNormDirect or ippSHNormRecurr.
- // Returns:
- // ippStsNoErr Indicates no error.
- // ippStsNullPtrErr Indicates an error when the pSHState pointer is NULL.
- // ippStsSizeErr Indicates an error when L is greater then 15.
- // ippStsRangeErr Indicates an error when shType is not equal to ippSHNormDirect or ippSHNormRecurr.
- */
- IPPAPI(IppStatus, ipprSHInit_32f,(IpprSHState *pSHState, Ipp32u maxL, IpprSHType shType))
- /*
- // Name: ipprSH_32f, ipprSHBand_32f
- // Purpose: Compute the Spherical Harmonics
- // Parameters:
- // pX, pY, pZ pointers to the source vectors of length N
- // which represents the points of a unit sphere given in Cartesians coordinates
- // N the number of Cartesians points, i.e. the length of input vectors
- // pDstYlm pointer to the destination vector to store SH values computed at given points
- // for orders up to order L, of size (L+1)*(L+1)
- // pDstBandYlm pointer to the destination vector to store SH values computed at given points
- // for order L only, of size (2*L+1)
- // L the order up to which to compute SH values,
- // must not be greater then maximal order used in the function ipprSHInit call.
- // pSHState pointer to the SH state structure initialized with maximal order not less then L
- // Returns:
- // ippStsNoErr Indicates no error.
- // ippStsNullPtrErr Indicates an error when the pX, pY, pZ, pDstYlm or pDstBandYlm pointer is NULL.
- // ippStsRangeErr Indicates an error when L is greater then maximal order used for SH state structure
- // initialization by the function ipprSHInit.
- // ippStsSizeErr Indicates an error when N is equal to zero
- */
- IPPAPI(IppStatus, ipprSH_32f,(const Ipp32f *pX, const Ipp32f *pY, const Ipp32f *pZ, Ipp32u N,
- Ipp32f *pDstYlm, Ipp32u L, IpprSHState *pSHState))
- IPPAPI(IppStatus, ipprSHBand_32f,(const Ipp32f *pX, const Ipp32f *pY, const Ipp32f *pZ, Ipp32u N,
- Ipp32f *pDstBandYlm, Ipp32u L))
- /*
- // Name: ipprSHTFwd_32f_C1I, ipprSHTFwd_32f_C3P3I, ipprSHTFwd_32f_P3I
- // Purpose: The functions perform projecting of a given function defined on unit sphere into SH basis
- // i.e. computes SH transform
- // C1I: single value function (gray)
- // C3I: RGB color function (x,y,z) -> (R,G,B)
- // Parameters:
- // pX, pY, pZ pointers to the source vectors of length N
- // which represents the points of a unit sphere given in Cartesians coordinates
- // pDst Pointer the input vector of values of a color function on a unit sphere
- // Points to the source image for pixel-order data or
- // to an array of pointers to separate source color planes for plane-order data.
- // N the number of Cartesians points, i.e. the length of input vectors
- // pSrcDstClm pointer to the destination vector or arrays of vectors
- // storing running values of SHT coefficients. Do not forget to zero them proir to first call.
- // of length (L+1)*(L+1)
- // L the order up to which to compute SH transform,
- // must not be greater then maximal order used in the function ipprSHInit call.
- // pSHState pointer to the SH state structure initialized with maximal order not less then L
- // Returns:
- // ippStsNoErr Indicates no error.
- // ippStsNullPtrErr Indicates an error when the pX, pY, pZ, pSrc, pSrcDstSHT or pSHState pointer is NULL.
- // ippStsSizeErr Indicates an error when N is equal to zero
- // ippStsRangeErr Indicates an error when L is greater then maximal order
- // used in SH state structure initialization by the function ipprSHInit.
- //
- */
- IPPAPI(IppStatus, ipprSHTFwd_32f_C1I,(const Ipp32f *pX, const Ipp32f *pY, const Ipp32f *pZ, const Ipp32f *pSrc,
- Ipp32u N, Ipp32f *pSrcDstClm, Ipp32u L, IpprSHState *pSHState))
- IPPAPI(IppStatus, ipprSHTFwd_32f_C3P3I,(const Ipp32f *pX, const Ipp32f *pY, const Ipp32f *pZ, const Ipp32f *pSrc,
- Ipp32u N, Ipp32f *pSrcDstClm[3], Ipp32u L, IpprSHState *pSHState))
- IPPAPI(IppStatus, ipprSHTFwd_32f_P3I,(const Ipp32f *pX, const Ipp32f *pY, const Ipp32f *pZ, const Ipp32f *pSrc[3],
- Ipp32u N, Ipp32f *pSrcDstClm[3], Ipp32u L, IpprSHState *pSHState))
- /*
- // Name: ipprSHTInv_32f_C1,ipprSHTInv_32f_P3
- // Purpose: The functions reconstruct a function defined on unit sphere by its SHT coefficients
- // i.e. computes ISHT transform
- // C1: single value function (gray)
- // C3: RGB color function (x,y,z) -> (R,G,B)
- //
- // Parameters:
- // pSrcClm the input vector or arrays of vectors of the pre-computed SHT coefficients of the length (L+1)*(L+1)
- // L the order of SHT, must not be greater then maximal order used in the ipprSHInit call.
- // pX, pY, pZ pointers to the source vectors which represents the points of a unit sphere
- // given in Cartesians coordinates
- // pDst Pointer the output vector of values of reconstructed color function on a unit sphere
- // Points to the source image for pixel-order data or
- // to an array of pointers to separate source color planes for plane-order data.
- // N the number of Cartesians points, i.e. the length of input pX, pY, pZ and number of dst pixels
- // pSHState pointer to the SH state structure initialized with maximal order not less then L
- */
- IPPAPI(IppStatus, ipprSHTInv_32f_C1,(const Ipp32f *pSrcClm, Ipp32u L, const Ipp32f *pX, const Ipp32f *pY,
- const Ipp32f *pZ, Ipp32f *pDst, Ipp32u N, IpprSHState *pSHState))
- IPPAPI(IppStatus, ipprSHTInv_32f_P3C3,(const Ipp32f *pSrcClm[3], Ipp32u L, const Ipp32f *pX, const Ipp32f *pY,
- const Ipp32f *pZ, Ipp32f *pDst, Ipp32u N, IpprSHState *pSHState))
- IPPAPI(IppStatus, ipprSHTInv_32f_P3,(const Ipp32f *pSrcClm[3], Ipp32u L, const Ipp32f *pX, const Ipp32f *pY,
- const Ipp32f *pZ, Ipp32f *pDst[3], Ipp32u N, IpprSHState *pSHState))
- #ifdef __cplusplus
- }
- #endif
- #if defined (_IPP_STDCALL_CDECL)
- #undef _IPP_STDCALL_CDECL
- #define __stdcall __cdecl
- #endif
- #endif /* __IPPR_H__ */
- /* ////////////////////////////// End of file /////////////////////////////// */
|