コード例 #1
0
ファイル: r_antialias.c プロジェクト: Nephatrine/nephq2
void R_AntialiasSetFBOSize(fbo_t *fbo)
{
	if ( fbo->width != offscreenBounds.width || fbo->height != offscreenBounds.height)
	{
		R_ResizeFBO(offscreenBounds.width, offscreenBounds.height, 1, GL_RGBA8, fbo);
	}
}
コード例 #2
0
ファイル: r_vr_ovr.c プロジェクト: Nephatrine/nephq2
void OVR_FrameStart(int32_t changeBackBuffers)
{
	if (vr_ovr_maxfov->modified)
	{
		int newValue =  vr_ovr_maxfov->value ? 1 : 0;
		if (newValue != (int)vr_ovr_maxfov->value)
			Cvar_SetInteger("vr_ovr_maxfov",newValue);
		changeBackBuffers = 1;
		vr_ovr_maxfov->modified = (qboolean) false;
	}

	if (vr_ovr_supersample->modified)
	{
		if (vr_ovr_supersample->value < 1.0)
			Cvar_Set("vr_ovr_supersample", "1.0");
		else if (vr_ovr_supersample->value > 2.0)
			Cvar_Set("vr_ovr_supersample", "2.0");
		changeBackBuffers = 1;
		vr_ovr_supersample->modified = false;
	}
	if (useChroma != (qboolean) !!vr_chromatic->value)
	{
		useChroma = (qboolean) !!vr_chromatic->value;
	}

	if (vr_ovr_lumoverdrive->modified)
	{
		changeBackBuffers = 1;
		currentFrame = 0;
		vr_ovr_lumoverdrive->modified = false;
	}

	if (changeBackBuffers)
	{
		int i;
		float width, height;
		float ovrScale;

		OVR_CalculateState(&currentState);


		width = glConfig.render_width / (float) hmd->Resolution.w;
		height = glConfig.render_height / (float) hmd->Resolution.h;
		ovrScale = (width + height) / 2.0;
		ovrScale *= R_AntialiasGetScale() * vr_ovr_supersample->value;
		if (vr_ovr_debug->value)
			Com_Printf("VR_OVR: Set render target scale to %.2f\n",ovrScale);
		for (i = 0; i < 2; i++)
		{
			ovrRecti viewport = {{0,0}, {0,0}};
			renderInfo[i].renderTarget = ovrHmd_GetFovTextureSize(hmd, (ovrEyeType) i, renderInfo[i].eyeFov, ovrScale);
			viewport.Size.w = renderInfo[i].renderTarget.w;
			viewport.Size.h = renderInfo[i].renderTarget.h;
			ovrHmd_GetRenderScaleAndOffset(renderInfo[i].eyeFov, renderInfo[i].renderTarget, viewport, (ovrVector2f*) renderInfo[i].UVScaleOffset);

			if (renderInfo[i].renderTarget.w != renderInfo[i].eyeFBO.width || renderInfo[i].renderTarget.h != renderInfo[i].eyeFBO.height)
			{
				if (vr_ovr_debug->value)
					Com_Printf("VR_OVR: Set buffer %i to size %i x %i\n",i,renderInfo[i].renderTarget.w, renderInfo[i].renderTarget.h);
				R_ResizeFBO(renderInfo[i].renderTarget.w, renderInfo[i].renderTarget.h, 1, GL_RGBA8, &renderInfo[i].eyeFBO);
				R_ClearFBO(&renderInfo[i].eyeFBO);
			}

		}
	}
}
コード例 #3
0
ファイル: r_vr.c プロジェクト: fourks/quake2vr
void R_VR_StartFrame()
{
	qboolean resolutionChanged = 0;
	qboolean hudChanged = 0;

	extern int32_t scr_draw_loading;


	if (!hmd || !hmd->frameStart || !hmd->getState)
		return;
	
	R_AntialiasSetFBOSize(vrState.offscreen);
	if (vrState.offscreen->width != screen.width || vrState.offscreen->height != screen.height)
	{
		screen.height = vrState.offscreen->height;
		screen.width = vrState.offscreen->width;
		resolutionChanged = true;
	}

	hmd->frameStart(resolutionChanged);
	hmd->getState(&vrState);

	if (vr_hud_width->modified || vr_hud_height->modified)
	{
		int width, height;

		width = vr_hud_width->value;
		height = vr_hud_height->value;

		if (width < 640)
			width = 640;

		if (height < 480)
			height = 480;
		Cvar_SetInteger("vr_hud_width",width);
		Cvar_SetInteger("vr_hud_height",height);
		vr_hud_width->modified = false;
		vr_hud_height->modified = false;
		Com_Printf("VR: New HUD resolution %ix%i\n",width,height);
		if (hud.width != width || hud.height != height)
			R_ResizeFBO(width,height,1,GL_RGBA8,&hud);

	}

	if (vr_hud_segments->modified)
	{
		// clamp value from 30-90 degrees
		if (vr_hud_segments->value < 0)
			Cvar_SetInteger("vr_hud_segments", 1);
		else if (vr_hud_segments->value > MAX_SEGMENTS)
			Cvar_SetValue("vr_hud_segments", MAX_SEGMENTS);
		vr_hud_segments->modified = false;
		hudChanged = true;
	}

	if (vr_hud_depth->modified)
	{
		if (vr_hud_depth->value < 0.25f)
			Cvar_SetValue("vr_hud_depth", 0.25);
		else if (vr_hud_depth->value > 250)
			Cvar_SetValue("vr_hud_depth", 250);
		vr_hud_depth->modified = false;
		hudChanged = true;
	}

	if (vr_hud_fov->modified)
	{
		// clamp value from 30-90 degrees
		if (vr_hud_fov->value < 30)
			Cvar_SetValue("vr_hud_fov", 30.0f);
		else if (vr_hud_fov->value > vrState.viewFovY * 2.0)
			Cvar_SetValue("vr_hud_fov", vrState.viewFovY * 2.0);
		vr_hud_fov->modified = false;
		hudChanged = true;
	}

	if (hudChanged)
		R_VR_GenerateHud();

	if (resolutionChanged)
	{
		Com_Printf("VR: Calculated %.2f FOV\n", vrState.viewFovY);
	}


	GL_ClearColor(0.0, 0.0, 0.0, 0.0);
	R_BindFBO(vrState.eyeFBO[0]);
	R_Clear();
	R_BindFBO(vrState.eyeFBO[1]);
	R_Clear();
	R_BindFBO(&hud);
	R_Clear();
	R_BindFBO(&screenFBO);
	GL_SetDefaultClearColor();		

	hudStale = 1;

	loadingScreen = (qboolean) (scr_draw_loading > 0 ? 1 : 0);
}