⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transform.cpp

📁 s3c6410 官方测试代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		unsigned int uiDummy = 0xFFFFFFFF;
		fglSendToFIFO(4, &nNumOfVertices);
		fglSendToFIFO(4, &uiDummy);

		fglSysTransferToPort(
								(unsigned int *)Cube_Data,
								/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
								nNumofData
							 );

		fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status

		// Cache flush
		//fglSysCacheFlush();
		//fglSysCacheClear();
		fglClearCache(FGL_CACHECTL_INIT_ALL);


		fglSysDelay(50);

		drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0);
//		drvsys_clear_buf((unsigned int*)(FIMG_COLOR_BUFFER+m_FBOffsize), CLEAR_SCREEN_SIZE, 0);


	}

	fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status
	//WRITEREG(FGRA_BACKFACE_CULL, 0);
	fglSetFaceCullControl(FGL_FALSE, FGL_FALSE/*CCW*/, FGL_FACE_BACK);
	fglSetLODControl(0x0);
    fglEnablePerFragUnit(FGL_PF_DEPTH, FGL_FALSE);
	return NO_ERROR;
}

#else


 
/****************************************************************************
 *  INCLUDES
 ****************************************************************************/
#if TARGET_PLATFORM == FPGA_BOARD
#include "Fimg3DTest.h"
#endif

#include "Transform.vsa.h"
#include "Transform.psa.h"

 
int Transform(void)
{	
	unsigned int nNumOfVertices;
	unsigned int nNumofData;
	//unsigned int ConstFloatAddr;
	bool bSwapBackBuffer = false;
    	unsigned int nNumTrisCube = 12;
	unsigned int nNumAttributesCube = 12;

	FGL_TexUnitParams tuParams;
    
	Matrix4 matMV, matProj, matMVP;
	//float 	fXAng = 0.0f;
	float 	fXAng = 45.0f;
	float 	fYAng = 45.0f;

    
	float Cube_Data[] =
	{
		//  x      y      z     w     r     g     b     a     s     t     r     q
		// FRONT
		-0.3f, -0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		-0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		// BACK
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f,  0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		// LEFT
		-0.3f, -0.3f,  0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f,  0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f,  0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		// RIGHT
		 0.3f, -0.3f, -0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f, -0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f, -0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f,  0.3f,  0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		// TOP
		-0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f, -0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		// BOTTOM
		-0.3f, -0.3f,  0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f

	};

	matProj.SetAsPerspectiveMatrix(60, 240./320., 0.1, 100);

	UART_Printf("Transform Demo Test~~~\n");

	if (fglLoadVShader(Transform_vsa) != FGL_ERR_NO_ERROR)
	{
		return ERROR;
    	}

    	if (fglLoadPShader(Transform_psa) != FGL_ERR_NO_ERROR)
	{
		return ERROR;
    	}
    

#if 0
	Matrix4 matMVP(1.707107f,  0.0f,           1.707107f,   0.0f,
				    1.207107f,  1.707107f,   -1.207107f, 0.0f,
				    0.501001f,  -0.708522f, -0.501001f, 1.302803f,
				    0.5f,      	 -0.707107f, -0.5f,      	    1.5f);

    	fglWriteVertexShaderConstFloat(0, 16, matMVP.m[0]);
#endif


	drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
	drvsys_clear_buf((unsigned int*)FIMG_COLOR_BUFFER, CLEAR_SCREEN_SIZE, 0x0);

	fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status

	fglSetVShaderAttribTable(FGL_OUTPUT_ATTRIB_IDX0, 0x02020100);
	fglSetVShaderAttribTable(FGL_OUTPUT_ATTRIB_IDX1, 0x07060504);
	fglSetVShaderAttribTable(FGL_OUTPUT_ATTRIB_IDX2, 0x0B0A0908);

	fglVSSetAttribNum(3);
	fglPSSetAttributeNum(2);

	// Raster engine SFR set
	fglSetFaceCullControl(FGL_TRUE, FGL_FALSE/*CCW*/, FGL_FACE_BACK);
	//FGL_DPFAPI( fglSetLODControl(0x0000003F) );
	fglSetLODRegister(FGL_LODCOEFF_ENABLE_ALL,	FGL_LODCOEFF_ENABLE_ALL,
						FGL_LODCOEFF_DISABLE,	FGL_LODCOEFF_DISABLE,
						FGL_LODCOEFF_DISABLE,	FGL_LODCOEFF_DISABLE,
						FGL_LODCOEFF_DISABLE,	FGL_LODCOEFF_DISABLE);


	// Per-fragment Unit SFR set
	fglSetZBufBaseAddr(FIMG_DEPTH_BUFFER);
	fglSetDepthParams(FGL_COMP_LESS);
	fglEnablePerFragUnit(FGL_PF_DEPTH, FGL_TRUE);

	// Primitive Engine SRF Set
	FGL_Vertex Vtx;
	Vtx.prim = FGL_PRIM_TRIANGLES;
	Vtx.enablePointSize = FGL_FALSE;
	Vtx.numVSOut = 2;
	Vtx.shadeModel = FGL_SHADING_SMOOTH;
	Vtx.colorAttribIdx = 0;
	fglSetVertex(&Vtx); // Vertex context register

    	// Texture Unit SFR Setting
    	tuParams.eType = FGL_TEX_2D;
    	tuParams.eColorkey = FGL_CKEY_DISABLE;
    	tuParams.bUseExpansion = FGL_FALSE;
    	tuParams.ePaletteFormat = FGL_PALETTE_ARGB8888;
    	tuParams.eFormat = FGL_TEXEL_ARGB1555;
    	tuParams.eUMode = FGL_TEX_WRAP_REPEAT;
    	tuParams.eVMode = FGL_TEX_WRAP_REPEAT;
    	tuParams.bIsNonparametric = FGL_FALSE;
    	tuParams.bUseMagFilter = FGL_TRUE;
    	tuParams.bUseMinFilter = FGL_TRUE;    	
    	//tuParams.bUseMinFilter = FGL_FALSE;    	
    	tuParams.eMipMapFilter = FGL_FILTER_LINEAR;
    	tuParams.uUSize = 256;
    	tuParams.uVSize = 256;
    	tuParams.uPSize = 1;
    	fglSetTexUnitParams(0, &tuParams);
	fglSetTexBaseAddr(0, FIMG_TEXTURE_MEMORY);

	// Host Interface SFR Set
	FGL_HInterface HInterface;
	HInterface.enableAutoInc = FGL_TRUE;
	HInterface.enableVtxBuffer = FGL_FALSE;
	HInterface.enableVtxCache = FGL_FALSE;	
	HInterface.idxType = FGL_INDEX_DATA_UINT;
	HInterface.numVSOut = 3;
	fglSetHInterface(&HInterface);

	FGL_Attribute HIAttr;
	HIAttr.bEndFlag = FGL_FALSE;
	HIAttr.type = FGL_ATTRIB_DATA_FLOAT;
	HIAttr.numComp = 4;
	HIAttr.srcW = FGL_ATTRIB_ORDER_4TH;
	HIAttr.srcZ = FGL_ATTRIB_ORDER_3RD;
	HIAttr.srcY = FGL_ATTRIB_ORDER_2ND;
	HIAttr.srcX = FGL_ATTRIB_ORDER_1ST;
	fglSetAttribute(0, &HIAttr);
	fglSetAttribute(1, &HIAttr);
	HIAttr.bEndFlag = FGL_TRUE;
	fglSetAttribute(2, &HIAttr);

	nNumOfVertices = nNumTrisCube * 3;
	nNumofData = nNumAttributesCube * nNumOfVertices;



	while(1)
	{
		matMV.LoadIdentity();
		matMVP.LoadIdentity();
		matMV.Rotate(1,0,0,fXAng);
		matMV.Rotate(0,1,0,fYAng);
		matMV.Translate(0, 0, -1.5);
		matMVP = matProj*matMV;

	      fglWriteVertexShaderConstFloat(0, 16, matMVP.m[0]);
	
	unsigned int uiDummy = 0xFFFFFFFF;
	fglSendToFIFO(4, &nNumOfVertices);
	fglSendToFIFO(4, &uiDummy);

	fglSysTransferToPort( (unsigned int *)Cube_Data, nNumofData);

	fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status
		fglClearCache(FGL_CACHECTL_INIT_ALL);

#if 1
		//fXAng += 0.0872664f;  // 5 degree
		//fYAng += 0.1745328f;  // 10 degree
		fXAng += 5.0f;  // 5 degree
		fYAng += 10.0f;  // 10 degree
		
		//if(fXAng > 2*PI) fXAng = 0.0f;
		//if(fYAng > 2*PI) fYAng = 0.0f;	
		if(fXAng > 360.f) fXAng = 0.0f;
		if(fYAng > 360.f) fYAng = 0.0f;			
#endif

#if 1
		if(bSwapBackBuffer == false) 
		{
			#if 0
			fglSwapBuffer(0);
			drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
			drvsys_clear_buf((unsigned int*)(0x65000000+(CLEAR_SCREEN_SIZE)), CLEAR_SCREEN_SIZE, 0xFF000000);
			fglSetColorBufBaseAddr(0x65000000);
			bSwapBackBuffer = true;
			#else
			fglSwapBuffer(1);
			drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
			drvsys_clear_buf((unsigned int*)(FIMG_COLOR_BUFFER), CLEAR_SCREEN_SIZE, 0xFF000000);
			fglSetColorBufBaseAddr(FIMG_COLOR_BUFFER);
			bSwapBackBuffer = true;
			#endif

		}
		else
		{	
			#if 0	// ori
			fglSwapBuffer(1);
			drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
			drvsys_clear_buf((unsigned int*)(0x65000000+(2*CLEAR_SCREEN_SIZE)), CLEAR_SCREEN_SIZE, 0xFF000000);
			fglSetColorBufBaseAddr(0x65000000+(CLEAR_SCREEN_SIZE));
			bSwapBackBuffer = false;

			#else
			fglSwapBuffer(0);
			drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
			drvsys_clear_buf((unsigned int*)(FIMG_COLOR_BUFFER+CLEAR_SCREEN_SIZE), CLEAR_SCREEN_SIZE, 0xFF000000);
			fglSetColorBufBaseAddr(FIMG_COLOR_BUFFER+(CLEAR_SCREEN_SIZE));
			bSwapBackBuffer = false;

			#endif
		} 
#endif
	}


	fglSetFaceCullControl(FGL_FALSE, FGL_FALSE, FGL_FACE_BACK);
	fglSetLODControl(0x0);
    	fglEnablePerFragUnit(FGL_PF_DEPTH, FGL_FALSE);
		
	return NO_ERROR;
	
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -