Beispiel #1
0
void Fretboard::LoadFretboard(const char *pImage)
{
	if(pFretboard)
		MFMaterial_Release(pFretboard);

	pFretboard = MFMaterial_Create(MFStr("Fretboards/%s", pImage));

	if(pFretboard)
	{
		int zRead = MFMaterial_GetParameterIndexFromName(pFretboard, "zread");
		int zWrite = MFMaterial_GetParameterIndexFromName(pFretboard, "zwrite");
		int off = 0;

		MFMaterial_SetParameterI(pFretboard, zRead, 0, 0);
		MFMaterial_SetParameterI(pFretboard, zWrite, 0, 0);
	}
}
MF_API MFParticleSystem* MFParticleSystem_Create(MFParticleParameters *pParticleParams)
{
	MFParticleSystem *pSystem = (MFParticleSystem*)MFHeap_Alloc(sizeof(MFParticleSystem));

	pSystem->params = *pParticleParams;

	if(!pParticleParams->pMaterial)
		pSystem->pMaterial = MFMaterial_Create("_None");
	else
	{
		pSystem->pMaterial = MFMaterial_Create(pParticleParams->pMaterial);

//		int additive = MFMaterial_GetParameterIndexFromName(pSystem->pMaterial, "additive");
		MFMaterial_SetParameterI(pSystem->pMaterial, MFMatStandard_ZWrite, 0, 0);
	}

	pSystem->particles.Init("ParticleSystem", pSystem->params.maxActiveParticles);

	return pSystem;
}
Beispiel #3
0
MFInitStatus MFMaterial_InitModule()
{
	MFCALLSTACK;

	gMaterialRegistry.Init("Material Registry", gDefaults.material.maxMaterialTypes);
	gMaterialDefList.Init("Material Definitions List", gDefaults.material.maxMaterialDefs);
	gMaterialList.Init("Material List", gDefaults.material.maxMaterials);

	DebugMenu_AddItem("Material Browser", "Fuji Options", &matBrowser);

	MFMat_Standard_Register();
	MFMat_Effect_Register();

	if(MFFileSystem_Exists("Materials.ini") && MFMaterial_AddDefinitionsFile("Materials", "Materials"))
	{
		MFDebug_Warn(3, "Failed to load Materials.ini");
	}
	
#if MF_RENDERER == MF_DRIVER_D3D11 || defined(MF_RENDERPLUGIN_D3D11)
	// HACK?
	MFTexture *pSysLogoLargeTexture = MFTexture_Create("_None");
	MFTexture *pSysLogoSmallTexture = MFTexture_Create("_None");
#else
	// create the logo textures from raw data
	MFTexture *pSysLogoLargeTexture = MFTexture_CreateFromRawData("SysLogoLarge", SysLogo256_data, SysLogo256_width, SysLogo256_height, (MFImageFormat)SysLogo256_format, SysLogo256_flags);
	MFTexture *pSysLogoSmallTexture = MFTexture_CreateFromRawData("SysLogoSmall", SysLogo64_data, SysLogo64_width, SysLogo64_height, (MFImageFormat)SysLogo64_format, SysLogo64_flags);
#endif

	// create standard materials
	pNoneMaterial = MFMaterial_Create("_None");
	pWhiteMaterial = MFMaterial_Create("_White");
	pSysLogoLarge = MFMaterial_Create("SysLogoLarge");
	pSysLogoSmall = MFMaterial_Create("SysLogoSmall");

	// disable backface cullign on the default materials
	MFMaterial_SetParameterI(pNoneMaterial, MFMatStandard_CullMode, 0, MFMatStandard_Cull_None);
	MFMaterial_SetParameterI(pWhiteMaterial, MFMatStandard_CullMode, 0, MFMatStandard_Cull_None);

	// release a reference to the logo textures
	MFTexture_Destroy(pSysLogoLargeTexture);
	MFTexture_Destroy(pSysLogoSmallTexture);

#if defined(_PSP)
	// create PSP specific stock materials
	MFTexture *pConnectedTexture = MFTexture_CreateFromRawData("connected", connected_data, connected_width, connected_height, (MFImageFormat)connected_format, connected_flags);
	MFTexture *pDisconnectedTexture = MFTexture_CreateFromRawData("disconnected", disconnected_data, disconnected_width, disconnected_height, (MFImageFormat)disconnected_format, disconnected_flags);
	MFTexture *pPowerTexture = MFTexture_CreateFromRawData("power", power_data, power_width, power_height, (MFImageFormat)power_format, power_flags);
	MFTexture *pChargingTexture = MFTexture_CreateFromRawData("charging", charging_data, charging_width, charging_height, (MFImageFormat)charging_format, charging_flags);
	MFTexture *pUSBTexture = MFTexture_CreateFromRawData("usb_icon", usb_icon_data, usb_icon_width, usb_icon_height, (MFImageFormat)usb_icon_format, usb_icon_flags);

	pConnected = MFMaterial_Create("connected");
	pDisconnected = MFMaterial_Create("disconnected");
	pPower = MFMaterial_Create("power");
	pCharging = MFMaterial_Create("charging");
	pUSB = MFMaterial_Create("usb_icon");

	MFTexture_Destroy(pConnectedTexture);
	MFTexture_Destroy(pDisconnectedTexture);
	MFTexture_Destroy(pPowerTexture);
	MFTexture_Destroy(pChargingTexture);
	MFTexture_Destroy(pUSBTexture);
#endif

	return MFAIC_Succeeded;
}
Beispiel #4
0
void MaterialInternal_InitialiseFromDefinition(MFIni *pDefIni, MFMaterial *pMat, const char *pDefinition)
{
	MFCALLSTACK;

	MFIniLine *pLine = pDefIni->GetFirstLine()->FindEntry("section", pDefinition);

	if(pLine)
	{
		pLine = pLine->Sub();

		if(pLine && pLine->IsString(0, "type"))
		{
			pMat->pType = MaterialInternal_GetMaterialType(pLine->GetString(1));

			if(!pMat->pType)
				pMat->pType = MaterialInternal_GetMaterialType("Standard");

			pLine = pLine->Next();
		}
		else
		{
			pMat->pType = MaterialInternal_GetMaterialType("Standard");
		}

		if(pMat->pType->materialCallbacks.pCreateInstance)
			pMat->pType->materialCallbacks.pCreateInstance(pMat);

		while(pLine)
		{
			if(pLine->IsString(0,"type"))
			{
				MFDebug_Warn(2, MFStr("'type' MUST be the first parameter in a material definition... Ignored, Using type '%s'.", pMat->pType->pTypeName));
			}
			else if(pLine->IsString(0,"alias"))
			{
				MFDebug_Warn(2, "'alias' MUST be the first parameter in a material definition... Ignored.");

MFDebug_Assert(false, "Fix Me!!!");
//				const char *pAlias = pLine->GetString(1);
//				MaterialInternal_InitialiseFromDefinition(pDefIni, pMat, pAlias);
			}
			else
			{
				const char *pParam = pLine->GetString(0);
				MFMaterialParameterInfo *pInfo = MFMaterial_GetParameterInfoFromName(pMat, pParam);

				int lineArg = 1;
				int param = pInfo->parameterIndex;
				int argIndex = 0;

				switch(pInfo->argIndex.type)
				{
					case MFParamType_Int:
						argIndex = pLine->GetInt(lineArg++);
						break;
					case MFParamType_Enum:
						argIndex = pLine->GetEnum(lineArg++, pInfo->argIndex.pEnumKeys);
						break;
					default:
						argIndex = pInfo->argIndex.defaultValue;
						break;
				}

				switch(pInfo->argIndexHigh.type)
				{
					case MFParamType_Int:
						argIndex |= pLine->GetInt(lineArg++) << 16;
						break;
					case MFParamType_Enum:
						argIndex |= pLine->GetEnum(lineArg++, pInfo->argIndexHigh.pEnumKeys) << 16;
						break;
					default:
						argIndex |= pInfo->argIndexHigh.defaultValue << 16;
						break;
				}

				if(pInfo->numValues == 1)
				{
					switch(pInfo->pValues[0].type)
					{
						case MFParamType_Constant:
						{
							MFMaterial_SetParameterI(pMat, param, argIndex, pInfo->pValues[0].defaultValue);
							break;
						}

						case MFParamType_String:
						{
							const char *pString = pLine->GetString(lineArg);
							MFMaterial_SetParameterS(pMat, param, argIndex, pString);
							break;
						}

						case MFParamType_Float:
						{
							float value = pLine->GetFloat(lineArg);
							MFMaterial_SetParameterF(pMat, param, argIndex, value);
							break;
						}

						case MFParamType_Int:
						{
							int value = pLine->GetStringCount() > lineArg ? pLine->GetInt(lineArg) : pInfo->pValues[0].defaultValue;
							MFMaterial_SetParameterI(pMat, param, argIndex, value);
							break;
						}

						case MFParamType_Enum:
						{
							int value;
							if(pLine->GetStringCount() > lineArg)
								value = pLine->GetEnum(lineArg, pInfo->pValues[0].pEnumKeys);
							else
								value = pInfo->pValues[0].defaultValue;
							MFMaterial_SetParameterI(pMat, param, argIndex, value);
							break;
						}

						case MFParamType_Bool:
						{
							bool value = pLine->GetStringCount() > lineArg ? pLine->GetBool(lineArg) : !!pInfo->pValues[0].defaultValue;
							MFMaterial_SetParameterI(pMat, param, argIndex, value ? 1 : 0);
							break;
						}

						case MFParamType_Colour:
						{
							MFVector vector = pLine->GetColour(lineArg);
							MFMaterial_SetParameterV(pMat, param, argIndex, vector);
							break;
						}

						case MFParamType_Vector3:
						{
							MFVector vector = pLine->GetVector3(lineArg);
							MFMaterial_SetParameterV(pMat, param, argIndex, vector);
							break;
						}

						case MFParamType_Vector4:
						{
							MFVector vector = pLine->GetVector4(lineArg);
							MFMaterial_SetParameterV(pMat, param, argIndex, vector);
							break;
						}

						case MFParamType_Matrix:
						{
							MFDebug_Assert(false, "Cant read a matrix from an ini file... yet...");
							break;
						}

						default:
							MFDebug_Assert(false, "Unknown parameter type..");
					}
				}
				else if(pInfo->numValues > 1)
				{
					// produce a struct representing the args
					MFALIGN_BEGIN(16)
						char argBuffer[256]
					MFALIGN_END(16);
					int offset = 0;

					for(int a=0; a<pInfo->numValues; a++)
					{
						switch(pInfo->pValues[a].type)
						{
							case MFParamType_Constant:
							{
								offset = MFALIGN(offset, sizeof(int));
								(int&)argBuffer[offset] = pInfo->pValues[a].defaultValue;
								offset += sizeof(int);
								break;
							}

							case MFParamType_String:
							{
								offset = MFALIGN(offset, sizeof(const char *));
								(const char *&)argBuffer[offset] = pLine->GetString(lineArg++);
								offset += sizeof(const char *);
								break;
							}

							case MFParamType_Float:
							{
								offset = MFALIGN(offset, sizeof(float));
								(float&)argBuffer[offset] = pLine->GetFloat(lineArg++);
								offset += sizeof(float);
								break;
							}

							case MFParamType_Int:
							{
								offset = MFALIGN(offset, sizeof(int));
								(int&)argBuffer[offset] = pLine->GetInt(lineArg++);
								offset += sizeof(int);
								break;
							}

							case MFParamType_Enum:
							{
								offset = MFALIGN(offset, sizeof(int));
								(int&)argBuffer[offset] = pLine->GetEnum(lineArg++, pInfo->pValues[a].pEnumKeys);
								offset += sizeof(int);
								break;
							}

							case MFParamType_Bool:
							{
								offset = MFALIGN(offset, sizeof(bool));
								(bool&)argBuffer[offset] = pLine->GetBool(lineArg++);
								offset += sizeof(bool);
								break;
							}

							case MFParamType_Colour:
							case MFParamType_Vector3:
							case MFParamType_Vector4:
							case MFParamType_Matrix:
							{
								MFDebug_Assert(false, "Cant read type into structure... yet...");
								break;
							}

							default:
								MFDebug_Assert(false, "Unknown parameter type..");
						}
					}

					MFMaterial_SetParameter(pMat, param, argIndex, (uintp)argBuffer);
				}
			}

			pLine = pLine->Next();
		}
	}
Beispiel #5
0
Fretboard::Fretboard()
{
	pFretboard = NULL;

	// create materials
	MFTexture *pFretTex = MFTexture_Find("frets");
	if(!pFretTex)
		pFretTex = MFTexture_CreateBlank("frets", MFVector::one);
	pFrets = MFMaterial_Create("frets");
	MFTexture_Release(pFretTex);

	int zRead = MFMaterial_GetParameterIndexFromName(pFrets, "zread");
	int zWrite = MFMaterial_GetParameterIndexFromName(pFrets, "zwrite");
	int additive = MFMaterial_GetParameterIndexFromName(pFrets, "additive");

	pEdge = MFMaterial_Create("edge");
	pBar = MFMaterial_Create("bar");

	pRing = MFMaterial_Create("ring");

	pColourRing[0] = MFMaterial_Create("green");
	pColourRing[1] = MFMaterial_Create("red");
	pColourRing[2] = MFMaterial_Create("yellow");
	pColourRing[3] = MFMaterial_Create("blue");
	pColourRing[4] = MFMaterial_Create("orange");

	pButtonMat[0] = MFMaterial_Create("button-green");
	pButtonMat[1] = MFMaterial_Create("button-red");
	pButtonMat[2] = MFMaterial_Create("button-yellow");
	pButtonMat[3] = MFMaterial_Create("button-blue");
	pButtonMat[4] = MFMaterial_Create("button-orange");
	pButtonRing[0] = MFMaterial_Create("button-green-ring");
	pButtonRing[1] = MFMaterial_Create("button-red-ring");
	pButtonRing[2] = MFMaterial_Create("button-yellow-ring");
	pButtonRing[3] = MFMaterial_Create("button-blue-ring");
	pButtonRing[4] = MFMaterial_Create("button-orange-ring");

	MFParticleParameters params;
	params.colour = MakeVector(1, 0, 1, 1);
	params.force.Set(0.f, 0.f, 0.f);
	params.life = .3f;
	params.size = .15f;
	params.fadeDelay = 0.2f;
	params.rotationRate = 2.f;
	params.scaleRate = -.1f;
	params.maxActiveParticles = 1000;
	params.pMaterial = "Notes/sparkles";
	pParticles = MFParticleSystem_Create(&params);

	MFParticleEmitterParameters emitter;
	emitter.position.SetTranslation(MakeVector(0, 0, 0));
	emitter.startVector.Set(0, 1.f, 0);
	emitter.pParticleSystem = pParticles;
	emitter.type = MFET_Disc;
	emitter.behaviour = MFEB_Direction;
	emitter.radius = 0.25f;
	emitter.velocity = 3.f;
	emitter.velocityScatter = 1.f;
	emitter.directionScatter = .3f;
	emitter.emitRate = 100.f;
	pEmitter = MFParticleSystem_CreateEmitter(&emitter);

	MFMaterial_SetParameterI(pFrets, zRead, 0, 0);
	MFMaterial_SetParameterI(pFrets, zWrite, 0, 0);
	MFMaterial_SetParameterI(pEdge, zRead, 0, 0);
	MFMaterial_SetParameterI(pEdge, zWrite, 0, 0);
	MFMaterial_SetParameterI(pBar, zRead, 0, 0);
	MFMaterial_SetParameterI(pBar, zWrite, 0, 0);
	MFMaterial_SetParameterI(pRing, zWrite, 0, 0);
	for(int a=0; a<5; ++a)
		MFMaterial_SetParameterI(pColourRing[a], additive, 0, 1);

	// load models
	pButton = MFModel_Create("Notes/button");
}