Ejemplo n.º 1
0
void ActivateButton::saveToFile(std::ofstream *fout)
{
	*fout << getType() << " " << getID() << " " << getX() << " " << getY() << " " << getWidth() << " " << getHeight() << " ";
	if(mGate != NULL)
		*fout << mGate->getID() << " ";
	else	
		*fout << 99999 << " ";

	*fout << getTextureSource() << endl;
}
Ejemplo n.º 2
0
void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha)
{
	if (mIndex < 0) return;

	activate();
	if (mCurrBlendType != TB_COMBINE || gGL.mDirty)
	{
		mCurrBlendType = TB_COMBINE;
		gGL.flush();
		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
	}

	// We want an early out, because this function does a LOT of stuff.
	if ( ( (isAlpha && (mCurrAlphaOp == op) && (mCurrAlphaSrc1 == src1) && (mCurrAlphaSrc2 == src2))
			|| (!isAlpha && (mCurrColorOp == op) && (mCurrColorSrc1 == src1) && (mCurrColorSrc2 == src2)) ) && !gGL.mDirty)
	{
		return;
	}

	gGL.flush();

	// Get the gl source enums according to the eTextureBlendSrc sources passed in
	GLint source1 = getTextureSource(src1);
	GLint source2 = getTextureSource(src2);
	// Get the gl operand enums according to the eTextureBlendSrc sources passed in
	GLint operand1 = getTextureSourceType(src1, isAlpha);
	GLint operand2 = getTextureSourceType(src2, isAlpha);
	// Default the scale amount to 1
	S32 scale_amount = 1;
	GLenum comb_enum, src0_enum, src1_enum, src2_enum, operand0_enum, operand1_enum, operand2_enum;
	
	if (isAlpha)
	{
		// Set enums to ALPHA ones
		comb_enum = GL_COMBINE_ALPHA_ARB;
		src0_enum = GL_SOURCE0_ALPHA_ARB;
		src1_enum = GL_SOURCE1_ALPHA_ARB;
		src2_enum = GL_SOURCE2_ALPHA_ARB;
		operand0_enum = GL_OPERAND0_ALPHA_ARB;
		operand1_enum = GL_OPERAND1_ALPHA_ARB;
		operand2_enum = GL_OPERAND2_ALPHA_ARB;

		// cache current combiner
		mCurrAlphaOp = op;
		mCurrAlphaSrc1 = src1;
		mCurrAlphaSrc2 = src2;
	}
	else 
	{
		// Set enums to RGB ones
		comb_enum = GL_COMBINE_RGB_ARB;
		src0_enum = GL_SOURCE0_RGB_ARB;
		src1_enum = GL_SOURCE1_RGB_ARB;
		src2_enum = GL_SOURCE2_RGB_ARB;
		operand0_enum = GL_OPERAND0_RGB_ARB;
		operand1_enum = GL_OPERAND1_RGB_ARB;
		operand2_enum = GL_OPERAND2_RGB_ARB;

		// cache current combiner
		mCurrColorOp = op;
		mCurrColorSrc1 = src1;
		mCurrColorSrc2 = src2;
	}

	switch(op)
	{
		case TBO_REPLACE:
			// Slightly special syntax (no second sources), just set all and return.
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE);
			glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
			glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
			(isAlpha) ? setAlphaScale(1) : setColorScale(1);
			return;

		case TBO_MULT:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
			break;

		case TBO_MULT_X2:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
			scale_amount = 2;
			break;

		case TBO_MULT_X4:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
			scale_amount = 4;
			break;

		case TBO_ADD:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD);
			break;

		case TBO_ADD_SIGNED:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD_SIGNED_ARB);
			break;

		case TBO_SUBTRACT:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_SUBTRACT_ARB);
			break;

		case TBO_LERP_VERT_ALPHA:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB);
			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
			break;

		case TBO_LERP_TEX_ALPHA:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_TEXTURE);
			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
			break;

		case TBO_LERP_PREV_ALPHA:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PREVIOUS_ARB);
			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
			break;

		case TBO_LERP_CONST_ALPHA:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_CONSTANT_ARB);
			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
			break;

		case TBO_LERP_VERT_COLOR:
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB);
			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, (isAlpha) ? GL_SRC_ALPHA : GL_SRC_COLOR);
			break;

		default:
			llwarns << "Unknown eTextureBlendOp: " << op << ".  Setting op to replace." << llendl;
			// Slightly special syntax (no second sources), just set all and return.
			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE);
			glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
			glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
			(isAlpha) ? setAlphaScale(1) : setColorScale(1);
			return;
	}

	// Set sources, operands, and scale accordingly
	glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
	glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
	glTexEnvi(GL_TEXTURE_ENV, src1_enum, source2);
	glTexEnvi(GL_TEXTURE_ENV, operand1_enum, operand2);
	(isAlpha) ? setAlphaScale(scale_amount) : setColorScale(scale_amount);
}
Ejemplo n.º 3
0
void Teleport::saveToFile(std::ofstream *fout)
{
	*fout << getType() << " " << getID() << " " << (int)getX() << " " << (int)getY() << " " << (int)mDestX << " " << (int)mDestY << " ";
	*fout << getWidth() << " " << getHeight() << " ";
	*fout << getTextureSource() << " " << mDestTextureSource << endl;
}
Ejemplo n.º 4
0
	/// \brief Drawing the DynamicTerrain
	Action::ResultE DynamicTerrain::drawPrimitives( DrawActionBase* action )
	{
		// do frustum culling here.. extract frustum from the current camera:
		RenderAction* renderAction = dynamic_cast< RenderAction* >( action );

		if( needInitialize_ )
		{
			if( getHeightData() != NullFC )
			{
				if( getLevelSize() < 3 )
				{
					SWARNING << "DynamicTerrain: LevelSize is below minimum (using default)!" << std::endl;

					setLevelSize( 63 );
				}

				// todo: choose the correct height-/texturedata source:
				geoClipmaps_.initialize( getLevelSize(), &imageHeightSource_, getTextureSource() );
			}
			needInitialize_ = false;
		}

		if( !geoClipmaps_.isValid() )
		{
			// no valid data yet
			return Action::Continue;
		}

		// todo: get the viewport of the RenderAction, check if the camera already has a terrain attachment:
			// if not: create a new TerrainView and attach it to the camera

		// update/render the view
		if( renderAction )
		{
			// frustum culling
			const FrustumVolume& frustum = renderAction->getFrustum();

			// make an update right here:
			Matrix camera  = renderAction->getCameraToWorld();
			Matrix toworld = renderAction->top_matrix();			
			toworld.invert();
			camera.multLeft(toworld);
			Pnt3f eyePoint( camera[ 3 ][ 0 ], camera[ 3 ][ 1 ], camera[ 3 ][ 2 ] );

			// transform the eyePoint to the unscaled sample space:
			const WorldTransformation worldTransform = getWorldTransform();
			const Pnt3f worldOffset( worldTransform.offset[ 0 ], 0.0f, worldTransform.offset[ 1 ] );
			
			const Pnt3f localEyePoint = componentDivide( ( eyePoint - worldOffset ), worldTransform.sampleDistance );

			if( !getDisableUpdate() )
			{
				geoClipmaps_.update( localEyePoint );
			}			
			
			// and now draw what we have:
			ClipmapRenderParameters renderParams;
			
			renderParams.renderAction			= renderAction;
			renderParams.window					= renderAction->getWindow();
			renderParams.viewFrustum			= frustum;
			renderParams.enableFrustumCulling	= getEnableFrustumCulling();
			renderParams.showTransitionRegions	= getShowTransitionRegions();
			renderParams.useVboExtension		= getUseVboExtension();
			renderParams.globalTexture			= globalTexture_;
			renderParams.heightColorTexture		= getHeightColorTexture();
			
			renderParams.worldTransform			= worldTransform;

			ClipmapRenderStatistics renderStats;

			geoClipmaps_.render( renderParams, renderStats );

			if( getShowBoundingBoxes() )
			{
				//drawBox( 
			}

			// update stats:
			StatCollector* statCollector = action->getStatistics();
			
			if( statCollector ) 
			{
				StatIntElem* statTriangleCount = statCollector->getElem( Drawable::statNTriangles, false );
				StatIntElem* statVertexCount = statCollector->getElem( Drawable::statNVertices, false );

				if( statTriangleCount )
				{
					statTriangleCount->add( renderStats.drawnTriangleCount );
				}
				if( statVertexCount )
				{
					statVertexCount->add( renderStats.transformedVertexCount );
				}
			}
		}
		else
		{
			//todo: can this ever happen?!
			SLOG << "Test\n";
		}

		return Action::Continue;
	}