diff --git a/build/Lol (vs2013).sln b/build/Lol (vs2013).sln index b95729d2..e07b8717 100644 --- a/build/Lol (vs2013).sln +++ b/build/Lol (vs2013).sln @@ -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 diff --git a/doc/samples/btphystest.cpp b/doc/samples/btphystest.cpp index 2088ed98..caeda754 100644 --- a/doc/samples/btphystest.cpp +++ b/doc/samples/btphystest.cpp @@ -307,7 +307,7 @@ void BtPhysTest::TickGame(float seconds) if (!m_init_status) { - if (g_renderer) + if (Renderer::GetCount()) InitApp(); return; } diff --git a/doc/samples/meshviewer/meshviewer.cpp b/doc/samples/meshviewer/meshviewer.cpp index 5ff3168a..8f147f6b 100644 --- a/doc/samples/meshviewer/meshviewer.cpp +++ b/doc/samples/meshviewer/meshviewer.cpp @@ -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 diff --git a/doc/tutorial/02_cube.cpp b/doc/tutorial/02_cube.cpp index 5f5cd5f8..444d630d 100644 --- a/doc/tutorial/02_cube.cpp +++ b/doc/tutorial/02_cube.cpp @@ -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); diff --git a/doc/tutorial/05_easymesh.cpp b/doc/tutorial/05_easymesh.cpp index 10e79a9d..05bf8158 100644 --- a/doc/tutorial/05_easymesh.cpp +++ b/doc/tutorial/05_easymesh.cpp @@ -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++) diff --git a/doc/tutorial/06_sprite.cpp b/doc/tutorial/06_sprite.cpp index a87680b8..3dddf02c 100644 --- a/doc/tutorial/06_sprite.cpp +++ b/doc/tutorial/06_sprite.cpp @@ -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; } diff --git a/doc/tutorial/07_input.cpp b/doc/tutorial/07_input.cpp index cf99581e..75f31b60 100644 --- a/doc/tutorial/07_input.cpp +++ b/doc/tutorial/07_input.cpp @@ -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); diff --git a/doc/tutorial/08_fbo.cpp b/doc/tutorial/08_fbo.cpp index 09a545ef..3385f13d 100644 --- a/doc/tutorial/08_fbo.cpp +++ b/doc/tutorial/08_fbo.cpp @@ -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(); diff --git a/doc/tutorial/12_voronoi.cpp b/doc/tutorial/12_voronoi.cpp index a22184bb..a43c3ec2 100644 --- a/doc/tutorial/12_voronoi.cpp +++ b/doc/tutorial/12_voronoi.cpp @@ -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 ?? diff --git a/src/application/application.cpp b/src/application/application.cpp index 43e2fa8c..8bab0801 100644 --- a/src/application/application.cpp +++ b/src/application/application.cpp @@ -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"); } diff --git a/src/application/application.h b/src/application/application.h index 502182df..64fa7d66 100644 --- a/src/application/application.h +++ b/src/application/application.h @@ -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 diff --git a/src/camera.cpp b/src/camera.cpp index 12f2ef81..7b4edb97 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -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; diff --git a/src/debug/lines.cpp b/src/debug/lines.cpp index 4a98a004..d49b2d98 100644 --- a/src/debug/lines.cpp +++ b/src/debug/lines.cpp @@ -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) diff --git a/src/gpu/framebuffer.cpp b/src/gpu/framebuffer.cpp index 8f8189ff..ef90e87b 100644 --- a/src/gpu/framebuffer.cpp +++ b/src/gpu/framebuffer.cpp @@ -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; } diff --git a/src/gpu/indexbuffer.cpp b/src/gpu/indexbuffer.cpp index 287fea38..d01b607d 100644 --- a/src/gpu/indexbuffer.cpp +++ b/src/gpu/indexbuffer.cpp @@ -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, diff --git a/src/gpu/rendercontext.cpp b/src/gpu/rendercontext.cpp index 224ef423..316bb80a 100644 --- a/src/gpu/rendercontext.cpp +++ b/src/gpu/rendercontext.cpp @@ -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 */ diff --git a/src/gpu/renderer.cpp b/src/gpu/renderer.cpp index 53bae2a5..04ced423 100644 --- a/src/gpu/renderer.cpp +++ b/src/gpu/renderer.cpp @@ -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 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 */ diff --git a/src/gpu/shader.cpp b/src/gpu/shader.cpp index 4c61bd92..aec27a18 100644 --- a/src/gpu/shader.cpp +++ b/src/gpu/shader.cpp @@ -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", diff --git a/src/gpu/texture.cpp b/src/gpu/texture.cpp index 41348305..08fe5916 100644 --- a/src/gpu/texture.cpp +++ b/src/gpu/texture.cpp @@ -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 diff --git a/src/gpu/vertexbuffer.cpp b/src/gpu/vertexbuffer.cpp index 796f8aa5..5f53d4b3 100644 --- a/src/gpu/vertexbuffer.cpp +++ b/src/gpu/vertexbuffer.cpp @@ -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, diff --git a/src/lol/gpu/renderer.h b/src/lol/gpu/renderer.h index 0e737720..1b12a4e0 100644 --- a/src/lol/gpu/renderer.h +++ b/src/lol/gpu/renderer.h @@ -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 */ diff --git a/src/lolcore.vcxproj.filters b/src/lolcore.vcxproj.filters index 7f308484..aa32d427 100644 --- a/src/lolcore.vcxproj.filters +++ b/src/lolcore.vcxproj.filters @@ -97,6 +97,9 @@ {3bd5fe6f-c9cd-45f3-98a9-958d86d415e8} + + {869f0b25-469b-4b06-a2a2-325449fc868f} + @@ -225,9 +228,6 @@ ... - - ... - ... @@ -240,18 +240,12 @@ ... - - ... - ... ... - - ... - ... @@ -425,6 +419,15 @@ mesh + + display + + + display + + + display + @@ -577,9 +580,6 @@ ... - - ... - ... @@ -589,12 +589,6 @@ ... - - ... - - - ... - ... @@ -792,6 +786,15 @@ mesh + + display + + + display + + + display + diff --git a/src/lolimgui.cpp b/src/lolimgui.cpp index c2adfda2..b56ba7f3 100644 --- a/src/lolimgui.cpp +++ b/src/lolimgui.cpp @@ -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) diff --git a/src/platform/sdl/sdlapp.cpp b/src/platform/sdl/sdlapp.cpp index 1f4ad992..1ddf23a6 100644 --- a/src/platform/sdl/sdlapp.cpp +++ b/src/platform/sdl/sdlapp.cpp @@ -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; } diff --git a/src/platform/sdl/sdlapp.h b/src/platform/sdl/sdlapp.h index e34a64ae..89029112 100644 --- a/src/platform/sdl/sdlapp.h +++ b/src/platform/sdl/sdlapp.h @@ -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 diff --git a/src/platform/xbox/xboxapp.cpp b/src/platform/xbox/xboxapp.cpp index d9b6e818..353aa9ea 100644 --- a/src/platform/xbox/xboxapp.cpp +++ b/src/platform/xbox/xboxapp.cpp @@ -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 } diff --git a/src/scene.cpp b/src/scene.cpp index fc8f7f7f..c182c7c9 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -46,8 +46,45 @@ struct Tile int id, o; }; +//----------------------------------------------------------------------------- +static array 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 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 > m_prim_renderers; static map > 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 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 keys = data->m_prim_renderers.keys(); diff --git a/src/scene.h b/src/scene.h index ec39d3a8..5bde8bc6 100644 --- a/src/scene.h +++ b/src/scene.h @@ -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 const &GetLights(); + /* === Render stuff === */ + void SetDisplay(SceneDisplay* display); + void EnableDisplay(); + void DisableDisplay(); + void RenderPrimitives(); void RenderTiles(); void RenderLines(float seconds); diff --git a/src/ticker.cpp b/src/ticker.cpp index f6d4885a..20395511 100644 --- a/src/ticker.cpp +++ b/src/ticker.cpp @@ -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); diff --git a/src/video.cpp b/src/video.cpp index a5d1c504..266a3467 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -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 */