diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fca169..8423797 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,6 @@ find_package(LZ4 REQUIRED) include_directories(${X11_INCLUDE_DIR} ${IRRLICHT_INCLUDE_DIR} ${LZ4_INCLUDE_DIR} .) -add_executable(wallengine main.cpp wallpaperengine/shaders/compiler.h wallpaperengine/shaders/compiler.cpp wallpaperengine/project.cpp wallpaperengine/project.h wallpaperengine/scene.cpp wallpaperengine/scene.h wallpaperengine/object.cpp wallpaperengine/object.h wallpaperengine/camera.cpp wallpaperengine/camera.h wallpaperengine/core.cpp wallpaperengine/core.h wallpaperengine/image.cpp wallpaperengine/image.h wallpaperengine/object3d.cpp wallpaperengine/object3d.h wallpaperengine/effect.cpp wallpaperengine/effect.h wallpaperengine/fs/utils.cpp wallpaperengine/fs/utils.h wallpaperengine/irrlicht.cpp wallpaperengine/irrlicht.h wallpaperengine/video/renderer.cpp wallpaperengine/video/renderer.h wallpaperengine/video/node.cpp wallpaperengine/video/node.h wallpaperengine/video/material.cpp wallpaperengine/video/material.h wallpaperengine/texture.cpp wallpaperengine/texture.h wallpaperengine/irr/CImageLoaderTEX.h wallpaperengine/irr/CImageLoaderTEX.cpp wallpaperengine/irr/CPkgReader.h wallpaperengine/irr/CPkgReader.cpp wallpaperengine/irr/CFileList.h wallpaperengine/irr/CFileList.cpp wallpaperengine/irr/vector4d.h) +add_executable(wallengine main.cpp wallpaperengine/shaders/compiler.h wallpaperengine/shaders/compiler.cpp wallpaperengine/project.cpp wallpaperengine/project.h wallpaperengine/scene.cpp wallpaperengine/scene.h wallpaperengine/object.cpp wallpaperengine/object.h wallpaperengine/camera.cpp wallpaperengine/camera.h wallpaperengine/core.cpp wallpaperengine/core.h wallpaperengine/image.cpp wallpaperengine/image.h wallpaperengine/object3d.cpp wallpaperengine/object3d.h wallpaperengine/effect.cpp wallpaperengine/effect.h wallpaperengine/fs/utils.cpp wallpaperengine/fs/utils.h wallpaperengine/irrlicht.cpp wallpaperengine/irrlicht.h wallpaperengine/video/renderer.cpp wallpaperengine/video/renderer.h wallpaperengine/video/node.cpp wallpaperengine/video/node.h wallpaperengine/video/material.cpp wallpaperengine/video/material.h wallpaperengine/texture.cpp wallpaperengine/texture.h wallpaperengine/irr/CImageLoaderTEX.h wallpaperengine/irr/CImageLoaderTEX.cpp wallpaperengine/irr/CPkgReader.h wallpaperengine/irr/CPkgReader.cpp wallpaperengine/irr/CFileList.h wallpaperengine/irr/CFileList.cpp) target_link_libraries(wallengine ${X11_LIBRARIES} ${X11_Xxf86vm_LIB} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${ZLIB_LIBRARIES} ${IRRLICHT_LIBRARY} ${LZ4_LIBRARY}) \ No newline at end of file diff --git a/main.cpp b/main.cpp index 8ccc12b..690ed0a 100644 --- a/main.cpp +++ b/main.cpp @@ -200,5 +200,7 @@ int main (int argc, char* argv[]) } } + delete wp_project; + return 0; } \ No newline at end of file diff --git a/wallpaperengine/effect.cpp b/wallpaperengine/effect.cpp index a01dbee..8a79e42 100644 --- a/wallpaperengine/effect.cpp +++ b/wallpaperengine/effect.cpp @@ -116,12 +116,18 @@ namespace wp { wp::shaders::compiler::ShaderParameter* param = (*cur); ShaderParameter* parameter = new ShaderParameter; + void* defaultValue = param->defaultValue; + + std::map::const_iterator constant = this->m_constants.find (param->identifierName); + + if (constant != this->m_constants.end ()) + defaultValue = (*constant).second; parameter->value = nullptr; if (param->type == "vec4") { - irr::core::vector3df* vec = (irr::core::vector3df*) param->defaultValue; + irr::core::vector3df* vec = (irr::core::vector3df*) defaultValue; irr::f32* val = new irr::f32 [4]; val [0] = vec->X; @@ -134,7 +140,7 @@ namespace wp } else if (param->type == "vec3") { - irr::core::vector3df* vec = (irr::core::vector3df*) param->defaultValue; + irr::core::vector3df* vec = (irr::core::vector3df*) defaultValue; irr::f32* val = new irr::f32 [3]; val [0] = vec->X; @@ -146,7 +152,7 @@ namespace wp } else if (param->type == "vec2") { - irr::core::vector2df* vec = (irr::core::vector2df*) param->defaultValue; + irr::core::vector2df* vec = (irr::core::vector2df*) defaultValue; irr::f32* val = new irr::f32 [2]; val [0] = vec->X; @@ -157,7 +163,7 @@ namespace wp } else if (param->type == "float") { - irr::f32* org = (irr::f32*) param->defaultValue; + irr::f32* org = (irr::f32*) defaultValue; irr::f32* val = new irr::f32; *val = *org; @@ -167,7 +173,7 @@ namespace wp } else if (param->type == "int") { - irr::s32* org = (irr::s32*) param->defaultValue; + irr::s32* org = (irr::s32*) defaultValue; irr::s32* val = new irr::s32; *val = *org; @@ -196,13 +202,20 @@ namespace wp if (param == nullptr) continue; + void* defaultValue = param->defaultValue; + + std::map::const_iterator constant = this->m_constants.find (param->identifierName); + + if (constant != this->m_constants.end ()) + defaultValue = (*constant).second; + ShaderParameter* parameter = new ShaderParameter; parameter->value = nullptr; if (param->type == "vec4") { - irr::core::vector3df* vec = (irr::core::vector3df*) param->defaultValue; + irr::core::vector3df* vec = (irr::core::vector3df*) defaultValue; parameter->value = new irr::f32 [4]; @@ -215,7 +228,7 @@ namespace wp } else if (param->type == "vec3") { - irr::core::vector3df* vec = (irr::core::vector3df*) param->defaultValue; + irr::core::vector3df* vec = (irr::core::vector3df*) defaultValue; parameter->value = new irr::f32 [3]; @@ -227,7 +240,7 @@ namespace wp } else if (param->type == "vec2") { - irr::core::vector2df* vec = (irr::core::vector2df*) param->defaultValue; + irr::core::vector2df* vec = (irr::core::vector2df*) defaultValue; parameter->value = new irr::f32 [2]; @@ -239,14 +252,14 @@ namespace wp else if (param->type == "float") { parameter->value = new irr::f32; - *(irr::f32*) parameter->value = *(irr::f32*) param->defaultValue; + *(irr::f32*) parameter->value = *(irr::f32*) defaultValue; parameter->type = ParameterType::TYPE_FLOAT; } else if (param->type == "int") { parameter->value = new irr::s32; - *(irr::s32*) parameter->value = *(irr::s32*) param->defaultValue; + *(irr::s32*) parameter->value = *(irr::s32*) defaultValue; parameter->type = ParameterType::TYPE_INT; } @@ -413,19 +426,19 @@ namespace wp switch ((*vertcur).second->type) { case ParameterType::TYPE_FLOAT: - services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second, 1); + services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second->value, 1); break; case ParameterType::TYPE_VEC2: - services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second, 2); + services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second->value, 2); break; case ParameterType::TYPE_VEC3: - services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second, 3); + services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second->value, 3); break; case ParameterType::TYPE_VEC4: - services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second, 4); + services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::f32*) (*vertcur).second->value, 4); break; case ParameterType::TYPE_INT: - services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::s32*) (*vertcur).second, 1); + services->setVertexShaderConstant ((*vertcur).first.c_str (), (irr::s32*) (*vertcur).second->value, 1); break; } @@ -439,19 +452,19 @@ namespace wp switch ((*pixelcur).second->type) { case ParameterType::TYPE_FLOAT: - services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second, 1); + services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second->value, 1); break; case ParameterType::TYPE_VEC2: - services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second, 2); + services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second->value, 2); break; case ParameterType::TYPE_VEC3: - services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second, 3); + services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second->value, 3); break; case ParameterType::TYPE_VEC4: - services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second, 4); + services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::f32*) (*pixelcur).second->value, 4); break; case ParameterType::TYPE_INT: - services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::s32*) (*pixelcur).second, 1); + services->setPixelShaderConstant ((*pixelcur).first.c_str (), (irr::s32*) (*pixelcur).second->value, 1); break; } diff --git a/wallpaperengine/fs/utils.cpp b/wallpaperengine/fs/utils.cpp index aa4d7d8..4235aca 100644 --- a/wallpaperengine/fs/utils.cpp +++ b/wallpaperengine/fs/utils.cpp @@ -22,6 +22,7 @@ namespace wp memset (filedata, 0, reader->getSize () + 1); reader->read (filedata, reader->getSize ()); + reader->drop (); std::string content = filedata; delete [] filedata;