diff --git a/Data/Textures/defaultTexture.png b/Data/Textures/defaultTexture.png
deleted file mode 100644
index 0d26e56fe628bdeae9a16117ef24d09bd3a91a10..0000000000000000000000000000000000000000
Binary files a/Data/Textures/defaultTexture.png and /dev/null differ
diff --git a/Data/Textures/test2.KTX b/Data/Textures/test2.KTX
new file mode 100644
index 0000000000000000000000000000000000000000..01b38d5c0cc5bfca8facac67dc4e2f43f252b0aa
Binary files /dev/null and b/Data/Textures/test2.KTX differ
diff --git a/src/Engine/AssManRendererConnect.cpp b/src/Engine/AssManRendererConnect.cpp
index ccc0354eebda1fa2d74d64ee3f0bfceae7d6bc46..ca38cc3f4002258274d4d1e071111ba380bb8cc4 100644
--- a/src/Engine/AssManRendererConnect.cpp
+++ b/src/Engine/AssManRendererConnect.cpp
@@ -47,16 +47,16 @@ namespace Engine
 
 		newInfo.byteArray = std::move(oldInfo.byteArray);
 
+		newInfo.isCompressed = oldInfo.isCompressed;
 		newInfo.baseInternalFormat = Renderer::TextureDocument::Format(oldInfo.baseInternalFormat);
+		newInfo.internalFormat = Renderer::TextureDocument::Format(oldInfo.internalFormat);
 
 		newInfo.type = Renderer::TextureDocument::Type(oldInfo.type);
 
 		newInfo.numDimensions = oldInfo.numDimensions;
-
 		newInfo.dimensions = oldInfo.dimensions;
 
 		newInfo.numLayers = oldInfo.numLayers;
-
 		newInfo.numLevels = oldInfo.numLevels;
 
 		return std::optional<Renderer::TextureDocument>{ Renderer::TextureDocument(std::move(newInfo)) };
diff --git a/src/Engine/AssetManager/AssetManager.cpp b/src/Engine/AssetManager/AssetManager.cpp
index d1b5f611a1245ff84404511002e9b8b76b717001..161be7d7101465569324622587172eb230088024 100644
--- a/src/Engine/AssetManager/AssetManager.cpp
+++ b/src/Engine/AssetManager/AssetManager.cpp
@@ -16,10 +16,7 @@ struct AssetManagerInfo
 
 static const std::map<size_t, AssetManagerInfo> textureInfos
 {
-	{ size_t(Engine::AssetManager::Sprite::None), {"None" , ""} },
-	{ size_t(Engine::AssetManager::Sprite::Default), {"Default", "defaultTexture.png"} },
-	{ size_t(Engine::AssetManager::Sprite::Test), {"Test", "test.ktx"} },
-	{ size_t(Engine::AssetManager::Sprite::Circle), {"Circle", "circle.png"} },
+	{ size_t(Engine::AssetManager::Sprite::Test), {"Test", "test2.ktx"} },
 };
 
 static const std::map<size_t, AssetManagerInfo> meshInfos
diff --git a/src/Engine/AssetManager/TextureDocument.hpp b/src/Engine/AssetManager/TextureDocument.hpp
index bdcfc966e0b5d6b69b3b20ac0903a01bc04d1131..0ce9d92356c46569ac3c2278131b3cfe91bbd8e8 100644
--- a/src/Engine/AssetManager/TextureDocument.hpp
+++ b/src/Engine/AssetManager/TextureDocument.hpp
@@ -23,35 +23,43 @@ namespace Engine
 			TextureDocument(const TextureDocument&) = delete;
 			~TextureDocument();
 
+			const std::vector<uint8_t>& GetByteArray() const;
+			const uint8_t* GetData() const;
+			size_t GetByteLength() const;
+
 			const std::array<uint32_t, 3>& GetDimensions() const;
 
-			const uint8_t* TextureDocument::GetData() const;
-			Format TextureDocument::GetBaseInternalFormat() const;
-			Type TextureDocument::GetType() const;
+			Format GetBaseInternalFormat() const;
+			Format GetInternalFormat() const;
+			Type GetType() const;
+
+			bool IsCompressed() const;
 
 			static CreateInfo ToCreateInfo(TextureDocument&& texDoc);
 
 		private:
 			std::vector<uint8_t> byteArray;
+			Format internalFormat{};
 			Format baseInternalFormat{};
 			Type type{};
 			uint8_t numDimensions = 0;
 			std::array<uint32_t, 3> dimensions{};
 			size_t numLayers = 0;
 			size_t numLevels = 0;
+			bool isCompressed = false;
 		};
 
-		std::optional<TextureDocument> LoadTextureDocument(std::string path);
-
 		struct TextureDocument::CreateInfo
 		{
 			std::vector<uint8_t> byteArray;
+			Format internalFormat{};
 			Format baseInternalFormat{};
 			Type type{};
 			uint8_t numDimensions = 0;
 			std::array<uint32_t, 3> dimensions{};
 			size_t numLayers = 0;
 			size_t numLevels = 0;
+			bool isCompressed = false;
 		};
 
 		enum class TextureDocument::Format
@@ -60,7 +68,14 @@ namespace Engine
 			RGBA,
 			RGB,
 			R8G8B8A8,
-
+			Compressed_RGB_S3TC_DXT1_ANGLE,
+			Compressed_RGBA_S3TC_DXT1_ANGLE,
+			Compressed_RGBA_S3TC_DXT3_ANGLE,
+			Compressed_RGBA_S3TC_DXT5_ANGLE,
+			Compressed_RGBA_BPTC_UNORM,
+			Compressed_SRGB_ALPHA_BPTC_UNORM,
+			Compressed_RGB_BPTC_SIGNED_FLOAT,
+			Compressed_RGB_BPTC_UNSIGNED_FLOAT,
 		};
 
 		enum class TextureDocument::Type
@@ -68,6 +83,8 @@ namespace Engine
 			Invalid,
 			UnsignedByte,
 		};
+
+		std::optional<TextureDocument> LoadTextureDocument(std::string path);
 	}
 
 	namespace AssMan = AssetManager;
diff --git a/src/Engine/AssetManager/TextureDocument.inl b/src/Engine/AssetManager/TextureDocument.inl
index 9a42eb42aff9ccfb99b113300b3fe52963667a34..1f04cc22192cc2808e290a39ef8bedd9b1e4c4f1 100644
--- a/src/Engine/AssetManager/TextureDocument.inl
+++ b/src/Engine/AssetManager/TextureDocument.inl
@@ -17,11 +17,13 @@ namespace Engine
 		TextureDocument::TextureDocument(CreateInfo&& info) :
 			byteArray(std::move(info.byteArray)),
 			baseInternalFormat(info.baseInternalFormat),
+			internalFormat(info.internalFormat),
 			type(info.type),
 			numDimensions(info.numDimensions),
 			dimensions(info.dimensions),
 			numLayers(info.numLayers),
-			numLevels(info.numLevels)
+			numLevels(info.numLevels),
+			isCompressed(info.isCompressed)
 		{
 
 		}
@@ -31,9 +33,9 @@ namespace Engine
 			
 		}
 
-		const std::array<uint32_t, 3>& TextureDocument::GetDimensions() const
+		const std::vector<uint8_t>& TextureDocument::GetByteArray() const
 		{
-			return dimensions;
+			return byteArray;
 		}
 
 		const uint8_t* TextureDocument::GetData() const
@@ -41,11 +43,31 @@ namespace Engine
 			return byteArray.data();
 		}
 
+		size_t TextureDocument::GetByteLength() const
+		{
+			return byteArray.size();
+		}
+
+		const std::array<uint32_t, 3>& TextureDocument::GetDimensions() const
+		{
+			return dimensions;
+		}
+
+		bool TextureDocument::IsCompressed() const
+		{
+			return isCompressed;
+		}
+
 		TextureDocument::Format TextureDocument::GetBaseInternalFormat() const
 		{
 			return baseInternalFormat;
 		}
 
+		TextureDocument::Format TextureDocument::GetInternalFormat() const
+		{
+			return internalFormat;
+		}
+
 		TextureDocument::Type TextureDocument::GetType() const
 		{
 			return type;
@@ -56,7 +78,9 @@ namespace Engine
 			CreateInfo info{};
 
 			info.byteArray = std::move(texDoc.byteArray);
+			info.isCompressed = texDoc.isCompressed;
 			info.baseInternalFormat = texDoc.baseInternalFormat;
+			info.internalFormat = texDoc.internalFormat;
 			info.type = texDoc.type;
 			info.numDimensions = texDoc.numDimensions;
 			info.dimensions = texDoc.dimensions;
@@ -88,8 +112,10 @@ namespace Engine
 			createInfo.numLayers = texture->numLayers;
 			createInfo.numLevels = texture->numLevels;
 
+			createInfo.isCompressed = texture->isCompressed;
 			createInfo.type = ConvertGLType(texture->glType);
 			createInfo.baseInternalFormat = ConvertGLFormat(texture->glBaseInternalformat);
+			createInfo.internalFormat = ConvertGLFormat(texture->glInternalformat);
 
 			ktxTexture_Destroy(texture);
 
@@ -121,10 +147,10 @@ namespace Engine
 		{
 			using Format = TextureDocument::Format;
 
+			// Uncompressed
 			constexpr auto GL_RGB = 0x1907;
 			constexpr auto GL_RGBA = 0x1908;
 			constexpr auto GL_RGBA8 = 0x8058;
-
 			switch (glFormat)
 			{
 			case GL_RGB:
@@ -133,9 +159,43 @@ namespace Engine
 				return Format::RGBA;
 			case GL_RGBA8:
 				return Format::R8G8B8A8;
-			default:
-				return Format::Invalid;
+			};
+
+			// DXT
+			constexpr auto GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE = 0x83F0;
+			constexpr auto GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE = 0x83F1;
+			constexpr auto GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE = 0x83F2;
+			constexpr auto GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE = 0x83F3;
+			switch (glFormat)
+			{
+			case GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE:
+				return Format::Compressed_RGB_S3TC_DXT1_ANGLE;
+			case GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE:
+				return Format::Compressed_RGBA_S3TC_DXT1_ANGLE;
+			case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
+				return Format::Compressed_RGBA_S3TC_DXT3_ANGLE;
+			case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
+				return Format::Compressed_RGBA_S3TC_DXT5_ANGLE;
+			}
+
+			// BPTC
+			constexpr auto GL_COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C;
+			constexpr auto GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D;
+			constexpr auto GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E;
+			constexpr auto GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F;
+			switch (glFormat)
+			{
+			case GL_COMPRESSED_RGBA_BPTC_UNORM:
+				return Format::Compressed_RGBA_BPTC_UNORM;
+			case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:
+				return Format::Compressed_SRGB_ALPHA_BPTC_UNORM;
+			case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:
+				return Format::Compressed_RGB_BPTC_SIGNED_FLOAT;
+			case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:
+				return Format::Compressed_RGB_BPTC_UNSIGNED_FLOAT;
 			}
+
+			return Format::Invalid;
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/Engine/Engine.cpp b/src/Engine/Engine.cpp
index 151fb34cc89dca9b4a1d2d686fb9f9a2cd55fd96..bf310ddf48862215c4a4a51f59c19686152dac08 100644
--- a/src/Engine/Engine.cpp
+++ b/src/Engine/Engine.cpp
@@ -85,7 +85,7 @@ void Engine::Core::Run()
 	auto& lightObj = scene1.NewSceneObject();
 	lightObj.transform.localPosition = { 2.5f, 2.5f, 2.5f };
 	Components::PointLight& light1 = lightObj.AddComponent<Components::PointLight>().first.get();
-	light1.color = { 1.f, 0.5f, 0.f };
+	light1.color = { 1.f, 1.f, 1.f };
 	auto& mesh3 = lightObj.AddComponent<Components::MeshRenderer>().first.get();
 	mesh3.SetMesh(AssMan::Mesh::Cube);
 	mesh3.scale = { 0.1f, 0.1f, 0.1f };
diff --git a/src/Engine/Renderer/OpenGL.cpp b/src/Engine/Renderer/OpenGL.cpp
index 308be6b2c2926049310ddd16af16fceffe9333de..3e71b04c9ed81f45e3be27ff6d60f3dfe1eb66e1 100644
--- a/src/Engine/Renderer/OpenGL.cpp
+++ b/src/Engine/Renderer/OpenGL.cpp
@@ -502,17 +502,25 @@ namespace Engine
 		auto texDocumentOpt = Core::GetData().assetLoadData.textureLoader(id);
 		assert(texDocumentOpt.has_value());
 
-		auto& texDocument = texDocumentOpt.value();
+		auto& texDoc = texDocumentOpt.value();
 
 		IBO ibo;
 
 		glGenTextures(1, &ibo.texture);
 		glBindTexture(GL_TEXTURE_2D, ibo.texture);
 
-		GLint internalFormat = ToGLFormat(texDocument.GetBaseInternalFormat());
-		GLint type = ToGLType(texDocument.GetType());
-		const uint8_t* data = texDocument.GetData();
-		glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, texDocument.GetDimensions()[0], texDocument.GetDimensions()[1], 0, internalFormat, type, data);
+		GLint internalFormat = ToGLFormat(texDoc.GetInternalFormat());
+		GLint baseInternalFormat = ToGLFormat(texDoc.GetBaseInternalFormat());
+		GLsizei width = texDoc.GetDimensions()[0];
+		GLsizei height = texDoc.GetDimensions()[1];
+		GLint type = ToGLType(texDoc.GetType());
+		GLsizei byteLength = texDoc.GetByteLength();
+		const uint8_t* data = texDoc.GetData();
+
+		if (texDoc.IsCompressed())
+			glCompressedTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height, 0, byteLength, data);
+		else
+			glTexImage2D(GL_TEXTURE_2D, 0, baseInternalFormat, width, height, 0, baseInternalFormat, type, data);
 
 		return ibo;
 	}
@@ -584,13 +592,44 @@ namespace Engine
 	GLint Renderer::OpenGL::ToGLFormat(TextureDocument::Format format)
 	{
 		using Format = TextureDocument::Format;
+
+		// Uncompressed
 		switch (format)
 		{
+		case Format::RGB:
+			return GL_RGB;
 		case Format::RGBA:
 			return GL_RGBA;
-		default:
-			return 0;
+		case Format::R8G8B8A8:
+			return GL_RGBA8;
+		};
+
+		// DXT
+		switch (format)
+		{
+		case Format::Compressed_RGB_S3TC_DXT1_ANGLE:
+			return GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE;
+		case Format::Compressed_RGBA_S3TC_DXT1_ANGLE:
+			return GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE;
+		case Format::Compressed_RGBA_S3TC_DXT3_ANGLE:
+			return GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE;
+		case Format::Compressed_RGBA_S3TC_DXT5_ANGLE:
+			return GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE;
 		}
+
+		switch (format)
+		{
+		case Format::Compressed_RGBA_BPTC_UNORM:
+			return GL_COMPRESSED_RGBA_BPTC_UNORM;
+		case Format::Compressed_SRGB_ALPHA_BPTC_UNORM:
+			return GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM;
+		case Format::Compressed_RGB_BPTC_SIGNED_FLOAT:
+			return GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT;
+		case Format::Compressed_RGB_BPTC_UNSIGNED_FLOAT:
+			return GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT;
+		}
+
+		return 0;
 	}
 
 	GLint Renderer::OpenGL::ToGLType(TextureDocument::Type type)
diff --git a/src/Engine/Renderer/TextureDocument.hpp b/src/Engine/Renderer/TextureDocument.hpp
index bd366c988e3ea84dd6ed4c650c04d63008974ccd..fbc3d38063b2d700329fff6c01e0243551dec903 100644
--- a/src/Engine/Renderer/TextureDocument.hpp
+++ b/src/Engine/Renderer/TextureDocument.hpp
@@ -21,35 +21,44 @@ namespace Engine
 			TextureDocument(const TextureDocument&) = delete;
 			~TextureDocument();
 
+			const std::vector<uint8_t>& GetByteArray() const;
+			const uint8_t* GetData() const;
+			size_t GetByteLength() const;
+
 			const std::array<uint32_t, 3>& GetDimensions() const;
 
-			const uint8_t* TextureDocument::GetData() const;
-			Format TextureDocument::GetBaseInternalFormat() const;
-			Type TextureDocument::GetType() const;
+
+			Format GetBaseInternalFormat() const;
+			Format GetInternalFormat() const;
+			Type GetType() const;
+
+			bool IsCompressed() const;
 
 			static CreateInfo ToCreateInfo(TextureDocument&& texDoc);
 
 		private:
 			std::vector<uint8_t> byteArray;
+			Format internalFormat{};
 			Format baseInternalFormat{};
 			Type type{};
 			uint8_t numDimensions = 0;
 			std::array<uint32_t, 3> dimensions{};
 			size_t numLayers = 0;
 			size_t numLevels = 0;
+			bool isCompressed = false;
 		};
 
-		std::optional<TextureDocument> LoadTextureDocument(std::string path);
-
 		struct TextureDocument::CreateInfo
 		{
 			std::vector<uint8_t> byteArray;
+			Format internalFormat{};
 			Format baseInternalFormat{};
 			Type type{};
 			uint8_t numDimensions = 0;
 			std::array<uint32_t, 3> dimensions{};
 			size_t numLayers = 0;
 			size_t numLevels = 0;
+			bool isCompressed = false;
 		};
 
 		enum class TextureDocument::Format
@@ -58,7 +67,14 @@ namespace Engine
 			RGBA,
 			RGB,
 			R8G8B8A8,
-
+			Compressed_RGB_S3TC_DXT1_ANGLE,
+			Compressed_RGBA_S3TC_DXT1_ANGLE,
+			Compressed_RGBA_S3TC_DXT3_ANGLE,
+			Compressed_RGBA_S3TC_DXT5_ANGLE,
+			Compressed_RGBA_BPTC_UNORM,
+			Compressed_SRGB_ALPHA_BPTC_UNORM,
+			Compressed_RGB_BPTC_SIGNED_FLOAT,
+			Compressed_RGB_BPTC_UNSIGNED_FLOAT,
 		};
 
 		enum class TextureDocument::Type
diff --git a/src/Engine/Renderer/TextureDocument.inl b/src/Engine/Renderer/TextureDocument.inl
index 5e41c830017a5746a4f957b5e85ae10fc8b4a9f0..c2ebeca8e64a275b1eb10eb52685d23e4b78eb41 100644
--- a/src/Engine/Renderer/TextureDocument.inl
+++ b/src/Engine/Renderer/TextureDocument.inl
@@ -9,11 +9,13 @@ namespace Engine
 		TextureDocument::TextureDocument(CreateInfo&& info) :
 			byteArray(std::move(info.byteArray)),
 			baseInternalFormat(info.baseInternalFormat),
+			internalFormat(info.internalFormat),
 			type(info.type),
 			numDimensions(info.numDimensions),
 			dimensions(info.dimensions),
 			numLayers(info.numLayers),
-			numLevels(info.numLevels)
+			numLevels(info.numLevels),
+			isCompressed(info.isCompressed)
 		{
 
 		}
@@ -23,9 +25,9 @@ namespace Engine
 
 		}
 
-		const std::array<uint32_t, 3>& TextureDocument::GetDimensions() const
+		const std::vector<uint8_t>& TextureDocument::GetByteArray() const
 		{
-			return dimensions;
+			return byteArray;
 		}
 
 		const uint8_t* TextureDocument::GetData() const
@@ -33,11 +35,31 @@ namespace Engine
 			return byteArray.data();
 		}
 
+		size_t TextureDocument::GetByteLength() const
+		{
+			return byteArray.size();
+		}
+
+		const std::array<uint32_t, 3>& TextureDocument::GetDimensions() const
+		{
+			return dimensions;
+		}
+
+		bool TextureDocument::IsCompressed() const
+		{
+			return isCompressed;
+		}
+
 		TextureDocument::Format TextureDocument::GetBaseInternalFormat() const
 		{
 			return baseInternalFormat;
 		}
 
+		TextureDocument::Format TextureDocument::GetInternalFormat() const
+		{
+			return internalFormat;
+		}
+
 		TextureDocument::Type TextureDocument::GetType() const
 		{
 			return type;
@@ -48,7 +70,9 @@ namespace Engine
 			CreateInfo info{};
 
 			info.byteArray = std::move(texDoc.byteArray);
+			info.isCompressed = texDoc.isCompressed;
 			info.baseInternalFormat = texDoc.baseInternalFormat;
+			info.internalFormat = texDoc.internalFormat;
 			info.type = texDoc.type;
 			info.numDimensions = texDoc.numDimensions;
 			info.dimensions = texDoc.dimensions;