| @@ -1,7 +1,7 @@ | |||
| | |||
| Microsoft Visual Studio Solution File, Format Version 12.00 | |||
| # Visual Studio 2013 | |||
| VisualStudioVersion = 12.0.31101.0 | |||
| VisualStudioVersion = 12.0.21005.1 | |||
| MinimumVisualStudioVersion = 10.0.40219.1 | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deushax", "..\games\deushax\deushax.vcxproj", "{EF1A4E80-63FA-4EB0-B834-12B6C500F31C}" | |||
| EndProject | |||
| @@ -757,97 +757,91 @@ Global | |||
| {81C83B42-D00A-4FA3-9A3D-80F9D46524BF}.Release|x64.ActiveCfg = Release|x64 | |||
| {81C83B42-D00A-4FA3-9A3D-80F9D46524BF}.Release|x64.Build.0 = Release|x64 | |||
| {81C83B42-D00A-4FA3-9A3D-80F9D46524BF}.Release|Xbox 360.ActiveCfg = Release|Win32 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|ORBIS.ActiveCfg = Debug|ORBIS | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|ORBIS.Build.0 = Debug|ORBIS | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|ORBIS.ActiveCfg = Debug|Win32 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|Win32.Build.0 = Debug|Win32 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|x64.ActiveCfg = Debug|x64 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|x64.Build.0 = Debug|x64 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|Xbox 360.ActiveCfg = Debug|Xbox 360 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|Xbox 360.Build.0 = Debug|Xbox 360 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|Xbox 360.Deploy.0 = Debug|Xbox 360 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|ORBIS.ActiveCfg = Release|ORBIS | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|ORBIS.Build.0 = Release|ORBIS | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Debug|Xbox 360.ActiveCfg = Debug|Win32 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|ORBIS.ActiveCfg = Release|Win32 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|Win32.ActiveCfg = Release|Win32 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|Win32.Build.0 = Release|Win32 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|x64.ActiveCfg = Release|x64 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|x64.Build.0 = Release|x64 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|Xbox 360.ActiveCfg = Release|Xbox 360 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|Xbox 360.Build.0 = Release|Xbox 360 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|Xbox 360.Deploy.0 = Release|Xbox 360 | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105}.Release|Xbox 360.ActiveCfg = Release|Win32 | |||
| EndGlobalSection | |||
| GlobalSection(SolutionProperties) = preSolution | |||
| HideSolutionNode = FALSE | |||
| EndGlobalSection | |||
| GlobalSection(NestedProjects) = preSolution | |||
| {928A359C-9C41-400A-8D2D-A054B33A79F5} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {9EA99B18-D352-47F6-BC04-A0B49CAA2772} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {0A1651FC-322B-4B04-82CB-28E9046D9383} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {E27FDF36-50C4-4ED2-8CF5-A20FED016910} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {B583BBFF-BE97-4F4E-BA1E-1F978A31EAB0} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {454DE15C-9063-4EB1-AD6C-77D7150F15DF} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {2F87CEAB-4818-443C-A5E3-6C34E7D967EC} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {33704AA4-F2B5-4138-A40D-E3E77F89ED46} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {8C77EAA8-1077-4EF7-AE53-97C6C60A3601} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {50509BA3-D27B-4FAC-9772-9EC76146F709} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {65114D40-9450-4B2D-B051-7A75E97C88E1} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {08C6A854-533D-4A1E-924E-C4A62281869F} = {928A359C-9C41-400A-8D2D-A054B33A79F5} | |||
| {9C66B179-0737-4BDA-AB42-2ADE478A9008} = {08C6A854-533D-4A1E-924E-C4A62281869F} | |||
| {EF1A4E80-63FA-4EB0-B834-12B6C500F31C} = {08C6A854-533D-4A1E-924E-C4A62281869F} | |||
| {17F0F184-4436-4D08-B8AA-16572EA238DB} = {2F87CEAB-4818-443C-A5E3-6C34E7D967EC} | |||
| {9C66B179-0737-4BDA-AB42-2ADE478A9008} = {08C6A854-533D-4A1E-924E-C4A62281869F} | |||
| {08C6A854-533D-4A1E-924E-C4A62281869F} = {928A359C-9C41-400A-8D2D-A054B33A79F5} | |||
| {2F87CEAB-4818-443C-A5E3-6C34E7D967EC} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {9E62F2FE-3408-4EAE-8238-FD84238CEEDA} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||
| {83D3B207-C601-4025-8F41-01DEDC354661} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||
| {D84021CA-B233-4E0F-8A52-071B83BBCCC4} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||
| {8F59A635-0240-4D7F-A80D-050C3F1670C2} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | |||
| {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||
| {9E62F2FE-3408-4EAE-8238-FD84238CEEDA} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||
| {962D4E25-45D3-4ACE-8C02-69FA3713ABD4} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | |||
| {1782F849-B6E1-466D-9F02-A751F3F8712C} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | |||
| {5A27FF18-A1EC-49BE-9455-415F1C701153} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | |||
| {D7F6C2CA-5A13-4FD0-8468-1833923E3EE3} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | |||
| {B1E10086-A1DA-401A-834D-969C9DBB5CC1} = {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} | |||
| {8F59A635-0240-4D7F-A80D-050C3F1670C2} = {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} | |||
| {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} = {65FD48E9-C936-4A23-AD46-BF738B6D4733} | |||
| {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} = {65FD48E9-C936-4A23-AD46-BF738B6D4733} | |||
| {B92ABADC-45BE-4CC5-B724-9426053123A1} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {7B083DA2-FE08-4F6D-BFDD-195D5C2783EB} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {1C5B8702-290C-42DA-AA9E-671348F5B747} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {6BF81B39-EDC2-4227-9992-C2D8ABEA95AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {33704AA4-F2B5-4138-A40D-E3E77F89ED46} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {BCEE0132-8E24-49BE-AFEB-96DAD14396BA} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {6BF81B39-EDC2-4227-9982-C2D8ABEA95AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {572E5B9C-7E19-489C-BD8A-E8401CFBBC47} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {E05E23A5-67DE-42B5-98A3-E63CCE0CC0AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {F59FA82C-DDB9-4EE2-80AE-CB0E4C6567A4} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {81C83B42-D00A-4FA3-9A3D-80F9D46524BF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {32F3F8CF-D22E-45E4-BEB8-AD909E8C5515} = {33704AA4-F2B5-4138-A40D-E3E77F89ED46} | |||
| {8C77EAA8-1077-4EF7-AE53-97C6C60A3601} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {EE203B88-44CF-4859-9D42-7A5F40FECB52} = {8C77EAA8-1077-4EF7-AE53-97C6C60A3601} | |||
| {B357514A-7881-422D-8358-161B689E7620} = {3D341D8A-E400-4B1D-BC05-B5C35487D9B5} | |||
| {2195FB18-53BF-48AF-96B6-9BD242924EA5} = {3D341D8A-E400-4B1D-BC05-B5C35487D9B5} | |||
| {4C4BD478-3767-4C27-BD91-DAAFE7CD03A2} = {3D341D8A-E400-4B1D-BC05-B5C35487D9B5} | |||
| {587FCCE9-1D8D-4398-B8B6-E8F4E9A92233} = {B357514A-7881-422D-8358-161B689E7620} | |||
| {9EA99B18-D352-47F6-BC04-A0B49CAA2772} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {EE203B88-44CF-4859-9D42-7A5F43FECB52} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {25493FC8-75AC-4703-AD58-AB0C4A0FB79C} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {6BF81B39-EDC2-4127-9982-C2D8ABEA95AF} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {EE203B88-44CF-4829-9D42-7A5F43FECB52} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {7422B977-CA61-49BF-A586-F57B6FF9BD64} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {DB344310-4938-4294-AEE2-18512454585D} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {EE203B88-44CF-4859-9D42-7A5F45FEDB52} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {EE203B88-44CF-4859-9D42-7A4F43FEDB52} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E} = {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} | |||
| {EE203B88-44CF-4859-9D42-7A1F43FECB52} = {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} | |||
| {BCEE0132-8E24-49BE-AFEB-96DAD14396BA} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {0A1651FC-322B-4B04-82CB-28E9046D9383} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {B1E10086-A1DA-401A-834D-969C9DBB5CC1} = {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} | |||
| {A69411B3-6DE8-404E-8E70-0D3375A7492A} = {0A1651FC-322B-4B04-82CB-28E9046D9383} | |||
| {928A359C-9C41-400A-8D2D-A054B33A79F5} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {E27FDF36-50C4-4ED2-8CF5-A20FED016910} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {C2E01551-B636-4324-8461-71811DF6FBB5} = {E27FDF36-50C4-4ED2-8CF5-A20FED016910} | |||
| {B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {5A77DCDD-2CBA-43E9-8B45-00C281443F77} = {0A1651FC-322B-4B04-82CB-28E9046D9383} | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {B583BBFF-BE97-4F4E-BA1E-1F978A31EAB0} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {C2E01551-B636-4324-8461-71811DF6FBB5} = {E27FDF36-50C4-4ED2-8CF5-A20FED016910} | |||
| {FAF82AD2-D9F4-4694-9A01-103BC5B771B4} = {B583BBFF-BE97-4F4E-BA1E-1F978A31EAB0} | |||
| {7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E} = {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} | |||
| {25493FC8-75AC-4703-AD58-AB0C4A0FB79C} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {6BF81B39-EDC2-4227-9982-C2D8ABEA95AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {6BF81B39-EDC2-4127-9982-C2D8ABEA95AF} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {AA376B9B-484B-4DC4-982F-6CFA645E441E} = {F7D4A671-612F-4FF4-883F-2097697694B7} | |||
| {F7D4A671-612F-4FF4-883F-2097697694B7} = {E5C5E320-C077-4362-9A3F-3920C6447601} | |||
| {572E5B9C-7E19-489C-BD8A-E8401CFBBC47} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {E05E23A5-67DE-42B5-98A3-E63CCE0CC0AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {52493826-AC00-470B-A745-4F602529B3B0} = {B583BBFF-BE97-4F4E-BA1E-1F978A31EAB0} | |||
| {9F291982-8C81-4105-BF39-16844648E55F} = {B583BBFF-BE97-4F4E-BA1E-1F978A31EAB0} | |||
| {950EDCC1-DF6A-4A75-B083-DFE98E7DD34F} = {B583BBFF-BE97-4F4E-BA1E-1F978A31EAB0} | |||
| {50509BA3-D27B-4FAC-9772-9EC76146F709} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {F7D4A671-612F-4FF4-883F-2097697694B7} = {E5C5E320-C077-4362-9A3F-3920C6447601} | |||
| {AA376B9B-484B-4DC4-982F-6CFA645E441E} = {F7D4A671-612F-4FF4-883F-2097697694B7} | |||
| {5D994A3B-83BF-4FCB-9AC1-E7B642B46FEA} = {50509BA3-D27B-4FAC-9772-9EC76146F709} | |||
| {454DE15C-9063-4EB1-AD6C-77D7150F15DF} = {5F1AAF03-7202-4C07-B99F-EB397105B1B7} | |||
| {C3E2D690-F2B4-4A11-B317-D5CB8EF9561A} = {454DE15C-9063-4EB1-AD6C-77D7150F15DF} | |||
| {EE203B88-44CF-4829-9D42-7A5F43FECB52} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {7422B977-CA61-49BF-A586-F57B6FF9BD64} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {DB344310-4938-4294-AEE2-18512454585D} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {2195FB18-53BF-48AF-96B6-9BD242924EA5} = {3D341D8A-E400-4B1D-BC05-B5C35487D9B5} | |||
| {FFF58874-D460-41E6-AD65-DBFEC6E47A94} = {2195FB18-53BF-48AF-96B6-9BD242924EA5} | |||
| {E4DFEBF9-C310-462F-9876-7EB59C1E4D4E} = {1AFD580B-98B8-4689-B661-38C41132C60E} | |||
| {EE203B88-44CF-4859-9D42-7A5F45FEDB52} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {F59FA82C-DDB9-4EE2-80AE-CB0E4C6567A4} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {4C4BD478-3767-4C27-BD91-DAAFE7CD03A2} = {3D341D8A-E400-4B1D-BC05-B5C35487D9B5} | |||
| {73F1A804-1116-46C3-922A-9C0ADEB33F52} = {4C4BD478-3767-4C27-BD91-DAAFE7CD03A2} | |||
| {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} = {65FD48E9-C936-4A23-AD46-BF738B6D4733} | |||
| {EE203B88-44CF-4859-9D42-7A4F43FEDB52} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {81C83B42-D00A-4FA3-9A3D-80F9D46524BF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
| {65114D40-9450-4B2D-B051-7A75E97C88E1} = {1DFE1729-4F1B-47CA-9819-72431FE14E25} | |||
| {B9A255A0-2B92-4801-AF6C-354535A6E105} = {65114D40-9450-4B2D-B051-7A75E97C88E1} | |||
| EndGlobalSection | |||
| EndGlobal | |||
| @@ -307,7 +307,7 @@ void BtPhysTest::TickGame(float seconds) | |||
| if (!m_init_status) | |||
| { | |||
| if (g_renderer) | |||
| if (Renderer::GetCount()) | |||
| InitApp(); | |||
| return; | |||
| } | |||
| @@ -162,7 +162,7 @@ void MeshViewer::Start() | |||
| m_entities << (m_file_loader = new DefaultThreadManager(4, 0)); | |||
| //Scene setup | |||
| m_ssetup_file_name = "data/meshviewer.init.lua"; | |||
| m_ssetup_file_name = "../data/meshviewer.init.lua"; | |||
| UpdateSceneSetup(); | |||
| //Mesh file | |||
| @@ -394,6 +394,12 @@ int main(int argc, char **argv) | |||
| new MeshViewer(argv[1]); | |||
| else | |||
| new MeshViewer(); | |||
| /* | |||
| //SceneDisplay* display = new ApplicationDisplay("newDisplay", ivec2(800, 600)); | |||
| //SceneDisplay::Add(display); | |||
| //Scene::GetScene(Scene::GetCount() - 1).SetDisplay(display); | |||
| */ | |||
| app.Run(); | |||
| return EXIT_SUCCESS; | |||
| @@ -932,7 +938,7 @@ void MeshViewer::Draw(float seconds, Scene &scene) | |||
| m_texture_shader->SetUniform(m_texture_uni, m_default_texture->GetTexture(), 0); | |||
| #endif //!HAS_WEB && WITH_TEXTURE | |||
| g_renderer->SetClearColor(m_ssetup->m_clear_color); | |||
| Renderer::Get()->SetClearColor(m_ssetup->m_clear_color); | |||
| for (int i = 0; i < m_gizmos.Count(); ++i) | |||
| { | |||
| @@ -1043,7 +1049,7 @@ void MeshViewer::Draw(float seconds, Scene &scene) | |||
| mat4 new_proj = mat_obj_offset * mat_count_offset * mat_align * mat_count_scale * save_proj; | |||
| m_camera->SetProjection(new_proj); | |||
| m_meshes[i].m1->Render(scene, m_mat); | |||
| g_renderer->Clear(ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Depth); | |||
| } | |||
| m_camera->SetProjection(save_proj); | |||
| #else | |||
| @@ -93,7 +93,7 @@ public: | |||
| m_ready = true; | |||
| } | |||
| g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
| Renderer::Get()->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
| m_shader->Bind(); | |||
| m_vdecl->SetStream(m_vbo, m_coord, m_color); | |||
| @@ -126,7 +126,7 @@ public: | |||
| if (!m_ready) | |||
| { | |||
| g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
| Renderer::Get()->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
| /* Upload vertex data to GPU */ | |||
| for (int i = 0; i < m_gears.Count(); i++) | |||
| @@ -70,7 +70,7 @@ public: | |||
| if (!m_ready) | |||
| { | |||
| g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
| Renderer::Get()->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
| m_ready = true; | |||
| } | |||
| @@ -189,7 +189,7 @@ public: | |||
| m_ready = true; | |||
| } | |||
| g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
| Renderer::Get()->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
| m_shader->Bind(); | |||
| m_vdecl->SetStream(m_vbo, m_coord, m_color); | |||
| @@ -78,7 +78,7 @@ public: | |||
| RenderContext rc; | |||
| rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||
| rc.SetClearDepth(1.f); | |||
| g_renderer->Clear(ClearMask::Color | ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | |||
| } | |||
| m_fbo->Unbind(); | |||
| @@ -145,7 +145,7 @@ public: | |||
| RenderContext rc; | |||
| rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||
| rc.SetClearDepth(1.f); | |||
| g_renderer->Clear(ClearMask::Color | ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | |||
| } | |||
| m_fbos.Last().m1->Unbind(); | |||
| } | |||
| @@ -156,7 +156,7 @@ public: | |||
| RenderContext rc; | |||
| rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||
| rc.SetClearDepth(1.f); | |||
| g_renderer->Clear(ClearMask::Color | ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | |||
| } | |||
| temp_buffer->Unbind(); | |||
| @@ -220,7 +220,7 @@ public: | |||
| RenderContext rc; | |||
| rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||
| rc.SetClearDepth(1.f); | |||
| g_renderer->Clear(ClearMask::Color | ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | |||
| } | |||
| temp_buffer->Unbind(); | |||
| @@ -250,7 +250,7 @@ public: | |||
| RenderContext rc; | |||
| rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||
| rc.SetClearDepth(1.f); | |||
| g_renderer->Clear(ClearMask::Color | ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | |||
| } | |||
| m_fbos[f].m1->Unbind(); | |||
| @@ -273,7 +273,7 @@ public: | |||
| dst_buf->Bind(); | |||
| /* FIXME: we should just disable depth test in the shader */ | |||
| g_renderer->Clear(ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Depth); | |||
| m_fbos[f].m2->Bind(); | |||
| int i = 0; | |||
| @@ -292,7 +292,7 @@ public: | |||
| } | |||
| } | |||
| g_renderer->Clear(ClearMask::Color | ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | |||
| //FRAME BUFFER DRAW | |||
| m_timer -= seconds; | |||
| @@ -304,7 +304,7 @@ public: | |||
| RenderContext rc; | |||
| rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||
| rc.SetClearDepth(1.f); | |||
| g_renderer->Clear(ClearMask::Color | ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | |||
| } | |||
| m_fbos[m_cur_fbo].m1->Unbind(); | |||
| @@ -335,7 +335,7 @@ public: | |||
| dst_buf->Bind(); | |||
| /* FIXME: we should just disable depth test in the shader */ | |||
| g_renderer->Clear(ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Depth); | |||
| shader->Bind(); | |||
| //08_FBO ?? | |||
| @@ -32,6 +32,87 @@ | |||
| namespace lol | |||
| { | |||
| //----------------------------------------------------------------------------- | |||
| class ApplicationDisplayData | |||
| { | |||
| friend class ApplicationDisplay; | |||
| ApplicationDisplayData(char const *name, ivec2 resolution) | |||
| : display(name, resolution) | |||
| { } | |||
| protected: | |||
| void SetResolution(ivec2 resolution) | |||
| { | |||
| display.SetResolution(resolution); | |||
| } | |||
| void SetPosition(ivec2 position) | |||
| { | |||
| display.SetPosition(position); | |||
| } | |||
| void Enable() | |||
| { | |||
| display.Enable(); | |||
| } | |||
| void Disable() | |||
| { | |||
| display.Disable(); | |||
| } | |||
| #if _XBOX | |||
| //NOT HANDLED YET | |||
| #elif __native_client__ | |||
| //NOT HANDLED YET | |||
| #elif __ANDROID__ | |||
| //NOT HANDLED YET | |||
| #elif USE_SDL || USE_OLD_SDL | |||
| SdlAppDisplay display; | |||
| #elif HAVE_GLES_2X | |||
| /* FIXME: this macro is only deactivated if we include "lolgl.h" */ | |||
| //NOT HANDLED YET | |||
| #else | |||
| # error No application class available on this platform | |||
| #endif | |||
| }; | |||
| ApplicationDisplay::ApplicationDisplay(char const *name, ivec2 resolution) | |||
| { | |||
| data = new ApplicationDisplayData(name, resolution); | |||
| } | |||
| ApplicationDisplay::~ApplicationDisplay() | |||
| { | |||
| delete data; | |||
| } | |||
| void ApplicationDisplay::SetResolution(ivec2 resolution) | |||
| { | |||
| super::SetResolution(resolution); | |||
| data->SetResolution(resolution); | |||
| } | |||
| void ApplicationDisplay::SetPosition(ivec2 position) | |||
| { | |||
| super::SetPosition(position); | |||
| data->SetPosition(position); | |||
| } | |||
| void ApplicationDisplay::Enable() | |||
| { | |||
| super::Enable(); | |||
| data->Enable(); | |||
| } | |||
| void ApplicationDisplay::Disable() | |||
| { | |||
| data->Disable(); | |||
| super::Disable(); | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| class ApplicationData | |||
| { | |||
| friend class Application; | |||
| @@ -71,6 +152,7 @@ static void AppCallback() | |||
| Application::Application(char const *name, ivec2 resolution, float framerate) | |||
| { | |||
| SceneDisplay::Add(new ApplicationDisplay(name, resolution)); | |||
| data = new ApplicationData(name, resolution, framerate); | |||
| g_world.ExecLuaFile("lua/init.lua"); | |||
| } | |||
| @@ -18,6 +18,31 @@ | |||
| namespace lol | |||
| { | |||
| //----------------------------------------------------------------------------- | |||
| class ApplicationDisplayData; | |||
| class ApplicationDisplay : public SceneDisplay | |||
| { | |||
| typedef SceneDisplay super; | |||
| friend class Scene; | |||
| public: | |||
| ApplicationDisplay(char const *name, ivec2 resolution); | |||
| virtual ~ApplicationDisplay(); | |||
| /* pos/size/... methods */ | |||
| virtual void SetResolution(ivec2 resolution); | |||
| virtual void SetPosition(ivec2 position); | |||
| protected: | |||
| virtual void Enable(); | |||
| virtual void Disable(); | |||
| private: | |||
| ApplicationDisplayData *data; | |||
| }; | |||
| //----------------------------------------------------------------------------- | |||
| class ApplicationData; | |||
| class Application | |||
| @@ -29,7 +29,7 @@ Camera::Camera() | |||
| m_drawgroup = DRAWGROUP_CAMERA; | |||
| //Arbitrary values when g_renderer is not ready. | |||
| ivec2 screen_size = (g_renderer)?(Video::GetSize()):(ivec2(800, 600)); | |||
| ivec2 screen_size = (Renderer::GetCount()) ? (Video::GetSize()) : (ivec2(800, 600)); | |||
| m_fov = 45.f; | |||
| m_near = -1000.f; | |||
| m_far = 1000.f; | |||
| @@ -273,14 +273,14 @@ void Debug::DrawBox(vec2 a, vec2 b, mat2 transform, vec4 color) | |||
| } | |||
| void Debug::DrawBox(vec2 a, float s, mat2 transform, vec4 color) | |||
| { | |||
| vec2 b = s * vec2(1.f, g_renderer->GetXYRatio()); | |||
| vec2 b = s * vec2(1.f, Renderer::Get()->GetXYRatio()); | |||
| Debug::DrawBox(a - b, a + b, transform, color); | |||
| } | |||
| //-- CIRCLE ------------------------------------------------------------------- | |||
| void Debug::DrawCircle(vec2 a, float s) { Scene& scene = Scene::GetScene(); Debug::DrawCircle(a, s * vec2(1.f, g_renderer->GetXYRatio()), scene.GetLineColor()); } | |||
| void Debug::DrawCircle(vec2 a, float s) { Scene& scene = Scene::GetScene(); Debug::DrawCircle(a, s * vec2(1.f, Renderer::Get()->GetXYRatio()), scene.GetLineColor()); } | |||
| void Debug::DrawCircle(vec3 a, vec3 n) { Scene& scene = Scene::GetScene(); Debug::DrawCircle(a, n, scene.GetLineColor()); } | |||
| void Debug::DrawCircle(vec2 a, vec2 s) { Scene& scene = Scene::GetScene(); Debug::DrawCircle(a, s * vec2(1.f, g_renderer->GetXYRatio()), scene.GetLineColor()); } | |||
| void Debug::DrawCircle(vec2 a, vec2 s) { Scene& scene = Scene::GetScene(); Debug::DrawCircle(a, s * vec2(1.f, Renderer::Get()->GetXYRatio()), scene.GetLineColor()); } | |||
| void Debug::DrawCircle(vec3 a, vec3 x, vec3 y) { Scene& scene = Scene::GetScene(); Debug::DrawCircle(a, x, y, scene.GetLineColor()); } | |||
| void Debug::DrawCircle(vec2 a, vec2 x, vec2 y) { Scene& scene = Scene::GetScene(); Debug::DrawCircle(a, x, y, scene.GetLineColor()); } | |||
| void Debug::DrawCircle(vec3 a, vec3 n, vec4 color) | |||
| @@ -304,7 +304,7 @@ Framebuffer::Framebuffer(ivec2 size, FramebufferFormat fbo_format) | |||
| m_data->m_size = size; | |||
| m_data->m_bound = false; | |||
| #if defined USE_D3D9 | |||
| m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); | |||
| if (FAILED(m_data->m_dev->CreateTexture(size.x, size.y, 1, | |||
| D3DUSAGE_RENDERTARGET, | |||
| @@ -315,7 +315,7 @@ Framebuffer::Framebuffer(ivec2 size, FramebufferFormat fbo_format) | |||
| if (FAILED(m_data->m_texture->GetSurfaceLevel(0, &m_data->m_surface))) | |||
| Abort(); | |||
| #elif defined _XBOX | |||
| m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (D3DDevice *)Renderer::Get()->GetDevice(); | |||
| if (FAILED(m_data->m_dev->CreateTexture(size.x, size.y, 1, 0, | |||
| (D3DFORMAT)fbo_format.GetFormat(), | |||
| @@ -474,8 +474,8 @@ void Framebuffer::Bind() | |||
| /* FIXME: this should be done in the RenderContext object | |||
| * instead, maybe by getting rid of Framebuffer::Bind() and | |||
| * creating RenderContext::SetFramebuffer() instead. */ | |||
| m_data->m_saved_viewport = g_renderer->GetViewport(); | |||
| g_renderer->SetViewport(ibox2(ivec2::zero, m_data->m_size)); | |||
| m_data->m_saved_viewport = Renderer::Get()->GetViewport(); | |||
| Renderer::Get()->SetViewport(ibox2(ivec2::zero, m_data->m_size)); | |||
| m_data->m_bound = true; | |||
| } | |||
| @@ -501,7 +501,7 @@ void Framebuffer::Unbind() | |||
| # endif | |||
| #endif | |||
| g_renderer->SetViewport(m_data->m_saved_viewport); | |||
| Renderer::Get()->SetViewport(m_data->m_saved_viewport); | |||
| m_data->m_bound = false; | |||
| } | |||
| @@ -61,9 +61,9 @@ IndexBuffer::IndexBuffer(size_t size) | |||
| return; | |||
| #if defined USE_D3D9 || defined _XBOX | |||
| # if defined USE_D3D9 | |||
| m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); | |||
| # elif defined _XBOX | |||
| m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (D3DDevice *)Renderer::Get()->GetDevice(); | |||
| # endif | |||
| if (FAILED(m_data->m_dev->CreateIndexBuffer(size, D3DUSAGE_WRITEONLY, | |||
| @@ -73,33 +73,33 @@ RenderContext::RenderContext() | |||
| RenderContext::~RenderContext() | |||
| { | |||
| if (m_data->m_viewport.HasChanged()) | |||
| g_renderer->SetViewport(m_data->m_viewport.GetValue()); | |||
| Renderer::Get()->SetViewport(m_data->m_viewport.GetValue()); | |||
| if (m_data->m_clear_color.HasChanged()) | |||
| g_renderer->SetClearColor(m_data->m_clear_color.GetValue()); | |||
| Renderer::Get()->SetClearColor(m_data->m_clear_color.GetValue()); | |||
| if (m_data->m_clear_depth.HasChanged()) | |||
| g_renderer->SetClearDepth(m_data->m_clear_depth.GetValue()); | |||
| Renderer::Get()->SetClearDepth(m_data->m_clear_depth.GetValue()); | |||
| if (m_data->m_alpha_func.HasChanged()) | |||
| g_renderer->SetAlphaFunc(m_data->m_alpha_func.GetValue(), | |||
| Renderer::Get()->SetAlphaFunc(m_data->m_alpha_func.GetValue(), | |||
| m_data->m_alpha_value.GetValue()); | |||
| if (m_data->m_blend_src.HasChanged()) | |||
| g_renderer->SetBlendFunc(m_data->m_blend_src.GetValue(), | |||
| Renderer::Get()->SetBlendFunc(m_data->m_blend_src.GetValue(), | |||
| m_data->m_blend_dst.GetValue()); | |||
| if (m_data->m_depth_func.HasChanged()) | |||
| g_renderer->SetDepthFunc(m_data->m_depth_func.GetValue()); | |||
| Renderer::Get()->SetDepthFunc(m_data->m_depth_func.GetValue()); | |||
| if (m_data->m_depth_mask.HasChanged()) | |||
| g_renderer->SetDepthMask(m_data->m_depth_mask.GetValue()); | |||
| Renderer::Get()->SetDepthMask(m_data->m_depth_mask.GetValue()); | |||
| if (m_data->m_cull_mode.HasChanged()) | |||
| g_renderer->SetCullMode(m_data->m_cull_mode.GetValue()); | |||
| Renderer::Get()->SetCullMode(m_data->m_cull_mode.GetValue()); | |||
| if (m_data->m_polygon_mode.HasChanged()) | |||
| g_renderer->SetPolygonMode(m_data->m_polygon_mode.GetValue()); | |||
| Renderer::Get()->SetPolygonMode(m_data->m_polygon_mode.GetValue()); | |||
| delete m_data; | |||
| } | |||
| @@ -107,152 +107,152 @@ RenderContext::~RenderContext() | |||
| void RenderContext::SetViewport(ibox2 viewport) | |||
| { | |||
| if (!m_data->m_viewport.HasChanged()) | |||
| m_data->m_viewport.TrackValue(g_renderer->GetViewport()); | |||
| m_data->m_viewport.TrackValue(Renderer::Get()->GetViewport()); | |||
| g_renderer->SetViewport(viewport); | |||
| Renderer::Get()->SetViewport(viewport); | |||
| } | |||
| ibox2 RenderContext::GetViewport() | |||
| { | |||
| return g_renderer->GetViewport(); | |||
| return Renderer::Get()->GetViewport(); | |||
| } | |||
| void RenderContext::SetClearColor(vec4 color) | |||
| { | |||
| if (!m_data->m_clear_color.HasChanged()) | |||
| m_data->m_clear_color.TrackValue(g_renderer->GetClearColor()); | |||
| m_data->m_clear_color.TrackValue(Renderer::Get()->GetClearColor()); | |||
| g_renderer->SetClearColor(color); | |||
| Renderer::Get()->SetClearColor(color); | |||
| } | |||
| vec4 RenderContext::GetClearColor() | |||
| { | |||
| return g_renderer->GetClearColor(); | |||
| return Renderer::Get()->GetClearColor(); | |||
| } | |||
| void RenderContext::SetClearDepth(float depth) | |||
| { | |||
| if (!m_data->m_clear_depth.HasChanged()) | |||
| m_data->m_clear_depth.TrackValue(g_renderer->GetClearDepth()); | |||
| m_data->m_clear_depth.TrackValue(Renderer::Get()->GetClearDepth()); | |||
| g_renderer->SetClearDepth(depth); | |||
| Renderer::Get()->SetClearDepth(depth); | |||
| } | |||
| float RenderContext::GetClearDepth() | |||
| { | |||
| return g_renderer->GetClearDepth(); | |||
| return Renderer::Get()->GetClearDepth(); | |||
| } | |||
| void RenderContext::SetAlphaFunc(AlphaFunc func, float alpha) | |||
| { | |||
| if (!m_data->m_alpha_func.HasChanged()) | |||
| m_data->m_alpha_func.TrackValue(g_renderer->GetAlphaFunc()); | |||
| m_data->m_alpha_func.TrackValue(Renderer::Get()->GetAlphaFunc()); | |||
| if (!m_data->m_alpha_value.HasChanged()) | |||
| m_data->m_alpha_value.TrackValue(g_renderer->GetAlphaValue()); | |||
| m_data->m_alpha_value.TrackValue(Renderer::Get()->GetAlphaValue()); | |||
| g_renderer->SetAlphaFunc(func, alpha); | |||
| Renderer::Get()->SetAlphaFunc(func, alpha); | |||
| } | |||
| AlphaFunc RenderContext::GetAlphaFunc() | |||
| { | |||
| return g_renderer->GetAlphaFunc(); | |||
| return Renderer::Get()->GetAlphaFunc(); | |||
| } | |||
| float RenderContext::GetAlphaValue() | |||
| { | |||
| return g_renderer->GetAlphaValue(); | |||
| return Renderer::Get()->GetAlphaValue(); | |||
| } | |||
| void RenderContext::SetBlendEquation(BlendEquation rgb, BlendEquation alpha) | |||
| { | |||
| if (!m_data->m_blend_rgb.HasChanged()) | |||
| m_data->m_blend_rgb.TrackValue(g_renderer->GetBlendEquationRgb()); | |||
| m_data->m_blend_rgb.TrackValue(Renderer::Get()->GetBlendEquationRgb()); | |||
| if (!m_data->m_blend_alpha.HasChanged()) | |||
| m_data->m_blend_alpha.TrackValue(g_renderer->GetBlendEquationAlpha()); | |||
| m_data->m_blend_alpha.TrackValue(Renderer::Get()->GetBlendEquationAlpha()); | |||
| g_renderer->SetBlendEquation(rgb, alpha); | |||
| Renderer::Get()->SetBlendEquation(rgb, alpha); | |||
| } | |||
| BlendEquation RenderContext::GetBlendEquationRgb() | |||
| { | |||
| return g_renderer->GetBlendEquationRgb(); | |||
| return Renderer::Get()->GetBlendEquationRgb(); | |||
| } | |||
| BlendEquation RenderContext::GetBlendEquationAlpha() | |||
| { | |||
| return g_renderer->GetBlendEquationAlpha(); | |||
| return Renderer::Get()->GetBlendEquationAlpha(); | |||
| } | |||
| void RenderContext::SetBlendFunc(BlendFunc src, BlendFunc dst) | |||
| { | |||
| if (!m_data->m_blend_src.HasChanged()) | |||
| m_data->m_blend_src.TrackValue(g_renderer->GetBlendFuncSrc()); | |||
| m_data->m_blend_src.TrackValue(Renderer::Get()->GetBlendFuncSrc()); | |||
| if (!m_data->m_blend_dst.HasChanged()) | |||
| m_data->m_blend_dst.TrackValue(g_renderer->GetBlendFuncDst()); | |||
| m_data->m_blend_dst.TrackValue(Renderer::Get()->GetBlendFuncDst()); | |||
| g_renderer->SetBlendFunc(src, dst); | |||
| Renderer::Get()->SetBlendFunc(src, dst); | |||
| } | |||
| BlendFunc RenderContext::GetBlendFuncSrc() | |||
| { | |||
| return g_renderer->GetBlendFuncSrc(); | |||
| return Renderer::Get()->GetBlendFuncSrc(); | |||
| } | |||
| BlendFunc RenderContext::GetBlendFuncDst() | |||
| { | |||
| return g_renderer->GetBlendFuncDst(); | |||
| return Renderer::Get()->GetBlendFuncDst(); | |||
| } | |||
| void RenderContext::SetDepthFunc(DepthFunc func) | |||
| { | |||
| if (!m_data->m_depth_func.HasChanged()) | |||
| m_data->m_depth_func.TrackValue(g_renderer->GetDepthFunc()); | |||
| m_data->m_depth_func.TrackValue(Renderer::Get()->GetDepthFunc()); | |||
| g_renderer->SetDepthFunc(func); | |||
| Renderer::Get()->SetDepthFunc(func); | |||
| } | |||
| DepthFunc RenderContext::GetDepthFunc() | |||
| { | |||
| return g_renderer->GetDepthFunc(); | |||
| return Renderer::Get()->GetDepthFunc(); | |||
| } | |||
| void RenderContext::SetDepthMask(DepthMask mask) | |||
| { | |||
| if (!m_data->m_depth_mask.HasChanged()) | |||
| m_data->m_depth_mask.TrackValue(g_renderer->GetDepthMask()); | |||
| m_data->m_depth_mask.TrackValue(Renderer::Get()->GetDepthMask()); | |||
| g_renderer->SetDepthMask(mask); | |||
| Renderer::Get()->SetDepthMask(mask); | |||
| } | |||
| DepthMask RenderContext::GetDepthMask() | |||
| { | |||
| return g_renderer->GetDepthMask(); | |||
| return Renderer::Get()->GetDepthMask(); | |||
| } | |||
| void RenderContext::SetCullMode(CullMode mode) | |||
| { | |||
| if (!m_data->m_cull_mode.HasChanged()) | |||
| m_data->m_cull_mode.TrackValue(g_renderer->GetCullMode()); | |||
| m_data->m_cull_mode.TrackValue(Renderer::Get()->GetCullMode()); | |||
| g_renderer->SetCullMode(mode); | |||
| Renderer::Get()->SetCullMode(mode); | |||
| } | |||
| CullMode RenderContext::GetCullMode() | |||
| { | |||
| return g_renderer->GetCullMode(); | |||
| return Renderer::Get()->GetCullMode(); | |||
| } | |||
| void RenderContext::SetPolygonMode(PolygonMode mode) | |||
| { | |||
| if (!m_data->m_polygon_mode.HasChanged()) | |||
| m_data->m_polygon_mode.TrackValue(g_renderer->GetPolygonMode()); | |||
| m_data->m_polygon_mode.TrackValue(Renderer::Get()->GetPolygonMode()); | |||
| g_renderer->SetPolygonMode(mode); | |||
| Renderer::Get()->SetPolygonMode(mode); | |||
| } | |||
| PolygonMode RenderContext::GetPolygonMode() | |||
| { | |||
| return g_renderer->GetPolygonMode(); | |||
| return Renderer::Get()->GetPolygonMode(); | |||
| } | |||
| } /* namespace lol */ | |||
| @@ -39,10 +39,11 @@ namespace lol | |||
| { | |||
| /* | |||
| * The global g_renderer object, initialised by Video::Init | |||
| * The global g_renderers object, initialised by Video::Setup | |||
| */ | |||
| Renderer *g_renderer = nullptr; | |||
| //Renderer *g_renderer = nullptr; | |||
| array<Renderer*> g_renderers; | |||
| /* | |||
| * Private RendererData class | |||
| @@ -225,6 +226,29 @@ void Renderer::Clear(ClearMask mask) | |||
| #endif | |||
| } | |||
| /* | |||
| * Renderer static | |||
| */ | |||
| void Renderer::AddNew(ivec2 size) | |||
| { | |||
| g_renderers << new Renderer(size); | |||
| } | |||
| ptrdiff_t Renderer::GetCount() | |||
| { | |||
| return g_renderers.count(); | |||
| } | |||
| Renderer* Renderer::Get(ptrdiff_t index) | |||
| { | |||
| return g_renderers[index]; | |||
| } | |||
| void Renderer::DestroyAll() | |||
| { | |||
| for (Renderer* renderer : g_renderers) | |||
| delete renderer; | |||
| g_renderers.empty(); | |||
| } | |||
| /* | |||
| * Viewport dimensions | |||
| */ | |||
| @@ -259,9 +259,9 @@ Shader::Shader(String const &name, | |||
| data->vert_crc = ShaderData::Hash(vert); | |||
| #if defined USE_D3D9 || defined _XBOX | |||
| # if defined USE_D3D9 | |||
| data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); | |||
| data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); | |||
| # elif defined _XBOX | |||
| data->m_dev = (D3DDevice *)g_renderer->GetDevice(); | |||
| data->m_dev = (D3DDevice *)Renderer::Get()->GetDevice(); | |||
| # endif | |||
| hr = D3DXCompileShader(vert, (UINT)strlen(vert), macros, nullptr, "main", | |||
| @@ -70,9 +70,9 @@ Texture::Texture(ivec2 size, PixelFormat format) | |||
| #if defined USE_D3D9 || defined _XBOX | |||
| # if defined USE_D3D9 | |||
| m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); | |||
| # elif defined _XBOX | |||
| m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (D3DDevice *)Renderer::Get()->GetDevice(); | |||
| # endif | |||
| static struct | |||
| @@ -529,9 +529,9 @@ void VertexDeclaration::Initialize() | |||
| elements[m_count] = end_element[0]; | |||
| # if defined USE_D3D9 | |||
| m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); | |||
| # elif defined _XBOX | |||
| m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (D3DDevice *)Renderer::Get()->GetDevice(); | |||
| # endif | |||
| if (FAILED(m_data->m_dev->CreateVertexDeclaration(elements, | |||
| @@ -614,9 +614,9 @@ VertexBuffer::VertexBuffer(size_t size) | |||
| return; | |||
| #if defined USE_D3D9 || defined _XBOX | |||
| # if defined USE_D3D9 | |||
| m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); | |||
| # elif defined _XBOX | |||
| m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); | |||
| m_data->m_dev = (D3DDevice *)Renderer::Get()->GetDevice(); | |||
| # endif | |||
| if (FAILED(m_data->m_dev->CreateVertexBuffer(size, D3DUSAGE_WRITEONLY, nullptr, | |||
| @@ -137,6 +137,11 @@ public: | |||
| void *GetDevice(); | |||
| static void AddNew(ivec2 size); | |||
| static ptrdiff_t GetCount(); | |||
| static Renderer* Get(ptrdiff_t index = 0); | |||
| static void DestroyAll(); | |||
| public: | |||
| void SetViewport(ibox2 viewport); | |||
| ibox2 GetViewport() const; | |||
| @@ -177,7 +182,7 @@ private: | |||
| RendererData *m_data; | |||
| }; | |||
| extern Renderer *g_renderer; | |||
| //extern Renderer *g_renderer; | |||
| } /* namespace lol */ | |||
| @@ -97,6 +97,9 @@ | |||
| <Filter Include="entities"> | |||
| <UniqueIdentifier>{3bd5fe6f-c9cd-45f3-98a9-958d86d415e8}</UniqueIdentifier> | |||
| </Filter> | |||
| <Filter Include="display"> | |||
| <UniqueIdentifier>{869f0b25-469b-4b06-a2a2-325449fc868f}</UniqueIdentifier> | |||
| </Filter> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ClCompile Include="image\crop.cpp"> | |||
| @@ -225,9 +228,6 @@ | |||
| <ClCompile Include="light.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="ticker.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="platform.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| @@ -240,18 +240,12 @@ | |||
| <ClCompile Include="sampler.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="scene.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="sprite.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="text.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="video.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="world.cpp"> | |||
| <Filter>...</Filter> | |||
| </ClCompile> | |||
| @@ -425,6 +419,15 @@ | |||
| <ClCompile Include="mesh\primitivemesh.cpp"> | |||
| <Filter>mesh</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="ticker.cpp"> | |||
| <Filter>display</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="video.cpp"> | |||
| <Filter>display</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="scene.cpp"> | |||
| <Filter>display</Filter> | |||
| </ClCompile> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ClInclude Include="debug\fps.h"> | |||
| @@ -577,9 +580,6 @@ | |||
| <ClInclude Include="sampler.h"> | |||
| <Filter>...</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="scene.h"> | |||
| <Filter>...</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="simd.h"> | |||
| <Filter>...</Filter> | |||
| </ClInclude> | |||
| @@ -589,12 +589,6 @@ | |||
| <ClInclude Include="text.h"> | |||
| <Filter>...</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="ticker.h"> | |||
| <Filter>...</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="video.h"> | |||
| <Filter>...</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="world.h"> | |||
| <Filter>...</Filter> | |||
| </ClInclude> | |||
| @@ -792,6 +786,15 @@ | |||
| <ClInclude Include="mesh\primitivemesh.h"> | |||
| <Filter>mesh</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="ticker.h"> | |||
| <Filter>display</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="video.h"> | |||
| <Filter>display</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="scene.h"> | |||
| <Filter>display</Filter> | |||
| </ClInclude> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <LolFxCompile Include="gpu\emptymaterial.lolfx"> | |||
| @@ -263,7 +263,7 @@ void LolImGui::TickDraw(float seconds, Scene &scene) | |||
| } | |||
| void PrimitiveLolImGui::Render(Scene& scene, PrimitiveSource* primitive) | |||
| { | |||
| g_renderer->Clear(ClearMask::Depth); | |||
| Renderer::Get()->Clear(ClearMask::Depth); | |||
| ImGuiIO& io = ImGui::GetIO(); | |||
| if (io.Fonts->TexID) | |||
| @@ -39,12 +39,11 @@ namespace lol | |||
| { | |||
| /* | |||
| * SDL App implementation class | |||
| */ | |||
| class SdlAppData | |||
| * SDL App display implementation class | |||
| */ | |||
| class SdlAppDisplayData | |||
| { | |||
| friend class SdlApp; | |||
| friend class SdlAppDisplay; | |||
| private: | |||
| #if USE_SDL | |||
| @@ -56,28 +55,30 @@ private: | |||
| }; | |||
| /* | |||
| * Public SdlApp class | |||
| */ | |||
| SdlApp::SdlApp(char const *title, ivec2 res, float fps) : | |||
| data(new SdlAppData()) | |||
| * Public SdlApp class | |||
| */ | |||
| SdlAppDisplay::SdlAppDisplay(char const *title, ivec2 res) | |||
| : data(new SdlAppDisplayData()) | |||
| { | |||
| #if USE_SDL || USE_OLD_SDL | |||
| ivec2 window_size = res; | |||
| ivec2 screen_size = res; | |||
| /* Initialise SDL */ | |||
| if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_NOPARACHUTE) < 0) | |||
| if (!SDL_WasInit(0)) | |||
| { | |||
| Log::Error("cannot initialise SDL: %s\n", SDL_GetError()); | |||
| exit(EXIT_FAILURE); | |||
| if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_NOPARACHUTE) < 0) | |||
| { | |||
| Log::Error("cannot initialise SDL: %s\n", SDL_GetError()); | |||
| exit(EXIT_FAILURE); | |||
| } | |||
| } | |||
| #if USE_SDL | |||
| data->m_window = SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, | |||
| SDL_WINDOWPOS_UNDEFINED, | |||
| window_size.x, window_size.y, | |||
| SDL_WINDOW_OPENGL); | |||
| SDL_WINDOWPOS_UNDEFINED, | |||
| window_size.x, window_size.y, | |||
| SDL_WINDOW_OPENGL); | |||
| if (!data->m_window) | |||
| { | |||
| Log::Error("cannot create rendering window: %s\n", SDL_GetError()); | |||
| @@ -87,7 +88,6 @@ SdlApp::SdlApp(char const *title, ivec2 res, float fps) : | |||
| SDL_GetWindowSize(data->m_window, &res.x, &res.y); | |||
| data->m_glcontext = SDL_GL_CreateContext(data->m_window); | |||
| #else | |||
| const SDL_VideoInfo* vidinfo = SDL_GetVideoInfo(); | |||
| screen_size = ivec2(vidinfo->current_w, vidinfo->current_h); | |||
| @@ -120,9 +120,122 @@ SdlApp::SdlApp(char const *title, ivec2 res, float fps) : | |||
| res = ivec2(data->m_window->w, data->m_window->h); | |||
| #endif | |||
| /* Initialise everything */ | |||
| Video::Setup(res); //TODO ?? Should it be here ? | |||
| #endif | |||
| } | |||
| SdlAppDisplay::~SdlAppDisplay() | |||
| { | |||
| #if USE_SDL | |||
| if (data->m_window) | |||
| { | |||
| SDL_GL_DeleteContext(data->m_glcontext); | |||
| SDL_DestroyWindow(data->m_window); | |||
| } | |||
| #elif USE_OLD_SDL | |||
| if (data->m_window) | |||
| SDL_FreeSurface(data->m_window); | |||
| #endif | |||
| delete data; | |||
| } | |||
| void SdlAppDisplay::SetResolution(ivec2 resolution) | |||
| { | |||
| #if USE_SDL | |||
| SDL_SetWindowSize(data->m_window, resolution.x, resolution.y); | |||
| #elif USE_OLD_SDL && USE_D3D9 | |||
| //Not implemented | |||
| #elif USE_OLD_SDL | |||
| //Not implemented | |||
| #endif | |||
| } | |||
| void SdlAppDisplay::SetPosition(ivec2 position) | |||
| { | |||
| #if USE_SDL | |||
| SDL_SetWindowPosition(data->m_window, position.x, position.y); | |||
| #elif USE_OLD_SDL && USE_D3D9 | |||
| //Not implemented | |||
| #elif USE_OLD_SDL | |||
| //Not implemented | |||
| #endif | |||
| } | |||
| void SdlAppDisplay::Enable() | |||
| { | |||
| #if USE_SDL | |||
| //TODO: Should we do that: ? | |||
| SDL_GL_MakeCurrent(data->m_window, data->m_glcontext); | |||
| #endif | |||
| #if (USE_SDL || USE_OLD_SDL) && defined USE_D3D9 | |||
| IDirect3DDevice9 *d3d_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); | |||
| HRESULT hr; | |||
| hr = d3d_dev->BeginScene(); | |||
| if (FAILED(hr)) | |||
| Abort(); | |||
| #endif | |||
| } | |||
| void SdlAppDisplay::Disable() | |||
| { | |||
| #if USE_SDL | |||
| SDL_GL_SwapWindow(data->m_window); | |||
| #elif USE_OLD_SDL && USE_D3D9 | |||
| hr = d3d_dev->EndScene(); | |||
| if (FAILED(hr)) | |||
| Abort(); | |||
| hr = d3d_dev->Present(nullptr, nullptr, nullptr, nullptr); | |||
| if (FAILED(hr)) | |||
| Abort(); | |||
| #elif USE_OLD_SDL | |||
| SDL_GL_SwapBuffers(); | |||
| #endif | |||
| } | |||
| #if USE_SDL | |||
| ptrdiff_t SceneDisplay::GetPhysicalCount() | |||
| { | |||
| return (ptrdiff_t)SDL_GetNumVideoDisplays(); | |||
| } | |||
| const char* SceneDisplay::GetPhysicalName(ptrdiff_t index) | |||
| { | |||
| return SDL_GetDisplayName((int)index); | |||
| } | |||
| #elif USE_OLD_SDL && USE_D3D9 | |||
| // Not implemented | |||
| #elif USE_OLD_SDL | |||
| // Not implemented | |||
| #endif | |||
| /* | |||
| * SDL App implementation class | |||
| */ | |||
| class SdlAppData | |||
| { | |||
| friend class SdlApp; | |||
| private: | |||
| #if USE_SDL | |||
| SDL_Window *m_window; | |||
| SDL_GLContext m_glcontext; | |||
| #elif USE_OLD_SDL | |||
| SDL_Surface *m_window; | |||
| #endif | |||
| }; | |||
| /* | |||
| * Public SdlApp class | |||
| */ | |||
| SdlApp::SdlApp(char const *title, ivec2 res, float fps) : | |||
| data(new SdlAppData()) | |||
| { | |||
| #if USE_SDL || USE_OLD_SDL | |||
| ivec2 window_size = res; | |||
| ivec2 screen_size = res; | |||
| /* Initialise everything */ | |||
| Ticker::Setup(fps); | |||
| Video::Setup(res); | |||
| Audio::Setup(2); | |||
| /* Autoreleased objects */ | |||
| @@ -145,46 +258,17 @@ void SdlApp::ShowPointer(bool show) | |||
| void SdlApp::Tick() | |||
| { | |||
| #if (USE_SDL || USE_OLD_SDL) && defined USE_D3D9 | |||
| IDirect3DDevice9 *d3d_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); | |||
| HRESULT hr; | |||
| hr = d3d_dev->BeginScene(); | |||
| if (FAILED(hr)) | |||
| Abort(); | |||
| #endif | |||
| /* Tick the renderer, show the frame and clamp to desired framerate. */ | |||
| Ticker::TickDraw(); | |||
| #if USE_SDL | |||
| SDL_GL_SwapWindow(data->m_window); | |||
| #elif USE_OLD_SDL && USE_D3D9 | |||
| hr = d3d_dev->EndScene(); | |||
| if (FAILED(hr)) | |||
| Abort(); | |||
| hr = d3d_dev->Present(nullptr, nullptr, nullptr, nullptr); | |||
| if (FAILED(hr)) | |||
| Abort(); | |||
| #elif USE_OLD_SDL | |||
| SDL_GL_SwapBuffers(); | |||
| #endif | |||
| } | |||
| SdlApp::~SdlApp() | |||
| { | |||
| #if USE_SDL | |||
| if (data->m_window) | |||
| { | |||
| SDL_GL_DeleteContext(data->m_glcontext); | |||
| SDL_DestroyWindow(data->m_window); | |||
| } | |||
| SDL_Quit(); | |||
| #elif USE_OLD_SDL | |||
| if (data->m_window) | |||
| SDL_FreeSurface(data->m_window); | |||
| SDL_Quit(); | |||
| #endif | |||
| delete data; | |||
| } | |||
| @@ -20,6 +20,28 @@ | |||
| namespace lol | |||
| { | |||
| //----------------------------------------------------------------------------- | |||
| class SdlAppDisplayData; | |||
| class SdlAppDisplay | |||
| { | |||
| friend class ApplicationDisplayData; | |||
| public: | |||
| SdlAppDisplay(char const *title, ivec2 resolution); | |||
| virtual ~SdlAppDisplay(); | |||
| protected: | |||
| void SetResolution(ivec2 resolution); | |||
| void SetPosition(ivec2 position); | |||
| void Enable(); | |||
| void Disable(); | |||
| private: | |||
| SdlAppDisplayData *data; | |||
| }; | |||
| //----------------------------------------------------------------------------- | |||
| class SdlAppData; | |||
| class SdlApp | |||
| @@ -60,7 +60,7 @@ void XboxApp::Tick() | |||
| Ticker::TickDraw(); | |||
| #if defined _XBOX | |||
| D3DDevice *d3d_dev = (D3DDevice *)g_renderer->GetDevice(); | |||
| D3DDevice *d3d_dev = (D3DDevice *)Renderer::Get()->GetDevice(); | |||
| d3d_dev->Present(nullptr, nullptr, nullptr, nullptr); | |||
| #endif | |||
| } | |||
| @@ -46,8 +46,45 @@ struct Tile | |||
| int id, o; | |||
| }; | |||
| //----------------------------------------------------------------------------- | |||
| static array<SceneDisplay*> m_scene_displays; | |||
| /* | |||
| * Scene implementation class | |||
| * Public SceneDisplay class | |||
| */ | |||
| void SceneDisplay::Add(SceneDisplay* display) | |||
| { | |||
| m_scene_displays << display; | |||
| } | |||
| ptrdiff_t SceneDisplay::GetCount() | |||
| { | |||
| return m_scene_displays.count(); | |||
| } | |||
| SceneDisplay* SceneDisplay::GetDisplay(ptrdiff_t index) | |||
| { | |||
| ASSERT(0 <= index && index < m_scene_displays.count()); | |||
| return m_scene_displays[index]; | |||
| } | |||
| void SceneDisplay::DestroyAll() | |||
| { | |||
| for (SceneDisplay* display : m_scene_displays) | |||
| delete display; | |||
| m_scene_displays.Empty(); | |||
| } | |||
| /* ------------------------------------------------ */ | |||
| void SceneDisplay::Enable() | |||
| { | |||
| //TODO: PROFILER STUFF | |||
| } | |||
| void SceneDisplay::Disable() | |||
| { | |||
| //TODO: PROFILER STUFF | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| /* | |||
| * Primitive implementation class | |||
| */ | |||
| void PrimitiveSource::Render(Scene& scene) { UNUSED(scene); } | |||
| void PrimitiveRenderer::Render(Scene& scene, PrimitiveSource* primitive) | |||
| @@ -56,10 +93,10 @@ void PrimitiveRenderer::Render(Scene& scene, PrimitiveSource* primitive) | |||
| UNUSED(primitive); | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| /* | |||
| * Scene implementation class | |||
| */ | |||
| class SceneData | |||
| { | |||
| friend class Scene; | |||
| @@ -78,12 +115,15 @@ private: | |||
| static uint64_t m_used_id; | |||
| uint64_t m_mask_id = 0; | |||
| /* New scenegraph */ | |||
| array<PrimitiveSource*> m_primitives; | |||
| /* Primitives are shared by all scenes. | |||
| /* Scene display: if none has been set to the scene, | |||
| * the default one created by the app will be used */ | |||
| SceneDisplay* m_display = nullptr; | |||
| /* Sources are shared by all scenes. | |||
| * Renderers are scene-dependent. They get the primitive in the identical slot to render with the given scene | |||
| * Primitives and renderers will be kept until: | |||
| * - Updated by entity | |||
| * - Marked Fire&Forget | |||
| * - Scene is destroyed */ | |||
| map<uintptr_t, array<PrimitiveRenderer*> > m_prim_renderers; | |||
| static map<uintptr_t, array<PrimitiveSource*> > m_prim_sources; | |||
| @@ -273,16 +313,6 @@ void Scene::Reset() | |||
| data->m_tile_bufs.Empty(); | |||
| data->m_lights.Empty(); | |||
| for (int i = 0; i < data->m_primitives.count(); i++) | |||
| delete data->m_primitives[i]; | |||
| data->m_primitives.Empty(); | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| void Scene::AddPrimitive(PrimitiveSource* primitive) | |||
| { | |||
| data->m_primitives.Push(primitive); | |||
| } | |||
| //---- Primitive source stuff ------------------------------------------------- | |||
| @@ -481,17 +511,35 @@ array<Light *> const &Scene::GetLights() | |||
| return data->m_lights; | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| void Scene::SetDisplay(SceneDisplay* display) | |||
| { | |||
| data->m_display = display; | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| void Scene::EnableDisplay() | |||
| { | |||
| //If no display has been set, use the default one | |||
| if (!data->m_display) | |||
| SetDisplay(SceneDisplay::GetDisplay()); | |||
| data->m_display->Enable(); | |||
| } | |||
| void Scene::DisableDisplay() | |||
| { | |||
| ASSERT(data->m_display); | |||
| data->m_display->Disable(); | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| void Scene::RenderPrimitives() | |||
| { | |||
| ASSERT(!!data, "Trying to access a non-ready scene"); | |||
| /* TODO: this should be the main entry for rendering of all | |||
| * primitives found in the scene graph. When we have one. */ | |||
| for (PrimitiveSource* p : data->m_primitives) | |||
| { | |||
| p->Render(*this); | |||
| } | |||
| /* FIXME: Temp fix for mesh having no render context*/ | |||
| RenderContext rc; | |||
| rc.SetCullMode(CullMode::Clockwise); | |||
| rc.SetDepthFunc(DepthFunc::LessOrEqual); | |||
| /* new scenegraph */ | |||
| array<uintptr_t> keys = data->m_prim_renderers.keys(); | |||
| @@ -27,8 +27,6 @@ | |||
| namespace lol | |||
| { | |||
| class SceneData; | |||
| //----------------------------------------------------------------------------- | |||
| class PrimitiveSource | |||
| { | |||
| @@ -56,6 +54,41 @@ private: | |||
| }; | |||
| //----------------------------------------------------------------------------- | |||
| class SceneDisplayData; | |||
| class SceneDisplay | |||
| { | |||
| friend class Scene; | |||
| public: | |||
| SceneDisplay() { } | |||
| virtual ~SceneDisplay() { } | |||
| /* pos/size/... methods */ | |||
| virtual void SetResolution(ivec2 resolution) { } | |||
| virtual void SetPosition(ivec2 position) { } | |||
| /* TODO: Should that be there or in Video ? */ | |||
| static void Add(SceneDisplay* display); | |||
| static ptrdiff_t GetCount(); | |||
| static SceneDisplay* GetDisplay(ptrdiff_t index = 0); | |||
| static void DestroyAll(); | |||
| /* Implement these in the platform section */ | |||
| static ptrdiff_t GetPhysicalCount(); | |||
| static const char* GetPhysicalName(ptrdiff_t index = 0); | |||
| protected: | |||
| virtual void Enable(); | |||
| virtual void Disable(); | |||
| private: | |||
| SceneDisplayData *data; | |||
| }; | |||
| //----------------------------------------------------------------------------- | |||
| class SceneData; | |||
| class Scene | |||
| { | |||
| friend class Video; | |||
| @@ -90,9 +123,6 @@ public: | |||
| void Reset(); | |||
| /* New scenegraph */ | |||
| void AddPrimitive(class PrimitiveSource* primitive); | |||
| /* ============================== */ | |||
| # define _KEY_IDX (uintptr_t)key /* TOUKY: I don't like that. hash should be fixed to handle these custom stuff */ | |||
| /* ============================== */ | |||
| @@ -211,6 +241,11 @@ public: | |||
| void AddLight(Light *light); | |||
| array<Light *> const &GetLights(); | |||
| /* === Render stuff === */ | |||
| void SetDisplay(SceneDisplay* display); | |||
| void EnableDisplay(); | |||
| void DisableDisplay(); | |||
| void RenderPrimitives(); | |||
| void RenderTiles(); | |||
| void RenderLines(float seconds); | |||
| @@ -428,7 +428,6 @@ void TickerData::DrawThreadTick() | |||
| case Entity::DRAWGROUP_BEGIN: | |||
| for (ptrdiff_t i = 0; i < Scene::GetCount(); i++) | |||
| Scene::GetScene(i).Reset(); | |||
| g_renderer->Clear(ClearMask::All); | |||
| break; | |||
| default: | |||
| break; | |||
| @@ -469,7 +468,9 @@ void TickerData::DrawThreadTick() | |||
| Scene& scene = Scene::GetScene(idx); | |||
| /* Enable display */ | |||
| //scene.EnableDisplay(); //TODO | |||
| scene.EnableDisplay(); | |||
| Renderer::Get(idx)->Clear(ClearMask::All); | |||
| /* Do the render step */ | |||
| scene.RenderPrimitives(); | |||
| @@ -477,7 +478,7 @@ void TickerData::DrawThreadTick() | |||
| scene.RenderLines(data->deltatime); | |||
| /* Disable display */ | |||
| //scene.DisableDisplay(); //TODO | |||
| scene.DisableDisplay(); | |||
| } | |||
| Profiler::Stop(Profiler::STAT_TICK_DRAW); | |||
| @@ -45,7 +45,8 @@ DebugRenderMode VideoData::render_mode = DebugRenderMode::Default; | |||
| void Video::Setup(ivec2 size) | |||
| { | |||
| g_renderer = new Renderer(size); | |||
| //g_renderer = new Renderer(size); | |||
| Renderer::AddNew(size); | |||
| Scene::AddNew(size); | |||
| /* Initialise reasonable scene default properties */ | |||
| @@ -95,9 +96,10 @@ DebugRenderMode Video::GetDebugRenderMode() | |||
| void Video::Destroy() | |||
| { | |||
| Scene::DestroyAll(); | |||
| Renderer::DestroyAll(); | |||
| delete g_renderer; | |||
| g_renderer = nullptr; | |||
| //delete g_renderer; | |||
| //g_renderer = nullptr; | |||
| } | |||
| void Video::Capture(uint32_t *buffer) | |||
| @@ -132,7 +134,7 @@ void Video::Capture(uint32_t *buffer) | |||
| ivec2 Video::GetSize() | |||
| { | |||
| return g_renderer->GetViewport().extent(); | |||
| return Renderer::Get()->GetViewport().extent(); | |||
| } | |||
| } /* namespace lol */ | |||