Skip to content
Snippets Groups Projects
Select Git revision
  • a91f25577c71ab8797a4b42f22c43bbaffc2604d
  • main default protected
  • 3.10
  • 3.11
  • revert-15688-bpo-38031-_io-FileIO-opener-crash
  • 3.8
  • 3.9
  • 3.7
  • enum-fix_auto
  • branch-v3.11.0
  • backport-c3648f4-3.11
  • gh-93963/remove-importlib-resources-abcs
  • refactor-wait_for
  • shared-testcase
  • v3.12.0a2
  • v3.12.0a1
  • v3.11.0
  • v3.8.15
  • v3.9.15
  • v3.10.8
  • v3.7.15
  • v3.11.0rc2
  • v3.8.14
  • v3.9.14
  • v3.7.14
  • v3.10.7
  • v3.11.0rc1
  • v3.10.6
  • v3.11.0b5
  • v3.11.0b4
  • v3.10.5
  • v3.11.0b3
  • v3.11.0b2
  • v3.9.13
34 results

exception_handling_notes.txt

Blame
  • LightSystem.cpp 32.03 KiB
    #include "LightSystem.h"
    
    class CLevelLoadListener: public IEventListener<XEventLevel>
    {
    public:
    	CLevelLoadListener(CLightSystem *pLightSystem, IXCore *pCore):
    		m_pLightSystem(pLightSystem)
    	{
    		m_pLevelSizeChannel = pCore->getEventChannel<XEventLevelSize>(EVENT_LEVEL_GET_SIZE_GUID);
    	}
    
    	void onEvent(const XEventLevel *pEvent) override
    	{
    		switch(pEvent->type)
    		{
    		case XEventLevel::TYPE_LOAD_END:
    			XEventLevelSize levelSize;
    			m_pLevelSizeChannel->broadcastEvent(&levelSize);
    
    			m_pLightSystem->setLevelSize(levelSize.vMin, levelSize.vMax);
    			break;
    		}
    	}
    
    private:
    	CLightSystem *m_pLightSystem;
    	IEventChannel<XEventLevelSize> *m_pLevelSizeChannel = NULL;
    };
    
    //##########################################################################
    
    CLightSystem::CLightSystem(IXCore *pCore):
    	m_pCore(pCore)
    {
    	Core_0RegisterCVarFloat("lpv_size_0", 1.0f, "Коэфициент размера первого каскада LPV");
    	Core_0RegisterCVarFloat("lpv_size_1", 2.0f, "Коэфициент размера второго каскада LPV");
    	Core_0RegisterCVarFloat("lpv_size_2", 4.0f, "Коэфициент размера третьего каскада LPV");
    	Core_0RegisterCVarInt("lpv_cascades_count", 3, "Количество активных каскадов LPV [0;3]");
    
    	m_pLevelListener = new CLevelLoadListener(this, pCore);
    
    	m_pLevelChannel = pCore->getEventChannel<XEventLevel>(EVENT_LEVEL_GUID);
    	m_pLevelChannel->addListener(m_pLevelListener);
    
    	m_pDevice = SGCore_GetDXDevice();
    
    	m_pMaterialSystem = (IXMaterialSystem*)pCore->getPluginManager()->getInterface(IXMATERIALSYSTEM_GUID);
    
    	if(m_pDevice)
    	{
    		{
    			const UINT uSize = 32;
    			m_uGICubesCount = uSize * uSize * uSize;
    			float3_t *pData = new float3_t[m_uGICubesCount];
    			float fHalf = (float)uSize / 2.0f;
    			for(UINT x = 0; x < uSize; ++x)
    			{
    				for(UINT y = 0; y < uSize; ++y)
    				{
    					for(UINT z = 0; z < uSize; ++z)
    					{
    						pData[x + y * uSize + z * uSize * uSize] = (float3)(float3((float)x, (float)y, (float)z) - float3(fHalf));
    					}
    				}
    			}
    			IGXVertexBuffer *pVB = m_pDevice->createVertexBuffer(sizeof(float3_t) * m_uGICubesCount, GXBUFFER_USAGE_STATIC, pData);
    			mem_delete_a(pData);
    
    			GXVertexElement oLayout[] =
    			{