From 5635cd1d690b6778211bf050a30b54840942f76f Mon Sep 17 00:00:00 2001 From: kotofyt Date: Wed, 6 Aug 2025 00:12:36 +0300 Subject: [PATCH] improved lots of stuff --- build.cpp | 2 + engine/engine.cpp | 2 - engine/filesystem.cpp | 9 +-- engine/filesystem_libc.cpp | 3 +- engine/filesystem_pak.cpp | 3 +- engine/funnyformat.cpp | 9 +++ engine/gamewindow_sdl.cpp | 8 +-- .../vulkan_machine.h => engine/jsonformat.cpp | 0 fpc/build.cpp | 6 ++ fpc/library/clang/c.cpp | 35 ++++++++-- fpc/library/clang/c_libclang.cpp | 64 +++++++++++++++++++ fpc/library/clang/c_libclang.h | 17 +++++ fpc/library/clang/ld.cpp | 50 ++++++++++++++- fpc/public/ld.h | 2 + materialsystem/__build.cpp | 31 +++++++++ materialsystem/vulkan/materialsystem.cpp | 40 ++++++++++++ materialsystem/vulkan/vulkan_state.cpp | 0 materialsystem/vulkan/vulkan_state.h | 0 public/funnyformat.h | 17 ++++- public/ifilesystem.h | 4 -- public/igamewindow.h | 3 - public/jsonformat.h | 0 public/materialsystem/imaterialsystem.h | 10 ++- public/tier2/fileformats/ini.h | 30 +++++++++ public/tier2/fileformats/json.h | 0 tier2/fileformats/ini.cpp | 41 ++++++++++++ tier2/fileformats/json.cpp | 0 27 files changed, 348 insertions(+), 38 deletions(-) create mode 100644 engine/funnyformat.cpp rename materialsystem/vulkan/vulkan_machine.h => engine/jsonformat.cpp (100%) create mode 100644 fpc/library/clang/c_libclang.cpp create mode 100644 fpc/library/clang/c_libclang.h create mode 100644 materialsystem/__build.cpp create mode 100644 materialsystem/vulkan/vulkan_state.cpp create mode 100644 materialsystem/vulkan/vulkan_state.h create mode 100644 public/jsonformat.h create mode 100644 public/tier2/fileformats/ini.h create mode 100644 public/tier2/fileformats/json.h create mode 100644 tier2/fileformats/ini.cpp create mode 100644 tier2/fileformats/json.cpp diff --git a/build.cpp b/build.cpp index 6f7e7ff..79f9659 100644 --- a/build.cpp +++ b/build.cpp @@ -75,6 +75,8 @@ CUtlString client_lib; #include "game/server/__build.cpp" #include "game/client/__build.cpp" +#include "materialsystem/__build.cpp" + #include "rapier/__build.cpp" #include "engine/__build.cpp" diff --git a/engine/engine.cpp b/engine/engine.cpp index 59a4aae..2135997 100644 --- a/engine/engine.cpp +++ b/engine/engine.cpp @@ -10,10 +10,8 @@ extern "C" void FunnyMain( int argc, char **argv ) { CommandLine()->CreateCommandLine(argc, argv); - filesystem = (IFileSystem*)CreateInterface(FILESYSTEM_INTERFACE_NAME, NULL); filesystem->Init(); - gamewindow = (IGameWindow*)CreateInterface(GAME_WINDOW_INTERFACE_NAME, NULL); gamewindow->Init(); ServerGameDLL()->Init(); diff --git a/engine/filesystem.cpp b/engine/filesystem.cpp index c75cb98..25d627a 100644 --- a/engine/filesystem.cpp +++ b/engine/filesystem.cpp @@ -32,9 +32,7 @@ class CFileSystem : public IFileSystem { public: virtual void Init() override { - filesystem_backend = (IFileSystem*)CreateInterface(FILESYSTEM_BACKEND_INTERFACE_NAME, NULL); filesystem_backend->Init(); - filesystem_pak = (IFileSystem*)CreateInterface(FILESYSTEM_PAK_INTERFACE_NAME, NULL); filesystem_pak->Init(); }; virtual void Shutdown() override { @@ -79,8 +77,5 @@ public: } }; -IFileSystem *filesystem; -IFileSystem *filesystem_backend; -IFileSystem *filesystem_pak; - -EXPOSE_INTERFACE(CFileSystem, IFileSystem, FILESYSTEM_INTERFACE_NAME); +CFileSystem g_fileSystem; +IFileSystem *filesystem = &g_fileSystem; diff --git a/engine/filesystem_libc.cpp b/engine/filesystem_libc.cpp index 62489c5..1718620 100644 --- a/engine/filesystem_libc.cpp +++ b/engine/filesystem_libc.cpp @@ -91,4 +91,5 @@ public: } }; -EXPOSE_INTERFACE(CLIBCFileSystem, IFileSystem, FILESYSTEM_BACKEND_INTERFACE_NAME); +CLIBCFileSystem g_libcFileSystem; +IFileSystem *filesystem_backend = &g_libcFileSystem; diff --git a/engine/filesystem_pak.cpp b/engine/filesystem_pak.cpp index bbec35a..28029fc 100644 --- a/engine/filesystem_pak.cpp +++ b/engine/filesystem_pak.cpp @@ -78,4 +78,5 @@ public: } }; -EXPOSE_INTERFACE(CPAKFileSystem, IFileSystem, FILESYSTEM_PAK_INTERFACE_NAME); +CPAKFileSystem g_pakFileSystem; +IFileSystem *filesystem_pak = &g_pakFileSystem; diff --git a/engine/funnyformat.cpp b/engine/funnyformat.cpp new file mode 100644 index 0000000..7a8e308 --- /dev/null +++ b/engine/funnyformat.cpp @@ -0,0 +1,9 @@ +#include "funnyformat.h" + +class CFunnyFormatManager: public IFunnyFormatManager +{ + virtual FunnyFormatData_t ReadFile( IFileHandle *pHandle ) override; + virtual void WriteFile( IFileHandle *pHandle, FunnyFormatData_t data ) override; + virtual FunnyFormatData_t ReadBinaryFile( IFileHandle *pHandle ) override; + virtual void WriteBinaryFile( IFileHandle *pHandle, FunnyFormatData_t data ) override; +}; diff --git a/engine/gamewindow_sdl.cpp b/engine/gamewindow_sdl.cpp index 5f67c31..d77f18b 100644 --- a/engine/gamewindow_sdl.cpp +++ b/engine/gamewindow_sdl.cpp @@ -12,7 +12,6 @@ #include "SDL3/SDL_events.h" SDL_Window *g_pWindow; -IGameWindow *gamewindow; class CSDLGameWindow: public IGameWindow { @@ -22,6 +21,9 @@ public: virtual void UpdateWindow() override; }; +CSDLGameWindow g_sdlGameWindow; +IGameWindow *gamewindow = &g_sdlGameWindow; + void CSDLGameWindow::Init() { @@ -54,7 +56,3 @@ void CSDLGameWindow::UpdateWindow() } } } - - - -EXPOSE_INTERFACE(CSDLGameWindow, IGameWindow, GAME_WINDOW_INTERFACE_NAME); diff --git a/materialsystem/vulkan/vulkan_machine.h b/engine/jsonformat.cpp similarity index 100% rename from materialsystem/vulkan/vulkan_machine.h rename to engine/jsonformat.cpp diff --git a/fpc/build.cpp b/fpc/build.cpp index 4c1b5f1..00dd5e8 100644 --- a/fpc/build.cpp +++ b/fpc/build.cpp @@ -37,6 +37,10 @@ CUtlVector g_IncludeDirectories = { DECLARE_BUILD_STAGE(fpc) { + if (linker->IsLibraryExists("clang")) + g_CompiledFiles.AppendTail("library/clang/c_libclang.cpp"); + else + V_printf("Warning: to support included files libclang must be installed."); CProject_t compileProject = {}; LinkProject_t ldProject = {}; @@ -44,6 +48,8 @@ DECLARE_BUILD_STAGE(fpc) compileProject.files = g_CompiledFiles; compileProject.includeDirectories = g_IncludeDirectories; ldProject = ccompiler->Compile(&compileProject); + if (linker->IsLibraryExists("clang")) + ldProject.libraries.AppendTail("clang"); CUtlString outputProject = linker->Link(&ldProject); diff --git a/fpc/library/clang/c.cpp b/fpc/library/clang/c.cpp index 932fe5c..7ad6c28 100644 --- a/fpc/library/clang/c.cpp +++ b/fpc/library/clang/c.cpp @@ -1,9 +1,11 @@ #include "c.h" +#include "c_libclang.h" #include "helper.h" #include "obj.h" #include "target.h" #include "tier0/lib.h" #include "tier0/platform.h" +#include "tier1/commandline.h" #include "tier1/interface.h" #include "tier1/utlstring.h" #include "tier1/utlvector.h" @@ -26,14 +28,26 @@ public: EXPOSE_INTERFACE(CClangCompiler, ICCompiler, CLANG_C_COMPILER_INTERFACE_NAME); CUtlVector g_clangFiles; +IClangBackend *clangbackend = NULL; LinkProject_t CClangCompiler::Compile( CProject_t *pProject ) { + if (!clangbackend && CommandLine()->CheckParam("-experimental_header_include")) + clangbackend = (IClangBackend*)CreateInterface(CLANG_BACKEND_INTERFACE_NAME, NULL); + V_printf("CLANG: %p\n", clangbackend); + + if (pProject->m_szName == 0) + { + Plat_FatalErrorFunc("m_szName must be present\n"); + } + LinkProject_t proj = {}; proj.m_szName = pProject->m_szName; proj.m_target = pProject->m_target; proj.m_androidmanifest = pProject->m_androidmanifest; unsigned int hash = pProject->GenerateProjectHash(); + + // Get output directories for (auto &file: pProject->files) { CUtlString szTarget = pProject->m_target.GetTriplet(); @@ -42,12 +56,16 @@ LinkProject_t CClangCompiler::Compile( CProject_t *pProject ) szOutputDir = dirname(szOutputDir); filesystem2->MakeDirectory(szOutputDir); } + + // Run CC for (auto &file: pProject->files) { - CUtlVector args; V_printf(" CC %s\n", file.GetString()); + + CUtlVector args; CUtlString szTarget = pProject->m_target.GetTriplet(); CUtlString szCompiledTarget = szTarget; + bool bAreDependenciesUpdated = false; if (pProject->m_target.kernel == TARGET_KERNEL_ANDROID) { szCompiledTarget = CUtlString("%s%u", szTarget.GetString(), pProject->m_androidmanifest.m_nTargetVersion); @@ -57,11 +75,6 @@ LinkProject_t CClangCompiler::Compile( CProject_t *pProject ) args = { "-target", szCompiledTarget, - "-g", - "-c", - "-o", - szOutputFile, - file, }; if (!strcmp(Plat_GetExtension(file),"cpp")) args.AppendTail("-std=c++17"); @@ -106,9 +119,17 @@ LinkProject_t CClangCompiler::Compile( CProject_t *pProject ) args.AppendTail("-include"); args.AppendTail(include); } - if (!filesystem2->ShouldRecompile(file, szOutputFile)) + + if (clangbackend) + bAreDependenciesUpdated = clangbackend->AreFileDependenciesUpdated(file, szOutputFile, args); + if (!filesystem2->ShouldRecompile(file, szOutputFile) && !bAreDependenciesUpdated) goto skipcompile; + args.AppendTail("-c"); + args.AppendTail("-o"); + args.AppendTail(szOutputFile); + args.AppendTail(file); + if (pProject->m_target.kernel == TARGET_KERNEL_ANDROID) { if (!pProject->m_target.szSysroot) diff --git a/fpc/library/clang/c_libclang.cpp b/fpc/library/clang/c_libclang.cpp new file mode 100644 index 0000000..455cc8e --- /dev/null +++ b/fpc/library/clang/c_libclang.cpp @@ -0,0 +1,64 @@ + +#include "c_libclang.h" +#include "helper.h" +#include "tier1/interface.h" + +#include "clang-c/Index.h" +#include +#include + +class CClangBackend: public IClangBackend +{ +public: + virtual bool AreFileDependenciesUpdated( CUtlString szFile, CUtlString szOutputFile, CUtlVector arguments ) override; + + bool bAnyOutdated; + CUtlString szCurrentFile; + +private: + static void InclusionVisitor( CXFile included_file, CXSourceLocation *include_stack, unsigned include_len, CXClientData client_data ); +}; + +EXPOSE_INTERFACE(CClangBackend, IClangBackend, CLANG_BACKEND_INTERFACE_NAME); + +bool CClangBackend::AreFileDependenciesUpdated( CUtlString szFile, CUtlString szOutputFile, CUtlVector arguments ) +{ + szCurrentFile = szOutputFile; + bAnyOutdated = false; + + CUtlVector cArguments = {}; + for (auto &arg: arguments) + cArguments.AppendTail(arg); + + CXIndex index = clang_createIndex(0, 0); + CXTranslationUnit tu; + CXErrorCode err = clang_parseTranslationUnit2(index, szFile.GetString(), cArguments.GetData(), cArguments.GetSize(), NULL, 0, 0, &tu); + + if (err != CXError_Success) { + printf("clang_parseTranslationUnit2 failed with error code %d\n", err); + return false; + } + + clang_getInclusions(tu, CClangBackend::InclusionVisitor, NULL); + + clang_disposeTranslationUnit(tu); + clang_disposeIndex(index); + return bAnyOutdated; +} + +void CClangBackend::InclusionVisitor( CXFile included_file, CXSourceLocation *include_stack, unsigned include_len, CXClientData client_data ) +{ + if (((CClangBackend*)clangbackend)->bAnyOutdated) + return; + CXString filename = clang_getFileName(included_file); + + bool bUpdate = + filesystem2->ShouldRecompile(clang_getCString(filename), ((CClangBackend*)clangbackend)->szCurrentFile); + if (bUpdate) + { + ((CClangBackend*)clangbackend)->bAnyOutdated = true; + } + + clang_disposeString(filename); +} + diff --git a/fpc/library/clang/c_libclang.h b/fpc/library/clang/c_libclang.h new file mode 100644 index 0000000..fd6eac7 --- /dev/null +++ b/fpc/library/clang/c_libclang.h @@ -0,0 +1,17 @@ +#ifndef C_LIBCLANG_H +#define C_LIBCLANG_H + +#include "tier0/platform.h" +#include "tier1/utlstring.h" + +#define CLANG_BACKEND_INTERFACE_NAME "ClangBackend001" + +abstract_class IClangBackend +{ +public: + virtual bool AreFileDependenciesUpdated( CUtlString szFile, CUtlString szOutputFile, CUtlVector arguments ) = 0; +}; + +extern IClangBackend *clangbackend; + +#endif diff --git a/fpc/library/clang/ld.cpp b/fpc/library/clang/ld.cpp index 18d2102..6018d9c 100644 --- a/fpc/library/clang/ld.cpp +++ b/fpc/library/clang/ld.cpp @@ -10,12 +10,19 @@ class CClangLinker : public ILinker { public: virtual CUtlString Link( LinkProject_t *pProject ) override; + virtual bool IsLibraryExists( CUtlString szName ) override; }; EXPOSE_INTERFACE(CClangLinker, ILinker, CLANG_LINKER_INTERFACE_NAME); CUtlString CClangLinker::Link( LinkProject_t *pProject ) { + if (pProject->m_szName == 0) + { + Plat_FatalErrorFunc("m_szName must be present\n"); + } + + // Find a name for the file CUtlString szFileName; unsigned int hash = pProject->GenerateProjectHash(); switch(pProject->linkType) @@ -66,11 +73,14 @@ CUtlString CClangLinker::Link( LinkProject_t *pProject ) for (auto object: pProject->objects) args.AppendTail(object.m_szObjectFile); runner->Run("ar", args); - runner->Wait(); + runner->Wait(); + } else { V_printf(" LINK %s\n", pProject->m_szName.GetString()); bool shouldRecompile = false; CUtlVector args; + + // Check if any of the files have changed for (auto object: pProject->objects) { if (filesystem2->ShouldRecompile(object.m_szObjectFile,szOutputFile)) @@ -81,6 +91,8 @@ CUtlString CClangLinker::Link( LinkProject_t *pProject ) } if (!shouldRecompile) goto compiled; + + CUtlString szTarget = pProject->m_target.GetTriplet(); CUtlString szCompiledTarget = szTarget; if (pProject->m_target.kernel == TARGET_KERNEL_ANDROID) @@ -93,14 +105,20 @@ CUtlString CClangLinker::Link( LinkProject_t *pProject ) "-target", szCompiledTarget, }; + + // Disable stdlib if (pProject->bNoStdLib) { args.AppendTail("-nostdlib"); } + + // Sysroots if (pProject->m_target.kernel == TARGET_KERNEL_DARWIN) { args.AppendTail("-isysroot"); args.AppendTail("/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"); + + // Shouldn't be here args.AppendTail("-Wl,-export_dynamic"); args.AppendTail("-undefined"); args.AppendTail("dynamic_lookup"); @@ -109,21 +127,26 @@ CUtlString CClangLinker::Link( LinkProject_t *pProject ) { args.AppendTail("-isysroot"); args.AppendTail("/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk"); - args.AppendTail("-miphoneos-version-min=18.0 "); + // Shouldn't be here ? args.AppendTail("-fembed-bitcode"); args.AppendTail("-Wl,-rpath,@executable_path"); args.AppendTail("-Wl,-all_load"); args.AppendTail("-w"); + args.AppendTail("-miphoneos-version-min=18.0 "); } else if (pProject->m_target.kernel == TARGET_KERNEL_ANDROID) { args.AppendTail(CUtlString("--sysroot=%s/sysroot", pProject->m_target.szSysroot)); + + // Shouldn't be here ? args.AppendTail("-static-libstdc++"); } else if (pProject->m_target.szSysroot) { args.AppendTail(CUtlString("--sysroot=%s", pProject->m_target.szSysroot)); } + + // Magic for the systems if (pProject->m_target.kernel == TARGET_KERNEL_WINDOWS) { args.AppendTail("-fuse-ld=ld"); @@ -132,21 +155,30 @@ CUtlString CClangLinker::Link( LinkProject_t *pProject ) { args.AppendTail("-rdynamic"); } + + // Dynamic libraries + // Android can't run executables if (pProject->linkType == ELINK_DYNAMIC_LIBRARY || pProject->m_target.kernel == TARGET_KERNEL_ANDROID) { args.AppendTail("-shared"); } + + // All the objects if (pProject->m_target.kernel == TARGET_KERNEL_WINDOWS || pProject->m_target.kernel == TARGET_KERNEL_LINUX || pProject->m_target.kernel == TARGET_KERNEL_ANDROID) args.AppendTail("-Wl,--whole-archive"); for (auto object: pProject->objects) args.AppendTail(object.m_szObjectFile); if (pProject->m_target.kernel == TARGET_KERNEL_WINDOWS || pProject->m_target.kernel == TARGET_KERNEL_LINUX || pProject->m_target.kernel == TARGET_KERNEL_ANDROID) args.AppendTail("-Wl,--no-whole-archive"); + + // Libraries for (auto lib: pProject->libraries) { args.AppendTail("-l"); args.AppendTail(lib); } + + // Apple frameworks for (auto &directory: pProject->frameworkDirectories) { args.AppendTail("-F"); @@ -157,10 +189,12 @@ CUtlString CClangLinker::Link( LinkProject_t *pProject ) args.AppendTail("-framework"); args.AppendTail(framework); } + + // Android SDK requires sysroot if (pProject->m_target.kernel == TARGET_KERNEL_ANDROID) { if (!pProject->m_target.szSysroot) - Plat_FatalErrorFunc("-sysroot must be specified for android\n"); + Plat_FatalErrorFunc("szSysroot must be specified for android\n"); runner->Run(CUtlString("%s/bin/clang++",pProject->m_target.szSysroot), args); } @@ -173,3 +207,13 @@ CUtlString CClangLinker::Link( LinkProject_t *pProject ) compiled: return szOutputFile; }; + +bool CClangLinker::IsLibraryExists( CUtlString szName ) +{ + szName = CUtlString("lib%s.so", szName.GetString()); + void *pLib = Plat_LoadLibrary(szName.GetString()); + if (!pLib) + return false; + Plat_UnloadLibrary(pLib); + return true; +} diff --git a/fpc/public/ld.h b/fpc/public/ld.h index 35d637c..c0dca19 100644 --- a/fpc/public/ld.h +++ b/fpc/public/ld.h @@ -78,6 +78,8 @@ public: // Links project virtual CUtlString Link( LinkProject_t *pProject ) = 0; + + virtual bool IsLibraryExists( CUtlString szName ) = 0; }; extern ILinker *linker; diff --git a/materialsystem/__build.cpp b/materialsystem/__build.cpp new file mode 100644 index 0000000..131d013 --- /dev/null +++ b/materialsystem/__build.cpp @@ -0,0 +1,31 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" +#include "tier1/commandline.h" + +CUtlVector MaterialSystem_CompiledFiles = { + "materialsystem/vulkan/material.cpp", + "materialsystem/vulkan/materialsystem.cpp", + "materialsystem/vulkan/shader.cpp", + "materialsystem/vulkan/vulkan_state.cpp", +}; +CUtlString material_lib; + +DECLARE_BUILD_STAGE(MaterialSystem) +{ + CProject_t compileProject = {}; + LinkProject_t ldProject = {}; + + compileProject.m_szName = "MaterialSystem"; + compileProject.files = MaterialSystem_CompiledFiles; + compileProject.includeDirectories = all_IncludeDirectories; + compileProject.bFPIC = true; + ldProject = ccompiler->Compile(&compileProject); + ldProject.linkType = ELINK_STATIC_LIBRARY; + + CUtlString outputProject = linker->Link(&ldProject); + material_lib = outputProject; + + return 0; +} diff --git a/materialsystem/vulkan/materialsystem.cpp b/materialsystem/vulkan/materialsystem.cpp index e69de29..36c0361 100644 --- a/materialsystem/vulkan/materialsystem.cpp +++ b/materialsystem/vulkan/materialsystem.cpp @@ -0,0 +1,40 @@ +#include "materialsystem/imaterialsystem.h" + +class CVkRenderingContext +{ + +}; + +CVkRenderingContext g_vkRenderingContext; + +class CVkMaterialSystem: public IMaterialSystem +{ +public: + virtual void Init(); + virtual void Frame( float fDeltaTime ); + virtual void Shutdown(); + + IRenderContext *GetRenderContext(); +}; + +CVkMaterialSystem g_vkMaterialSystem; +IMaterialSystem *materials = &g_vkMaterialSystem; + + +void CVkMaterialSystem::Init() +{ + +} + +void CVkMaterialSystem::Frame( float fDeltaTime ) +{ + +} + +void CVkMaterialSystem::Shutdown() +{ + +} + + + diff --git a/materialsystem/vulkan/vulkan_state.cpp b/materialsystem/vulkan/vulkan_state.cpp new file mode 100644 index 0000000..e69de29 diff --git a/materialsystem/vulkan/vulkan_state.h b/materialsystem/vulkan/vulkan_state.h new file mode 100644 index 0000000..e69de29 diff --git a/public/funnyformat.h b/public/funnyformat.h index db89cd7..1611ac7 100644 --- a/public/funnyformat.h +++ b/public/funnyformat.h @@ -7,20 +7,31 @@ struct FunnyFormatParameter_t { - const char *szName; - uint32_t nDataSize; - void *pData; + const char *m_szName; + uint32_t m_nDataSize; + void *m_pData; }; +struct FunnyFormatObject_t +{ + +} + struct FunnyFormatData_t { + bool m_bIsBinary; + CUtlVector m_parameters; + CUtlVector m_parameters; }; abstract_class IFunnyFormatManager { public: virtual FunnyFormatData_t ReadFile( IFileHandle *pHandle ) = 0; + virtual FunnyFormatData_t ReadBinaryFile( IFileHandle *pHandle ) = 0; virtual void WriteFile( IFileHandle *pHandle, FunnyFormatData_t data ) = 0; }; +IFunnyFormatManager *FunnyFormatManager(); + #endif diff --git a/public/ifilesystem.h b/public/ifilesystem.h index 16eda05..bedf6f5 100644 --- a/public/ifilesystem.h +++ b/public/ifilesystem.h @@ -4,10 +4,6 @@ #include "iappsystem.h" #include "tier0/platform.h" -#define FILESYSTEM_INTERFACE_NAME "FileSystem001" -#define FILESYSTEM_BACKEND_INTERFACE_NAME "FileSystemBackend001" -#define FILESYSTEM_PAK_INTERFACE_NAME "FileSystemPAK001" - enum EFileMode { FILEMODE_READ = 0x01, diff --git a/public/igamewindow.h b/public/igamewindow.h index 52f5fac..1185399 100644 --- a/public/igamewindow.h +++ b/public/igamewindow.h @@ -4,9 +4,6 @@ #include "iappsystem.h" #include "tier0/platform.h" -#define GAME_WINDOW_INTERFACE_NAME "GameWindow001" -#define GAME_SDL_WINDOW_INTERFACE_NAME "SDLGameWindow001" - abstract_class IGameWindow: public IAppSystem { public: diff --git a/public/jsonformat.h b/public/jsonformat.h new file mode 100644 index 0000000..e69de29 diff --git a/public/materialsystem/imaterialsystem.h b/public/materialsystem/imaterialsystem.h index 821a389..cc68416 100644 --- a/public/materialsystem/imaterialsystem.h +++ b/public/materialsystem/imaterialsystem.h @@ -1,6 +1,7 @@ #ifndef MATERIAL_SYSTEM_H #define MATERIAL_SYSTEM_H +#include "iappsystem.h" #include "tier0/platform.h" @@ -62,9 +63,10 @@ abstract_class IImage : public IRenderingObject public: virtual void BlitTo( IImage *pImage ); }; -abstract_class IRenderContext +abstract_class IRenderContext: public IAppSystem { public: + virtual IVertexBuffer *CreateVertexBuffer( uint32_t nSize ) = 0; virtual IIndexBuffer *CreateIndexBuffer( uint32_t nSize ) = 0; virtual IImage *CreateRenderTarget( uint32_t x, uint32_t y, EImageFormat eFormat, EMultisampleType eMultisampleType ); @@ -74,9 +76,13 @@ public: virtual void DestroyImage( IImage *pImage ); }; -abstract_class IMaterialSystem +abstract_class IMaterialSystem: public IAppSystem { public: + virtual void Init(); + virtual void Frame( float fTime ); + virtual void Shutdown(); + IRenderContext *GetRenderContext(); }; diff --git a/public/tier2/fileformats/ini.h b/public/tier2/fileformats/ini.h new file mode 100644 index 0000000..1c2306a --- /dev/null +++ b/public/tier2/fileformats/ini.h @@ -0,0 +1,30 @@ +#ifndef TIER2_INI_H +#define TIER2_INI_H + +#include "tier0/platform.h" +#include "tier1/utlstring.h" + +abstract_class IINISection +{ +public: + virtual bool GetBoolValue( const char *szKeyName ) = 0; + virtual int GetIntValue( const char *szKeyName ) = 0; + virtual const char *GetStringValue( const char *szKeyName ) = 0; + virtual CUtlString GetUTLStringValue( const char *szKeyName ) = 0; +}; + +abstract_class IINIFile +{ +public: + virtual void GetSection( const char *szSectionName ) = 0; +}; + +abstract_class IINIManager +{ +public: + virtual IINIFile *ReadString( const char *psz ) = 0; +}; + +IINIManager *INIManager(); + +#endif diff --git a/public/tier2/fileformats/json.h b/public/tier2/fileformats/json.h new file mode 100644 index 0000000..e69de29 diff --git a/tier2/fileformats/ini.cpp b/tier2/fileformats/ini.cpp new file mode 100644 index 0000000..01a65ab --- /dev/null +++ b/tier2/fileformats/ini.cpp @@ -0,0 +1,41 @@ + +#include "tier2/fileformats/ini.h" +#include "tier1/utlstring.h" +#include "tier1/utlvector.h" + +abstract_class CINISection: public IINISection +{ +public: + virtual bool GetBoolValue( const char *szKeyName ) override; + virtual int GetIntValue( const char *szKeyName ) override; + virtual const char *GetStringValue( const char *szKeyName ) override; + virtual CUtlString GetUTLStringValue( const char *szKeyName ) override; + + CUtlVector m_values; +}; + +class CINIFile: public IINIFile +{ + virtual void GetSection( const char *szSectionName ) override; + + CUtlVector m_sections; +}; + +class CINIManager: public IINIManager +{ +public: + virtual IINIFile *ReadString( const char *psz ) override; +}; + +IINIFile *CINIManager::ReadString( const char *psz ) +{ + CINIFile *pFile = new CINIFile; + return (IINIFile*)pFile; +} + +IINIManager *INIManager() +{ + static CINIManager manager; + return &manager; +} + diff --git a/tier2/fileformats/json.cpp b/tier2/fileformats/json.cpp new file mode 100644 index 0000000..e69de29