emscripten / webasm full support for 2d
parent
0233ce7549
commit
d18b48c9dd
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.25)
|
cmake_minimum_required(VERSION 3.25)
|
||||||
|
|
||||||
set(BLT_GRAPHICS_VERSION 0.11.0)
|
set(BLT_GRAPHICS_VERSION 0.11.1)
|
||||||
set(BLT_GRAPHICS_TEST_VERSION 0.0.1)
|
set(BLT_GRAPHICS_TEST_VERSION 0.0.1)
|
||||||
|
|
||||||
project(BLT_WITH_GRAPHICS VERSION ${BLT_GRAPHICS_VERSION})
|
project(BLT_WITH_GRAPHICS VERSION ${BLT_GRAPHICS_VERSION})
|
||||||
|
@ -130,13 +130,15 @@ endif ()
|
||||||
project(BLT_WITH_GRAPHICS)
|
project(BLT_WITH_GRAPHICS)
|
||||||
|
|
||||||
if (EMSCRIPTEN)
|
if (EMSCRIPTEN)
|
||||||
list(APPEND TARGETS BLT_WITH_GRAPHICS)
|
#list(APPEND BLT_LINK_FLAG_TARGETS BLT_WITH_GRAPHICS)
|
||||||
if (${BUILD_GRAPHICS_TESTS})
|
if (${BUILD_GRAPHICS_TESTS})
|
||||||
list(APPEND TARGETS BLT_GRAPHICS_TESTS)
|
list(APPEND BLT_LINK_FLAG_TARGETS BLT_GRAPHICS_TESTS)
|
||||||
endif ()
|
endif ()
|
||||||
#set_target_properties(FinalProject PROPERTIES LINK_FLAGS "-sMAX_WEBGL_VERSION=2 -sASSERTIONS=1 -pthread -sPTHREAD_POOL_SIZE=8 -s INITIAL_MEMORY=134217728 -sUSE_GLFW=3 --preload-file 'assets'")
|
#set_target_properties(FinalProject PROPERTIES LINK_FLAGS "-sMAX_WEBGL_VERSION=2 -sASSERTIONS=1 -pthread -sPTHREAD_POOL_SIZE=8 -s INITIAL_MEMORY=134217728 -sUSE_GLFW=3 --preload-file 'assets'")
|
||||||
|
|
||||||
set_target_properties(${TARGETS} PROPERTIES LINK_FLAGS "-sMAX_WEBGL_VERSION=2 -sFULL_ES2=1 -sFULL_ES3 -sASSERTIONS=1 -sUSE_GLFW=3")
|
include(cmake/link_flags.cmake)
|
||||||
|
#set_target_properties(${TARGETS} PROPERTIES LINK_FLAGS "-sMAX_WEBGL_VERSION=2 -sFULL_ES2=1 -sFULL_ES3 -sASSERTIONS=1 -sUSE_GLFW=3")
|
||||||
|
#set_property(GLOBAL PROPERTY LINK_FLAGS "-sMAX_WEBGL_VERSION=2 -sFULL_ES2=1 -sFULL_ES3 -sASSERTIONS=1 -sUSE_GLFW=3")
|
||||||
#set_target_properties(BLT_WITH_GRAPHICS PROPERTIES COMPILE_FLAGS "-pthread")
|
#set_target_properties(BLT_WITH_GRAPHICS PROPERTIES COMPILE_FLAGS "-pthread")
|
||||||
else ()
|
else ()
|
||||||
target_link_libraries(BLT_WITH_GRAPHICS PUBLIC glfw)
|
target_link_libraries(BLT_WITH_GRAPHICS PUBLIC glfw)
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
list(APPEND BLT_LINK_FLAG_TARGETS ${PROJECT_NAME})
|
||||||
|
string(ASCII 27 Esc)
|
||||||
|
set(ColourReset "${Esc}[m")
|
||||||
|
set(Blue "${Esc}[34m")
|
||||||
|
message("Setting link flags for targets ${Blue}${BLT_LINK_FLAG_TARGETS}${ColourReset}")
|
||||||
|
if ("${BLT_PRELOAD_PATH}" STREQUAL "")
|
||||||
|
message(STATUS "Setting link flags without asset preloading")
|
||||||
|
set_target_properties(${BLT_LINK_FLAG_TARGETS} PROPERTIES LINK_FLAGS "-sMAX_WEBGL_VERSION=2 -sFULL_ES2=1 -sFULL_ES3 -sASSERTIONS=1 -sUSE_GLFW=3")
|
||||||
|
else ()
|
||||||
|
message(STATUS "Setting link flags including preload file path ${BLT_PRELOAD_PATH}")
|
||||||
|
set_target_properties(${BLT_LINK_FLAG_TARGETS} PROPERTIES LINK_FLAGS "-sMAX_WEBGL_VERSION=2 -sFULL_ES2=1 -sFULL_ES3 -sASSERTIONS=1 -sUSE_GLFW=3 --preload-file ${BLT_PRELOAD_PATH}")
|
||||||
|
endif ()
|
|
@ -49,6 +49,7 @@ namespace blt::gfx
|
||||||
std::vector<loadable_texture> textures_to_load;
|
std::vector<loadable_texture> textures_to_load;
|
||||||
std::vector<texture_file*> loaded_textures;
|
std::vector<texture_file*> loaded_textures;
|
||||||
blt::hashmap_t<std::string, texture_gl2D*> textures_2d;
|
blt::hashmap_t<std::string, texture_gl2D*> textures_2d;
|
||||||
|
std::string resource_prefix;
|
||||||
public:
|
public:
|
||||||
resource_manager() = default;
|
resource_manager() = default;
|
||||||
|
|
||||||
|
@ -72,6 +73,14 @@ namespace blt::gfx
|
||||||
textures_2d[name] = texture;
|
textures_2d[name] = texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the directory used to prefix all asset loading with
|
||||||
|
*/
|
||||||
|
inline void setPrefixDirectory(std::string path)
|
||||||
|
{
|
||||||
|
resource_prefix = std::move(path);
|
||||||
|
}
|
||||||
|
|
||||||
void cleanup();
|
void cleanup();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -185,7 +185,7 @@ namespace blt::gfx
|
||||||
struct texture_gl2D : public texture_gl
|
struct texture_gl2D : public texture_gl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit texture_gl2D(const texture_data& data, GLint colorMode = GL_RGBA8);
|
explicit texture_gl2D(const texture_data& data);
|
||||||
|
|
||||||
texture_gl2D(int width, int height, GLint colorMode = GL_RGBA8);
|
texture_gl2D(int width, int height, GLint colorMode = GL_RGBA8);
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ namespace blt::gfx
|
||||||
|
|
||||||
void resource_manager::enqueue(std::string path, std::string name)
|
void resource_manager::enqueue(std::string path, std::string name)
|
||||||
{
|
{
|
||||||
textures_to_load.emplace_back(std::move(path), std::move(name));
|
textures_to_load.emplace_back(resource_prefix + std::move(path), std::move(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
void resource_manager::load_resources(std::size_t threads)
|
void resource_manager::load_resources(std::size_t threads)
|
||||||
|
|
|
@ -85,8 +85,13 @@ void blt::gfx::texture_gl::setDefaults() const
|
||||||
glTexParameteri(textureBindType, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
glTexParameteri(textureBindType, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
glTexParameteri(textureBindType, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
glTexParameteri(textureBindType, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
// nearest preserves the pixely look
|
// nearest preserves the pixely look
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
glTexParameteri(textureBindType, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(textureBindType, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
#else
|
||||||
glTexParameteri(textureBindType, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
|
glTexParameteri(textureBindType, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
|
||||||
glTexParameteri(textureBindType, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_LINEAR);
|
glTexParameteri(textureBindType, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_LINEAR);
|
||||||
|
#endif
|
||||||
#ifdef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
|
#ifdef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
|
||||||
// Anisotropy helps preserve textures at oblique angles
|
// Anisotropy helps preserve textures at oblique angles
|
||||||
float a = 0;
|
float a = 0;
|
||||||
|
@ -140,12 +145,12 @@ blt::gfx::texture_gl2D::texture_gl2D(int width, int height, GLint colorMode): te
|
||||||
glTexStorage2D(textureBindType, MIPMAP_LEVELS, colorMode, width, height);
|
glTexStorage2D(textureBindType, MIPMAP_LEVELS, colorMode, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
blt::gfx::texture_gl2D::texture_gl2D(const blt::gfx::texture_data& data, GLint colorMode):
|
blt::gfx::texture_gl2D::texture_gl2D(const blt::gfx::texture_data& data):
|
||||||
texture_gl(data.width(), data.height(), GL_TEXTURE_2D, colorMode)
|
texture_gl(data.width(), data.height(), GL_TEXTURE_2D, data.channels() == 4 ? GL_RGBA8 : GL_RGB8)
|
||||||
{
|
{
|
||||||
bind();
|
bind();
|
||||||
setDefaults();
|
setDefaults();
|
||||||
glTexStorage2D(textureBindType, 4, colorMode, data.width(), data.height());
|
glTexStorage2D(textureBindType, 4, textureColorMode, data.width(), data.height());
|
||||||
upload((void*) data.data(), data.channels() == 4 ? GL_RGBA : GL_RGB, 0, 0, 0, data.width(), data.height());
|
upload((void*) data.data(), data.channels() == 4 ? GL_RGBA : GL_RGB, 0, 0, 0, data.width(), data.height());
|
||||||
bind();
|
bind();
|
||||||
generateMipmaps();
|
generateMipmaps();
|
||||||
|
|
|
@ -177,6 +177,9 @@ namespace blt::gfx
|
||||||
|
|
||||||
void init(const window_data& data)
|
void init(const window_data& data)
|
||||||
{
|
{
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
blt::logging::setLogOutputFormat("[${{TIME}}] [${{LOG_LEVEL}}] (${{FILE}}:${{LINE}}) ${{STR}}\n");
|
||||||
|
#endif
|
||||||
/* -- Set up Error Callback -- */
|
/* -- Set up Error Callback -- */
|
||||||
glfwSetErrorCallback(error_callback);
|
glfwSetErrorCallback(error_callback);
|
||||||
BLT_ASSERT(glfwInit() && "Unable to init GLFW. Aborting.");
|
BLT_ASSERT(glfwInit() && "Unable to init GLFW. Aborting.");
|
||||||
|
|
Loading…
Reference in New Issue