Beispiel #1
0
void WindowsHost::BeginFrame()
{
	for (auto iter = this->input.begin(); iter != this->input.end(); iter++)
		if ((*iter)->UpdateState() == 0)
			break; // *iter is std::shared_ptr, **iter is InputDevice
	GL_BeginFrame();
}
Beispiel #2
0
void	GL_SDL_BeginFrame(void)
{
	GL_BeginFrame();
}
void GlassViewer::draw(gcn::Graphics *g) {
	sceneobj_t sc;
	int x,y;
	vec4_t rect;
	if(isCulled(g))
		return;
	
	getAbsolutePosition(x, y);
	
	gcn::Rectangle r = g->getCurrentClipArea();
	
	//setup camera
	Cam_DefaultCamera(&cam, r.width, r.height, 0.1, Cvar_GetValue("gfx_farclip"));
	cam.fovx = fov;
	cam.fog_near = cam.fog_far = 10000;
	cam.x = x;
	cam.y = Vid_GetScreenH()-y-mDimension.height;
	cam.use_viewport = true;
	Cam_CalcFovy(&cam);
	//Cam_SetDistance(&cam, 1000);
	
	M_CopyVec3(target, cam.viewaxis[AXIS_FORWARD]);
	M_GetAxisFromForwardVec(cam.viewaxis[AXIS_FORWARD], cam.viewaxis);
	M_CopyVec3(camPos, cam.origin);
	
	cam.time = Host_Milliseconds()/1000.0f;
	
	SET_VEC4(rect, 0, 0, r.width, r.height);
	
	if(mOpaque) {
		g->setColor(getBackgroundColor());
		g->fillRectangle(gcn::Rectangle(0,0,getWidth(),getHeight()));
	}
	
	Scene_Clear();
	
	Scene_SetFrustum(&cam, rect);
	
	if(model!=(residx_t)-1) {
		CLEAR_SCENEOBJ(sc);
		
		//SET_VEC3(cam.viewaxis[AXIS_FORWARD], target[0]-camPos[0], target[1]-camPos[1], target[2]-camPos[2]);
		//M_Normalize(cam.viewaxis[AXIS_FORWARD]);
		//M_GetAxisFromForwardVec(cam.viewaxis[AXIS_FORWARD], cam.viewaxis);
		M_MultVec3(cam.viewaxis[AXIS_FORWARD], -distance, cam.origin);
		
		M_AddVec3(cam.origin, camPos, cam.origin);
		
		sc.model = model;
		sc.skeleton = &skeleton;
		sc.flags = SCENEOBJ_NEVER_CULL | SCENEOBJ_USE_AXIS;
		SET_VEC3(sc.rimColor, 1.0, 1.0, 1.0);
		
		if(animState.size() > 0) {
			Geom_BeginPose(sc.skeleton, sc.model);
			Geom_SetBoneAnim("", animState.c_str(), Host_Milliseconds(), Host_Milliseconds(), 0, 0);
			Geom_EndPose();
		}
		
		M_CopyVec3(position, sc.pos);
		
		sc.angle[0] = sc.angle[1] = 0;
		sc.angle[2] = angle;
		M_GetAxis(sc.angle[0], sc.angle[1], sc.angle[2], sc.axis);
		
		if(mAutoRotate)
			angle = int(angle + dAngle) % 360;
		
		if(angle<0)
			angle +=360;
		
		Scene_AddObject(&sc);
	}
	
	if(!world) {
		cam.fog_near = 9000;
		cam.fog_far = 10000;
		cam.flags |= CAM_NO_WORLD;
	} else {
		cam.flags &= ~CAM_NO_WORLD;
		cam.fog_near = Cvar_GetValue("gfx_fog_near");
		cam.fog_far = Cvar_GetValue("gfx_fog_far");
		WO_RenderEmitters(cam.origin);
		WL_RenderLights(cam.origin);
	}
	
	//FIXME: add post-processing with viewers
	int old = gfx_postProcessing.integer;
	
	Cvar_SetVarValue(&gfx_postProcessing, 0);
	
	GL_EndFrame();
	
	GL_Enable(GL_CULL_FACE);
	
	Scene_Render(&cam, cam.origin, 0);
	
	GL_Disable(GL_CULL_FACE);
	
	GL_BeginFrame();
	Cvar_SetVarValue(&gfx_postProcessing, old);
	
	if(animState.size() > 0 && model != (residx_t)-1)
		Geom_FreeSkeleton(&skeleton);
	
}