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

📄 vbmixedidx.cpp

📁 SMDK6410 Test Code Revision 02. s3c6410 official test code, shifting all the controller functional
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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);

	FGL_HInterface HInterface;
	HInterface.enableAutoInc = FGL_TRUE;
	HInterface.enableVtxBuffer = FGL_TRUE;
	HInterface.enableVtxCache = FGL_FALSE;	
	HInterface.idxType = FGL_INDEX_DATA_UINT;
	HInterface.numVSOut = 2;
	
	for(j=0; j<3; j++)
	{
		nNumOfVertices = nNumTrisCube_HI2 * 3;

		if(j==0)
		{
			HInterface.idxType = FGL_INDEX_DATA_UINT;
			fglSetHInterface(&HInterface);
			
			unsigned int uiIndex = 0x00000000;
			fglSendToFIFO(4, &nNumOfVertices);
			fglSendToFIFO(4, &uiIndex);
		}
		else if(j==1)
		{
			HInterface.idxType = FGL_INDEX_DATA_USHORT;
			fglSetHInterface(&HInterface);
			
			unsigned int uiIndex = 0xFFFF0000;
			fglSendToFIFO(4, &nNumOfVertices);
			fglSendToFIFO(4, &uiIndex);
		}
		else
		{
			HInterface.idxType = FGL_INDEX_DATA_UBYTE;
			HInterface.enableVtxCache = FGL_TRUE;
			fglSetHInterface(&HInterface);
			
			unsigned int uiIndex = 0xFFFFFF00;
			fglSendToFIFO(4, &nNumOfVertices);
			fglSendToFIFO(4, &uiIndex);
		}

		DataSize = sizeof(RemainData0)/sizeof(float);

		fglSysTransferToPort(
								(unsigned int *)RemainData0,
								/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
								DataSize
							 );

		fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status

		// Cache flush
		fglSysCacheFlush();

		fglSysDelay(50);

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

	}

	// HI IdxOffset SFR
	fglSetIndexOffset(0);		    		// Default value
	VtxAttrib.stride = 0;					// Default value
	VtxAttrib.addr = 0;						// Default value
	VtxAttrib.num = 0;
	fglSetVtxBufAttrib(2, &VtxAttrib);

 ///////////////////////////////// Index Transfer ///////////////////////////////////


 	//pVS = &Diffuse_vsa[0];

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

    //ConstFloatAddr = FGVS_CFLOAT_SADDR;
	//matMVP.WriteMatrix4(ConstFloatAddr);
	
	fglWriteVertexShaderConstFloat(0, 16, matMVP.m[0]);	

 	fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status


/*
	// Vertex Shader SFR set
	WRITEREG(FGVS_ATTRIB_NUM, 0x00020002); // Attribute counter of VS input & output
	WRITEREG(FGVS_CONFIG, 0x00000001); // Configuration register

	// Pixel Shader SFR set
	WRITEREG(FGPS_EXE_MODE, 0x00000000); // Pixel shader execution mode control register
	WRITEREG(FGPS_PC_COPY, 0x00000001); // Copy PSPCS_ADDR value to program counter
	WRITEREG(FGPS_ATTRIB_NUM, 0x00000001); // Number of attribute of current context
	fglSysPollingMask(FGPS_INBUF_STATUS, 0x0, 0x00000001); // Status signal of pixel shader input buffer
	WRITEREG(FGPS_EXE_MODE, 0x00000001); // Pixel shader execution mode control register
*/
    fglVSSetAttribNum(2);
    fglPSSetAttributeNum(1);

 	/*
	 * Transfer the data of geometry to Vertex Buffer
	 */

	pVtxBufAddr = 0;
	
	// Attribute 0 for Vertex Buffer
	fglSetVtxBufferAddr((unsigned int)pVtxBufAddr);		// Vetex buffer address
	VtxAttrib.stride = 16;								// Attribute n vertex buffer control
	VtxAttrib.addr = (unsigned int)pVtxBufAddr;			// Vertex buffer attribute0 base address
	VtxAttrib.num = 0x16;
	fglSetVtxBufAttrib(0, &VtxAttrib);

	DataSize = sizeof(BoxPos)/sizeof(float);

	for(i=0; i<DataSize; i++)
	{
		fglSendToVtxBuffer(*(unsigned int*)&BoxPos[i]);	
		pVtxBufAddr++;
	}

	// Attribute 1 for Vertex Buffer
	// Attribute 0 for Vertex Buffer
	fglSetVtxBufferAddr((unsigned int)pVtxBufAddr);		// Vetex buffer address
	VtxAttrib.stride = 16;								// Attribute n vertex buffer control
	VtxAttrib.addr = (unsigned int)pVtxBufAddr;			// Vertex buffer attribute0 base address
	VtxAttrib.num = 0x16;
	fglSetVtxBufAttrib(1, &VtxAttrib);

	DataSize = sizeof(BoxNormal)/sizeof(float);

	for(i=0; i<DataSize; i++)
	{
		fglSendToVtxBuffer(*(unsigned int*)&BoxNormal[i]);
		pVtxBufAddr++;
	}

	// HI IdxOffset SFR
	fglSetIndexOffset(0);		    // Auto-Increment Mode
	// Primitive Engine SRF Set
	Vtx.prim = FGL_PRIM_TRIANGLES;
	Vtx.enablePointSize = FGL_FALSE;
	Vtx.numVSOut = 1;
	Vtx.shadeModel = FGL_SHADING_SMOOTH;
	Vtx.colorAttribIdx = 0;
	
	fglSetVertex(&Vtx);// Vertex context register
	// Host Interface SFR Set
	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);
	HIAttr.bEndFlag = FGL_TRUE;
	fglSetAttribute(1, &HIAttr);

	HInterface.enableAutoInc = FGL_FALSE;
	HInterface.enableVtxBuffer = FGL_TRUE;
	HInterface.enableVtxCache = FGL_TRUE;	
	HInterface.idxType = FGL_INDEX_DATA_UINT;
	HInterface.numVSOut = 2;	
	fglSetHInterface(&HInterface);
	
	unsigned int uiTmpVertices = 0;
	for(j=0; j<3; j++)
	{
		nNumOfVertices = nNumTrisCube_HI2 * 3;

		if(j==0)
		{
			// Index-Transfer Mode: index type unsigned int
			fglSetHInterface(&HInterface);
			fglSendToFIFO(4, &nNumOfVertices);

			//int IdxBox0[] = {  0,  3,  6,    1, 15,  4,    5, 18,  7,    9$$$, 19, 21,    2 };
			IdxSize = sizeof(IdxBox0)/sizeof(int);
			fglSysTransferToPort(
									(unsigned int *)IdxBox0,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									IdxSize
								 );
			//	22,
LOOP0:		fglGetNumEmptyFIFOSlots(&nEmptySpace);

			uiTmpVertices = 0x16;
			if(nEmptySpace > 1) {fglSendToFIFO(4, &uiTmpVertices);}
			else goto LOOP0;
			fglSysTransferToPort(
									(unsigned int *)AppendIdx22,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );

			//int IdxBox1[] = { 12,    13, 20, 16,    0,  6, 10,   1,  14,  15,     5,  17,  18,     9,   8,  19,    2,  11 };
			IdxSize = sizeof(IdxBox1)/sizeof(int);
			fglSysTransferToPort(
									(unsigned int *)IdxBox1,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									IdxSize
								 );
			//	22,
LOOP1:		fglGetNumEmptyFIFOSlots(&nEmptySpace);

			uiTmpVertices = 0x16;
			if(nEmptySpace > 1) {fglSendToFIFO(4, &uiTmpVertices);}
			else goto LOOP1;
			fglSysTransferToPort(
									(unsigned int *)AppendIdx22,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );
			//	13,
LOOP2:		fglGetNumEmptyFIFOSlots(&nEmptySpace);

			uiTmpVertices = 0xD;
			if(nEmptySpace > 1) {fglSendToFIFO(4, &uiTmpVertices);}
			else goto LOOP2;

			//	23,
LOOP3:		fglGetNumEmptyFIFOSlots(&nEmptySpace);

			uiTmpVertices = 0x17;
			if(nEmptySpace > 1) {fglSendToFIFO(4, &uiTmpVertices);}
			else goto LOOP3;
			fglSysTransferToPort(
									(unsigned int *)AppendIdx23,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );
			//	20
LOOP4:		fglGetNumEmptyFIFOSlots(&nEmptySpace);

			uiTmpVertices = 0x14;
			if(nEmptySpace > 1) {fglSendToFIFO(4, &uiTmpVertices);}
			else goto LOOP4;
		}
		else if(j==1)
		{
			// Index-Transfer Mode: index type short
			HInterface.idxType = FGL_INDEX_DATA_USHORT;			
			fglSetHInterface(&HInterface);
			fglSendToFIFO(4, &nNumOfVertices);

			IdxSize = sizeof(IdxBox0Short)/sizeof(unsigned int);
			fglSysTransferToPort(
									(unsigned int *)IdxBox0Short,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									IdxSize
								 );

			fglSysTransferToPort(
									(unsigned int *)AppendIdx22,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );
			IdxSize = sizeof(IdxBox1Short)/sizeof(unsigned int);
			fglSysTransferToPort(
									(unsigned int *)IdxBox1Short,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									IdxSize
								 );

			fglSysTransferToPort(
									(unsigned int *)AppendIdx22,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );

 LOOP5:		fglGetNumEmptyFIFOSlots(&nEmptySpace);
			if(nEmptySpace > 1) 
			{
			    //WRITEREG(FGHI_FIFO_ENTRY, 0x00140017);
			    unsigned int uTmp = 0x00140017;
			    fglSendToFIFO(4, &uTmp);
			}
			else goto LOOP5;
			fglSysTransferToPort(
									(unsigned int *)AppendIdx23,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );
		}
		else
		{
			// Index-Transfer Mode: index type unsigned byte
			HInterface.idxType = FGL_INDEX_DATA_UBYTE;			
			fglSetHInterface(&HInterface);
			fglSendToFIFO(4, &nNumOfVertices);

			IdxSize = sizeof(IdxBox0Byte)/sizeof(unsigned int);
			fglSysTransferToPort(
									(unsigned int *)IdxBox0Byte,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									IdxSize
								 );

			fglSysTransferToPort(
									(unsigned int *)AppendIdx22,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );

			IdxSize = sizeof(IdxBox1Byte)/sizeof(unsigned int);
			fglSysTransferToPort(
									(unsigned int *)IdxBox1Byte,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									IdxSize
								 );

			fglSysTransferToPort(
									(unsigned int *)AppendIdx22,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );

			fglSysTransferToPort(
									(unsigned int *)AppendIdx23,
									/*(volatile unsigned int *)(FGHI_FIFO_ENTRY),*/
									0x8
								 );
		}


		fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status

		// Cache flush
		//fglSysCacheFlush();
		fglClearCache(FGL_CACHECTL_FLUSH_ZCACHE | FGL_CACHECTL_FLUSH_CCACHE);

		fglSysDelay(50);

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


	}

    fglEnablePerFragUnit(FGL_PF_DEPTH, FGL_FALSE);
	// HI IdxOffset SFR
	fglSetIndexOffset(0);		// Default value
	// Attribute 0 for Vertex Buffer
	VtxAttrib.stride = 0;		// Attribute n vertex buffer control
	VtxAttrib.addr = 0;			// Vertex buffer attribute0 base address
	VtxAttrib.num = 0;
	fglSetVtxBufAttrib(2, &VtxAttrib);


	return NO_ERROR;
}

⌨️ 快捷键说明

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