Exemplo n.º 1
0
// called by GOS when you need to draw
//---------------------------------------------------------------------------
void __stdcall UpdateRenderers()
{
	uint32_t bColor = 0x0;
	gos_SetupViewport(1, 1.0, 1, bColor, 0.0, 0.0, 1.0, 1.0);  //ALWAYS FULL SCREEN for now
	gos_SetRenderState(gos_State_Filter, gos_FilterBiLinear);
	gos_SetRenderState(gos_State_AlphaMode, gos_Alpha_AlphaInvAlpha);
	gos_SetRenderState(gos_State_AlphaTest, TRUE);
	gos_SetRenderState(gos_State_Clipping, TRUE);
	gos_SetRenderState(gos_State_TextureAddress, gos_TextureClamp);
	gos_SetRenderState(gos_State_Dither, 1);
	float viewMulX, viewMulY, viewAddX, viewAddY;
	gos_GetViewport(&viewMulX, &viewMulY, &viewAddX, &viewAddY);
	//------------------------------------------------------------
	gos_SetRenderState(gos_State_Filter, gos_FilterNone);
	pMechlopedia->render();
	gos_SetRenderState(gos_State_Filter, gos_FilterNone);
	userInput->setViewport(viewMulX, viewMulY, viewAddX, viewAddY);
	userInput->render();
}
Exemplo n.º 2
0
void UpdateRenderers()
{
	hasGuardBand = gos_GetMachineInformation(gos_Info_HasGuardBandClipping) != 0;

	//---------------------------------------------------------------------------------
	//Doesn't work.  Always returns 0 for TNT in Win2K build 2183 with 3.55 detonator
	//Assume worst case is +/- 8.0 for now.
	//MaxMinUV = gos_GetMachineInformation(gos_Info_GetMaximumUVSize);

	DWORD bColor = 0x0;
	if (eye)
		bColor = eye->fogColor;
		
	gos_SetupViewport(1,1.0,1,bColor, 0.0, 0.0, 1.0, 1.0 );		//ALWAYS FULL SCREEN for now
	gos_SetRenderState( gos_State_Filter, gos_FilterBiLinear );

	gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_AlphaInvAlpha );

	gos_SetRenderState( gos_State_AlphaTest, TRUE );

	gos_SetRenderState( gos_State_Clipping, TRUE);

	gos_SetRenderState( gos_State_TextureAddress, gos_TextureClamp );

	gos_SetRenderState( gos_State_Dither, 1);

	if (logistics)
	{
		float viewMulX, viewMulY, viewAddX, viewAddY;
		gos_GetViewport(&viewMulX, &viewMulY, &viewAddX, &viewAddY);
		//userInput->setViewport(viewMulX,viewMulY,viewAddX,viewAddY);

		logistics->render();
	}

	//------------------------------------------------------------
	gos_SetRenderState( gos_State_Filter, gos_FilterNone );
	//userInput->render();

	//------------------------------------------------------------
	gos_SetRenderState( gos_State_Filter, gos_FilterNone );
}
Exemplo n.º 3
0
//---------------------------------------------------------------------------
void GameCamera::render(void)
{
	//------------------------------------------------------
	// At present, these actually draw.  Later they will
	// add elements to the draw list and sort and draw.
	// The later time has arrived.  We begin sorting immediately.
	// NO LONGER NEED TO SORT!
	// ZBuffer time has arrived.  Share and Enjoy!
	// Everything SIMPLY draws at the execution point into the zBuffer
	// at the correct depth.  Miracles occur at that point!
	// Big code change but it removes a WHOLE bunch of code and memory!
	//--------------------------------------------------------
	// Get new viewport values to scale stuff.  No longer uses
	// VFX stuff for this.  ALL GOS NOW!
	gos_GetViewport(&viewMulX, &viewMulY, &viewAddX, &viewAddY);
	MidLevelRenderer::MLRState default_state;
	default_state.SetBackFaceOn();
	default_state.SetDitherOn();
	default_state.SetTextureCorrectionOn();
	default_state.SetZBufferCompareOn();
	default_state.SetZBufferWriteOn();
	default_state.SetFilterMode(MidLevelRenderer::MLRState::BiLinearFilterMode);
	float z = 1.0f;
	Stuff::RGBAColor fColor;
	fColor.red   = ((fogColor >> 16) & 0xff);
	fColor.green = ((fogColor >> 8) & 0xff);
	fColor.blue  = ((fogColor)&0xff);
	//--------------------------------------------------------
	// Get new viewport values to scale stuff.  No longer uses
	// VFX stuff for this.  ALL GOS NOW!
	screenResolution.x = viewMulX;
	screenResolution.y = viewMulY;
	calculateProjectionConstants();
	TG_Shape::SetViewport(viewMulX, viewMulY, viewAddX, viewAddY);
	userInput->setViewport(viewMulX, viewMulY, viewAddX, viewAddY);
	gos_TextSetRegion(viewAddX, viewAddY, viewMulX, viewMulY);
	//--------------------------------------------------------
	// Get new viewport values to scale stuff.  No longer uses
	// VFX stuff for this.  ALL GOS NOW!
	screenResolution.x = viewMulX;
	screenResolution.y = viewMulY;
	calculateProjectionConstants();
	globalScaleFactor = getScaleFactor();
	globalScaleFactor *= viewMulX / 640.0; // Scale Mechs to ScreenRES
	//-----------------------------------------------
	// Set Ambient for this pass of rendering
	uint32_t lightRGB = (ambientRed << 16) + (ambientGreen << 8) + ambientBlue;
	eye->setLightColor(1, lightRGB);
	eye->setLightIntensity(1, 1.0);
	MidLevelRenderer::PerspectiveMode = usePerspective;
	theClipper->StartDraw(cameraOrigin, cameraToClip, fColor, &fColor, default_state, &z);
	MidLevelRenderer::GOSVertex::farClipReciprocal =
		(1.0f - cameraToClip(2, 2)) / cameraToClip(3, 2);
	if (active && turn > 1)
	{
		//----------------------------------------------------------
		// Turn stuff on line by line until perspective is working.
		if (Environment.Renderer != 3)
			theSky->render(1);
		land->render(); // render the Terrain
		if (Environment.Renderer != 3)
			craterManager->render();			 // render the craters and footprints
		ObjectManager->render(true, true, true); // render all other objects
		land->renderWater();					 // Draw Water Last!
		if (useShadows && Environment.Renderer != 3)
			ObjectManager->renderShadows(true, true, true);
		if (mission && mission->missionInterface)
			mission->missionInterface->drawVTOL();
		if (!drawOldWay && !inMovieMode)
		{
			if (compass && (turn > 3) && drawCompass)
				compass->render(-1); // Force this to zBuffer in front of everything
		}
		if (!drawOldWay)
			mcTextureManager->renderLists(); // This sends triangles down to the
											 // card.  All "rendering" to this
											 // point has been setting up tri
											 // lists
		if (drawOldWay)
		{
			// Last thing drawn were shadows which are not Gouraud Shaded!!!
			// MLR to be "efficient" doesn't set this state by default at
			// startup!
			gos_SetRenderState(gos_State_ShadeMode, gos_ShadeGouraud);
		}
		theClipper->RenderNow(); // Draw the FX
		if (useNonWeaponEffects)
			weather->render(); // Draw the weather
	}
	if (drawOldWay && !inMovieMode)
	{
		gos_SetRenderState(gos_State_ZCompare, 0);
		gos_SetRenderState(gos_State_ZWrite, 0);
		gos_SetRenderState(gos_State_Perspective, 1);
		if (compass && (turn > 3) && drawCompass)
			compass->render();
	}
	//---------------------------------------------------------
	// Check if we are inMovieMode and should be letterboxed.
	// draw letterboxes here.
	if (inMovieMode && (letterBoxPos != 0.0f))
	{
		// Figure out the two faces we need to draw based on letterBox Pos and
		// Alpha
		float barTopX = screenResolution.y * letterBoxPos;
		float barBotX = screenResolution.y - barTopX;
		gos_SetRenderState(gos_State_AlphaMode, gos_Alpha_AlphaInvAlpha);
		gos_SetRenderState(gos_State_ShadeMode, gos_ShadeGouraud);
		gos_SetRenderState(gos_State_MonoEnable, 0);
		gos_SetRenderState(gos_State_Perspective, 0);
		gos_SetRenderState(gos_State_Clipping, 1);
		gos_SetRenderState(gos_State_AlphaTest, 1);
		gos_SetRenderState(gos_State_Specular, 0);
		gos_SetRenderState(gos_State_Dither, 1);
		gos_SetRenderState(gos_State_TextureMapBlend, gos_BlendModulate);
		gos_SetRenderState(gos_State_Filter, gos_FilterNone);
		gos_SetRenderState(gos_State_TextureAddress, gos_TextureClamp);
		gos_SetRenderState(gos_State_ZCompare, 0);
		gos_SetRenderState(gos_State_ZWrite, 0);
		gos_SetRenderState(gos_State_Texture, 0);
		//------------------------------------
		gos_VERTEX gVertex[4];
		gVertex[0].x	= 0.0f;
		gVertex[0].y	= 0.0f;
		gVertex[0].z	= 0.00001f;
		gVertex[0].rhw  = 0.00001f;
		gVertex[0].u	= 0.0f;
		gVertex[0].v	= 0.0f;
		gVertex[0].argb = (letterBoxAlpha << 24);
		gVertex[0].frgb = 0xff000000;
		gVertex[1].x	= 0.0f;
		gVertex[1].y	= barTopX;
		gVertex[1].z	= 0.00001f;
		gVertex[1].rhw  = 0.00001f;
		gVertex[1].u	= 0.0f;
		gVertex[1].v	= 0.0f;
		gVertex[1].argb = (letterBoxAlpha << 24);
		gVertex[1].frgb = 0xff000000;
		gVertex[2].x	= screenResolution.x;
		gVertex[2].y	= barTopX;
		gVertex[2].z	= 0.00001f;
		gVertex[2].rhw  = 0.00001f;
		gVertex[2].u	= 0.0f;
		gVertex[2].v	= 0.0f;
		gVertex[2].argb = (letterBoxAlpha << 24);
		gVertex[2].frgb = 0xff000000;
		gVertex[3].x	= screenResolution.x;
		gVertex[3].y	= 0.0f;
		gVertex[3].z	= 0.00001f;
		gVertex[3].rhw  = 0.00001f;
		gVertex[3].u	= 0.0f;
		gVertex[3].v	= 0.0f;
		gVertex[3].argb = (letterBoxAlpha << 24);
		gVertex[3].frgb = 0xff000000;
		gos_DrawQuads(gVertex, 4);
		gVertex[0].x	= 0.0f;
		gVertex[0].y	= barBotX;
		gVertex[0].z	= 0.00001f;
		gVertex[0].rhw  = 0.00001f;
		gVertex[0].u	= 0.0f;
		gVertex[0].v	= 0.0f;
		gVertex[0].argb = (letterBoxAlpha << 24);
		gVertex[0].frgb = 0xff000000;
		gVertex[1].x	= screenResolution.x;
		gVertex[1].y	= barBotX;
		gVertex[1].z	= 0.00001f;
		gVertex[1].rhw  = 0.00001f;
		gVertex[1].u	= 0.0f;
		gVertex[1].v	= 0.0f;
		gVertex[1].argb = (letterBoxAlpha << 24);
		gVertex[1].frgb = 0xff000000;
		gVertex[2].x	= screenResolution.x;
		gVertex[2].y	= screenResolution.y;
		gVertex[2].z	= 0.00001f;
		gVertex[2].rhw  = 0.00001f;
		gVertex[2].u	= 0.0f;
		gVertex[2].v	= 0.0f;
		gVertex[2].argb = (letterBoxAlpha << 24);
		gVertex[2].frgb = 0xff000000;
		gVertex[3].x	= 0.0f;
		gVertex[3].y	= screenResolution.y;
		gVertex[3].z	= 0.00001f;
		gVertex[3].rhw  = 0.00001f;
		gVertex[3].u	= 0.0f;
		gVertex[3].v	= 0.0f;
		gVertex[3].argb = (letterBoxAlpha << 24);
		gVertex[3].frgb = 0xff000000;
		gos_DrawQuads(gVertex, 4);
	}
	if (inMovieMode && (fadeAlpha != 0x0))
	{
		// We are fading to something other then clear screen.
		gos_SetRenderState(gos_State_AlphaMode, gos_Alpha_AlphaInvAlpha);
		gos_SetRenderState(gos_State_ShadeMode, gos_ShadeGouraud);
		gos_SetRenderState(gos_State_MonoEnable, 0);
		gos_SetRenderState(gos_State_Perspective, 0);
		gos_SetRenderState(gos_State_Clipping, 1);
		gos_SetRenderState(gos_State_AlphaTest, 1);
		gos_SetRenderState(gos_State_Specular, 0);
		gos_SetRenderState(gos_State_Dither, 1);
		gos_SetRenderState(gos_State_TextureMapBlend, gos_BlendModulate);
		gos_SetRenderState(gos_State_Filter, gos_FilterNone);
		gos_SetRenderState(gos_State_TextureAddress, gos_TextureClamp);
		gos_SetRenderState(gos_State_ZCompare, 0);
		gos_SetRenderState(gos_State_ZWrite, 0);
		gos_SetRenderState(gos_State_Texture, 0);
		//------------------------------------
		gos_VERTEX gVertex[4];
		gVertex[0].x	= 0.0f;
		gVertex[0].y	= 0.0f;
		gVertex[0].z	= 0.00001f;
		gVertex[0].rhw  = 0.00001f;
		gVertex[0].u	= 0.0f;
		gVertex[0].v	= 0.0f;
		gVertex[0].argb = (fadeAlpha << 24) + (fadeColor & 0x00ffffff);
		gVertex[0].frgb = 0xff000000;
		gVertex[1].x	= 0.0f;
		gVertex[1].y	= screenResolution.y;
		gVertex[1].z	= 0.00001f;
		gVertex[1].rhw  = 0.00001f;
		gVertex[1].u	= 0.0f;
		gVertex[1].v	= 0.0f;
		gVertex[1].argb = (fadeAlpha << 24) + (fadeColor & 0x00ffffff);
		gVertex[1].frgb = 0xff000000;
		gVertex[2].x	= screenResolution.x;
		gVertex[2].y	= screenResolution.y;
		gVertex[2].z	= 0.00001f;
		gVertex[2].rhw  = 0.00001f;
		gVertex[2].u	= 0.0f;
		gVertex[2].v	= 0.0f;
		gVertex[2].argb = (fadeAlpha << 24) + (fadeColor & 0x00ffffff);
		gVertex[2].frgb = 0xff000000;
		gVertex[3].x	= screenResolution.x;
		gVertex[3].y	= 0.0f;
		gVertex[3].z	= 0.00001f;
		gVertex[3].rhw  = 0.00001f;
		gVertex[3].u	= 0.0f;
		gVertex[3].v	= 0.0f;
		gVertex[3].argb = (fadeAlpha << 24) + (fadeColor & 0x00ffffff);
		gVertex[3].frgb = 0xff000000;
		gos_DrawQuads(gVertex, 4);
	}
	//-----------------------------------------------------
}