summaryrefslogtreecommitdiffstats
path: root/src/video_core
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/CMakeLists.txt19
-rw-r--r--src/video_core/src/renderer_base.h116
-rw-r--r--src/video_core/src/utils.cpp66
-rw-r--r--src/video_core/src/utils.h83
-rw-r--r--src/video_core/src/video_core.cpp91
-rw-r--r--src/video_core/src/video_core.h48
-rw-r--r--src/video_core/video_core.vcxproj129
-rw-r--r--src/video_core/video_core.vcxproj.filters15
8 files changed, 567 insertions, 0 deletions
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
new file mode 100644
index 000000000..3f486b8fe
--- /dev/null
+++ b/src/video_core/CMakeLists.txt
@@ -0,0 +1,19 @@
+set(SRCS
+ src/bp_mem.cpp
+ src/cp_mem.cpp
+ src/xf_mem.cpp
+ src/fifo.cpp
+ src/fifo_player.cpp
+ src/vertex_loader.cpp
+ src/vertex_manager.cpp
+ src/video_core.cpp
+ src/shader_manager.cpp
+ src/texture_decoder.cpp
+ src/texture_manager.cpp
+ src/utils.cpp
+ src/renderer_gl3/renderer_gl3.cpp
+ src/renderer_gl3/shader_interface.cpp
+ src/renderer_gl3/texture_interface.cpp
+ src/renderer_gl3/uniform_manager.cpp)
+
+add_library(video_core STATIC ${SRCS})
diff --git a/src/video_core/src/renderer_base.h b/src/video_core/src/renderer_base.h
new file mode 100644
index 000000000..9cd02e0b4
--- /dev/null
+++ b/src/video_core/src/renderer_base.h
@@ -0,0 +1,116 @@
+/**
+ * Copyright (C) 2014 Citra Emulator
+ *
+ * @file renderer_base.h
+ * @author bunnei
+ * @date 2014-04-05
+ * @brief Renderer base class for new video core
+ *
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details at
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * Official project repository can be found at:
+ * http://code.google.com/p/gekko-gc-emu/
+ */
+
+#pragma once
+
+#include "common.h"
+#include "hash.h"
+
+class RendererBase {
+public:
+
+ /// Used to reference a framebuffer
+ enum kFramebuffer {
+ kFramebuffer_VirtualXFB = 0,
+ kFramebuffer_EFB,
+ kFramebuffer_Texture
+ };
+
+ /// Used for referencing the render modes
+ enum kRenderMode {
+ kRenderMode_None = 0,
+ kRenderMode_Multipass = 1,
+ kRenderMode_ZComp = 2,
+ kRenderMode_UseDstAlpha = 4
+ };
+
+ RendererBase() : current_fps_(0), current_frame_(0) {
+ }
+
+ ~RendererBase() {
+ }
+
+ /**
+ * Blits the EFB to the external framebuffer (XFB)
+ * @param src_rect Source rectangle in EFB to copy
+ * @param dst_rect Destination rectangle in EFB to copy to
+ * @param dest_height Destination height in pixels
+ */
+ virtual void CopyToXFB(const Rect& src_rect, const Rect& dst_rect) = 0;
+
+ /**
+ * Clear the screen
+ * @param rect Screen rectangle to clear
+ * @param enable_color Enable color clearing
+ * @param enable_alpha Enable alpha clearing
+ * @param enable_z Enable depth clearing
+ * @param color Clear color
+ * @param z Clear depth
+ */
+ virtual void Clear(const Rect& rect, bool enable_color, bool enable_alpha, bool enable_z,
+ u32 color, u32 z) = 0;
+
+ /**
+ * Set a specific render mode
+ * @param flag Render flags mode to enable
+ */
+ virtual void SetMode(kRenderMode flags) = 0;
+
+ /// Reset the full renderer API to the NULL state
+ virtual void ResetRenderState() = 0;
+
+ /// Restore the full renderer API state - As the game set it
+ virtual void RestoreRenderState() = 0;
+
+ /**
+ * Set the emulator window to use for renderer
+ * @param window EmuWindow handle to emulator window to use for rendering
+ */
+ virtual void SetWindow(EmuWindow* window) = 0;
+
+ /// Initialize the renderer
+ virtual void Init() = 0;
+
+ /// Shutdown the renderer
+ virtual void ShutDown() = 0;
+
+ /// Converts EFB rectangle coordinates to renderer rectangle coordinates
+ //static Rect EFBToRendererRect(const Rect& rect) {
+ // return Rect(rect.x0_, kGCEFBHeight - rect.y0_, rect.x1_, kGCEFBHeight - rect.y1_);
+ //}
+
+ // Getter/setter functions:
+ // ------------------------
+
+ f32 current_fps() const { return current_fps_; }
+
+ int current_frame() const { return current_frame_; }
+
+protected:
+ f32 current_fps_; ///< Current framerate, should be set by the renderer
+ int current_frame_; ///< Current frame, should be set by the renderer
+
+private:
+ DISALLOW_COPY_AND_ASSIGN(RendererBase);
+};
diff --git a/src/video_core/src/utils.cpp b/src/video_core/src/utils.cpp
new file mode 100644
index 000000000..a5e702f67
--- /dev/null
+++ b/src/video_core/src/utils.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright (C) 2005-2012 Gekko Emulator
+ *
+ * @file utils.cpp
+ * @author ShizZy <shizzy247@gmail.com>
+ * @date 2012-12-28
+ * @brief Utility functions (in general, not related to emulation) useful for video core
+ *
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details at
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * Official project repository can be found at:
+ * http://code.google.com/p/gekko-gc-emu/
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "utils.h"
+
+namespace VideoCore {
+
+/**
+ * Dumps a texture to TGA
+ * @param filename String filename to dump texture to
+ * @param width Width of texture in pixels
+ * @param height Height of texture in pixels
+ * @param raw_data Raw RGBA8 texture data to dump
+ * @todo This should be moved to some general purpose/common code
+ */
+void DumpTGA(std::string filename, int width, int height, u8* raw_data) {
+ TGAHeader hdr;
+ FILE* fout;
+ u8 r, g, b;
+
+ memset(&hdr, 0, sizeof(hdr));
+ hdr.datatypecode = 2; // uncompressed RGB
+ hdr.bitsperpixel = 24; // 24 bpp
+ hdr.width = width;
+ hdr.height = height;
+
+ fout = fopen(filename.c_str(), "wb");
+ fwrite(&hdr, sizeof(TGAHeader), 1, fout);
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
+ r = raw_data[(4 * (i * width)) + (4 * j) + 0];
+ g = raw_data[(4 * (i * width)) + (4 * j) + 1];
+ b = raw_data[(4 * (i * width)) + (4 * j) + 2];
+ putc(b, fout);
+ putc(g, fout);
+ putc(r, fout);
+ }
+ }
+ fclose(fout);
+}
+
+} // namespace
diff --git a/src/video_core/src/utils.h b/src/video_core/src/utils.h
new file mode 100644
index 000000000..2d7fa4a3a
--- /dev/null
+++ b/src/video_core/src/utils.h
@@ -0,0 +1,83 @@
+/**
+ * Copyright (C) 2005-2012 Gekko Emulator
+ *
+ * @file utils.h
+ * @author ShizZy <shizzy247@gmail.com>
+ * @date 2012-12-28
+ * @brief Utility functions (in general, not related to emulation) useful for video core
+ *
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details at
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * Official project repository can be found at:
+ * http://code.google.com/p/gekko-gc-emu/
+ */
+
+#pragma once
+
+#include "common_types.h"
+#include <string>
+
+namespace FormatPrecision {
+
+/// Adjust RGBA8 color with RGBA6 precision
+static inline u32 rgba8_with_rgba6(u32 src) {
+ u32 color = src;
+ color &= 0xFCFCFCFC;
+ color |= (color >> 6) & 0x03030303;
+ return color;
+}
+
+/// Adjust RGBA8 color with RGB565 precision
+static inline u32 rgba8_with_rgb565(u32 src) {
+ u32 color = (src & 0xF8FCF8);
+ color |= (color >> 5) & 0x070007;
+ color |= (color >> 6) & 0x000300;
+ color |= 0xFF000000;
+ return color;
+}
+
+/// Adjust Z24 depth value with Z16 precision
+static inline u32 z24_with_z16(u32 src) {
+ return (src & 0xFFFF00) | (src >> 16);
+}
+
+} // namespace
+
+namespace VideoCore {
+
+/// Structure for the TGA texture format (for dumping)
+struct TGAHeader {
+ char idlength;
+ char colourmaptype;
+ char datatypecode;
+ short int colourmaporigin;
+ short int colourmaplength;
+ short int x_origin;
+ short int y_origin;
+ short width;
+ short height;
+ char bitsperpixel;
+ char imagedescriptor;
+};
+
+/**
+ * Dumps a texture to TGA
+ * @param filename String filename to dump texture to
+ * @param width Width of texture in pixels
+ * @param height Height of texture in pixels
+ * @param raw_data Raw RGBA8 texture data to dump
+ * @todo This should be moved to some general purpose/common code
+ */
+void DumpTGA(std::string filename, int width, int height, u8* raw_data);
+
+} // namespace
diff --git a/src/video_core/src/video_core.cpp b/src/video_core/src/video_core.cpp
new file mode 100644
index 000000000..8ad45c912
--- /dev/null
+++ b/src/video_core/src/video_core.cpp
@@ -0,0 +1,91 @@
+/**
+ * Copyright (C) 2014 Citra Emulator
+ *
+ * @file video_core.cpp
+ * @author bunnei
+ * @date 2014-04-05
+ * @brief Main module for new video core
+ *
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details at
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * Official project repository can be found at:
+ * http://code.google.com/p/gekko-gc-emu/
+ */
+
+#include "common.h"
+#include "emu_window.h"
+#include "log.h"
+
+#include "core.h"
+#include "video_core.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Video Core namespace
+
+namespace VideoCore {
+
+EmuWindow* g_emu_window = NULL; ///< Frontend emulator window
+RendererBase* g_renderer = NULL; ///< Renderer plugin
+int g_current_frame = 0;
+
+int VideoEntry(void*) {
+ if (g_emu_window == NULL) {
+ ERROR_LOG(VIDEO, "VideoCore::VideoEntry called without calling Init()!");
+ }
+ g_emu_window->MakeCurrent();
+ //for(;;) {
+ // gp::Fifo_DecodeCommand();
+ //}
+ return 0;
+}
+
+/// Start the video core
+void Start() {
+ if (g_emu_window == NULL) {
+ ERROR_LOG(VIDEO, "VideoCore::Start called without calling Init()!");
+ }
+ //if (common::g_config->enable_multicore()) {
+ // g_emu_window->DoneCurrent();
+ // g_video_thread = SDL_CreateThread(VideoEntry, NULL, NULL);
+ // if (g_video_thread == NULL) {
+ // LOG_ERROR(TVIDEO, "Unable to create thread: %s... Exiting\n", SDL_GetError());
+ // exit(1);
+ // }
+ //}
+}
+
+/// Initialize the video core
+void Init(EmuWindow* emu_window) {
+ g_emu_window = emu_window;
+ //g_renderer = new RendererGL3();
+ //g_renderer->SetWindow(g_emu_window);
+ //g_renderer->Init();
+
+ //gp::Fifo_Init();
+ //gp::VertexManager_Init();
+ //gp::VertexLoader_Init();
+ //gp::BP_Init();
+ //gp::CP_Init();
+ //gp::XF_Init();
+
+ g_current_frame = 0;
+
+ NOTICE_LOG(VIDEO, "initialized ok");
+}
+
+/// Shutdown the video core
+void Shutdown() {
+ //delete g_renderer;
+}
+
+} // namespace
diff --git a/src/video_core/src/video_core.h b/src/video_core/src/video_core.h
new file mode 100644
index 000000000..9b80d7715
--- /dev/null
+++ b/src/video_core/src/video_core.h
@@ -0,0 +1,48 @@
+/*!
+ * Copyright (C) 2014 Citra Emulator
+ *
+ * @file video_core.h
+ * @author bunnei
+ * @date 2014-04-05
+ * @brief Main module for new video core
+ *
+ * @section LICENSE
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details at
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * Official project repository can be found at:
+ * http://code.google.com/p/gekko-gc-emu/
+ */
+
+#pragma once
+
+#include "common.h"
+#include "emu_window.h"
+#include "renderer_base.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Video Core namespace
+
+namespace VideoCore {
+
+extern RendererBase* g_renderer; ///< Renderer plugin
+extern int g_current_frame; ///< Current frame
+
+/// Start the video core
+void Start();
+
+/// Initialize the video core
+void Init(EmuWindow* emu_window);
+
+/// Shutdown the video core
+void ShutDown();
+
+} // namespace
diff --git a/src/video_core/video_core.vcxproj b/src/video_core/video_core.vcxproj
new file mode 100644
index 000000000..4a1429745
--- /dev/null
+++ b/src/video_core/video_core.vcxproj
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="src\utils.cpp" />
+ <ClCompile Include="src\video_core.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\renderer_base.h" />
+ <ClInclude Include="src\utils.h" />
+ <ClInclude Include="src\video_core.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <Text Include="CMakeLists.txt" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{6678D1A3-33A6-48A9-878B-48E5D2903D27}</ProjectGuid>
+ <RootNamespace>input_common</RootNamespace>
+ <ProjectName>video_core</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\vsprops\Base.props" />
+ <Import Project="..\..\vsprops\code_generation_debug.props" />
+ <Import Project="..\..\vsprops\optimization_debug.props" />
+ <Import Project="..\..\vsprops\externals.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\vsprops\Base.props" />
+ <Import Project="..\..\vsprops\code_generation_debug.props" />
+ <Import Project="..\..\vsprops\optimization_debug.props" />
+ <Import Project="..\..\vsprops\externals.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\vsprops\Base.props" />
+ <Import Project="..\..\vsprops\code_generation_release.props" />
+ <Import Project="..\..\vsprops\optimization_release.props" />
+ <Import Project="..\..\vsprops\externals.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\vsprops\Base.props" />
+ <Import Project="..\..\vsprops\code_generation_release.props" />
+ <Import Project="..\..\vsprops\optimization_release.props" />
+ <Import Project="..\..\vsprops\externals.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile />
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile />
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile />
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <ClCompile />
+ <ClCompile />
+ <ClCompile />
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile />
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/video_core/video_core.vcxproj.filters b/src/video_core/video_core.vcxproj.filters
new file mode 100644
index 000000000..2a84b7edf
--- /dev/null
+++ b/src/video_core/video_core.vcxproj.filters
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="src\video_core.cpp" />
+ <ClCompile Include="src\utils.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\renderer_base.h" />
+ <ClInclude Include="src\video_core.h" />
+ <ClInclude Include="src\utils.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <Text Include="CMakeLists.txt" />
+ </ItemGroup>
+</Project> \ No newline at end of file