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; }
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) ); }
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; }
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 ); }
//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
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 }
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); }
Logger& Logger::Get() { return GetByName("default"); }
ExternalDownloadManager* DownloadManagerManager::GetDefaultManager() { return GetByName(g_pcui->GetStringPref(PrefsCollectionUI::DownloadManager).CStr()); }
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; }