//Draw
void COculusVR::DrawScreen()
{
	//clear
	wzClear();

	// Adjust eye position and rotation from controls, maintaining y position from HMD.
	static float BodyYaw(3.141592f);
	static Vector3f HeadPos(0.0f, 0.0f, -5.0f);
    static ovrTrackingState HmdState;
	static ovrPosef eyeRenderPose[2];

    ovrVector3f hmdToEyeViewOffset[2] = { EyeRenderDesc[0].HmdToEyeViewOffset, EyeRenderDesc[1].HmdToEyeViewOffset };
    ovrHmd_GetEyePoses(Hmd, 0, hmdToEyeViewOffset, eyeRenderPose, &HmdState);

	/* debug
		wzSetSpriteScSize(1920, 1080);
		wzSetSpritePosition(0.0f, 0.0f, 0.0f);
		wzSetSpriteColor(1.0f, 1.0f, 1.0f, 1.0f);
		wzSetSpriteTexCoord(0.0f, 0.0f, 1.0f, 1.0f);
		wzSetSpriteSizeLeftUp((float)1920, (float)1080);
		wzSetSpriteTexture(&m_screenTex);
		wzSpriteDraw();	//Draw
	*/

	// Setup shader
	wzUseShader(&LensShader);
	wzSetTexture("texture0", &m_screenTex, 0);

	for ( int eyeNum = 0; eyeNum < 2; eyeNum++ )
	{
		wzVector2 uvScale = {UVScaleOffset[eyeNum][0].x,-UVScaleOffset[eyeNum][0].y};
		wzVector2 uvOffset = {UVScaleOffset[eyeNum][1].x,UVScaleOffset[eyeNum][1].y};
		wzMatrix rotStart,rotEnd;
		wzUniformVector2("eyeToSourceUVscale", &uvScale);
		wzUniformVector2("eyeToSourceUVoffset", &uvOffset);

 		ovrMatrix4f timeWarpMatrices[2];
		ovrHmd_GetEyeTimewarpMatrices(Hmd, (ovrEyeType)eyeNum, eyeRenderPose[eyeNum], timeWarpMatrices);
		memcpy(&rotStart.m,&timeWarpMatrices[0],sizeof(ovrMatrix4f));
		memcpy(&rotEnd.m,&timeWarpMatrices[1],sizeof(ovrMatrix4f));
		wzUniformMatrix("eyeRotationStart", &rotStart);	//Nb transposed when set
		wzUniformMatrix("eyeRotationEnd", &rotEnd);
		
		//Draw Mesh
		wzDrawMesh(&MeshBuffer[eyeNum]);
	}

	//DK2 Latency Tester
	unsigned char latencyColor[3];
	ovrBool drawDk2LatencyQuad = ovrHmd_GetLatencyTest2DrawColor(Hmd, latencyColor);
	if(drawDk2LatencyQuad)
    {
		const int latencyQuadSize = 20; // only needs to be 1-pixel, but larger helps visual debugging
		wzSetViewport(Hmd->Resolution.w - latencyQuadSize, 0, latencyQuadSize, latencyQuadSize);
		wzSetClearColor(latencyColor[0] / 255.0f, latencyColor[1] / 255.0f, latencyColor[2] / 255.0f,0.0f);
		wzClear();
	}
}
Ejemplo n.º 2
0
/*
 * 描画用スレッド関数
 * 最大のパフォーマンスの間隔で呼ばれます。
 */
void DrawLoop(void)
{
	// 画面クリア
	wzClear();

	/*----------------------------------------

		****ゲームを描画する****
		(GPUにアクセスする描画処理を書く)

		※繰り返し呼び出されます。
	
	----------------------------------------*/
    
    sSceneManager->Draw();

	/*------------------------------------------------------------------*/

	// デバッグ情報(通常不要)
    
	wzSetSpriteColor(1.0f, 1.0f, 1.0f, 1.0f);
	wzSetSpriteRotate(0.0f);
    wzFontSize(18);
    
	wzPrintf(20,  40, (char *)"Wizapply");
	wzPrintf(20,  70, (char *)"Update:%0.2f", wzGetUpdateFPS());
	wzPrintf(20,  90, (char *)"Draw  :%0.2f", wzGetDrawFPS());
	wzPrintf(20, 120, (char *)"isHold:%u", wzGetTime());
	wzPrintf(20, 140, (char *)"holdFrame:%d", sKeyPadManager->GetMainKeyPad()->GetHoldFrame(KeyPadA));
}