示例#1
0
ERet DeferredRenderer::Initialize( Clump* rendererData )
{
	mxDO(Super::Initialize(rendererData));

	mxDO(GetByName(*m_rendererData, "GBufferTexture0", m_colorRT0));
	mxDO(GetByName(*m_rendererData, "GBufferTexture1", m_colorRT1));
	mxDO(GetByName(*m_rendererData, "MainDepthStencil", m_depthRT));

	return ALL_OK;
}
示例#2
0
	static std::pair<DynamicTypeIterator<T>, DynamicTypeIterator<T> > GetObjectsByType(void)
	{
		DynamicType::Ptr type = GetByName(T::GetTypeName());
		return std::make_pair(
		    DynamicTypeIterator<T>(type, 0),
		    DynamicTypeIterator<T>(type, UINT_MAX)
		);
	}
示例#3
0
SMDNode* SMDNodeList::GetByName ( XSI::CString in_szName )
{
	char *pSzString = new char [ in_szName.Length() + 1 ];
	W2AHelper ( pSzString, in_szName.GetWideString() );

	SMDNode* l_pRet = GetByName ( pSzString );
	
	delete [] pSzString;
	return l_pRet;

}
示例#4
0
void SMDNodeList::AddNode ( char *in_szName, char *in_szParentName, XSI::Kinematics	l_pHierarchyCompensation, XSI::Kinematics	in_pHierarchyCompensation2 )
{
	SI_Int		l_iParentID;

	SMDNode*	l_pParent = GetByName ( in_szParentName );
	if ( l_pParent != NULL )
	{
		l_iParentID = l_pParent->GetID ();
	} else {
		l_iParentID = -1;
	}
	
	XSI::X3DObject obj;
	AddNodeS ( (char*)in_szName, l_iParentID, obj, l_pHierarchyCompensation, in_pHierarchyCompensation2 );
}
示例#5
0
文件: Profiles.cpp 项目: 3dik/MPong
//DeleteProfile
bool Profiles::DeleteProfile (wstring sName)
{
    Err fErr (m_Err, L"DeleteProfile");

    Config *pProfile;
    if (!GetByName (sName, &pProfile))
    {
        return false;
    }
    if (remove (ConStr<char> (m_sDirectory +
                              pProfile->GetFileName ()).c_str ()) != 0)
    {
        return fErr.Set (L"Could not remove the given profile file");
    }

    return Reload ();
}//DeleteProfile
示例#6
0
void CommandTable::AddCommandsV4()
{
	RecordReleaseVersion();

	// 4.1 beta 01 - submission hlp
	ADD_CMD(SetEyes);
	ADD_CMD_RET(GetEyes, kRetnType_Form);
	ADD_CMD(SetHair);
	ADD_CMD_RET(GetHair, kRetnType_Form);
	ADD_CMD(GetHairLength);
	ADD_CMD(SetHairLength);
	ADD_CMD(GetHairColor);
	ADD_CMD(SetHairColor);
	ADD_CMD(GetNPCWeight);
	ADD_CMD(SetNPCWeight);
	ADD_CMD(GetNPCHeight);
	ADD_CMD(SetNPCHeight);
	ADD_CMD(Update3D);

#ifdef RUNTIME
	// 4.1 beta 01 - submission hlp
	GetByName("ModFactionRank")->execute = &Cmd_ModFactionRank_Execute;
#endif

	// 4.1 beta 01 - subset of CommandScripts from OBSE 21 beta 4
	ADD_CMD(GetVariable);
	ADD_CMD(HasVariable);
	ADD_CMD(GetRefVariable);
	ADD_CMD_RET(GetArrayVariable, kRetnType_Array);		// corrected in version 4.5 Beta 7
	ADD_CMD(CompareScripts);
	ADD_CMD(ResetAllVariables);
	ADD_CMD(GetNumExplicitRefs);
	ADD_CMD_RET(GetNthExplicitRef, kRetnType_Form);
	ADD_CMD(RunScript);
	ADD_CMD_RET(GetCurrentScript, kRetnType_Form);
	ADD_CMD_RET(GetCallingScript, kRetnType_Form);

	// 4.1 beta 01 - general merged into scripting
	ADD_CMD(Let);
	ADD_CMD(eval);
	ADD_CMD(While);
	ADD_CMD(Loop);
	ADD_CMD(ForEach);
	ADD_CMD(Continue);
	ADD_CMD(Break);
	ADD_CMD(ToString);
	ADD_CMD(Print);
	ADD_CMD(testexpr);
	ADD_CMD_RET(TypeOf, kRetnType_String);
	ADD_CMD(Function);
	ADD_CMD_RET(Call, kRetnType_Ambiguous);
	ADD_CMD(SetFunctionValue);
	ADD_CMD_RET(GetUserTime, kRetnType_Array);	// corrected in version 4.2 Beta 4 alpha 1
	ADD_CMD(GetModLocalData);
	ADD_CMD_RET(SetModLocalData, kRetnType_Ambiguous);	// corrected in version 4.5 Beta 6
	ADD_CMD(ModLocalDataExists);
	ADD_CMD(RemoveModLocalData);
	ADD_CMD_RET(GetAllModLocalData, kRetnType_Array);	// corrected in version 4.5 Beta 6
	ADD_CMD(Internal_PushExecutionContext);
	ADD_CMD(Internal_PopExecutionContext);

	// 4.1 beta 01 - Arrays (except "NI" stuff)
	ADD_CMD_RET(ar_Construct, kRetnType_Array);
	ADD_CMD(ar_Size);
	ADD_CMD(ar_Dump);
	ADD_CMD(ar_DumpID);
	ADD_CMD(ar_Erase);
	ADD_CMD_RET(ar_Sort, kRetnType_Array);
	ADD_CMD_RET(ar_CustomSort, kRetnType_Array);
	ADD_CMD_RET(ar_SortAlpha, kRetnType_Array);
	ADD_CMD_RET(ar_Find, kRetnType_ArrayIndex);
	ADD_CMD_RET(ar_First, kRetnType_ArrayIndex);
	ADD_CMD_RET(ar_Last, kRetnType_ArrayIndex);
	ADD_CMD_RET(ar_Next, kRetnType_ArrayIndex);
	ADD_CMD_RET(ar_Prev, kRetnType_ArrayIndex);
	ADD_CMD_RET(ar_Keys, kRetnType_Array);
	ADD_CMD(ar_HasKey);
	ADD_CMD_RET(ar_BadStringIndex, kRetnType_String);
	ADD_CMD(ar_BadNumericIndex);
	ADD_CMD_RET(ar_Copy, kRetnType_Array);
	ADD_CMD_RET(ar_DeepCopy, kRetnType_Array);
	ADD_CMD_RET(ar_Null, kRetnType_Array);
	ADD_CMD(ar_Resize);
	ADD_CMD(ar_Insert);
	ADD_CMD(ar_InsertRange);
	ADD_CMD(ar_Append);
	ADD_CMD_RET(ar_List, kRetnType_Array);
	ADD_CMD_RET(ar_Map, kRetnType_Array);
	ADD_CMD_RET(ar_Range, kRetnType_Array);


	// 4.1 beta 01 - StringVar
	ADD_CMD(sv_Destruct);
	ADD_CMD_RET(sv_Construct, kRetnType_String);
	ADD_CMD(sv_Set);
	ADD_CMD(sv_Compare);
	ADD_CMD(sv_Length);
	ADD_CMD(sv_Erase);
	ADD_CMD_RET(sv_SubString, kRetnType_String);
	ADD_CMD(sv_ToNumeric);
	ADD_CMD(sv_Insert);
	ADD_CMD(sv_Count);
	ADD_CMD(sv_Find);
	ADD_CMD(sv_Replace);
	ADD_CMD(sv_GetChar);
	ADD_CMD_RET(sv_Split, kRetnType_Array);
	ADD_CMD_RET(sv_Percentify, kRetnType_String);
	ADD_CMD_RET(sv_ToUpper, kRetnType_String);
	ADD_CMD_RET(sv_ToLower, kRetnType_String);

	ADD_CMD(IsLetter);
	ADD_CMD(IsDigit);
	ADD_CMD(IsPrintable);
	ADD_CMD(IsPunctuation);
	ADD_CMD(IsUpperCase);
	ADD_CMD(CharToAscii);

	ADD_CMD(ToUpper);
	ADD_CMD(ToLower);
	ADD_CMD_RET(AsciiToChar, kRetnType_String);
	ADD_CMD_RET(NumToHex, kRetnType_String);
	ADD_CMD(ToNumber);

	ADD_CMD_RET(GetNthModName, kRetnType_String);
	ADD_CMD_RET(GetName, kRetnType_String);
	ADD_CMD_RET(GetKeyName, kRetnType_String);
	ADD_CMD_RET(GetFormIDString, kRetnType_String);
	ADD_CMD_RET(GetRawFormIDString, kRetnType_String);
	ADD_CMD_RET(GetFalloutDirectory, kRetnType_String);
	ADD_CMD_RET(ActorValueToString, kRetnType_String);
	ADD_CMD_RET(ActorValueToStringC, kRetnType_String);

	// 4 beta 01 - using strings with forms
	ADD_CMD_RET(GetModelPath, kRetnType_String);
	ADD_CMD_RET(GetIconPath, kRetnType_String);
	ADD_CMD_RET(GetBipedModelPath, kRetnType_String);
	ADD_CMD_RET(GetBipedIconPath, kRetnType_String);
	ADD_CMD_RET(GetTexturePath, kRetnType_String);
	ADD_CMD(SetModelPathEX);
	ADD_CMD(SetIconPathEX);
	ADD_CMD(SetBipedIconPathEX);
	ADD_CMD(SetBipedModelPathEX);
	ADD_CMD(SetTexturePath);

	ADD_CMD_RET(GetNthFactionRankName, kRetnType_String);
	ADD_CMD(SetNthFactionRankNameEX);

	ADD_CMD_RET(GetStringGameSetting, kRetnType_String);
	ADD_CMD(SetStringGameSettingEX);

	// 4.2 beta 02
	ADD_CMD_RET(GetRace, kRetnType_Form);
	ADD_CMD_RET(GetRaceName, kRetnType_String);
	ImportConsoleCommand("SCOF");
	ADD_CMD(PickOneOf);

	// 4.2 beta 03 alpha 5
	ADD_CMD(IsPlayerSwimming);
	ADD_CMD(GetTFC);

	// 4.2 beta 03 alpha 6	- Algohol OBSE plugin by emtim (with permission)

	//	Vector3 commands
	ADD_CMD( V3Length );
	ADD_CMD( V3Normalize );
	//ADD_CMD( V3Dotproduct );
	ADD_CMD( V3Crossproduct );

	//	Quaternion commands
	ADD_CMD( QFromEuler );
	ADD_CMD( QFromAxisAngle );
	ADD_CMD( QNormalize );
	ADD_CMD( QMultQuatQuat );
	ADD_CMD( QMultQuatVector3 );
	ADD_CMD( QToEuler );
	ADD_CMD( QInterpolate );

	// 4.2 beta 04 alpha 1
	ADD_CMD(IsPlayable);
	ADD_CMD(SetIsPlayable);
	ADD_CMD(GetEquipmentSlotsMask);
	ADD_CMD(SetEquipmentSlotsMask);
	ImportConsoleCommand("SQV");		// requires ConsoleEcho to be turned on!
	ADD_CMD(GetConsoleEcho);
	ADD_CMD(SetConsoleEcho);

	// 4.2 beta 04 alpha 5
	ADD_CMD_RET(GetScopeModelPath, kRetnType_String);
	ADD_CMD(SetScopeModelPath);

	// 4.3 and 4.4 skîpped

	// 4.5 beta 01 none added

	// 4.5 beta 02
	ADD_CMD(EndVATScam);	// Provided by Queued

	// 4.5 beta 06
	ADD_CMD(EquipItem2);	// EquipItem2 is broken in the sense that the item is equipped after equipitem returns so which item is equipped is not detected :(
	ADD_CMD(EquipMe);
	ADD_CMD(UnequipMe);
	ADD_CMD(IsEquipped);
	ADD_CMD_RET(GetInvRefsForItem, kRetnType_Array);
	ADD_CMD(SetHotkeyItem);
	ADD_CMD(ClearHotkey);
	ADD_CMD(PrintDebug);
	ADD_CMD(SetVariable);
	ADD_CMD(SetRefVariable);
	ImportConsoleCommand("ShowVars");		// requires ConsoleEcho to be turned on!
	ADD_CMD_RET(GetStringIniSetting, kRetnType_String);
	ADD_CMD(SetStringIniSetting);

	// 4.5 beta 07

	ADD_CMD(GetPerkRank);										// Tested
	ADD_CMD(GetAltPerkRank);									// Tested
	ADD_CMD(GetEquipmentBipedMask);								// Tested
	ADD_CMD(SetEquipmentBipedMask);								// Tested
	ADD_CMD_RET(GetRefs, kRetnType_Array);						// Tested
	ADD_CMD_RET(GetRefsInCell, kRetnType_Array);				// Tested
	ADD_CMD(GetBaseNumFactions);								// Tested
	ADD_CMD_RET(GetBaseNthFaction, kRetnType_Form);				// Tested
	ADD_CMD(GetBaseNthRank);									// Tested
	ADD_CMD(GetNumRanks);										// Tested
	ADD_CMD_RET(GetRaceHairs, kRetnType_Array);					// Tested
	ADD_CMD_RET(GetRaceEyes, kRetnType_Array);					// Tested
	ADD_CMD_RET(GetBaseSpellListSpells, kRetnType_Array);		// Tested
	ADD_CMD_RET(GetBaseSpellListLevSpells, kRetnType_Array);	// Tested but no data
	ADD_CMD_RET(GetBasePackages, kRetnType_Array);				// Tested
	ADD_CMD_RET(GetBaseFactions, kRetnType_Array);				// Tested
	ADD_CMD_RET(GetBaseRanks, kRetnType_Array);					// Tested
	ADD_CMD_RET(GetActiveFactions, kRetnType_Array);			// Tested
	ADD_CMD_RET(GetActiveRanks, kRetnType_Array);				// Tested
	ADD_CMD_RET(GetFactionRankNames, kRetnType_Array);			// Tested
	ADD_CMD_RET(GetFactionRankFemaleNames, kRetnType_Array);	// Tested
	ADD_CMD_RET(GetHeadParts, kRetnType_Array);					// Tested
	ADD_CMD_RET(GetLevCreatureRefs, kRetnType_Array);			// Tested
	ADD_CMD_RET(GetLevCharacterRefs, kRetnType_Array);			// Tested
	ADD_CMD_RET(GetListForms, kRetnType_Array);					// Tested
	ADD_CMD(GenericAddForm);									// Tested									
	ADD_CMD_RET(GenericReplaceForm, kRetnType_Form);			// Tested
	ADD_CMD_RET(GenericDeleteForm, kRetnType_Form);				// Tested
	ADD_CMD(IsPluginInstalled);									// Tested
	ADD_CMD(GetPluginVersion);									// Tested
	ADD_CMD_RET(GenericGetForm, kRetnType_Form);				// Tested
	ImportConsoleCommand("INV");								// Tested
	ADD_CMD_RET(GetNthDefaultForm, kRetnType_Form);				// Tested
	ADD_CMD(SetNthDefaultForm);									// Tested
	ADD_CMD_RET(GetDefaultForms, kRetnType_Array);				// Tested

	// 4.5 beta 08 private. Fix only

	// 4.6 beta 01
	ADD_CMD(GetGridsToLoad);
	ADD_CMD(OutputLocalMapPicturesOverride);
	ADD_CMD(SetOutputLocalMapPicturesGrids);

	// Events
	ADD_CMD(SetEventHandler);
	ADD_CMD(RemoveEventHandler);
	ADD_CMD_RET(GetCurrentEventName, kRetnType_String);
	ADD_CMD(DispatchEvent);

	ADD_CMD(GetInGrid);
	ADD_CMD(GetInGridInCell);									// Name is bad, but in line with others

	// 4.6 beta 02 : Fixes only

	// 4.6 beta 03
	ADD_CMD(AddSpellNS);
	ADD_CMD(GetFlagsLow);
	ADD_CMD(SetFlagsLow);
	ADD_CMD(GetFlagsHigh);
	ADD_CMD(SetFlagsHigh);
	ADD_CMD(HasConsoleOutputFilename);
	ADD_CMD_RET(GetConsoleOutputFilename, kRetnType_String);
	ADD_CMD(PrintF);
	ADD_CMD(PrintDebugF);
	ImportConsoleCommand("TFIK");
	ADD_CMD(IsLoadDoor);
	ADD_CMD(GetDoorTeleportX);
	ADD_CMD(GetDoorTeleportY);
	ADD_CMD(GetDoorTeleportZ);
	ADD_CMD(GetDoorTeleportRot);
	ADD_CMD(SetDoorTeleport);

	// 4.6 beta 04 : Never public
	ADD_CMD(GenericCheckForm);
	ADD_CMD(GetEyesFlags);
	ADD_CMD(SetEyesFlags);
	ADD_CMD(GetHairFlags);
	ADD_CMD(SetHairFlags);

	// 5.0 beta 01
	ADD_CMD(ar_Packed);
	ADD_CMD(GetActorFIKstatus);
	ADD_CMD(SetActorFIKstatus);
	ADD_CMD(GetBit);

	// 5.0 beta 02
	ADD_CMD(HasEffectShader);

	// 4.y beta 0x - String needing underlying forms implementation
	#if 0

	ADD_CMD_RET(GetNthEffectItemScriptName, kRetnType_String);
	ADD_CMD(SetNthEffectItemScriptNameEX);

	#endif

}
示例#7
0
void CommandTable::AddCommandsV3s()
{
	RecordReleaseVersion();

	// 3 alpha 01 sub 1 - submission hlp
	ADD_CMD(HasOwnership);
	ADD_CMD(IsOwned);
	ADD_CMD(SetOwningFactionRequiredRank);
	ADD_CMD_RET(GetDialogueTarget, kRetnType_Form);
	ADD_CMD_RET(GetDialogueSubject, kRetnType_Form);
	ADD_CMD_RET(GetDialogueSpeaker, kRetnType_Form);
	ADD_CMD_RET(SetPackageLocationReference, kRetnType_Form);
	ADD_CMD(GetAgeClass);
	ADD_CMD(RemoveMeIR);
	ADD_CMD(CopyIR);
	ADD_CMD_RET(CreateTempRef, kRetnType_Form);
	ADD_CMD_RET(GetFirstRefForItem, kRetnType_Form);
	ADD_CMD_RET(GetNextRefForItem, kRetnType_Form);
	ADD_CMD(AddItemOwnership);
	ADD_CMD(AddItemHealthPercentOwner);
	ADD_CMD(GetTokenValue);
	ADD_CMD(SetTokenValue);
	ADD_CMD_RET(GetTokenRef, kRetnType_Form);
	ADD_CMD(SetTokenRef);
	ADD_CMD(SetTokenValueAndRef);
	ADD_CMD(GetPaired);
	ADD_CMD(GetRespawn);
	ADD_CMD(SetRespawn);
	ADD_CMD(GetPermanent);
	ADD_CMD(SetPermanent);
	ADD_CMD_RET(GetBaseForm, kRetnType_Form);
	ADD_CMD(IsRefInList);

#ifdef RUNTIME
	// 3 beta 02 sub 5 - submission hlp
	GetByName("GetFactionRank")->eval = &Cmd_GetFactionRank_Eval;
	GetByName("GetFactionRank")->execute = &Cmd_GetFactionRank_Execute;
#endif

	// 3 beta 03 - forgotten ?
	ADD_CMD(SetOpenKey);

	// 3 beta 03 - submission hlp
	ADD_CMD_RET(GetCurrentPackage, kRetnType_Form);
	ADD_CMD(GetPackageLocation);
	ADD_CMD(GetPackageCount);
	ADD_CMD_RET(GetNthPackage, kRetnType_Form);
	ADD_CMD(SetNthPackage);
	ADD_CMD(AddPackageAt);
	ADD_CMD(RemovePackageAt);
	ADD_CMD(RemoveAllPackages);

	// 3 beta 04 - submission hlp
	ADD_CMD(ClearOpenKey);

	// 3 beta 05 - submission hlp
	ADD_CMD(SetPackageTargetReference);
	ADD_CMD(SetPackageTargetCount);
	ADD_CMD(GetPackageTargetCount);
	ADD_CMD(SetPackageLocationRadius);
	ADD_CMD(GetPackageLocationRadius);
}
示例#8
0
Logger& Logger::Get() {
    return GetByName("default");
}
ExternalDownloadManager* DownloadManagerManager::GetDefaultManager()
{
	return GetByName(g_pcui->GetStringPref(PrefsCollectionUI::DownloadManager).CStr());
}
示例#10
0
ERet DeferredRenderer::RenderScene( const SceneView& sceneView, const Clump& sceneData )
{
	gfxMARKER(RenderScene);

	if( sceneView.viewportWidth != m_viewportWidth || sceneView.viewportHeight != m_viewportHeight )
	{
		this->ResizeBuffers( sceneView.viewportWidth, sceneView.viewportHeight, false );
		m_viewportWidth = sceneView.viewportWidth;
		m_viewportHeight = sceneView.viewportHeight;
	}

	mxDO(BeginRender_GBuffer());

	G_PerCamera	cbPerView;
	{
		cbPerView.g_viewMatrix = sceneView.viewMatrix;

		cbPerView.g_viewProjectionMatrix = sceneView.viewMatrix * sceneView.projectionMatrix;

		cbPerView.g_inverseViewMatrix = Matrix_OrthoInverse( sceneView.viewMatrix );
		cbPerView.g_projectionMatrix = sceneView.projectionMatrix;
		cbPerView.g_inverseProjectionMatrix = ProjectionMatrix_Inverse( sceneView.projectionMatrix );
		cbPerView.g_inverseViewProjectionMatrix = Matrix_Inverse( cbPerView.g_viewProjectionMatrix );

		cbPerView.g_WorldSpaceCameraPos = sceneView.worldSpaceCameraPos;

		float n = sceneView.nearClip;
		float f = sceneView.farClip;
		float x = 1 - f / n;
		float y = f / n;
		float z = x / f;
		float w = y / f;
		cbPerView.g_ZBufferParams = Float4_Set( x, y, z, w );

		cbPerView.g_ZBufferParams2 = Float4_Set( n, f, 1.0f/n, 1.0f/f );

		float H = sceneView.projectionMatrix[0][0];
		float V = sceneView.projectionMatrix[2][1];
		float A = sceneView.projectionMatrix[1][2];
		float B = sceneView.projectionMatrix[3][2];
		cbPerView.g_ProjParams = Float4_Set( H, V, A, B );

		// x = 1/H
		// y = 1/V
		// z = 1/B
		// w = -A/B
		cbPerView.g_ProjParams2 = Float4_Set( 1/H, 1/V, 1/B, -A/B );

		llgl::UpdateBuffer(llgl::GetMainContext(), m_hCBPerCamera, sizeof(cbPerView), &cbPerView);
	}


	// G-Buffer Stage: Render all solid objects to a very sparse G-Buffer
	{
		gfxMARKER(Fill_Geometry_Buffer);

		mxDO(FxSlow_SetRenderState(m_hRenderContext, *m_rendererData, "Default"));

		G_PerObject	cbPerObject;

		TObjectIterator< rxModel >	modelIt( sceneData );
		while( modelIt.IsValid() )
		{
			const rxModel& model = modelIt.Value();

			const Float3x4* TRS = model.m_transform;

			{
				cbPerObject.g_worldMatrix = Float3x4_Unpack( *TRS );
				cbPerObject.g_worldViewMatrix = Matrix_Multiply(cbPerObject.g_worldMatrix, sceneView.viewMatrix);
				cbPerObject.g_worldViewProjectionMatrix = Matrix_Multiply(cbPerObject.g_worldMatrix, sceneView.viewProjectionMatrix);

				llgl::UpdateBuffer(m_hRenderContext, m_hCBPerObject, sizeof(cbPerObject), &cbPerObject);
			}

			const rxMesh* mesh = model.m_mesh;

			for( int iSubMesh = 0; iSubMesh < mesh->m_parts.Num(); iSubMesh++ )
			{
				const rxSubmesh& submesh = mesh->m_parts[iSubMesh];
				const rxMaterial* material = model.m_batches[iSubMesh];
				const FxShader* shader = material->m_shader;

				if( shader->localCBs.Num() )
				{
					mxASSERT(shader->localCBs.Num()==1);
					const ParameterBuffer& uniforms = material->m_uniforms;
					const FxCBuffer& rCB = shader->localCBs[0];
					llgl::UpdateBuffer(m_hRenderContext, rCB.handle, uniforms.GetDataSize(), uniforms.ToPtr() );
				}

				llgl::DrawCall	batch;
				batch.Clear();

				SetGlobalUniformBuffers( &batch );
				BindMaterial( material, &batch );

				batch.inputLayout = Rendering::g_inputLayouts[VTX_Draw];
				batch.topology = mesh->m_topology;

				batch.VB[0] = mesh->m_vertexBuffer;
				batch.IB = mesh->m_indexBuffer;
				batch.b32bit = (mesh->m_indexStride == sizeof(UINT32));

				batch.baseVertex = submesh.baseVertex;
				batch.vertexCount = submesh.vertexCount;
				batch.startIndex = submesh.startIndex;
				batch.indexCount = submesh.indexCount;

				llgl::Submit(m_hRenderContext, batch);
			}

			modelIt.MoveToNext();
		}
	}

	EndRender_GBuffer();

	// Deferred Lighting Stage: Accumulate all lights as a screen space operation
	{
		gfxMARKER(Deferred_Lighting);

		llgl::ViewState	viewState;
		{
			viewState.Reset();
			viewState.colorTargets[0].SetDefault();
			viewState.targetCount = 1;
			viewState.flags = llgl::ClearColor;
		}
		llgl::SubmitView(m_hRenderContext, viewState);

		{
			gfxMARKER(Directional_Lights);

			mxDO(FxSlow_SetRenderState(m_hRenderContext, *m_rendererData, "Deferred_Lighting"));

			FxShader* shader;
			mxDO(GetByName(*m_rendererData, "deferred_directional_light", shader));
			mxDO2(FxSlow_SetResource(shader, "GBufferTexture0", llgl::AsResource(m_colorRT0->handle), Rendering::g_samplers[PointSampler]));
			mxDO2(FxSlow_SetResource(shader, "GBufferTexture1", llgl::AsResource(m_colorRT1->handle), Rendering::g_samplers[PointSampler]));
			mxDO2(FxSlow_SetResource(shader, "DepthTexture", llgl::AsResource(m_depthRT->handle), Rendering::g_samplers[PointSampler]));

			TObjectIterator< rxGlobalLight >	lightIt( sceneData );
			while( lightIt.IsValid() )
			{
				rxGlobalLight& light = lightIt.Value();

				//mxDO(FxSlow_Commit(m_hRenderContext,shader));
				DirectionalLight lightData;
				{
					lightData.direction = Matrix_TransformNormal(sceneView.viewMatrix, light.m_direction);
					lightData.color = light.m_color;
				}
				mxDO2(FxSlow_UpdateUBO(m_hRenderContext,shader,"DATA",&lightData,sizeof(lightData)));

				DrawFullScreenTriangle(shader);

				lightIt.MoveToNext();
			}
		}


		{
			gfxMARKER(Point_Lights);

			mxDO(FxSlow_SetRenderState(m_hRenderContext, *m_rendererData, "Deferred_Lighting"));

			FxShader* shader;
			mxDO(GetAsset(shader,MakeAssetID("deferred_point_light.shader"),m_rendererData));
			mxDO2(FxSlow_SetResource(shader, "GBufferTexture0", llgl::AsResource(m_colorRT0->handle), Rendering::g_samplers[PointSampler]));
			mxDO2(FxSlow_SetResource(shader, "GBufferTexture1", llgl::AsResource(m_colorRT1->handle), Rendering::g_samplers[PointSampler]));
			mxDO2(FxSlow_SetResource(shader, "DepthTexture", llgl::AsResource(m_depthRT->handle), Rendering::g_samplers[PointSampler]));

			TObjectIterator< rxLocalLight >	lightIt( sceneData );
			while( lightIt.IsValid() )
			{
				rxLocalLight& light = lightIt.Value();

				//mxDO(FxSlow_Commit(m_hRenderContext,shader));
				PointLight lightData;
				{
					Float3 viewSpaceLightPosition = Matrix_TransformPoint(sceneView.viewMatrix, light.position);
					lightData.Position_InverseRadius = Float4_Set(viewSpaceLightPosition, 1.0f/light.radius);
					lightData.Color_Radius = Float4_Set(light.color, light.radius);
				}
				mxDO2(FxSlow_UpdateUBO(m_hRenderContext,shader,"DATA",&lightData,sizeof(lightData)));

				DrawFullScreenTriangle(shader);

				lightIt.MoveToNext();
			}
		}
	}


// Thursday, March 26, 2015 Implementing Weighted, Blended Order-Independent Transparency 
//http://casual-effects.blogspot.ru/2015/03/implemented-weighted-blended-order.html

// Forward+ notes
//http://bioglaze.blogspot.fi/2014/07/2048-point-lights-60-fps.html

	// Material Stage: Render all solid objects again while combining the lighting
	// from Stage 2 with certain material-properties (colors, reflections, glow, fog, etc.)
	// to produce the final image

#if 0
	{
		llgl::ViewState	viewState;
		{
			viewState.Reset();
			viewState.colorTargets[0].SetDefault();
			viewState.targetCount = 1;
		}
		llgl::SubmitView(m_hRenderContext, viewState);
	}

	{
		mxDO(FxSlow_SetRenderState(m_hRenderContext, *m_rendererData, "NoCulling"));

		FxShader* shader;
		mxDO(GetByName(*m_rendererData, "full_screen_triangle", shader));
		mxDO(FxSlow_SetResource(shader, "t_sourceTexture", llgl::AsResource(pColorRT1->handle), Rendering::g_samplers[PointSampler]));
		mxDO(FxSlow_Commit(m_hRenderContext,shader));

		DrawFullScreenTriangle(shader);
	}
#endif

#if 0
	{
		llgl::ViewState	viewState;
		{
			viewState.Reset();
			viewState.colorTargets[0].SetDefault();
			viewState.targetCount = 1;
		}
		llgl::SubmitView(m_hRenderContext, viewState);
	}

	{
		FxShader* shader;

		mxDO(FxSlow_SetRenderState(m_hRenderContext, *m_rendererData, "Default"));
		{
			mxDO(GetAsset(shader,MakeAssetID("debug_draw_colored.shader"),m_rendererData));
			mxDO(FxSlow_SetUniform(shader,"g_color",RGBAf::GRAY.ToPtr()));
			mxDO(FxSlow_Commit(m_hRenderContext,shader));
			DBG_Draw_Models_With_Custom_Shader(sceneView, sceneData, *shader);
		}

		mxDO(FxSlow_SetRenderState(m_hRenderContext, *m_rendererData, "NoCulling"));
		{
			mxDO(GetAsset(shader,MakeAssetID("debug_draw_normals.shader"),m_rendererData));
			float lineLength = 4.0f;
			mxDO(FxSlow_SetUniform(shader,"g_lineLength",&lineLength));
			mxDO(FxSlow_Commit(m_hRenderContext,shader));
			DBG_Draw_Models_With_Custom_Shader(sceneView, sceneData, *shader, Topology::PointList);
		}
	}
#endif

	return ALL_OK;
}