bkaradzic %!s(int64=11) %!d(string=hai) anos
pai
achega
e29be87bd2

+ 5 - 34
examples/13-stencil/stencil.cpp

@@ -206,35 +206,6 @@ static bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName)
 	return bgfx::createProgram(vsh, fsh, true /* destroy shaders when program is destroyed */);
 }
 
-void mtxScaleRotateTranslate(float* _result
-							 , const float _scaleX
-							 , const float _scaleY
-							 , const float _scaleZ
-							 , const float _rotX
-							 , const float _rotY
-							 , const float _rotZ
-							 , const float _translateX
-							 , const float _translateY
-							 , const float _translateZ
-							 )
-{
-	float mtxRotateTranslate[16];
-	float mtxScale[16];
-
-	mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ);
-	mtxRotateTranslate[12] = _translateX;
-	mtxRotateTranslate[13] = _translateY;
-	mtxRotateTranslate[14] = _translateZ;
-
-	memset(mtxScale, 0, sizeof(float)*16);
-	mtxScale[0]  = _scaleX;
-	mtxScale[5]  = _scaleY;
-	mtxScale[10] = _scaleZ;
-	mtxScale[15] = 1.0f;
-
-	mtxMul(_result, mtxScale, mtxRotateTranslate);
-}
-
 void mtxReflected(float*__restrict _result
 				  , const float* __restrict _p  /* plane */
 				  , const float* __restrict _n  /* normal */
@@ -1136,7 +1107,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 
 		// Floor position.
 		float floorMtx[16];
-		mtxScaleRotateTranslate(floorMtx
+		mtxSRT(floorMtx
 			, 20.0f  //scaleX
 			, 20.0f  //scaleY
 			, 20.0f  //scaleZ
@@ -1150,7 +1121,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 
 		// Bunny position.
 		float bunnyMtx[16];
-		mtxScaleRotateTranslate(bunnyMtx
+		mtxSRT(bunnyMtx
 			, 5.0f
 			, 5.0f
 			, 5.0f
@@ -1175,7 +1146,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 		float columnMtx[4][16];
 		for (uint8_t ii = 0; ii < 4; ++ii)
 		{
-			mtxScaleRotateTranslate(columnMtx[ii]
+			mtxSRT(columnMtx[ii]
 				, 1.0f
 				, 1.0f
 				, 1.0f
@@ -1192,7 +1163,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 		float cubeMtx[numCubes][16];
 		for (uint16_t ii = 0; ii < numCubes; ++ii)
 		{
-			mtxScaleRotateTranslate(cubeMtx[ii]
+			mtxSRT(cubeMtx[ii]
 				, 1.0f
 				, 1.0f
 				, 1.0f
@@ -1443,7 +1414,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 
 		// Draw floor bottom.
 		float floorBottomMtx[16];
-		mtxScaleRotateTranslate(floorBottomMtx
+		mtxSRT(floorBottomMtx
 			, 20.0f  //scaleX
 			, 20.0f  //scaleY
 			, 20.0f  //scaleZ

+ 2 - 31
examples/14-shadowvolumes/shadowvolumes.cpp

@@ -176,35 +176,6 @@ static bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName)
 	return bgfx::createProgram(vsh, fsh, true /* destroy shaders when program is destroyed */);
 }
 
-void mtxScaleRotateTranslate(float* _result
-							 , const float _scaleX
-							 , const float _scaleY
-							 , const float _scaleZ
-							 , const float _rotX
-							 , const float _rotY
-							 , const float _rotZ
-							 , const float _translateX
-							 , const float _translateY
-							 , const float _translateZ
-							 )
-{
-	float mtxRotateTranslate[16];
-	float mtxScale[16];
-
-	mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ);
-	mtxRotateTranslate[12] = _translateX;
-	mtxRotateTranslate[13] = _translateY;
-	mtxRotateTranslate[14] = _translateZ;
-
-	memset(mtxScale, 0, 16*sizeof(float) );
-	mtxScale[0]  = _scaleX;
-	mtxScale[5]  = _scaleY;
-	mtxScale[10] = _scaleZ;
-	mtxScale[15] = 1.0f;
-
-	mtxMul(_result, mtxScale, mtxRotateTranslate);
-}
-
 void mtxBillboard(float* __restrict _result
 				  , const float* __restrict _view
 				  , const float* __restrict _pos
@@ -1277,7 +1248,7 @@ struct Instance
 		memcpy(s_uniforms.m_color, m_color, 3*sizeof(float) );
 
 		float mtx[16];
-		mtxScaleRotateTranslate(mtx
+		mtxSRT(mtx
 			, m_scale[0]
 			, m_scale[1]
 			, m_scale[2]
@@ -2734,7 +2705,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 
 				// Compute transform for shadow volume.
 				float shadowVolumeMtx[16];
-				mtxScaleRotateTranslate(shadowVolumeMtx
+				mtxSRT(shadowVolumeMtx
 						, instance.m_scale[0]
 						, instance.m_scale[1]
 						, instance.m_scale[2]

+ 4 - 34
examples/15-shadowmaps-simple/shadowmaps_simple.cpp

@@ -54,7 +54,6 @@ struct PosNormalVertex
 	uint32_t m_normal;
 };
 
-static const float s_texcoord = 5.0f;
 static const uint32_t s_numHPlaneVertices = 4;
 static PosNormalVertex s_hplaneVertices[s_numHPlaneVertices] =
 {
@@ -133,35 +132,6 @@ static bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName)
 	return bgfx::createProgram(vsh, fsh, true /* destroy shaders when program is destroyed */);
 }
 
-void mtxScaleRotateTranslate(float* _result
-							, const float _scaleX
-							, const float _scaleY
-							, const float _scaleZ
-							, const float _rotX
-							, const float _rotY
-							, const float _rotZ
-							, const float _translateX
-							, const float _translateY
-							, const float _translateZ
-							)
-{
-	float mtxRotateTranslate[16];
-	float mtxScale[16];
-
-	mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ);
-	mtxRotateTranslate[12] = _translateX;
-	mtxRotateTranslate[13] = _translateY;
-	mtxRotateTranslate[14] = _translateZ;
-
-	memset(mtxScale, 0, sizeof(float)*16);
-	mtxScale[0]  = _scaleX;
-	mtxScale[5]  = _scaleY;
-	mtxScale[10] = _scaleZ;
-	mtxScale[15] = 1.0f;
-
-	mtxMul(_result, mtxScale, mtxRotateTranslate);
-}
-
 struct Aabb
 {
 	float m_min[3];
@@ -556,28 +526,28 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 
 		// Setup instance matrices.
 		float mtxFloor[16];
-		mtxScaleRotateTranslate(mtxFloor
+		mtxSRT(mtxFloor
 			, 30.0f, 30.0f, 30.0f
 			, 0.0f, 0.0f, 0.0f
 			, 0.0f, 0.0f, 0.0f
 			);
 
 		float mtxBunny[16];
-		mtxScaleRotateTranslate(mtxBunny
+		mtxSRT(mtxBunny
 			, 5.0f, 5.0f, 5.0f
 			, 0.0f, float(M_PI) - timeAccumulatorScene, 0.0f
 			, 15.0f, 5.0f, 0.0f
 			);
 
 		float mtxHollowcube[16];
-		mtxScaleRotateTranslate(mtxHollowcube
+		mtxSRT(mtxHollowcube
 			, 2.5f, 2.5f, 2.5f
 			, 0.0f, 1.56f - timeAccumulatorScene, 0.0f
 			, 0.0f, 10.0f, 0.0f
 			);
 
 		float mtxCube[16];
-		mtxScaleRotateTranslate(mtxCube
+		mtxSRT(mtxCube
 			, 2.5f, 2.5f, 2.5f
 			, 0.0f, 1.56f - timeAccumulatorScene, 0.0f
 			, -15.0f, 5.0f, 0.0f

+ 6 - 35
examples/16-shadowmaps/shadowmaps.cpp

@@ -323,35 +323,6 @@ static bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName)
 	return bgfx::createProgram(vsh, fsh, true /* destroy shaders when program is destroyed */);
 }
 
-void mtxScaleRotateTranslate(float* _result
-							, const float _scaleX
-							, const float _scaleY
-							, const float _scaleZ
-							, const float _rotX
-							, const float _rotY
-							, const float _rotZ
-							, const float _translateX
-							, const float _translateY
-							, const float _translateZ
-							)
-{
-	float mtxRotateTranslate[16];
-	float mtxScale[16];
-
-	mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ);
-	mtxRotateTranslate[12] = _translateX;
-	mtxRotateTranslate[13] = _translateY;
-	mtxRotateTranslate[14] = _translateZ;
-
-	memset(mtxScale, 0, sizeof(float)*16);
-	mtxScale[0]  = _scaleX;
-	mtxScale[5]  = _scaleY;
-	mtxScale[10] = _scaleZ;
-	mtxScale[15] = 1.0f;
-
-	mtxMul(_result, mtxScale, mtxRotateTranslate);
-}
-
 void mtxBillboard(float* __restrict _result
 				  , const float* __restrict _view
 				  , const float* __restrict _pos
@@ -2322,7 +2293,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 		// Setup instance matrices.
 		float mtxFloor[16];
 		const float floorScale = 550.0f;
-		mtxScaleRotateTranslate(mtxFloor
+		mtxSRT(mtxFloor
 			, floorScale //scaleX
 			, floorScale //scaleY
 			, floorScale //scaleZ
@@ -2335,7 +2306,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 			);
 
 		float mtxBunny[16];
-		mtxScaleRotateTranslate(mtxBunny
+		mtxSRT(mtxBunny
 			, 5.0f
 			, 5.0f
 			, 5.0f
@@ -2348,7 +2319,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 			);
 
 		float mtxHollowcube[16];
-		mtxScaleRotateTranslate(mtxHollowcube
+		mtxSRT(mtxHollowcube
 			, 2.5f
 			, 2.5f
 			, 2.5f
@@ -2361,7 +2332,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 			);
 
 		float mtxCube[16];
-		mtxScaleRotateTranslate(mtxCube
+		mtxSRT(mtxCube
 			, 2.5f
 			, 2.5f
 			, 2.5f
@@ -2377,7 +2348,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 		float mtxTrees[numTrees][16];
 		for (uint8_t ii = 0; ii < numTrees; ++ii)
 		{
-			mtxScaleRotateTranslate(mtxTrees[ii]
+			mtxSRT(mtxTrees[ii]
 					, 2.0f
 					, 2.0f
 					, 2.0f
@@ -3185,7 +3156,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 
 			// Draw floor bottom.
 			float floorBottomMtx[16];
-			mtxScaleRotateTranslate(floorBottomMtx
+			mtxSRT(floorBottomMtx
 					, floorScale //scaleX
 					, floorScale //scaleY
 					, floorScale //scaleZ

+ 1 - 30
examples/18-ibl/ibl.cpp

@@ -380,35 +380,6 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBott
 	}
 }
 
-void mtxScaleRotateTranslate(float* _result
-							, const float _scaleX
-							, const float _scaleY
-							, const float _scaleZ
-							, const float _rotX
-							, const float _rotY
-							, const float _rotZ
-							, const float _translateX
-							, const float _translateY
-							, const float _translateZ
-							)
-{
-	float mtxRotateTranslate[16];
-	float mtxScale[16];
-
-	mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ);
-	mtxRotateTranslate[12] = _translateX;
-	mtxRotateTranslate[13] = _translateY;
-	mtxRotateTranslate[14] = _translateZ;
-
-	memset(mtxScale, 0, sizeof(float)*16);
-	mtxScale[0]  = _scaleX;
-	mtxScale[5]  = _scaleY;
-	mtxScale[10] = _scaleZ;
-	mtxScale[15] = 1.0f;
-
-	mtxMul(_result, mtxScale, mtxRotateTranslate);
-}
-
 void imguiBool(const char* _str, bool& _flag, bool _enabled = true)
 {
 	if (imguiCheck(_str, _flag, _enabled) )
@@ -778,7 +749,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
 
 		// View 1.
 		float mtx[16];
-		mtxScaleRotateTranslate(mtx
+		mtxSRT(mtx
 				, 1.0f
 				, 1.0f
 				, 1.0f

+ 59 - 26
examples/common/fpumath.h

@@ -196,10 +196,10 @@ inline void mtxLookAt(float* __restrict _result, const float* __restrict _eye, c
 
 inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far)
 {
-	float height = 1.0f/tanf(_fovy*( (float)M_PI/180.0f)*0.5f);
-	float width = height * 1.0f/_aspect;
-	float aa = _far/(_far-_near);
-	float bb = -_near * aa;
+	const float height = 1.0f/tanf(_fovy*( (float)M_PI/180.0f)*0.5f);
+	const float width = height * 1.0f/_aspect;
+	const float aa = _far/(_far-_near);
+	const float bb = -_near * aa;
 
 	memset(_result, 0, sizeof(float)*16);
 	_result[0] = width;
@@ -230,8 +230,8 @@ inline void mtxOrtho(float* _result, float _left, float _right, float _bottom, f
 
 inline void mtxRotateX(float* _result, float _ax)
 {
-	float sx = sinf(_ax);
-	float cx = cosf(_ax);
+	const float sx = sinf(_ax);
+	const float cx = cosf(_ax);
 
 	memset(_result, 0, sizeof(float)*16);
 	_result[ 0] = 1.0f;
@@ -244,8 +244,8 @@ inline void mtxRotateX(float* _result, float _ax)
 
 inline void mtxRotateY(float* _result, float _ay)
 {
-	float sy = sinf(_ay);
-	float cy = cosf(_ay);
+	const float sy = sinf(_ay);
+	const float cy = cosf(_ay);
 
 	memset(_result, 0, sizeof(float)*16);
 	_result[ 0] = cy;
@@ -258,8 +258,8 @@ inline void mtxRotateY(float* _result, float _ay)
 
 inline void mtxRotateZ(float* _result, float _az)
 {
-	float sz = sinf(_az);
-	float cz = cosf(_az);
+	const float sz = sinf(_az);
+	const float cz = cosf(_az);
 
 	memset(_result, 0, sizeof(float)*16);
 	_result[ 0] = cz;
@@ -272,10 +272,10 @@ inline void mtxRotateZ(float* _result, float _az)
 
 inline void mtxRotateXY(float* _result, float _ax, float _ay)
 {
-	float sx = sinf(_ax);
-	float cx = cosf(_ax);
-	float sy = sinf(_ay);
-	float cy = cosf(_ay);
+	const float sx = sinf(_ax);
+	const float cx = cosf(_ax);
+	const float sy = sinf(_ay);
+	const float cy = cosf(_ay);
 
 	memset(_result, 0, sizeof(float)*16);
 	_result[ 0] = cy;
@@ -291,12 +291,12 @@ inline void mtxRotateXY(float* _result, float _ax, float _ay)
 
 inline void mtxRotateXYZ(float* _result, float _ax, float _ay, float _az)
 {
-	float sx = sinf(_ax);
-	float cx = cosf(_ax);
-	float sy = sinf(_ay);
-	float cy = cosf(_ay);
-	float sz = sinf(_az);
-	float cz = cosf(_az);
+	const float sx = sinf(_ax);
+	const float cx = cosf(_ax);
+	const float sy = sinf(_ay);
+	const float cy = cosf(_ay);
+	const float sz = sinf(_az);
+	const float cz = cosf(_az);
 
 	memset(_result, 0, sizeof(float)*16);
 	_result[ 0] = cy*cz;
@@ -313,12 +313,12 @@ inline void mtxRotateXYZ(float* _result, float _ax, float _ay, float _az)
 
 inline void mtxRotateZYX(float* _result, float _ax, float _ay, float _az)
 {
-	float sx = sinf(_ax);
-	float cx = cosf(_ax);
-	float sy = sinf(_ay);
-	float cy = cosf(_ay);
-	float sz = sinf(_az);
-	float cz = cosf(_az);
+	const float sx = sinf(_ax);
+	const float cx = cosf(_ax);
+	const float sy = sinf(_ay);
+	const float cy = cosf(_ay);
+	const float sz = sinf(_az);
+	const float cz = cosf(_az);
 
 	memset(_result, 0, sizeof(float)*16);
 	_result[ 0] = cy*cz;
@@ -333,6 +333,39 @@ inline void mtxRotateZYX(float* _result, float _ax, float _ay, float _az)
 	_result[15] = 1.0f;
 };
 
+inline void mtxSRT(float* _result, float _sx, float _sy, float _sz, float _ax, float _ay, float _az, float _tx, float _ty, float _tz)
+{
+	const float sx = sinf(_ax);
+	const float cx = cosf(_ax);
+	const float sy = sinf(_ay);
+	const float cy = cosf(_ay);
+	const float sz = sinf(_az);
+	const float cz = cosf(_az);
+
+	const float sxsz = sx*sz;
+	const float cycz = cy*cz;
+
+	_result[ 0] = _sx * (cycz - sxsz*sy);
+	_result[ 1] = _sx * -cx*sz;
+	_result[ 2] = _sx * (cz*sy + cy*sxsz);
+	_result[ 3] = 0.0f;
+
+	_result[ 4] = _sy * (cz*sx*sy + cy*sz);
+	_result[ 5] = _sy * cx*cz;
+	_result[ 6] = _sy * (sy*sz -cycz*sx);
+	_result[ 7] = 0.0f;
+
+	_result[ 8] = _sz * -cx*sy;
+	_result[ 9] = _sz * sx;
+	_result[10] = _sz * cx*cy;
+	_result[11] = 0.0f;
+
+	_result[12] = _tx;
+	_result[13] = _ty;
+	_result[14] = _tz;
+	_result[15] = 1.0f;
+}
+
 inline void vec3MulMtx(float* __restrict _result, const float* __restrict _vec, const float* __restrict _mat)
 {
 	_result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _mat[12];