Skip to content

Embed binary or resource files (eg textures or GLSL shader files) in CPP using C++11.

Notifications You must be signed in to change notification settings

cyrilcode/embed-resource

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Embed Resource

Embed binary files and resources (such as GLSL Shader source files) into C++ projects.

Include this repository in your CMake based project:

git submodule add https://github.com/cyrilcode/embed-resource.git lib/embed-resource

Then add to your CMakeLists.txt for your project:

include_directories(lib/embed-resource)
add_subdirectory(lib/embed-resource)

Now you can add your resources, by calling the provided embed_resources() function in your CMakeLists.txt file:

embed_resources(MyResources shaders/vertex.glsl shaders/frag.glsl)

Then link to your binary by adding the created variable to your add_executable statement:

add_executable(MyApp ${SOURCE_FILES} ${MyResources})

In your C++ project you can access your embed resources using the Resource class provided in Resource.h. Here's an example:

#include <iostream>
using namespace std;

#include "Resource.h"

int main() {

    Resource text = LOAD_RESOURCE(frag_glsl);
    cout << string(text.data(), text.size()) << endl;

    return EXIT_SUCCESS;
}

NB: To reference the file, replace the . in frag.glsl with an underscore _. So, in this example, the symbol name is frag_glsl.

Credits...

This uses ideas from this blog post which included the Resource class and macro idea. Unfortunately, the use of ld command didn't work on OSX. So, instead, I've used a simple C++ executable that does the same conversion, based on ideas from this Stack Overflow question.

License

Public Domain / WTFPL

About

Embed binary or resource files (eg textures or GLSL shader files) in CPP using C++11.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published