//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(); } }
/* * 描画用スレッド関数 * 最大のパフォーマンスの間隔で呼ばれます。 */ 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)); }