diff --git a/resources/images/cannon.png b/resources/images/cannon.png
new file mode 100644
index 0000000000000000000000000000000000000000..5115e91a87e65716e4837264551eab1586f4ef60
Binary files /dev/null and b/resources/images/cannon.png differ
diff --git a/resources/images/collision.png b/resources/images/collision.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9e600ac3e0b6aeb35620167dc974f4e156eb65b
Binary files /dev/null and b/resources/images/collision.png differ
diff --git a/resources/images/enemy1.png b/resources/images/enemy1.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b42602df2fe3df79ab8260a0967a6c04d70611c
Binary files /dev/null and b/resources/images/enemy1.png differ
diff --git a/resources/images/enemy2.png b/resources/images/enemy2.png
new file mode 100644
index 0000000000000000000000000000000000000000..979d1d6f3a2d48a2ab53fefd08d3ea395a6cc381
Binary files /dev/null and b/resources/images/enemy2.png differ
diff --git a/resources/images/missile.png b/resources/images/missile.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9dc5c954d5f3c1b95724a878080dc5f885462a8
Binary files /dev/null and b/resources/images/missile.png differ
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8c88a75a5e7a52784437d9ad9a3a74fd60b82db4..68ad61a0ca98e7e1765d3aea76fd37de3394d1af 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,6 +2,8 @@ add_subdirectory(game)
 
 add_executable(shooter main.cpp)
 
+add_custom_command(TARGET shooter PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/resources/ $<TARGET_FILE_DIR:shooter>)
+
 target_link_libraries(
   shooter
   PRIVATE project_options
diff --git a/src/game/renderer/CMakeLists.txt b/src/game/renderer/CMakeLists.txt
index 827c7b5ad63c01a8f4ad1d4b3f489e0ed979aa73..1120a8653e7489f8368a930506eedb817fff617b 100644
--- a/src/game/renderer/CMakeLists.txt
+++ b/src/game/renderer/CMakeLists.txt
@@ -1,6 +1,7 @@
 add_library(renderer
     abstract_renderer.h abstract_renderer.cpp
-    sdl_renderer.h sdl_renderer.cpp)
+    sdl_renderer.h sdl_renderer.cpp
+    sdl_resources.h sdl_resources.cpp)
 
 target_link_libraries(input
     PUBLIC
diff --git a/src/game/renderer/abstract_renderer.h b/src/game/renderer/abstract_renderer.h
index 94d69125426f8154544c81a3fca60b7661e95e70..0cbfca5249c4b250464b0ad4bff62c35e3171d6e 100644
--- a/src/game/renderer/abstract_renderer.h
+++ b/src/game/renderer/abstract_renderer.h
@@ -3,9 +3,12 @@
 
 #include "../state/state.h"
 
+/// Abstract class that represents generic renderer template that can be used by any framework.
 class abstract_renderer{
 public:
+    /// Virtual destructor to prevent memory leaks
     virtual ~abstract_renderer() {}
+    /// Virtual draw method that is called by the game controller.
     virtual void render_state(const state& current_state) = 0;
 };
 
diff --git a/src/game/renderer/sdl_renderer.cpp b/src/game/renderer/sdl_renderer.cpp
index c3251e7250847095b3987828c940d6633f8c5145..3d796f829eac7d6d716ceb0884075159bd036658 100644
--- a/src/game/renderer/sdl_renderer.cpp
+++ b/src/game/renderer/sdl_renderer.cpp
@@ -4,7 +4,7 @@
 
 #include <stdexcept>
 
-sdl_renderer::sdl_renderer() {
+sdl_renderer::sdl_renderer(): window(nullptr), renderer(nullptr), resources(nullptr) {
     if (SDL_Init(SDL_INIT_VIDEO) != 0) {
         throw std::runtime_error(SDL_GetError());
     }
@@ -21,8 +21,10 @@ sdl_renderer::sdl_renderer() {
         throw std::runtime_error(SDL_GetError());
     }
 
+    resources = new sdl_resources(renderer);
+
     SDL_RenderClear(renderer);
-    SDL_SetRenderDrawColor(renderer, 100, 100, 100, 255);
+    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
     SDL_Rect screen{0, 0, 640, 480};
     SDL_RenderFillRect(renderer, &screen);
     SDL_RenderPresent(renderer);
@@ -33,6 +35,8 @@ sdl_renderer::~sdl_renderer() {
         SDL_DestroyRenderer(renderer);
     if (window != nullptr)
         SDL_DestroyWindow(window);
+    if (resources != nullptr)
+        delete resources;
     SDL_QuitSubSystem(SDL_INIT_VIDEO);
 }
 
diff --git a/src/game/renderer/sdl_renderer.h b/src/game/renderer/sdl_renderer.h
index a4df68fc9cc36b0c189323613983a07bb9a08892..59aaf290e12953805e3db22a8babce764d84569e 100644
--- a/src/game/renderer/sdl_renderer.h
+++ b/src/game/renderer/sdl_renderer.h
@@ -4,6 +4,7 @@
 #include <SDL2/SDL.h>
 
 #include "abstract_renderer.h"
+#include "sdl_resources.h"
 
 /// Game renderer class. Using SDL2 to render game
 class sdl_renderer: public abstract_renderer {
@@ -16,9 +17,13 @@ public:
     /// Renders passed state to created window
     void render_state(const state& current_state) override;
 protected:
-    /// SDL window struct
+    /// SDL window struct pointer
     SDL_Window* window;
+    /// SDL renderer struct pointer
     SDL_Renderer* renderer;
+
+    /// Collection of resources used to render.
+    sdl_resources* resources;
 };
 
 #endif//SDL_RENDERER_H
\ No newline at end of file
diff --git a/src/game/renderer/sdl_resources.cpp b/src/game/renderer/sdl_resources.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3dc6145794960f598f32f5487a393e102f9091fa
--- /dev/null
+++ b/src/game/renderer/sdl_resources.cpp
@@ -0,0 +1,33 @@
+#include "sdl_resources.h"
+
+#include <SDL2/SDL_image.h>
+
+#include <stdexcept>
+
+sdl_resources::sdl_resources(SDL_Renderer* renderer): renderer(renderer) {
+    if (! (IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG)) {
+        throw std::runtime_error(IMG_GetError());
+    }
+    shooter = load_texture("images/cannon.png");
+    enemy = load_texture("images/enemy1.png");
+    projectile = load_texture("images/missile.png");
+}
+
+sdl_resources::~sdl_resources() {
+    IMG_Quit();
+}
+
+SDL_Texture* sdl_resources::load_texture(const std::string& path_to_image) {
+    SDL_Surface * surface = nullptr;
+    SDL_Texture* texture = nullptr;
+    surface = IMG_Load(path_to_image.c_str());
+    if (surface == nullptr) {
+        throw std::runtime_error(IMG_GetError());
+    }
+    texture = SDL_CreateTextureFromSurface(renderer, surface);
+    SDL_FreeSurface(surface);
+    if (texture == nullptr) {
+        throw std::runtime_error(SDL_GetError());
+    }
+    return texture;
+}
\ No newline at end of file
diff --git a/src/game/renderer/sdl_resources.h b/src/game/renderer/sdl_resources.h
new file mode 100644
index 0000000000000000000000000000000000000000..1977fe5cb22152f3527022bee9433f527ba80b06
--- /dev/null
+++ b/src/game/renderer/sdl_resources.h
@@ -0,0 +1,28 @@
+#ifndef SDL_RESOURCES_H
+#define SDL_RESOURCES_H
+
+#include <SDL2/SDL.h>
+
+#include <string>
+
+/// Resource class that load all the resources for game rendering.
+class sdl_resources {
+public:
+    /// Loads resources
+    explicit sdl_resources(SDL_Renderer* renderer);
+    /// Unloads resources
+    ~sdl_resources();
+
+    /// Shooter texture
+    const SDL_Texture* shooter;
+    /// Projectile texture
+    const SDL_Texture* projectile;
+    /// Enemy texture
+    const SDL_Texture* enemy;
+protected:
+    SDL_Renderer* renderer;
+    /// Loads texture by path defined by path
+    SDL_Texture* load_texture(const std::string& path_to_image);
+};
+
+#endif//SDL_RESOURCES_H
\ No newline at end of file