From 85b520d97dbd24d04536771ab7c6a323e3e13c5a Mon Sep 17 00:00:00 2001 From: Tatsuya Shiozawa Date: Sun, 23 Jun 2024 01:25:14 +0900 Subject: [PATCH 1/3] Extend MSVC version detection range. Due to MSVC Toolset Minor Version Number 14.40 in VS 2022 v17.10. Refer to: https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/ --- Samples/Cocos2d-x/Demo/CMakeLists.txt | 2 +- Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt | 2 +- Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt | 2 +- Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt | 2 +- Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Samples/Cocos2d-x/Demo/CMakeLists.txt b/Samples/Cocos2d-x/Demo/CMakeLists.txt index 2152daa..ee13903 100644 --- a/Samples/Cocos2d-x/Demo/CMakeLists.txt +++ b/Samples/Cocos2d-x/Demo/CMakeLists.txt @@ -129,7 +129,7 @@ elseif(WINDOWS) elseif(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019 set(MSVC_NUM 142) - elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) + elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) # Visual Studio 2022 set(MSVC_NUM 143) elseif(MSVC) diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt b/Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt index 70373d2..3b23cd6 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt @@ -63,7 +63,7 @@ elseif(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019 set(COMPILER 142) set(MSVC_YEAR 2019) -elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) +elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) # Visual Studio 2022 set(COMPILER 143) set(MSVC_YEAR 2022) diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt b/Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt index 33ae114..4ec882c 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt @@ -57,7 +57,7 @@ elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) elseif(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019 set(COMPILER 142) -elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) +elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) # Visual Studio 2022 set(COMPILER 143) elseif(MSVC) diff --git a/Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt b/Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt index 68bed6d..6893835 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt @@ -66,7 +66,7 @@ elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) elseif(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019 set(COMPILER 142) -elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) +elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) # Visual Studio 2022 set(COMPILER 143) elseif(MSVC) diff --git a/Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt b/Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt index d439518..c290b79 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt +++ b/Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt @@ -68,7 +68,7 @@ elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) elseif(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019 set(COMPILER 142) -elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) +elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) # Visual Studio 2022 set(COMPILER 143) elseif(MSVC) From 9eb3bce1274695b062e9feacaca6a3496d74a694 Mon Sep 17 00:00:00 2001 From: Tatsuya Shiozawa Date: Wed, 26 Jun 2024 12:39:30 +0900 Subject: [PATCH 2/3] Update CHANGELOG This commit was delegated work by wada-at-live2d-com. --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e82bc5f..2a43bc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [Unreleased] + +### Fixed + +* Implement support for `MSVC19.40` in the VS2022 build. by [@tatsuya-shiozawa](https://github.com/Live2D/CubismNativeSamples/pull/46) + + ## [5-r.1] - 2024-03-26 ### Added From add19685e7d2cba4c8bc20df3d2dd4aafa36cafb Mon Sep 17 00:00:00 2001 From: wada Date: Thu, 19 Dec 2024 11:12:16 +0900 Subject: [PATCH 3/3] Update to Cubism 5 SDK for Native R2 --- .editorconfig | 3 + .gitignore | 2 + CHANGELOG.md | 52 +- Core/CHANGELOG.md | 25 + Core/README.ja.md | 3 +- Core/README.md | 3 +- Core/RedistributableFiles.txt | 12 +- Framework | 2 +- NOTICE.ja.md | 56 +- NOTICE.md | 56 +- README.ja.md | 50 +- README.md | 50 +- Samples/Cocos2d-x/.editorconfig | 5 - Samples/Cocos2d-x/Demo/CMakeLists.txt | 306 ------- .../Cocos2d-x/Demo/Classes/AppDelegate.cpp | 154 ---- Samples/Cocos2d-x/Demo/Classes/AppDelegate.h | 58 -- Samples/Cocos2d-x/Demo/Classes/AppMacros.h | 56 -- .../Cocos2d-x/Demo/Classes/LAppAllocator.hpp | 29 - .../Demo/Classes/LAppLive2DManager.cpp | 474 ----------- .../Demo/Classes/LAppLive2DManager.hpp | 171 ---- .../Classes/LAppLive2DManagerInternal.cpp | 208 ----- .../Demo/Classes/LAppLive2DManagerInternal.h | 16 - Samples/Cocos2d-x/Demo/Classes/LAppPal.cpp | 61 -- Samples/Cocos2d-x/Demo/Classes/LAppPal.hpp | 75 -- Samples/Cocos2d-x/Demo/Classes/LAppSprite.cpp | 100 --- Samples/Cocos2d-x/Demo/Classes/LAppSprite.hpp | 77 -- Samples/Cocos2d-x/Demo/Classes/LAppView.cpp | 266 ------ Samples/Cocos2d-x/Demo/Classes/LAppView.hpp | 52 -- .../Cocos2d-x/Demo/Classes/SampleScene.cpp | 202 ----- Samples/Cocos2d-x/Demo/Classes/SampleScene.h | 46 -- .../Cocos2d-x/Demo/Classes/TouchManager.cpp | 186 ----- Samples/Cocos2d-x/Demo/Classes/TouchManager.h | 64 -- .../Cocos2d-x/Demo/Resources/CloseNormal.png | Bin 3596 -> 0 bytes .../Demo/Resources/CloseSelected.png | Bin 2810 -> 0 bytes .../Cocos2d-x/Demo/Resources/HelloWorld.png | Bin 37864 -> 0 bytes .../Demo/Resources/fonts/Marker Felt.ttf | Bin 25776 -> 0 bytes .../Cocos2d-x/Demo/Resources/fonts/arial.ttf | Bin 778552 -> 0 bytes Samples/Cocos2d-x/Demo/Resources/res/.gitkeep | 0 .../Cocos2d-x/Demo/proj.android/.gitignore | 4 - .../Demo/proj.android/app/AndroidManifest.xml | 35 - .../Demo/proj.android/app/build.gradle | 102 --- .../Demo/proj.android/app/debug.keystore | Bin 2521 -> 0 bytes .../Demo/proj.android/app/jni/demo/main.cpp | 42 - .../Demo/proj.android/app/proguard-rules.pro | 39 - .../app/res/mipmap-hdpi/ic_launcher.png | Bin 22975 -> 0 bytes .../app/res/mipmap-mdpi/ic_launcher.png | Bin 19756 -> 0 bytes .../app/res/mipmap-xhdpi/ic_launcher.png | Bin 26514 -> 0 bytes .../app/res/mipmap-xxhdpi/ic_launcher.png | Bin 35195 -> 0 bytes .../proj.android/app/res/values/strings.xml | 3 - .../app/src/org/cocos2dx/cpp/AppActivity.java | 58 -- .../Cocos2d-x/Demo/proj.android/build.gradle | 26 - .../Demo/proj.android/gradle.properties | 42 - .../gradle/wrapper/gradle-wrapper.jar | Bin 49896 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - Samples/Cocos2d-x/Demo/proj.android/gradlew | 164 ---- .../Cocos2d-x/Demo/proj.android/gradlew.bat | 90 --- .../Demo/proj.android/settings.gradle | 4 - .../Demo/proj.ios/scripts/proj_xcode | 15 - .../Demo/proj.ios/src/AppController.h | 38 - .../Demo/proj.ios/src/AppController.mm | 147 ---- .../AppIcon.appiconset/Contents.json | 157 ---- .../AppIcon.appiconset/Icon-20.png | Bin 2374 -> 0 bytes .../AppIcon.appiconset/Icon-20@2x.png | Bin 5478 -> 0 bytes .../AppIcon.appiconset/Icon-20@3x.png | Bin 23871 -> 0 bytes .../AppIcon.appiconset/Icon-29.png | Bin 4038 -> 0 bytes .../AppIcon.appiconset/Icon-29@2x.png | Bin 8433 -> 0 bytes .../AppIcon.appiconset/Icon-29@3x.png | Bin 14665 -> 0 bytes .../AppIcon.appiconset/Icon-40.png | Bin 5478 -> 0 bytes .../AppIcon.appiconset/Icon-40@2x.png | Bin 12489 -> 0 bytes .../AppIcon.appiconset/Icon-40@3x.png | Bin 23871 -> 0 bytes .../AppIcon.appiconset/Icon-50.png | Bin 7038 -> 0 bytes .../AppIcon.appiconset/Icon-50@2x.png | Bin 17283 -> 0 bytes .../AppIcon.appiconset/Icon-57.png | Bin 8960 -> 0 bytes .../AppIcon.appiconset/Icon-57@2x.png | Bin 16537 -> 0 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 23871 -> 0 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 36700 -> 0 bytes .../AppIcon.appiconset/Icon-72.png | Bin 11453 -> 0 bytes .../AppIcon.appiconset/Icon-72@2x.png | Bin 26403 -> 0 bytes .../AppIcon.appiconset/Icon-76.png | Bin 13250 -> 0 bytes .../AppIcon.appiconset/Icon-76@2x.png | Bin 33665 -> 0 bytes .../AppIcon.appiconset/Icon-83.5@2x.png | Bin 36415 -> 0 bytes .../src/Images.xcassets/Contents.json | 6 - .../Cocos2d-x/Demo/proj.ios/src/Info.plist | 43 - .../Demo/proj.ios/src/LaunchScreen.storyboard | 45 -- .../proj.ios/src/LaunchScreenBackground.png | Bin 587472 -> 0 bytes .../Cocos2d-x/Demo/proj.ios/src/Prefix.pch | 12 - .../Demo/proj.ios/src/RootViewController.h | 35 - .../Demo/proj.ios/src/RootViewController.mm | 129 --- .../Demo/proj.ios/src/exportoptions.plist | 15 - Samples/Cocos2d-x/Demo/proj.ios/src/main.m | 7 - .../Demo/proj.linux/scripts/fix_libs | 20 - .../Demo/proj.linux/scripts/make_gcc | 15 - .../Cocos2d-x/Demo/proj.linux/src/main.cpp | 39 - .../Demo/proj.mac/scripts/make_xcode | 14 - .../Demo/proj.mac/scripts/proj_xcode | 12 - Samples/Cocos2d-x/Demo/proj.mac/src/Icon.icns | Bin 716318 -> 0 bytes .../Cocos2d-x/Demo/proj.mac/src/Info.plist | 36 - .../Cocos2d-x/Demo/proj.mac/src/Prefix.pch | 11 - Samples/Cocos2d-x/Demo/proj.mac/src/main.cpp | 35 - .../Demo/proj.win/scripts/_msvc_common.bat | 74 -- .../Demo/proj.win/scripts/proj_msvc2015.bat | 13 - .../Demo/proj.win/scripts/proj_msvc2017.bat | 18 - .../Demo/proj.win/scripts/proj_msvc2019.bat | 18 - .../Demo/proj.win/scripts/proj_msvc2022.bat | 18 - Samples/Cocos2d-x/Demo/proj.win/src/game.rc | 86 -- Samples/Cocos2d-x/Demo/proj.win/src/main.cpp | 42 - Samples/Cocos2d-x/Demo/proj.win/src/main.h | 37 - .../Cocos2d-x/Demo/proj.win/src/res/game.ico | Bin 47629 -> 0 bytes .../Cocos2d-x/Demo/proj.win/src/resource.h | 44 - Samples/Cocos2d-x/README.ja.md | 206 ----- Samples/Cocos2d-x/README.md | 202 ----- .../thirdParty/scripts/setup_cocos2d | 26 - .../thirdParty/scripts/setup_cocos2d.bat | 30 - .../Demo/proj.d3d11.cmake/CMakeLists.txt | 11 +- .../scripts/nmake_msvc2013.bat | 14 - .../scripts/proj_msvc2013.bat | 14 - .../Demo/proj.d3d11.cmake/src/CMakeLists.txt | 4 + .../src/CubismDirectXRenderer.cpp | 247 ------ .../src/CubismDirectXRenderer.hpp | 25 +- .../src/CubismDirectXView.cpp | 14 +- .../src/CubismDirectXView.hpp | 4 + .../proj.d3d11.cmake/src/CubismSprite.cpp | 14 +- .../proj.d3d11.cmake/src/CubismSprite.hpp | 9 +- .../src/CubismSpriteShader.cpp | 280 +++++++ .../src/CubismSpriteShader.hpp | 53 ++ .../src/CubismTextureManager.cpp | 2 +- .../src/CubismUserModelExtend.cpp | 38 +- .../src/CubismUserModelExtend.hpp | 3 +- .../Demo/proj.d3d11.cmake/src/LAppDefine.cpp | 5 + .../Demo/proj.d3d11.cmake/src/LAppDefine.hpp | 3 + .../proj.d3d11.cmake/src/LAppDelegate.cpp | 283 ------- .../proj.d3d11.cmake/src/LAppDelegate.hpp | 24 - .../src/LAppLive2DManager.cpp | 44 +- .../Demo/proj.d3d11.cmake/src/LAppModel.cpp | 37 +- .../Demo/proj.d3d11.cmake/src/LAppModel.hpp | 6 +- .../Demo/proj.d3d11.cmake/src/LAppPal.cpp | 90 +-- .../Demo/proj.d3d11.cmake/src/LAppPal.hpp | 39 +- .../Demo/proj.d3d11.cmake/src/LAppSprite.cpp | 14 +- .../Demo/proj.d3d11.cmake/src/LAppSprite.hpp | 7 +- .../proj.d3d11.cmake/src/LAppSpriteShader.cpp | 280 +++++++ .../proj.d3d11.cmake/src/LAppSpriteShader.hpp | 53 ++ .../src/LAppTextureManager.cpp | 2 +- .../Demo/proj.d3d11.cmake/src/LAppView.cpp | 26 +- .../Demo/proj.d3d11.cmake/src/LAppView.hpp | 3 + .../Demo/proj.d3d11.cmake/src/mainMinimum.cpp | 38 - Samples/D3D11/README.ja.md | 2 - Samples/D3D11/README.md | 2 - Samples/D3D11/Shaders/SpriteEffect.fx | 46 ++ .../thirdParty/scripts/setup_msvc2013.bat | 21 - .../D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt | 10 +- .../scripts/nmake_msvc2013.bat | 14 - .../proj.d3d9.cmake/scripts/proj_msvc2013.bat | 14 - .../Demo/proj.d3d9.cmake/src/CMakeLists.txt | 4 + .../src/CubismDirectXRenderer.cpp | 108 --- .../src/CubismDirectXRenderer.hpp | 18 - .../proj.d3d9.cmake/src/CubismDirectXView.cpp | 20 +- .../proj.d3d9.cmake/src/CubismDirectXView.hpp | 3 + .../Demo/proj.d3d9.cmake/src/CubismSprite.cpp | 135 +--- .../Demo/proj.d3d9.cmake/src/CubismSprite.hpp | 8 +- .../src/CubismSpriteShader.cpp | 126 +++ .../src/CubismSpriteShader.hpp | 56 ++ .../src/CubismUserModelExtend.cpp | 38 +- .../src/CubismUserModelExtend.hpp | 3 +- .../Demo/proj.d3d9.cmake/src/LAppDefine.cpp | 5 + .../Demo/proj.d3d9.cmake/src/LAppDefine.hpp | 3 + .../Demo/proj.d3d9.cmake/src/LAppDelegate.cpp | 105 --- .../Demo/proj.d3d9.cmake/src/LAppDelegate.hpp | 19 - .../proj.d3d9.cmake/src/LAppLive2DManager.cpp | 43 +- .../Demo/proj.d3d9.cmake/src/LAppModel.cpp | 35 +- .../Demo/proj.d3d9.cmake/src/LAppModel.hpp | 6 +- .../D3D9/Demo/proj.d3d9.cmake/src/LAppPal.cpp | 76 +- .../D3D9/Demo/proj.d3d9.cmake/src/LAppPal.hpp | 40 +- .../Demo/proj.d3d9.cmake/src/LAppSprite.cpp | 41 +- .../Demo/proj.d3d9.cmake/src/LAppSprite.hpp | 10 +- .../proj.d3d9.cmake/src/LAppSpriteShader.cpp | 128 +++ .../proj.d3d9.cmake/src/LAppSpriteShader.hpp | 56 ++ .../src/LAppTextureManager.cpp | 7 +- .../Demo/proj.d3d9.cmake/src/LAppView.cpp | 57 +- .../Demo/proj.d3d9.cmake/src/LAppView.hpp | 2 + Samples/D3D9/Shaders/SpriteEffect.fx | 51 ++ .../Metal/Demo/proj.ios.cmake/CMakeLists.txt | 3 +- .../Demo/proj.ios.cmake/src/CMakeLists.txt | 9 +- .../Metal/Demo/proj.ios.cmake/src/Info.plist | 6 - .../Demo/proj.ios.cmake/src/LAppDefine.h | 3 + .../Demo/proj.ios.cmake/src/LAppDefine.mm | 5 + .../proj.ios.cmake/src/LAppLive2DManager.mm | 22 +- .../Metal/Demo/proj.ios.cmake/src/LAppModel.h | 6 +- .../Demo/proj.ios.cmake/src/LAppModel.mm | 35 +- .../Demo/proj.ios.cmake/src/LAppSprite.mm | 48 +- .../proj.ios.cmake/src/LAppTextureManager.mm | 1 - .../src/Shaders/SpriteEffect.metal | 33 + Samples/Metal/README.ja.md | 4 +- Samples/Metal/README.md | 4 +- .../proj.android.cmake/Full/app/build.gradle | 6 +- .../Full/app/src/main/AndroidManifest.xml | 2 +- .../Full/app/src/main/cpp/CMakeLists.txt | 2 + .../Full/app/src/main/cpp/LAppDefine.cpp | 7 + .../Full/app/src/main/cpp/LAppDefine.hpp | 4 + .../Full/app/src/main/cpp/LAppDelegate.cpp | 95 +-- .../Full/app/src/main/cpp/LAppDelegate.hpp | 20 +- .../app/src/main/cpp/LAppLive2DManager.cpp | 18 +- .../app/src/main/cpp/LAppLive2DManager.hpp | 7 - .../Full/app/src/main/cpp/LAppModel.cpp | 35 +- .../Full/app/src/main/cpp/LAppModel.hpp | 6 +- .../app/src/main/cpp/LAppSpriteShader.cpp | 106 +++ .../app/src/main/cpp/LAppSpriteShader.hpp | 57 ++ .../app/src/main/cpp/LAppTextureManager.cpp | 13 + .../app/src/main/cpp/LAppTextureManager.hpp | 6 + .../Full/app/src/main/cpp/LAppView.cpp | 58 +- .../Full/app/src/main/cpp/LAppView.hpp | 9 +- .../java/com/live2d/demo/MainActivity.java | 37 +- .../Demo/proj.android.cmake/Full/build.gradle | 2 +- .../proj.android.cmake/Full/gradle.properties | 10 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Minimum/app/build.gradle | 6 +- .../Minimum/app/src/main/AndroidManifest.xml | 2 +- .../Minimum/app/src/main/cpp/CMakeLists.txt | 2 + .../Minimum/app/src/main/cpp/LAppDefine.cpp | 7 + .../Minimum/app/src/main/cpp/LAppDefine.hpp | 4 + .../app/src/main/cpp/LAppMinimumDelegate.cpp | 45 -- .../app/src/main/cpp/LAppMinimumDelegate.hpp | 5 - .../app/src/main/cpp/LAppMinimumModel.cpp | 35 +- .../app/src/main/cpp/LAppMinimumModel.hpp | 3 +- .../app/src/main/cpp/LAppMinimumView.cpp | 12 +- .../app/src/main/cpp/LAppMinimumView.hpp | 9 +- .../app/src/main/cpp/LAppSpriteShader.cpp | 73 ++ .../app/src/main/cpp/LAppSpriteShader.hpp | 52 ++ .../app/src/main/cpp/LAppTextureManager.cpp | 3 + .../java/com/live2d/demo/MainActivity.java | 37 +- .../proj.android.cmake/Minimum/build.gradle | 2 +- .../Minimum/gradle.properties | 10 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Demo/proj.harmonyos.cmake/Full/.gitignore | 11 + .../Full/AppScope/app.json5 | 10 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2041 bytes .../Full/build-profile.json5 | 35 + .../Full/entry/.gitignore | 6 + .../Full/entry/build-profile.json5 | 19 + .../Full/entry/hvigorfile.ts | 6 + .../Full/entry/obfuscation-rules.txt | 18 + .../Full/entry/oh-package-lock.json5 | 18 + .../Full/entry/oh-package.json5 | 11 + .../Full/entry/src/main/cpp/CMakeLists.txt | 87 ++ .../entry/src/main/cpp/src/CMakeLists.txt | 27 + .../entry/src/main/cpp/src/LAppAllocator.cpp | 54 ++ .../entry/src/main/cpp/src/LAppAllocator.hpp | 52 ++ .../entry/src/main/cpp/src/LAppDefine.cpp | 68 ++ .../entry/src/main/cpp/src/LAppDefine.hpp | 64 ++ .../entry/src/main/cpp/src/LAppDelegate.cpp | 244 ++++++ .../entry/src/main/cpp/src/LAppDelegate.hpp | 158 ++++ .../src/main/cpp/src/LAppLive2DManager.cpp | 272 +++++++ .../src/main/cpp/src/LAppLive2DManager.hpp | 127 +++ .../entry/src/main/cpp/src}/LAppModel.cpp | 453 +++-------- .../entry/src/main/cpp/src}/LAppModel.hpp | 85 +- .../Full/entry/src/main/cpp/src/LAppPal.cpp | 79 ++ .../Full/entry/src/main/cpp/src/LAppPal.hpp | 88 ++ .../entry/src/main/cpp/src/LAppSprite.cpp | 130 +++ .../entry/src/main/cpp/src/LAppSprite.hpp | 116 +++ .../src/main/cpp/src/LAppSpriteShader.cpp | 106 +++ .../src/main/cpp/src/LAppSpriteShader.hpp | 55 ++ .../src/main/cpp/src/LAppTextureManager.cpp | 129 +++ .../src/main/cpp/src/LAppTextureManager.hpp | 99 +++ .../Full/entry/src/main/cpp/src/LAppView.cpp | 391 +++++++++ .../Full/entry/src/main/cpp/src/LAppView.hpp | 159 ++++ .../src/main/cpp/src/LAppWavFileHandler.cpp | 352 ++++++++ .../src/main/cpp/src/LAppWavFileHandler.hpp | 234 ++++++ .../entry/src/main/cpp/src/NapiBridgeC.cpp | 355 ++++++++ .../entry/src/main/cpp/src/NapiBridgeC.hpp | 33 + .../entry/src/main/cpp/src/TouchManager.cpp | 97 +++ .../entry/src/main/cpp/src/TouchManager.hpp | 109 +++ .../src/main/cpp/types/libentry/Demo.d.ts | 11 + .../main/cpp/types/libentry/oh-package.json5 | 6 + .../main/ets/entryability/EntryAbility.ets | 52 ++ .../Full/entry/src/main/ets/pages/Index.ets | 36 + .../Full/entry/src/main/module.json5 | 39 + .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 + .../src/main/resources/base/media/icon.png | Bin 0 -> 2041 bytes .../main/resources/base/media/startIcon.png | Bin 0 -> 4351 bytes .../resources/base/profile/main_pages.json | 5 + .../main/resources/en_US/element/string.json | 16 + .../main/resources/zh_CN/element/string.json | 16 + .../src/ohosTest/ets/test/Ability.test.ets | 35 + .../entry/src/ohosTest/ets/test/List.test.ets | 5 + .../ohosTest/ets/testability/TestAbility.ets | 50 ++ .../ohosTest/ets/testability/pages/Index.ets | 17 + .../ets/testrunner/OpenHarmonyTestRunner.ets | 47 ++ .../Full/entry/src/ohosTest/module.json5 | 38 + .../resources/base/element/color.json | 8 + .../resources/base/element/string.json | 16 + .../ohosTest/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/test_pages.json | 5 + .../Full/entry/src/test/List.test.ets | 5 + .../Full/entry/src/test/LocalUnit.test.ets | 33 + .../Full/hvigor/hvigor-config.json5 | 5 + .../proj.harmonyos.cmake/Full/hvigorfile.ts | 6 + .../Full/oh-package-lock.json5 | 20 + .../Full/oh-package.json5 | 14 + .../OpenGL/Demo/proj.ios.cmake/CMakeLists.txt | 2 +- .../OpenGL/Demo/proj.ios.cmake/src/Info.plist | 6 - .../proj.ios.cmake/src/LAppLive2DManager.mm | 13 +- .../Demo/proj.ios.cmake/src/LAppModel.h | 6 +- .../Demo/proj.ios.cmake/src/LAppModel.mm | 35 +- .../proj.ios.cmake/src/LAppTextureManager.mm | 3 + .../Demo/proj.ios.cmake/src/ViewController.mm | 10 +- .../proj.ios.cmake/src/minimum/MinLAppModel.h | 4 +- .../src/minimum/MinLAppModel.mm | 35 +- .../src/minimum/MinLAppTextureManager.mm | 3 + .../Demo/proj.linux.cmake/CMakeLists.txt | 7 +- .../Demo/proj.linux.cmake/src/CMakeLists.txt | 2 + .../src/CubismUserModelExtend.cpp | 38 +- .../src/CubismUserModelExtend.hpp | 3 +- .../Demo/proj.linux.cmake/src/LAppDefine.cpp | 7 + .../Demo/proj.linux.cmake/src/LAppDefine.hpp | 4 + .../proj.linux.cmake/src/LAppDelegate.cpp | 48 +- .../proj.linux.cmake/src/LAppDelegate.hpp | 5 - .../src/LAppLive2DManager.cpp | 9 +- .../Demo/proj.linux.cmake/src/LAppModel.cpp | 35 +- .../Demo/proj.linux.cmake/src/LAppModel.hpp | 6 +- .../proj.linux.cmake/src/LAppSpriteShader.cpp | 107 +++ .../proj.linux.cmake/src/LAppSpriteShader.hpp | 57 ++ .../src/LAppTextureManager.cpp | 3 + .../Demo/proj.linux.cmake/src/LAppView.cpp | 16 +- .../Demo/proj.linux.cmake/src/LAppView.hpp | 4 +- .../OpenGL/Demo/proj.mac.cmake/CMakeLists.txt | 5 + .../Demo/proj.mac.cmake/src/CMakeLists.txt | 2 + .../src/CubismUserModelExtend.cpp | 38 +- .../src/CubismUserModelExtend.hpp | 3 +- .../Demo/proj.mac.cmake/src/LAppDefine.cpp | 7 + .../Demo/proj.mac.cmake/src/LAppDefine.hpp | 4 + .../Demo/proj.mac.cmake/src/LAppDelegate.cpp | 48 +- .../Demo/proj.mac.cmake/src/LAppDelegate.hpp | 5 - .../proj.mac.cmake/src/LAppLive2DManager.cpp | 9 +- .../Demo/proj.mac.cmake/src/LAppModel.cpp | 35 +- .../Demo/proj.mac.cmake/src/LAppModel.hpp | 6 +- .../proj.mac.cmake/src/LAppSpriteShader.cpp | 110 +++ .../proj.mac.cmake/src/LAppSpriteShader.hpp | 61 ++ .../proj.mac.cmake/src/LAppTextureManager.cpp | 3 + .../Demo/proj.mac.cmake/src/LAppView.cpp | 16 +- .../Demo/proj.mac.cmake/src/LAppView.hpp | 4 +- .../OpenGL/Demo/proj.win.cmake/CMakeLists.txt | 12 +- .../proj.win.cmake/scripts/nmake_msvc2013.bat | 14 - .../proj.win.cmake/scripts/proj_msvc2013.bat | 14 - .../Demo/proj.win.cmake/src/CMakeLists.txt | 2 + .../src/CubismUserModelExtend.cpp | 38 +- .../src/CubismUserModelExtend.hpp | 3 +- .../Demo/proj.win.cmake/src/LAppDefine.cpp | 7 + .../Demo/proj.win.cmake/src/LAppDefine.hpp | 4 + .../Demo/proj.win.cmake/src/LAppDelegate.cpp | 81 +- .../Demo/proj.win.cmake/src/LAppDelegate.hpp | 10 - .../proj.win.cmake/src/LAppLive2DManager.cpp | 43 +- .../Demo/proj.win.cmake/src/LAppModel.cpp | 35 +- .../Demo/proj.win.cmake/src/LAppModel.hpp | 6 +- .../Demo/proj.win.cmake/src/LAppPal.cpp | 41 +- .../Demo/proj.win.cmake/src/LAppPal.hpp | 18 + .../proj.win.cmake/src/LAppSpriteShader.cpp | 108 +++ .../proj.win.cmake/src/LAppSpriteShader.hpp | 57 ++ .../proj.win.cmake/src/LAppTextureManager.cpp | 3 + .../Demo/proj.win.cmake/src/LAppView.cpp | 18 +- .../Demo/proj.win.cmake/src/LAppView.hpp | 4 +- .../OpenGL/Demo/proj.win.cmake/src/main.cpp | 8 + Samples/OpenGL/README.ja.md | 14 +- Samples/OpenGL/README.md | 14 +- .../OpenGL/Shaders/Standard/FragSprite.frag | 17 + .../OpenGL/Shaders/Standard/VertSprite.vert | 18 + .../OpenGL/Shaders/StandardES/FragSprite.frag | 19 + .../OpenGL/Shaders/StandardES/VertSprite.vert | 18 + .../scripts/setup_glew_glfw_vs2013.bat | 45 -- .../OpenGL/thirdParty/scripts/setup_ios_cmake | 2 +- Samples/OpenGL/thirdParty/stb/README.md | 18 +- Samples/OpenGL/thirdParty/stb/stb_image.h | 355 ++++---- .../Demo/proj.linux.cmake/CMakeLists.txt | 119 +++ .../Demo/proj.linux.cmake/scripts/make_gcc | 46 ++ .../Demo/proj.linux.cmake/src/CMakeLists.txt | 57 ++ .../src/CubismSampleViewMatrix.cpp | 69 ++ .../src/CubismSampleViewMatrix.hpp | 27 + .../src/CubismUserModelExtend.cpp | 496 ++++++++++++ .../src/CubismUserModelExtend.hpp | 120 +++ .../proj.linux.cmake/src}/LAppAllocator.cpp | 20 +- .../proj.linux.cmake/src/LAppAllocator.hpp | 52 ++ .../Demo/proj.linux.cmake/src}/LAppDefine.cpp | 17 +- .../Demo/proj.linux.cmake/src}/LAppDefine.hpp | 32 +- .../proj.linux.cmake/src/LAppDelegate.cpp | 295 +++++++ .../proj.linux.cmake/src/LAppDelegate.hpp | 168 ++++ .../src/LAppLive2DManager.cpp | 319 ++++++++ .../src/LAppLive2DManager.hpp | 132 +++ .../Demo/proj.linux.cmake/src/LAppModel.cpp | 652 +++++++++++++++ .../Demo/proj.linux.cmake/src/LAppModel.hpp | 199 +++++ .../Demo/proj.linux.cmake/src/LAppPal.cpp | 122 +++ .../Demo/proj.linux.cmake/src/LAppPal.hpp | 101 +++ .../Demo/proj.linux.cmake/src/LAppSprite.cpp | 258 ++++++ .../Demo/proj.linux.cmake/src/LAppSprite.hpp | 207 +++++ .../src/LAppTextureManager.cpp | 331 ++++++++ .../src/LAppTextureManager.hpp | 150 ++++ .../Demo/proj.linux.cmake/src/LAppView.cpp | 762 ++++++++++++++++++ .../Demo/proj.linux.cmake/src/LAppView.hpp | 241 ++++++ .../src/LAppWavFileHandler.cpp | 232 ++++++ .../src/LAppWavFileHandler.hpp | 182 +++++ .../src/MouseActionManager.cpp | 141 ++++ .../src/MouseActionManager.hpp | 149 ++++ .../proj.linux.cmake/src/SwapchainManager.cpp | 212 +++++ .../proj.linux.cmake/src/SwapchainManager.hpp | 156 ++++ .../proj.linux.cmake/src/TouchManager.cpp | 97 +++ .../proj.linux.cmake/src/TouchManager.hpp | 104 +++ .../proj.linux.cmake/src/VulkanManager.cpp | 576 +++++++++++++ .../proj.linux.cmake/src/VulkanManager.hpp | 288 +++++++ .../Vulkan/Demo/proj.linux.cmake/src/main.cpp | 22 + .../Demo/proj.linux.cmake/src/mainMinimum.cpp | 352 ++++++++ .../Vulkan/Demo/proj.win.cmake/CMakeLists.txt | 11 +- .../Demo/proj.win.cmake/src/CMakeLists.txt | 2 + .../Demo/proj.win.cmake/src/LAppDefine.cpp | 7 + .../Demo/proj.win.cmake/src/LAppDefine.hpp | 4 + .../Demo/proj.win.cmake/src/LAppDelegate.cpp | 19 +- .../Demo/proj.win.cmake/src/LAppDelegate.hpp | 11 +- .../proj.win.cmake/src/LAppLive2DManager.cpp | 45 +- .../Demo/proj.win.cmake/src/LAppModel.cpp | 36 +- .../Demo/proj.win.cmake/src/LAppModel.hpp | 10 +- .../Demo/proj.win.cmake/src/LAppPal.cpp | 43 +- .../Demo/proj.win.cmake/src/LAppPal.hpp | 18 + .../Demo/proj.win.cmake/src/LAppSprite.cpp | 22 +- .../Demo/proj.win.cmake/src/LAppSprite.hpp | 15 +- .../proj.win.cmake/src/LAppSpritePipeline.cpp | 241 ++++++ .../proj.win.cmake/src/LAppSpritePipeline.hpp | 85 ++ .../proj.win.cmake/src/LAppTextureManager.cpp | 8 +- .../proj.win.cmake/src/LAppTextureManager.hpp | 4 +- .../Demo/proj.win.cmake/src/LAppView.cpp | 293 ++----- .../Demo/proj.win.cmake/src/LAppView.hpp | 64 +- .../proj.win.cmake/src/SwapchainManager.hpp | 3 +- .../Demo/proj.win.cmake/src/VulkanManager.cpp | 28 +- .../Demo/proj.win.cmake/src/VulkanManager.hpp | 11 +- .../Vulkan/Demo/proj.win.cmake/src/main.cpp | 7 + Samples/Vulkan/README.ja.md | 47 +- Samples/Vulkan/README.md | 43 +- Samples/Vulkan/Shaders/CMakeLists.txt | 22 +- Samples/Vulkan/Shaders/src/FragSprite.frag | 7 + Samples/Vulkan/Shaders/src/VertSprite.vert | 7 + Samples/Vulkan/Shaders/src/common.glsl | 7 + 438 files changed, 16074 insertions(+), 8461 deletions(-) delete mode 100644 Samples/Cocos2d-x/.editorconfig delete mode 100644 Samples/Cocos2d-x/Demo/CMakeLists.txt delete mode 100644 Samples/Cocos2d-x/Demo/Classes/AppDelegate.cpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/AppDelegate.h delete mode 100644 Samples/Cocos2d-x/Demo/Classes/AppMacros.h delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppAllocator.hpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppLive2DManager.cpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppLive2DManager.hpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppLive2DManagerInternal.cpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppLive2DManagerInternal.h delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppPal.cpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppPal.hpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppSprite.cpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppSprite.hpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppView.cpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/LAppView.hpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/SampleScene.cpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/SampleScene.h delete mode 100644 Samples/Cocos2d-x/Demo/Classes/TouchManager.cpp delete mode 100644 Samples/Cocos2d-x/Demo/Classes/TouchManager.h delete mode 100644 Samples/Cocos2d-x/Demo/Resources/CloseNormal.png delete mode 100644 Samples/Cocos2d-x/Demo/Resources/CloseSelected.png delete mode 100644 Samples/Cocos2d-x/Demo/Resources/HelloWorld.png delete mode 100644 Samples/Cocos2d-x/Demo/Resources/fonts/Marker Felt.ttf delete mode 100644 Samples/Cocos2d-x/Demo/Resources/fonts/arial.ttf delete mode 100644 Samples/Cocos2d-x/Demo/Resources/res/.gitkeep delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/.gitignore delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/AndroidManifest.xml delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/build.gradle delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/debug.keystore delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/jni/demo/main.cpp delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/proguard-rules.pro delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/res/mipmap-hdpi/ic_launcher.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/res/mipmap-mdpi/ic_launcher.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/res/values/strings.xml delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/app/src/org/cocos2dx/cpp/AppActivity.java delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/build.gradle delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/gradle.properties delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/gradlew delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/gradlew.bat delete mode 100644 Samples/Cocos2d-x/Demo/proj.android/settings.gradle delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/scripts/proj_xcode delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/AppController.h delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/AppController.mm delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20@3x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-29.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-50.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-50@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-57.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-57@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-72.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-76.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/Contents.json delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Info.plist delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/LaunchScreen.storyboard delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/LaunchScreenBackground.png delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/Prefix.pch delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/RootViewController.h delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/RootViewController.mm delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/exportoptions.plist delete mode 100644 Samples/Cocos2d-x/Demo/proj.ios/src/main.m delete mode 100644 Samples/Cocos2d-x/Demo/proj.linux/scripts/fix_libs delete mode 100644 Samples/Cocos2d-x/Demo/proj.linux/scripts/make_gcc delete mode 100644 Samples/Cocos2d-x/Demo/proj.linux/src/main.cpp delete mode 100644 Samples/Cocos2d-x/Demo/proj.mac/scripts/make_xcode delete mode 100644 Samples/Cocos2d-x/Demo/proj.mac/scripts/proj_xcode delete mode 100644 Samples/Cocos2d-x/Demo/proj.mac/src/Icon.icns delete mode 100644 Samples/Cocos2d-x/Demo/proj.mac/src/Info.plist delete mode 100644 Samples/Cocos2d-x/Demo/proj.mac/src/Prefix.pch delete mode 100644 Samples/Cocos2d-x/Demo/proj.mac/src/main.cpp delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/scripts/_msvc_common.bat delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2015.bat delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2017.bat delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2019.bat delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2022.bat delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/src/game.rc delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/src/main.cpp delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/src/main.h delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/src/res/game.ico delete mode 100644 Samples/Cocos2d-x/Demo/proj.win/src/resource.h delete mode 100644 Samples/Cocos2d-x/README.ja.md delete mode 100644 Samples/Cocos2d-x/README.md delete mode 100644 Samples/Cocos2d-x/thirdParty/scripts/setup_cocos2d delete mode 100644 Samples/Cocos2d-x/thirdParty/scripts/setup_cocos2d.bat delete mode 100644 Samples/D3D11/Demo/proj.d3d11.cmake/scripts/nmake_msvc2013.bat delete mode 100644 Samples/D3D11/Demo/proj.d3d11.cmake/scripts/proj_msvc2013.bat create mode 100644 Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSpriteShader.cpp create mode 100644 Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSpriteShader.hpp create mode 100644 Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSpriteShader.cpp create mode 100644 Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSpriteShader.hpp create mode 100644 Samples/D3D11/Shaders/SpriteEffect.fx delete mode 100644 Samples/D3D11/thirdParty/scripts/setup_msvc2013.bat delete mode 100644 Samples/D3D9/Demo/proj.d3d9.cmake/scripts/nmake_msvc2013.bat delete mode 100644 Samples/D3D9/Demo/proj.d3d9.cmake/scripts/proj_msvc2013.bat create mode 100644 Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSpriteShader.cpp create mode 100644 Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSpriteShader.hpp create mode 100644 Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSpriteShader.cpp create mode 100644 Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSpriteShader.hpp create mode 100644 Samples/D3D9/Shaders/SpriteEffect.fx create mode 100644 Samples/Metal/Demo/proj.ios.cmake/src/Shaders/SpriteEffect.metal create mode 100644 Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppSpriteShader.cpp create mode 100644 Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppSpriteShader.hpp create mode 100644 Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppSpriteShader.cpp create mode 100644 Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppSpriteShader.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/.gitignore create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/app.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/resources/base/element/string.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/resources/base/media/app_icon.png create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/build-profile.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/.gitignore create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/build-profile.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/hvigorfile.ts create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/obfuscation-rules.txt create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/oh-package-lock.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/oh-package.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/CMakeLists.txt create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/CMakeLists.txt create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppAllocator.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppAllocator.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDefine.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDefine.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDelegate.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDelegate.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppLive2DManager.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppLive2DManager.hpp rename Samples/{Cocos2d-x/Demo/Classes => OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src}/LAppModel.cpp (54%) rename Samples/{Cocos2d-x/Demo/Classes => OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src}/LAppModel.hpp (65%) create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppPal.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppPal.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSprite.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSprite.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSpriteShader.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSpriteShader.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppTextureManager.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppTextureManager.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppView.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppView.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppWavFileHandler.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppWavFileHandler.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/NapiBridgeC.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/NapiBridgeC.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/TouchManager.cpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/TouchManager.hpp create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/types/libentry/Demo.d.ts create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/ets/pages/Index.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/module.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/element/color.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/element/string.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/media/icon.png create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/media/startIcon.png create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/profile/main_pages.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/en_US/element/string.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/zh_CN/element/string.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testability/TestAbility.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testability/pages/Index.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/module.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/element/color.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/element/string.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/media/icon.png create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/profile/test_pages.json create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/test/List.test.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/test/LocalUnit.test.ets create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/hvigor/hvigor-config.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/hvigorfile.ts create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/oh-package-lock.json5 create mode 100644 Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/oh-package.json5 create mode 100644 Samples/OpenGL/Demo/proj.linux.cmake/src/LAppSpriteShader.cpp create mode 100644 Samples/OpenGL/Demo/proj.linux.cmake/src/LAppSpriteShader.hpp create mode 100644 Samples/OpenGL/Demo/proj.mac.cmake/src/LAppSpriteShader.cpp create mode 100644 Samples/OpenGL/Demo/proj.mac.cmake/src/LAppSpriteShader.hpp delete mode 100644 Samples/OpenGL/Demo/proj.win.cmake/scripts/nmake_msvc2013.bat delete mode 100644 Samples/OpenGL/Demo/proj.win.cmake/scripts/proj_msvc2013.bat create mode 100644 Samples/OpenGL/Demo/proj.win.cmake/src/LAppSpriteShader.cpp create mode 100644 Samples/OpenGL/Demo/proj.win.cmake/src/LAppSpriteShader.hpp create mode 100644 Samples/OpenGL/Shaders/Standard/FragSprite.frag create mode 100644 Samples/OpenGL/Shaders/Standard/VertSprite.vert create mode 100644 Samples/OpenGL/Shaders/StandardES/FragSprite.frag create mode 100644 Samples/OpenGL/Shaders/StandardES/VertSprite.vert delete mode 100644 Samples/OpenGL/thirdParty/scripts/setup_glew_glfw_vs2013.bat create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/CMakeLists.txt create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/scripts/make_gcc create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/CMakeLists.txt create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/CubismSampleViewMatrix.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/CubismSampleViewMatrix.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/CubismUserModelExtend.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/CubismUserModelExtend.hpp rename Samples/{Cocos2d-x/Demo/Classes => Vulkan/Demo/proj.linux.cmake/src}/LAppAllocator.cpp (64%) create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppAllocator.hpp rename Samples/{Cocos2d-x/Demo/Classes => Vulkan/Demo/proj.linux.cmake/src}/LAppDefine.cpp (88%) rename Samples/{Cocos2d-x/Demo/Classes => Vulkan/Demo/proj.linux.cmake/src}/LAppDefine.hpp (67%) create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDelegate.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDelegate.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppLive2DManager.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppLive2DManager.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppModel.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppModel.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppPal.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppPal.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppSprite.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppSprite.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppTextureManager.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppTextureManager.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppView.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppView.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppWavFileHandler.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/LAppWavFileHandler.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/MouseActionManager.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/MouseActionManager.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/SwapchainManager.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/SwapchainManager.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/TouchManager.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/TouchManager.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/VulkanManager.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/VulkanManager.hpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/main.cpp create mode 100644 Samples/Vulkan/Demo/proj.linux.cmake/src/mainMinimum.cpp create mode 100644 Samples/Vulkan/Demo/proj.win.cmake/src/LAppSpritePipeline.cpp create mode 100644 Samples/Vulkan/Demo/proj.win.cmake/src/LAppSpritePipeline.hpp diff --git a/.editorconfig b/.editorconfig index 8b68d77..f5134ac 100644 --- a/.editorconfig +++ b/.editorconfig @@ -25,3 +25,6 @@ charset = unset [*.md] trim_trailing_whitespace = false + +[*.{cpp,hpp,h}] +charset = utf-8-bom diff --git a/.gitignore b/.gitignore index 2958703..f0c2ad0 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,8 @@ # Sample build directories /Samples/**/build/ +# HarmonyOS files +Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/rawfile/ # Sample third party files /Samples/**/thirdParty/* !/Samples/**/thirdParty/scripts/* diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a43bc2..a0d5e42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,57 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [Unreleased] +## [5-r.2] - 2024-12-19 + +### Added + +* Add Vulkan support in Ubuntu 22.04 and AlmaLinux 9. +* Add a function to notify when motion playback starts. +* Add shader setup classes for D3D9, D3D11, OpenGL, Vulkan. +* Add the sample for OpenGL API in HarmonyOS. + +### Changed + +* Change to overwrite motion fade by the value specified in .model3.json on Framework. +* Change to use multi-buffering in Vulkan. +* Change the screen orientation and rotation direction to be unified across Android, iPhone, and iPad. +* Change specify the NDK version of the Android sample. +* Change to read shader source codes from files. +* Change the compile and target SDK version of Android OS to 15.0 (API 35). + * Upgrade the version of Android Gradle Plugin from 8.1.1 to 8.6.1. + * Upgrade the version of Gradle from 8.2 to 8.7. + * Upgrade the version of NDK from 25.2.9519653 to 26.3.11579264. + * Change the minimum version of Android Studio to Ladybug(2024.2.1 Patch 2). +* Change the minimum support version of Java to 8. +* Change the function for playing back expression motions from CubismExpressionMotionManager::StartMotionPriority() to CubismExpressionMotionManager::StartMotion(). +* Change to use GLSurfaceView event queues to handle touch events. ### Fixed +* Fix memory leak in Vulkan. +* Fixed drawing failure when enabling `USE_RENDER_TARGET` macros in Vulkan samples. +* Fix memory leak when exit in D3D9 and D3D11. +* Fix exit error in Vulkan. +* Fix the processing of anisotropy filtering in Vulkan to match that of other renderers. +* Fix an issue on Windows where an error would occur if the model name contained certain characters. * Implement support for `MSVC19.40` in the VS2022 build. by [@tatsuya-shiozawa](https://github.com/Live2D/CubismNativeSamples/pull/46) +* Fix an issue where a compile error occurred due to missing includes in the OpenGL iOS minimum sample. +* Fix an issue in the Android sample where the model display would reset after performing certain operations. +* Fix a memory leak in the compilation process of shader strings in OpenGL. +* Fix an issue that could cause drawing errors when the application is restored from the background. +* Fix an issue in the OpenGL sample where the textures are not released. +* Fix a warning due to the initial value of programId being NULL. +* Fix an issue that caused white edge-like objects to be drawn when enabling the `USE_RENDER_TARGET` or `USE_MODEL_RENDER_TARGET` flag in `LAppLive2DManager`. +* Fix an issue causing a decrease in rendering resolution when using render targets in the Metal sample project. +* Fix an issue where rendering would break when using the iPad with `USE_RENDER_TARGET` or `USE_MODEL_RENDER_TARGET` defined in OpenGL samples. + +### Removed + +* Remove Visual Studio 2013 samples. +* Remove armeabi-v7a from architecture support. +* Remove the Cocos2d-x sample project. +* Remove the callback what motion playback finishes on the minimum sample. +* Remove unnecessary declarations in the OpenGL Android sample. ## [5-r.1] - 2024-03-26 @@ -24,6 +70,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). * The log function was changed because it was ambiguous whether or not a newline was inserted. * Change so that `LAppSprite` is not depend on `LAppDelegate` in D3D11 and D3D9, Metal, Vulkan. * Some function arguments in `LAppSprite` are changed in D3D11 and D3D9, Metal, Vulkan. +* Change to read shader source codes from files. ### Fixed @@ -50,7 +97,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). * Change so that `LAppSprite` is not depend on `LAppDelegate` in Android. * Change so that `ViewController` is not include on `LAppSprite` in iOS. * Change the path acquisition process to a library function on OpenGL Mac and Linux. -* Change the compile and target SDK version of Android OS to 14.0 (API 34). +* Change the compile and target SDK version of Android OS to 14.0 (API 34). * Upgrade the version of Android Gradle Plugin from 8.0.2 to 8.1.1. * Upgrade the version of Gradle from 8.1.1 to 8.2. * Change the minimum version of Android Studio to Hedgehog(2023.1.1). @@ -414,6 +461,7 @@ See [Core Changelog] for details. * What was `Package.json` is currently being changed to`cubism-info.yml`. +[5-r.2]: https://github.com/Live2D/CubismNativeSamples/compare/5-r.1...5-r.2 [5-r.1]: https://github.com/Live2D/CubismNativeSamples/compare/5-r.1-beta.4...5-r.1 [5-r.1-beta.4]: https://github.com/Live2D/CubismNativeSamples/compare/5-r.1-beta.3...5-r.1-beta.4 [5-r.1-beta.3]: https://github.com/Live2D/CubismNativeSamples/compare/5-r.1-beta.2...5-r.1-beta.3 diff --git a/Core/CHANGELOG.md b/Core/CHANGELOG.md index afe4260..04b3de4 100644 --- a/Core/CHANGELOG.md +++ b/Core/CHANGELOG.md @@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## 2024-12-19 + +### Removed + +* [Native] Remove Visual Studio 2013 (MSVC 120) static library. + + +## 2024-11-07 + +### Added + +* [Native] Add experimental support `arm64` library for linux. + +### Removed + +* [Unity,Native,Java] Remove Android ARM v7 library. + + +## 2024-04-04 + +### Added + +* [Unity] Add library(.so) for HarmonyOS build. + + ## 2024-03-26 ### Remove diff --git a/Core/README.ja.md b/Core/README.ja.md index 3898c39..92cd965 100644 --- a/Core/README.ja.md +++ b/Core/README.ja.md @@ -29,12 +29,12 @@ Core | プラットフォーム | アーキテクチャ | dll | lib | パス | 注記 | | --- | --- | --- | --- | --- | --- | | Android | ARM64 | ✓ | ✓ | android/arm64-v8a | | -| Android | ARMv7 | ✓ | ✓ | android/armeabi-v7a | このライブラリは現在非推奨で、近日中に削除される予定です。 | | Android | x86 | ✓ | ✓ | android/x86 | | | Android | x86_64 | ✓ | ✓ | android/x86_64 | | | iOS | ARM64 | | ✓ | ios/xxx-iphoneos | iOSデバイス | | iOS | x86_64 | | ✓ | ios/xxx-iphonesimulator | iOS Simulator | | Linux | x86_64 | ✓ | ✓ | linux/x86_64 | | +| Linux | ARM64 | ✓ | ✓ | experimental/linux/ARM64 | | | macOS | ARM64 | ✓ | ✓ | macos/arm64 | | | macOS | x86_64 | ✓ | ✓ | macos/x86_64 | | | Mac Catalyst | ARM64 | | ✓ | experimental/catalyst | Universal Binary | @@ -59,7 +59,6 @@ Core | VC++バージョン | Visual Studioバージョン | | ---: | --- | -| 120 | Visual Studio 2013 | | 140 | Visual Studio 2015 | | 141 | Visual Studio 2017 | | 142 | Visual Studio 2019 | diff --git a/Core/README.md b/Core/README.md index 95b6f78..e783293 100644 --- a/Core/README.md +++ b/Core/README.md @@ -31,12 +31,12 @@ Core | Platform | Architecture | dll | lib | Path | Note | | --- | --- | --- | --- | --- | --- | | Android | ARM64 | ✓ | ✓ | android/arm64-v8a | | -| Android | ARMv7 | ✓ | ✓ | android/armeabi-v7a | This library is currently deprecated and will be removed in the near future. | | Android | x86 | ✓ | ✓ | android/x86 | | | Android | x86_64 | ✓ | ✓ | android/x86_64 | | | iOS | ARM64 | | ✓ | ios/xxx-iphoneos | iOS Devices | | iOS | x86_64 | | ✓ | ios/xxx-iphonesimulator | iOS Simulator | | Linux | x86_64 | ✓ | ✓ | linux/x86_64 | | +| Linux | ARM64 | ✓ | ✓ | experimental/linux/ARM64 | | | macOS | ARM64 | ✓ | ✓ | macos/arm64 | | | macOS | x86_64 | ✓ | ✓ | macos/x86_64 | | | Mac Catalyst | ARM64 | | ✓ | experimental/catalyst | Universal Binary | @@ -61,7 +61,6 @@ Below is the Visual Studio version for the VC++ version. | VC++ version | Visual Studio version | | ---: | --- | -| 120 | Visual Studio 2013 | | 140 | Visual Studio 2015 | | 141 | Visual Studio 2017 | | 142 | Visual Studio 2019 | diff --git a/Core/RedistributableFiles.txt b/Core/RedistributableFiles.txt index 6f02cc2..c20397f 100644 --- a/Core/RedistributableFiles.txt +++ b/Core/RedistributableFiles.txt @@ -2,7 +2,6 @@ The following is a list of files available for redistribution under the terms of the Live2D Proprietary Software License Agreement: - dll/android/arm64-v8a/libLive2DCubismCore.so -- dll/android/armeabi-v7a/libLive2DCubismCore.so - dll/android/x86/libLive2DCubismCore.so - dll/android/x86_64/libLive2DCubismCore.so - dll/experimental/rpi/libLive2DCubismCore.so @@ -11,6 +10,7 @@ under the terms of the Live2D Proprietary Software License Agreement: - dll/experimental/uwp/x64/Live2DCubismCore.dll - dll/experimental/uwp/x86/Live2DCubismCore.dll - dll/linux/x86_64/libLive2DCubismCore.so +- dll/experimental/linux/arm64/libLive2DCubismCore.so - dll/macos/Live2DCubismCore.bundle - dll/macos/libLive2DCubismCore.dylib - dll/windows/x86/Live2DCubismCore.dll @@ -18,7 +18,6 @@ under the terms of the Live2D Proprietary Software License Agreement: - dll/windows/x86_64/Live2DCubismCore.dll - dll/windows/x86_64/Live2DCubismCore.lib - lib/android/arm64-v8a/libLive2DCubismCore.a -- lib/android/armeabi-v7a/libLive2DCubismCore.a - lib/android/x86/libLive2DCubismCore.a - lib/android/x86_64/libLive2DCubismCore.so - lib/experimental/catalyst/libLive2DCubismCore.a @@ -28,12 +27,9 @@ under the terms of the Live2D Proprietary Software License Agreement: - lib/ios/Release-iphoneos/libLive2DCubismCore.a - lib/ios/Release-iphonesimulator/libLive2DCubismCore.a - lib/linux/x86_64/libLive2DCubismCore.a +- lib/experimental/linux/arm64/libLive2DCubismCore.a - lib/macos/arm64/libLive2DCubismCore.a - lib/macos/x86_64/libLive2DCubismCore.a -- lib/windows/x86/120/Live2DCubismCore_MD.lib -- lib/windows/x86/120/Live2DCubismCore_MDd.lib -- lib/windows/x86/120/Live2DCubismCore_MT.lib -- lib/windows/x86/120/Live2DCubismCore_MTd.lib - lib/windows/x86/140/Live2DCubismCore_MD.lib - lib/windows/x86/140/Live2DCubismCore_MDd.lib - lib/windows/x86/140/Live2DCubismCore_MT.lib @@ -50,10 +46,6 @@ under the terms of the Live2D Proprietary Software License Agreement: - lib/windows/x86/143/Live2DCubismCore_MDd.lib - lib/windows/x86/143/Live2DCubismCore_MT.lib - lib/windows/x86/143/Live2DCubismCore_MTd.lib -- lib/windows/x86_64/120/Live2DCubismCore_MD.lib -- lib/windows/x86_64/120/Live2DCubismCore_MDd.lib -- lib/windows/x86_64/120/Live2DCubismCore_MT.lib -- lib/windows/x86_64/120/Live2DCubismCore_MTd.lib - lib/windows/x86_64/140/Live2DCubismCore_MD.lib - lib/windows/x86_64/140/Live2DCubismCore_MDd.lib - lib/windows/x86_64/140/Live2DCubismCore_MT.lib diff --git a/Framework b/Framework index 3d9f82a..5a5e492 160000 --- a/Framework +++ b/Framework @@ -1 +1 @@ -Subproject commit 3d9f82a47f3f9c8c89ae692703f2dad79296b61a +Subproject commit 5a5e4923c245944d71fe93a875385bb15ba0e206 diff --git a/NOTICE.ja.md b/NOTICE.ja.md index 2bc598e..7db6123 100644 --- a/NOTICE.ja.md +++ b/NOTICE.ja.md @@ -4,6 +4,12 @@ # お知らせ +## [注意事項] Cubism SDK for NativeのCocos2d-xサポートについて (2024-12-19) + +Cubism SDK for NativeのCocos2d-x対応につきまして、Cubism 5 SDK for Native R2でサポートを終了いたしました。 +本件のお問い合わせにつきましては、[お問合せフォーム]()からご連絡ください。  + + ## [注意事項] Apple社のPrivacy Manifest Policy対応について Apple社が対応を必要としているPrivacy Manifest Policyについて、本製品では指定されているAPI及びサードパーティ製品を使用しておりません。 @@ -36,26 +42,9 @@ MetalのMac Catalystのビルド時にエラーが発生する場合がござい * cmakeを3.27未満のバージョンで使用する -## [注意事項] Cocos2d-xセットアップのエラーについて (2022-03-15) - -Cocos2d-xサンプルプロジェクトのセットアップ時に実行するsetup-cocos2dバッチにおいてエラーが発生いたします。 -これはGitHubがGitプロトコルセキュリティを改善したことに起因し、GitにてCocos2d-xのsubmodule取得が失敗するためです。 -具体的には`git://`経由での接続ができなくなったためエラーが発生しています。 +## [注意事項] Metal の macOSサンプルビルドにおけるメモリリークについて (2021-12-09) -詳しくはGitHub公式ブログをご確認ください。 - -* [GitHub 公式ブログ](https://github.blog/2021-09-01-improving-git-protocol-security-github/) - -### 回避方法 - -* ターミナルもしくはコマンドプロンプトにて以下のコマンドを実行することで、`git://`を用いた接続を`https://`に置き換える - * `git config --global url."https://github.com/".insteadOf git://github.com/` - * このコマンドは実行端末の全ユーザのgitconfigに影響します。ご了承ください。 - - -## [注意事項] Metal及びCocos2d-x v4.0 の macOSサンプルビルドにおけるメモリリークについて (2021-12-09) - -Metal及びCocos2d-x v4.0 の macOSサンプルビルドにおいてメモリリークが発生いたします。 +Metal の macOSサンプルビルドにおいてメモリリークが発生いたします。 これはMetalフレームワーク内で発生するため、公式の対応をお待ち下さい。 本件のお問い合わせについて弊社ではお答えいたしかねますので、ご了承ください。 @@ -64,35 +53,6 @@ Metal及びCocos2d-x v4.0 の macOSサンプルビルドにおいてメモリリ * [Apple Developer Forums - Memory leak in MTLCommandBuffer?](https://developer.apple.com/forums/thread/120931) -## [制限事項] Cocos2d-x v4.0 の Linux(Ubuntu)サンプルビルドについて (2021-04-15) - -Cocos2d-x v4.0 は `Ubuntu 20.04` ビルドに対応しておりません。 -使用する際は以下の回避方法を確認し、いずれかを適用してご利用いただきますようお願いいたします。 - -### 回避方法 - -* `Ubuntu 16.04` または `Ubuntu 18.04` を使用する - -* 以下issueを確認し、`Cocos2d-x v4.0` で使用されている `libchipmunk` ライブラリを差し替える - * [cocos2d/cocos2d-x linking error when integrating with libchipmunk on linux#20471](https://github.com/cocos2d/cocos2d-x/issues/20471) - * WARNING: この回避方法を使用してビルドしたプロジェクトはいかなる場合でも保守いたしかねます - - -## [注意事項] Visual Studio 2013 ご利用時の OpenGL サンプルビルドについて (2021-02-17) - -`Visual Studio 2013` を使用した `OpenGL` サンプルビルドでは、`setup_glew_glfw.bat` をそのまま使用してビルドすると `GLEW` にてリンクエラーが発生します。 -以下回避方法を確認し、ご利用いただきますようお願いいたします。 - -### 回避方法 - -* `GLEW 2.2.0` を使用する場合 - * `glew` プロジェクトから `libvcruntime.lib` の参照を削除する - * `Visual Studio 2013` 以降の Visual Studio を使用する - -* `GLEW 2.1.0` を使用する場合 - * `setup_glew_glfw_vs2013.bat` を使用して `thirdParty` のセットアップを行う - - ## Cubism Core ### [注意事項] macOS Catalina 以降のバージョンでの `.bundle` と `.dylib` の利用について diff --git a/NOTICE.md b/NOTICE.md index 36f2b7e..069c60c 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -4,6 +4,12 @@ # Notices +## [Caution] Regarding Cubism SDK for Native Cocos2d-x Support (2024-12-19) + +Support for Cocos2d-x in the Cubism SDK for Native has been discontinued starting with Cubism 5 SDK for Native R2. +For any inquiries regarding this matter, please contact us through the [contact form]](). + + ## [Caution] Support for Apple's Privacy Manifest Policy This product does not use the APIs or third-party products specified in Apple's privacy manifest policy. @@ -36,26 +42,9 @@ We will continue to investigate the details. * Use cmake with versions less than 3.27 -## [Caution] About Cocos2d-x setup error (2022-03-15) - -An error occurs in the setup-cocos2d batch that is executed when setting up the Cocos2d-x sample project. -This is because GitHub has improved the security of the Git protocol, and Git fails to get the Cocos2d-x submodule. -Specifically, an error has occurred because the connection via `git://` is no longer possible. +## [Caution] Memory leak in macOS sample builds of Metal (2021-12-09) -Please check the official GitHub blog for details. - -* [GitHub Official Blog](https://github.blog/2021-09-01-improving-git-protocol-security-github/) - -### Workaround - -* Replace the connection using `git://` with `https://` by executing the following command in the terminal or command prompt. - * `git config --global url."https://github.com/".insteadOf git://github.com/` - * Please note that this command affects gitconfig for all users of the execution terminal. - - -## [Caution] Memory leak in macOS sample builds of Metal and Cocos2d-x v4.0 (2021-12-09) - -A memory leak occurs in the macOS sample builds of Metal and Cocos2d-x v4.0. +A memory leak occurs in the macOS sample builds of Metal. This happens within the Metal framework, so please wait for official support. Note that we cannot answer inquiries regarding this matter. @@ -64,35 +53,6 @@ Please check the Apple Developer Forums for more information. * [Apple Developer Forums - Memory leak in MTLCommandBuffer?](https://developer.apple.com/forums/thread/120931) -## [Limitation] About the Linux (Ubuntu) sample builds of Cocos2d-x v4.0 (2021-04-15) - -Cocos2d-x v4.0 does not support `Ubuntu 20.04` builds. -Please check and apply one of the following workarounds when using it. - -### Workaround - -* Use `Ubuntu 16.04` or `Ubuntu 18.04` - -* Check the following issue and replace the `libchipmunk` library used in `Cocos2d-x v4.0` - * [cocos2d/cocos2d-x linking error when integrating with libchipmunk on linux#20471](https://github.com/cocos2d/cocos2d-x/issues/20471) - * WARNING: Projects built using this workaround cannot be maintained under any circumstances. - - -## [Caution] About OpenGL sample builds when using Visual Studio 2013 (2021-02-17) - -In the `OpenGL` sample builds using `Visual Studio 2013`, a link error will occur in `GLEW` if you build using `setup_glew_glfw.bat` as is. -Please check and use the workaround below. - -### Workaround - -* When using `GLEW 2.2.0` - * Remove the reference to `libvcruntime.lib` from the `glew` project - * Use Visual Studio later than `Visual Studio 2013` - -* When using `GLEW 2.1.0` - * Use `setup_glew_glfw_vs2013.bat` to set up `thirdParty` - - ## Cubism Core ### [Caution] About using `.bundle` and `.dylib` on macOS Catalina or later diff --git a/README.ja.md b/README.ja.md index 0143fc2..0b105a0 100644 --- a/README.ja.md +++ b/README.ja.md @@ -35,7 +35,6 @@ Cubism 5 Editorに搭載された新機能のSDK対応については [こちら ├─ Core # Live2D Cubism Core が含まれるディレクトリ ├─ Framework # レンダリングやアニメーション機能などのソースコードが含まれるディレクトリ └─ Samples - ├─ Cocos2d-x # Cocos2d-x のサンプルプロジェクトが含まれるディレクトリ ├─ D3D9 # DirectX 9.0c のサンプルプロジェクトが含まれるディレクトリ ├─ D3D11 # DirectX 11 のサンプルプロジェクトが含まれるディレクトリ ├─ Metal # Metal のサンプルプロジェクトが含まれるディレクトリ @@ -111,36 +110,37 @@ Core : [CHANGELOG.md](Core/CHANGELOG.md) | 開発ツール | バージョン | | --- | --- | -| Android Studio | Iguana 2023.2.1 | -| CMake | 3.28.3 | -| Visual Studio 2013 | Update 5 | +| Android Studio | Ladybug 2024.2.1 Patch 3 | +| DevEco Studio | 5.0.5.306 | +| CMake | 3.31.2 | | Visual Studio 2015 | Update 3 | -| Visual Studio 2017 | 15.9.60 | -| Visual Studio 2019 | 16.11.34 | -| Visual Studio 2022 | 17.9.4 | -| Xcode | 15.3 | +| Visual Studio 2017 | 15.9.68 | +| Visual Studio 2019 | 16.11.42 | +| Visual Studio 2022 | 17.12.3 | +| Xcode | 16.2 | ### Android | Android SDK tools | バージョン | | --- | --- | -| Android NDK | 26.2.11394342 | -| Android SDK | 34.0.0 | +| Android NDK | 26.3.11579264 | +| Android SDK | 35.0.0 | | CMake | 3.22.1 | +### HarmonyOS + +| HarmonyOS SDK tools | バージョン | +| --- | --- | +| HarmonyOS SDK | 5.0.1.112 | + ### Linux | 系統 | ディストリビューション・バージョン | Docker イメージ | GCC | | --- | --- | --- | --- | | Red Hat | Amazon Linux 2 | `amazonlinux:2` | 7.3.1 | -| Red Hat | CentOS 7 | `centos:7` | 4.8.5 | -| Red Hat | CentOS Stream 8 *1 | `centos:latest` | 8.5.0 | -| Red Hat | CentOS Stream 9 | - | 12.2.1 | | Red Hat | AlmaLinux | `almalinux:latest` | 11.4.1 | -| Debian | Ubuntu 18.04 | `ubuntu:18.04` | 7.5.0 | | Debian | Ubuntu 22.04.4 | `ubuntu:22.04` | 11.4.0 | - -*1 CentOS 8はサポートしておりません +| Debian | Ubuntu 24.04.1 | `ubuntu:24.04` | 13.3.0 | #### Mesa ライブラリ @@ -156,25 +156,31 @@ Core : [CHANGELOG.md](Core/CHANGELOG.md) | プラットフォーム | バージョン | | --- | --- | -| iOS / iPadOS | 17.4 | -| macOS | 14.4 | -| Windows 10 | 22H2 | -| Windows 11 | 22H2 | +| iOS / iPadOS | 18.2 | +| macOS | 15.2 | +| Windows 10 | 23H2 | +| Windows 11 | 23H2 | ### Android | バージョン | デバイス | Tegra | | --- | --- | --- | -| 13 | Pixel 7a | | +| 15 | Pixel 7a | | | 7.1.1 | Nexus 9 | ✔︎ | +### HarmonyOS + +| バージョン | デバイス | +| --- | --- | +| NEXT.0.0.71 | HUAWEI Mate 60 Pro | + ### Linux | 系統 | ディストリビューション | バージョン | | --- | --- | --- | | Red Hat | Amazon Linux | 2 | | Red Hat | AlmaLinux | 9 | -| Debian | Ubuntu | 22.04.4 | +| Debian | Ubuntu | 24.04.1 | ## プロジェクトへの貢献 diff --git a/README.md b/README.md index f047544..c277c65 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,6 @@ For compatibility with previous versions of Cubism SDK, please refer to [here](h ├─ Core # Directory containing Live2D Cubism Core ├─ Framework # Directory containing source code for rendering and animation functions └─ Samples - ├─ Cocos2d-x # Directory containing the Cocos2d-x sample project ├─ D3D9 # Directory containing the DirectX 9.0c sample project ├─ D3D11 # Directory containing the DirectX 11 sample project ├─ Metal # Directory containing the Metal sample project @@ -110,36 +109,37 @@ Core : [CHANGELOG.md](Core/CHANGELOG.md) | Development Tool | Version | | --- | --- | -| Android Studio | Iguana 2023.2.1 | -| CMake | 3.28.3 | -| Visual Studio 2013 | Update 5 | +| Android Studio | Ladybug 2024.2.1 Patch 3 | +| DevEco Studio | 5.0.5.306 | +| CMake | 3.31.2 | | Visual Studio 2015 | Update 3 | -| Visual Studio 2017 | 15.9.60 | -| Visual Studio 2019 | 16.11.34 | -| Visual Studio 2022 | 17.9.4 | -| Xcode | 15.3 | +| Visual Studio 2017 | 15.9.68 | +| Visual Studio 2019 | 16.11.42 | +| Visual Studio 2022 | 17.12.3 | +| Xcode | 16.2 | ### Android | Android SDK tools | Version | | --- | --- | -| Android NDK | 26.2.11394342 | -| Android SDK | 34.0.0 | +| Android NDK | 26.3.11579264 | +| Android SDK | 35.0.0 | | CMake | 3.22.1 | +### HarmonyOS + +| HarmonyOS SDK tools | Version | +| --- | --- | +| HarmonyOS SDK | 5.0.1.112 | + ### Linux | System | Distribution version | Docker image | GCC | | --- | --- | --- | --- | | Red Hat | Amazon Linux 2 | `amazonlinux:2` | 7.3.1 | -| Red Hat | CentOS 7 | `centos:7` | 4.8.5 | -| Red Hat | CentOS Stream 8 *1 | `centos:latest` | 8.5.0 | -| Red Hat | CentOS Stream 9 | - | 12.2.1 | | Red Hat | AlmaLinux | `almalinux:latest` | 11.4.1 | -| Debian | Ubuntu 18.04 | `ubuntu:18.04` | 7.5.0 | | Debian | Ubuntu 22.04.4 | `ubuntu:22.04` | 11.4.0 | - -*1 CentOS 8 is not supported +| Debian | Ubuntu 24.04.1 | `ubuntu:24.04` | 13.3.0 | #### Mesa library @@ -155,25 +155,31 @@ Core : [CHANGELOG.md](Core/CHANGELOG.md) | Platform | Version | | --- | --- | -| iOS / iPadOS | 17.4 | -| macOS | 14.4 | -| Windows 10 | 22H2 | -| Windows 11 | 22H2 | +| iOS / iPadOS | 18.2 | +| macOS | 15.2 | +| Windows 10 | 23H2 | +| Windows 11 | 23H2 | ### Android | Version | Device | Tegra | | --- | --- | --- | -| 13 | Pixel 7a | | +| 15 | Pixel 7a | | | 7.1.1 | Nexus 9 | ✔︎ | +### HarmonyOS + +| Version | Device | +| --- | --- | +| NEXT.0.0.71 | HUAWEI Mate 60 Pro | + ### Linux | System | Distribution | Version | | --- | --- | --- | | Red Hat | Amazon Linux | 2 | | Red Hat | AlmaLinux | 9 | -| Debian | Ubuntu | 22.04.4 | +| Debian | Ubuntu | 24.04.1 | ## Contributing diff --git a/Samples/Cocos2d-x/.editorconfig b/Samples/Cocos2d-x/.editorconfig deleted file mode 100644 index 08ffcc4..0000000 --- a/Samples/Cocos2d-x/.editorconfig +++ /dev/null @@ -1,5 +0,0 @@ -[/Demo/Classes/**/*.{h,cpp,hpp}] -charset = utf-8-bom - -[/Demo/proj.win/src/**/*.{h,cpp}] -charset = utf-8-bom diff --git a/Samples/Cocos2d-x/Demo/CMakeLists.txt b/Samples/Cocos2d-x/Demo/CMakeLists.txt deleted file mode 100644 index ee13903..0000000 --- a/Samples/Cocos2d-x/Demo/CMakeLists.txt +++ /dev/null @@ -1,306 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -option( - CORE_CRL_MD - "Use Cubism Core that is multithread-specific and DLL-specific version" - OFF -) - -# Set app name. -set(APP_NAME Demo) -# Set directory paths. -set(COCOS2DX_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../thirdParty/cocos2d) -set(CMAKE_MODULE_PATH ${COCOS2DX_ROOT_PATH}/cmake/Modules) -set(SDK_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../..) -set(CORE_PATH ${SDK_ROOT_PATH}/Core) -set(FRAMEWORK_PATH ${SDK_ROOT_PATH}/Framework) -set(CLASSES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Classes) -set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) - -# Set project. -project(${APP_NAME}) - -# Set Visual Studio startup project. -set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${APP_NAME}) - -# Define output directory. -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin/${APP_NAME}) -# Set configuration (Release and Debug only). -set(CMAKE_CONFIGURATION_TYPES Debug Release - CACHE STRING "Configurations" FORCE -) -# Suppress generation of ZERO_CHECK project. -set(CMAKE_SUPPRESS_REGENERATION ON) - -# Specify version of compiler. -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# Add cocos libs. -include(CocosBuildSet) -add_subdirectory( - ${COCOS2DX_ROOT_PATH}/cocos - ${ENGINE_BINARY_PATH}/cocos/core -) - -# Record sources, headers, resources... -set(GAME_SOURCE) -set(GAME_HEADER) - -# Add resource directories. -set(GAME_RES_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/Resources ${RES_PATH}) -if(APPLE OR WINDOWS) - cocos_mark_multi_resources(common_res_files - RES_TO Resources FOLDERS ${GAME_RES_FOLDER} - ) -endif() - -# Add cross-platforms source files and header files. -list(APPEND GAME_SOURCE - ${CLASSES_PATH}/AppDelegate.cpp - ${CLASSES_PATH}/LAppAllocator.cpp - ${CLASSES_PATH}/LAppDefine.cpp - ${CLASSES_PATH}/LAppLive2DManager.cpp - ${CLASSES_PATH}/LAppModel.cpp - ${CLASSES_PATH}/LAppPal.cpp - ${CLASSES_PATH}/LAppSprite.cpp - ${CLASSES_PATH}/LAppView.cpp - ${CLASSES_PATH}/SampleScene.cpp - ${CLASSES_PATH}/TouchManager.cpp - ${CLASSES_PATH}/LAppLive2DManagerInternal.cpp -) - -list(APPEND GAME_HEADER - ${CLASSES_PATH}/AppDelegate.h - ${CLASSES_PATH}/AppMacros.h - ${CLASSES_PATH}/LAppAllocator.hpp - ${CLASSES_PATH}/LAppDefine.hpp - ${CLASSES_PATH}/LAppLive2DManager.hpp - ${CLASSES_PATH}/LAppModel.hpp - ${CLASSES_PATH}/LAppPal.hpp - ${CLASSES_PATH}/LAppSprite.hpp - ${CLASSES_PATH}/LAppView.hpp - ${CLASSES_PATH}/SampleScene.h - ${CLASSES_PATH}/TouchManager.h - ${CLASSES_PATH}/LAppLive2DManagerInternal.h -) - -# Add Cubism Core as static library. -add_library(Live2DCubismCore STATIC IMPORTED) -# Specify Cubism Core library path for each platform and add source files. -if(ANDROID) - list(APPEND GAME_SOURCE - proj.android/app/jni/demo/main.cpp - ) - set_target_properties(Live2DCubismCore - PROPERTIES - IMPORTED_LOCATION - ${CORE_PATH}/lib/android/${ANDROID_ABI}/libLive2DCubismCore.a - ) - -elseif(LINUX) - list(APPEND GAME_SOURCE - proj.linux/src/main.cpp) - set_target_properties(Live2DCubismCore - PROPERTIES - IMPORTED_LOCATION - ${CORE_PATH}/lib/linux/x86_64/libLive2DCubismCore.a - ) - -elseif(WINDOWS) - list(APPEND GAME_HEADER - proj.win/src/main.h - proj.win/src/resource.h - ) - list(APPEND GAME_SOURCE - proj.win/src/main.cpp - proj.win/src/game.rc - ${common_res_files} - ) - - # Detect compiler. - if(MSVC_VERSION MATCHES 1900) - # Visual Studio 2015 - set(MSVC_NUM 140) - elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) - # Visual Studio 2017 - set(MSVC_NUM 141) - elseif(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) - # Visual Studio 2019 - set(MSVC_NUM 142) - elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) - # Visual Studio 2022 - set(MSVC_NUM 143) - elseif(MSVC) - message(FATAL_ERROR "[${APP_NAME}] Unsupported Visual C++ compiler used.") - else() - message(FATAL_ERROR "[${APP_NAME}] Unsupported compiler used.") - endif() - - # Detect core crt. - if(CORE_CRL_MD) - set(CRT MD) - else() - set(CRT MT) - endif() - - set_target_properties(Live2DCubismCore - PROPERTIES - IMPORTED_LOCATION_DEBUG - ${CORE_PATH}/lib/windows/x86/${MSVC_NUM}/Live2DCubismCore_${CRT}d.lib - IMPORTED_LOCATION_RELEASE - ${CORE_PATH}/lib/windows/x86/${MSVC_NUM}/Live2DCubismCore_${CRT}.lib - ) - -elseif(APPLE) - if(IOS) - list(APPEND GAME_HEADER - proj.ios/src/AppController.h - proj.ios/src/RootViewController.h - ) - set(APP_UI_RES - proj.ios/src/LaunchScreen.storyboard - proj.ios/src/LaunchScreenBackground.png - proj.ios/src/Images.xcassets - ) - list(APPEND GAME_SOURCE - proj.ios/src/main.m - proj.ios/src/AppController.mm - proj.ios/src/RootViewController.mm - proj.ios/src/Prefix.pch - ${APP_UI_RES} - ) - - # iPhone Simulator (i386) is not support on Cubism Core. - if(IOS_PLATFORM STREQUAL "SIMULATOR") - message(FATAL_ERROR - "[CubismNativeSamples] Cubism Core does not support i386 iOS architecture." - ) - endif() - - set_target_properties(Live2DCubismCore - PROPERTIES - IMPORTED_LOCATION_DEBUG - ${CORE_PATH}/lib/ios/Debug-iphoneos/libLive2DCubismCore.a - IMPORTED_LOCATION_RELEASE - ${CORE_PATH}/lib/ios/Release-iphoneos/libLive2DCubismCore.a - ) - - elseif(MACOSX) - set(APP_UI_RES - proj.mac/src/Icon.icns - proj.mac/src/Info.plist - ) - list(APPEND GAME_SOURCE - proj.mac/src/main.cpp - proj.mac/src/Prefix.pch - ${APP_UI_RES} - ) - EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE ) - set_target_properties(Live2DCubismCore - PROPERTIES - IMPORTED_LOCATION - ${CORE_PATH}/lib/macos/${ARCHITECTURE}/libLive2DCubismCore.a - ) - - endif() - list(APPEND GAME_SOURCE ${common_res_files}) -endif() -# Set core include directory. -set_target_properties(Live2DCubismCore - PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${CORE_PATH}/include -) - -# Specify Cubism Framework rendering. -set(FRAMEWORK_SOURCE Cocos2d) -# Add Cubism Framework. -add_subdirectory(${FRAMEWORK_PATH} ${CMAKE_CURRENT_BINARY_DIR}/Framework) -# Add definitions for Cubism Framework. -target_compile_definitions(Framework PUBLIC CSM_TARGET_COCOS) -use_cocos2dx_compile_define(Framework) -use_cocos2dx_compile_options(Framework) - -# Mark app complie info and libs info. -set(all_code_files ${GAME_HEADER} ${GAME_SOURCE}) -if(NOT ANDROID) - add_executable(${APP_NAME} ${all_code_files}) -else() - add_library(${APP_NAME} SHARED ${all_code_files}) - add_subdirectory( - ${COCOS2DX_ROOT_PATH}/cocos/platform/android - ${ENGINE_BINARY_PATH}/cocos/platform - ) - target_link_libraries(${APP_NAME} - -Wl,--whole-archive - cpp_android_spec - -Wl,--no-whole-archive - ) -endif() - -# Link libraries. -target_link_libraries(${APP_NAME} Framework Live2DCubismCore cocos2d) -# Specify include directories. -target_include_directories(${APP_NAME} PRIVATE ${CLASSES_PATH}) - -# Mark app resources and add definitions for Cubism Framework. -setup_cocos_app_config(${APP_NAME}) -if(APPLE) - set_target_properties(${APP_NAME} PROPERTIES RESOURCE "${APP_UI_RES}") - if(MACOSX) - set_xcode_property(${APP_NAME} INFOPLIST_FILE "${COCOS2DX_ROOT_PATH}/templates/cpp-template-default/proj.ios_mac/mac/Info.plist") - target_compile_definitions(${APP_NAME} PRIVATE CSM_TARGET_MACOSX) - target_compile_definitions(Framework PUBLIC CSM_TARGET_MAC_GL) - set(COCOS_GLFW3 ${COCOS2DX_ROOT_PATH}/external/glfw3) - target_include_directories(Framework PUBLIC ${COCOS_GLFW3}/include/Mac) - target_include_directories(Framework PUBLIC ${COCOS2DX_ROOT_PATH}/cocos) - elseif(IOS) - # Add information aboud XCode project. - set_xcode_property(${APP_NAME} INFOPLIST_FILE "${COCOS2DX_ROOT_PATH}/templates/cpp-template-default/proj.ios_mac/ios/Info.plist") - set_xcode_property(${APP_NAME} ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon") - set_xcode_property(${APP_NAME} DEVELOPMENT_TEAM "") - set_xcode_property(${APP_NAME} CODE_SIGN_IDENTITY "iPhone Developer") - set_xcode_property(${APP_NAME} PRODUCT_BUNDLE_IDENTIFIER "com.live2d.demo-4-r7-cocos2dx") - set_xcode_property(${APP_NAME} TARGETED_DEVICE_FAMILY "1,2") - set_xcode_property(${APP_NAME} ONLY_ACTIVE_ARCH "NO") - set_xcode_property(${APP_NAME} ARCHS "arm64") - target_compile_definitions(${APP_NAME} PRIVATE CSM_TARGET_IOS) - target_compile_definitions(Framework PUBLIC CSM_TARGET_IPHONE_ES2) - target_include_directories(Framework PUBLIC ${COCOS2DX_ROOT_PATH}/cocos) - endif() -elseif(WINDOWS) - cocos_copy_target_dll(${APP_NAME}) - target_compile_definitions(Framework PUBLIC CSM_TARGET_WIN_GL) - # Specify glew directories for Cubism Framework. - set(COCOS_GLEW ${COCOS2DX_ROOT_PATH}/external/win32-specific/gles) - set(COCOS_GLFW3 ${COCOS2DX_ROOT_PATH}/external/glfw3) - target_include_directories(Framework PUBLIC ${COCOS_GLEW}/include/OGLES) - target_include_directories(Framework PUBLIC ${COCOS_GLFW3}/include/win32) - target_include_directories(Framework PUBLIC ${COCOS2DX_ROOT_PATH}/cocos) -elseif(ANDROID) - target_compile_definitions(Framework PUBLIC CSM_TARGET_ANDROID_ES2) - target_include_directories(Framework PUBLIC ${COCOS2DX_ROOT_PATH}/cocos) -elseif(LINUX) - set(COCOS_GLFW3 ${COCOS2DX_ROOT_PATH}/external/glfw3) - target_include_directories(Framework PUBLIC ${COCOS_GLFW3}/include/linux) - target_compile_definitions(Framework PUBLIC CSM_TARGET_LINUX_GL) - target_include_directories(Framework PUBLIC ${COCOS2DX_ROOT_PATH}/cocos) -endif() - -# Copy resources. -if(LINUX OR WINDOWS) - cocos_get_resource_path(APP_RES_DIR ${APP_NAME}) - cocos_copy_target_res(${APP_NAME} - LINK_TO ${APP_RES_DIR} FOLDERS ${GAME_RES_FOLDER} - ) -endif() - -# When this flag is turned on, the renderer will draw for each texture that has LAppModel. -# Otherwise, will draw to the main framebuffer. -# target_compile_definitions(${APP_NAME} PRIVATE USE_MODEL_RENDER_TARGET) - -# When this flag is turned on, the renderer will draw to the texture. -# The texture only has LAppView. -# This flag has higher priority than USE_MODEL_RENDER_TARGET. -# target_compile_definitions(${APP_NAME} PRIVATE USE_RENDER_TARGET) diff --git a/Samples/Cocos2d-x/Demo/Classes/AppDelegate.cpp b/Samples/Cocos2d-x/Demo/Classes/AppDelegate.cpp deleted file mode 100644 index 175b72c..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/AppDelegate.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#include "AppDelegate.h" -#include "SampleScene.h" -#include "LAppLive2DManager.hpp" -#include "LAppDefine.hpp" -#include "LAppPal.hpp" - -#if USE_AUDIO_ENGINE && USE_SIMPLE_AUDIO_ENGINE -#error "Don't use AudioEngine and SimpleAudioEngine at the same time. Please just select one in your game!" -#endif - -#if USE_AUDIO_ENGINE -#include "audio/include/AudioEngine.h" -using namespace cocos2d::experimental; -#elif USE_SIMPLE_AUDIO_ENGINE -#include "audio/include/SimpleAudioEngine.h" -using namespace CocosDenshion; -#endif - -USING_NS_CC; - -static cocos2d::Size designResolutionSize = cocos2d::Size(LAppDefine::RenderTargetWidth, LAppDefine::RenderTargetHeight); -static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320); -static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768); -static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536); - -AppDelegate::AppDelegate() -{ -} - -AppDelegate::~AppDelegate() -{ - Director::getInstance()->getEventDispatcher()->removeEventListener(_recreatedEventlistener); - - LAppLive2DManager::ReleaseInstance(); - -#if USE_AUDIO_ENGINE - AudioEngine::end(); -#elif USE_SIMPLE_AUDIO_ENGINE - SimpleAudioEngine::end(); -#endif -} - -// if you want a different context, modify the value of glContextAttrs -// it will affect all platforms -void AppDelegate::initGLContextAttrs() -{ - // set OpenGL context attributes: red,green,blue,alpha,depth,stencil,multisamplesCount - GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8, 0}; - - GLView::setGLContextAttrs(glContextAttrs); -} - -// if you want to use the package manager to install more packages, -// don't modify or remove this function -static int register_all_packages() -{ - return 0; //flag for packages manager -} - -bool AppDelegate::applicationDidFinishLaunching() -{ - // initialize director - auto director = Director::getInstance(); - auto glview = director->getOpenGLView(); - if(!glview) - { -#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) - glview = GLViewImpl::createWithRect("Demo", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height)); -#else - glview = GLViewImpl::create("Demo"); -#endif - director->setOpenGLView(glview); - } - - // turn on display FPS - director->setDisplayStats(true); - - // set FPS. the default value is 1.0/60 if you don't call this - director->setAnimationInterval(1.0f / 60); - - // Set the design resolution - glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER); - auto frameSize = glview->getFrameSize(); - // if the frame's height is larger than the height of medium size. - if (frameSize.height > mediumResolutionSize.height) - { - director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width)); - } - // if the frame's height is larger than the height of small size. - else if (frameSize.height > smallResolutionSize.height) - { - director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width)); - } - // if the frame's height is smaller than the height of medium size. - else - { - director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width)); - } - - register_all_packages(); - - // prepare for Cubism Framework API. - _cubismOption.LogFunction = LAppPal::PrintMessageLn; - _cubismOption.LoggingLevel = LAppDefine::CubismLoggingLevel; - Csm::CubismFramework::StartUp(&_cubismAllocator, &_cubismOption); - - _recreatedEventlistener = cocos2d::EventListenerCustom::create(EVENT_RENDERER_RECREATED, [this](EventCustom*) - { - LAppLive2DManager::GetInstance()->RecreateRenderer(); - }); - director->getEventDispatcher()->addEventListenerWithFixedPriority(_recreatedEventlistener, -1); - - // create a scene. it's an autorelease object - auto scene = SampleScene::createScene(); - - // run - director->runWithScene(scene); - - return true; -} - -// This function will be called when the app is inactive. Note, when receiving a phone call it is invoked. -void AppDelegate::applicationDidEnterBackground() -{ - Director::getInstance()->stopAnimation(); - -#if USE_AUDIO_ENGINE - AudioEngine::pauseAll(); -#elif USE_SIMPLE_AUDIO_ENGINE - SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); - SimpleAudioEngine::getInstance()->pauseAllEffects(); -#endif -} - -// this function will be called when the app is active again -void AppDelegate::applicationWillEnterForeground() -{ - Director::getInstance()->startAnimation(); - -#if USE_AUDIO_ENGINE - AudioEngine::resumeAll(); -#elif USE_SIMPLE_AUDIO_ENGINE - SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); - SimpleAudioEngine::getInstance()->resumeAllEffects(); -#endif - // Director::getInstance()->startAnimation(); -} diff --git a/Samples/Cocos2d-x/Demo/Classes/AppDelegate.h b/Samples/Cocos2d-x/Demo/Classes/AppDelegate.h deleted file mode 100644 index 2cc1cfb..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/AppDelegate.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#ifndef _APP_DELEGATE_H_ -#define _APP_DELEGATE_H_ - -#include "cocos2d.h" -#include "LAppAllocator.hpp" -#include - -// #define USE_AUDIO_ENGINE 1 -// #define USE_SIMPLE_AUDIO_ENGINE 1 - -/** -@brief The cocos2d Application. - -Private inheritance here hides part of interface from Director. -*/ -class AppDelegate : private cocos2d::Application -{ -public: - AppDelegate(); - virtual ~AppDelegate(); - - virtual void initGLContextAttrs(); - - /** - @brief Implement Director and Scene init code here. - @return true Initialize success, app continue. - @return false Initialize failed, app terminate. - */ - virtual bool applicationDidFinishLaunching(); - - /** - @brief Called when the application moves to the background - @param the pointer of the application - */ - virtual void applicationDidEnterBackground(); - - /** - @brief Called when the application reenters the foreground - @param the pointer of the application - */ - virtual void applicationWillEnterForeground(); - -private: - cocos2d::EventListenerCustom* _recreatedEventlistener; - - LAppAllocator _cubismAllocator; - Csm::CubismFramework::Option _cubismOption; -}; - -#endif // _APP_DELEGATE_H_ - diff --git a/Samples/Cocos2d-x/Demo/Classes/AppMacros.h b/Samples/Cocos2d-x/Demo/Classes/AppMacros.h deleted file mode 100644 index 5a75936..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/AppMacros.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef __APPMACROS_H__ -#define __APPMACROS_H__ - -#include "cocos2d.h" - -/* For demonstrating using one design resolution to match different resources, - or one resource to match different design resolutions. - - [Situation 1] Using one design resolution to match different resources. - Please look into Appdelegate::applicationDidFinishLaunching. - We check current device frame size to decide which resource need to be selected. - So if you want to test this situation which said in title '[Situation 1]', - you should change ios simulator to different device(e.g. iphone, iphone-retina3.5, iphone-retina4.0, ipad, ipad-retina), - or change the window size in "proj.XXX/main.cpp" by "CCEGLView::setFrameSize" if you are using win32 or linux plaform - and modify "proj.mac/AppController.mm" by changing the window rectangle. - - [Situation 2] Using one resource to match different design resolutions. - The coordinates in your codes is based on your current design resolution rather than resource size. - Therefore, your design resolution could be very large and your resource size could be small. - To test this, just define the marco 'TARGET_DESIGN_RESOLUTION_SIZE' to 'DESIGN_RESOLUTION_2048X1536' - and open iphone simulator or create a window of 480x320 size. - - [Note] Normally, developer just need to define one design resolution(e.g. 960x640) with one or more resources. - */ - -#define DESIGN_RESOLUTION_480X320 0 -#define DESIGN_RESOLUTION_1024X768 1 -#define DESIGN_RESOLUTION_2048X1536 2 - -/* If you want to switch design resolution, change next line */ -#define TARGET_DESIGN_RESOLUTION_SIZE DESIGN_RESOLUTION_480X320 - -typedef struct tagResource -{ - cocos2d::CCSize size; - char directory[100]; -} Resource; - -static Resource smallResource = {cocos2d::CCSizeMake(480, 320), "iphone"}; -static Resource mediumResource = {cocos2d::CCSizeMake(1024, 768), "ipad"}; -static Resource largeResource = {cocos2d::CCSizeMake(2048, 1536), "ipadhd"}; - -#if (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_480X320) -static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(480, 320); -#elif (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_1024X768) -static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(1024, 768); -#elif (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_2048X1536) -static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(2048, 1536); -#else -#error unknown target design resolution! -#endif - -// The font size 24 is designed for small resolution, so we should change it to fit for current design resolution -#define TITLE_FONT_SIZE (cocos2d::CCEGLView::sharedOpenGLView()->getDesignResolutionSize().width / smallResource.size.width * 24) - -#endif /* __APPMACROS_H__ */ diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppAllocator.hpp b/Samples/Cocos2d-x/Demo/Classes/LAppAllocator.hpp deleted file mode 100644 index 7be4d00..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppAllocator.hpp +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#pragma once - -#include -#include - -/** - * @brief メモリアロケーションを実装するクラス。 - * - * メモリ確保・解放処理のインターフェースの実装。 - * フレームワークから呼び出される。 - * - */ -class LAppAllocator : public Csm::ICubismAllocator -{ - void* Allocate(const Csm::csmSizeType size); - - void Deallocate(void* memory); - - void* AllocateAligned(const Csm::csmSizeType size, const Csm::csmUint32 alignment); - - void DeallocateAligned(void* alignedMemory); -}; diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManager.cpp b/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManager.cpp deleted file mode 100644 index c2d0f9d..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManager.cpp +++ /dev/null @@ -1,474 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#include "SampleScene.h" -#include - -//cocos2d-x -#include "base/CCDirector.h" -#include "renderer/backend/Device.h" - -//Cubism -#include "LAppLive2DManager.hpp" -#include "LAppPal.hpp" -#include "LAppDefine.hpp" -#include "LAppView.hpp" -#include "LAppSprite.hpp" - -#if defined(_WIN32) -#include -#elif defined(CSM_TARGET_IOS) || defined(CSM_TARGET_MACOSX) || defined(__ANDROID__) -#include "LAppLive2DManagerInternal.h" -#else -#include -#endif - -#ifdef CSM_TARGET_ANDROID_ES2 -#include -#endif - -using namespace Csm; -using namespace LAppDefine; - -USING_NS_CC; - -namespace { - LAppLive2DManager* s_instance = NULL; - - void FinishedMotion(ACubismMotion* self) - { - LAppPal::PrintLogLn("Motion Finished: %x", self); - } - - int CompareCsmString(const void* a, const void* b) - { - return strcmp(reinterpret_cast(a)->GetRawString(), - reinterpret_cast(b)->GetRawString()); - } -} - -LAppLive2DManager* LAppLive2DManager::GetInstance() -{ - if (s_instance == NULL) - { - s_instance = new LAppLive2DManager(); - } - - return s_instance; -} - -void LAppLive2DManager::ReleaseInstance() -{ - if (s_instance != NULL) - { - delete s_instance; - } - - s_instance = NULL; -} - -LAppLive2DManager::LAppLive2DManager() - : _sceneIndex(0) - , _viewMatrix(NULL) - , _renderTarget(SelectTarget_None) - , _program(NULL) - , _sprite(NULL) - , _renderBuffer(NULL) -{ - assert(CubismFramework::IsStarted()); - - CubismFramework::Initialize(); - - CreateShader(); - SetUpModel(); - - int width = static_cast(cocos2d::Director::getInstance()->getOpenGLView()->getFrameSize().width); - int height = static_cast(cocos2d::Director::getInstance()->getOpenGLView()->getFrameSize().height); - - // 画面全体を覆うサイズ - _sprite = new LAppSprite(_program); - - _viewMatrix = new CubismMatrix44(); - - // 使用するターゲット - _renderBuffer = new Csm::Rendering::CubismOffscreenSurface_Cocos2dx; - if (_renderBuffer) - {// 描画ターゲット作成 - -#if (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) - // Retina対策でこっちからとる - GLViewImpl *glimpl = (GLViewImpl *)Director::getInstance()->getOpenGLView(); - glfwGetFramebufferSize(glimpl->getWindow(), &width, &height); -#endif - - // モデル描画キャンバス - _renderBuffer->CreateOffscreenSurface(static_cast(width), static_cast(height)); - } - -#ifdef CSM_TARGET_ANDROID_ES2 - char *exts = (char*)backend::Device::getInstance()->getDeviceInfo()->getExtension(); - if(strstr(exts, "GL_NV_shader_framebuffer_fetch ")){ - Rendering::CubismRenderer_Cocos2dx::SetExtShaderMode( true , true ); - } -#endif - - ChangeScene(_sceneIndex); -} - -LAppLive2DManager::~LAppLive2DManager() -{ - if (_renderBuffer) - { - _renderBuffer->DestroyOffscreenSurface(); - delete _renderBuffer; - _renderBuffer = NULL; - } - delete _sprite; - _sprite = NULL; - - ReleaseAllModel(); - - CubismFramework::Dispose(); -} - -void LAppLive2DManager::ReleaseAllModel() -{ - for (csmUint32 i = 0; i < _models.GetSize(); i++) - { - delete _models[i]; - } - - _models.Clear(); -} - -LAppModel* LAppLive2DManager::GetModel(csmUint32 no) const -{ - if(no < _models.GetSize()) - { - return _models[no]; - } - - return NULL; -} - -csmUint32 LAppLive2DManager::GetModelCount() const -{ - return _models.GetSize(); -} - -void LAppLive2DManager::RecreateRenderer() const -{ - Rendering::CubismRenderer::StaticRelease(); - - for (csmUint32 i = 0; i < _models.GetSize(); i++) - { - LAppModel* model = GetModel(i); - model->ReloadRnederer(); - } -} - -void LAppLive2DManager::SetViewMatrix(Csm::CubismMatrix44* matrix) -{ - _viewMatrix = matrix; -} - -void LAppLive2DManager::OnDrag(csmFloat32 x, csmFloat32 y) const -{ - for (csmUint32 i = 0; i < _models.GetSize(); i++) - { - LAppModel* model = GetModel(i); - - model->SetDragging(x, y); - } -} - -void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) -{ - if (DebugLogEnable) LAppPal::PrintLogLn("[APP]tap point: {x:%.2f y:%.2f}", x, y); - - for (csmUint32 i = 0; i < _models.GetSize(); i++) - { - if (_models[i]->HitTest(HitAreaNameHead, x, y)) - { - if (DebugLogEnable) LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameHead); - _models[i]->SetRandomExpression(); - } - else if (_models[i]->HitTest(HitAreaNameBody, x, y)) - { - if (DebugLogEnable) LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); - _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion); - } - } -} - -void LAppLive2DManager::OnUpdate(Csm::Rendering::CubismCommandBuffer_Cocos2dx* commandBuffer) const -{ - Director* director = Director::getInstance(); - Size window = director->getWinSize(); - - Csm::Rendering::CubismRenderer_Cocos2dx::StartFrame(commandBuffer); - - for (csmUint32 i = 0; i < _models.GetSize(); ++i) - { - CubismMatrix44 projection; - LAppModel* model = GetModel(i); - - if (model->GetModel() == NULL) - { - LAppPal::PrintLogLn("Failed to model->GetModel()."); - continue; - } - - if (model->GetModel()->GetCanvasWidth() > 1.0f && window.width < window.height) - { - // 横に長いモデルを縦長ウィンドウに表示する際モデルの横サイズでscaleを算出する - model->GetModelMatrix()->SetWidth(2.0f); - projection.Scale(1.0f, static_cast(window.width) / static_cast(window.height)); - } - else - { - projection.Scale(static_cast(window.height) / static_cast(window.width), 1.0f); - } - - // 必要があればここで乗算 - if (_viewMatrix != NULL) - { - projection.MultiplyByMatrix(_viewMatrix); - } - - if (_renderTarget == SelectTarget_ViewFrameBuffer && _renderBuffer && _sprite) - {// レンダリングターゲット使いまわしの場合 - // レンダリング開始 - _renderBuffer->BeginDraw(commandBuffer, NULL); - _renderBuffer->Clear(commandBuffer, _clearColor[0], _clearColor[1], _clearColor[2], _clearColor[3]); // 背景クリアカラー - } - - model->Update(); - model->Draw(commandBuffer, projection);///< 参照渡しなのでprojectionは変質する - - // 各モデルが持つ描画ターゲットをテクスチャとする場合 - if (_renderTarget == SelectTarget_ModelFrameBuffer) - { - // レンダリング先とスプライトを作成 - model->MakeRenderingTarget(); - // αを付ける - float alpha = i < 1 ? 1.0f : model->GetOpacity(); // 片方のみ不透明度を取得できるようにする - model->SetSpriteColor(1.0f, 1.0f, 1.0f, alpha); - } - - if (_renderTarget == SelectTarget_ViewFrameBuffer && _renderBuffer && _sprite) - {// レンダリングターゲット使いまわしの場合 - // レンダリング終了 - _renderBuffer->EndDraw(commandBuffer); - - float uvVertex[] = - { - 1.0f, 1.0f, - 0.0f, 1.0f, - 0.0f, 0.0f, - 1.0f, 0.0f, - }; - - // program退避 - Csm::Rendering::CubismCommandBuffer_Cocos2dx* lastCommandBuffer = commandBuffer; - - _sprite->SetColor(1.0f, 1.0f, 1.0f, 0.25f + (float)i * 0.5f); - _sprite->RenderImmidiate(commandBuffer, _renderBuffer->GetColorBuffer(), uvVertex); - - // 元に戻す - commandBuffer = lastCommandBuffer; - } - } -} - -void LAppLive2DManager::NextScene() -{ - csmInt32 no = (_sceneIndex + 1) % GetModelDirSize(); - ChangeScene(no); -} - -void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) -{ - _sceneIndex = index; - if (DebugLogEnable) LAppPal::PrintLogLn("[APP]model index: %d", _sceneIndex); - - // ModelDir[]に保持したディレクトリ名から - // model3.jsonのパスを決定する. - // ディレクトリ名とmodel3.jsonの名前を一致させておくこと. - const csmString& model = _modelDir[index]; - - csmString dir(model);; - dir.Append(1, '/'); - - csmString modelJsonName(model); - modelJsonName += ".model3.json"; - - ReleaseAllModel(); - _models.PushBack(new LAppModel()); - _models[0]->LoadAssets(dir.GetRawString(), modelJsonName.GetRawString()); - - /* - * モデル半透明表示を行うサンプルを提示する。 - * ここでUSE_RENDER_TARGET、USE_MODEL_RENDER_TARGETが定義されている場合 - * 別のレンダリングターゲットにモデルを描画し、描画結果をテクスチャとして別のスプライトに張り付ける。 - */ - { -#if defined(USE_RENDER_TARGET) - // Live2DManagerの持つターゲットに描画を行う場合、こちらを選択 - _renderTarget = SelectTarget_ViewFrameBuffer; -#elif defined(USE_MODEL_RENDER_TARGET) - // 各LAppModelの持つターゲットに描画を行う場合、こちらを選択 - _renderTarget = SelectTarget_ModelFrameBuffer; -#else - // デフォルトのメインフレームバッファへレンダリングする(通常) - _renderTarget = SelectTarget_None; -#endif - -#if defined(USE_RENDER_TARGET) || defined(USE_MODEL_RENDER_TARGET) - // モデル個別にαを付けるサンプルとして、もう1体モデルを作成し、少し位置をずらす - _models.PushBack(new LAppModel()); - _models[1]->LoadAssets(dir.GetRawString(), modelJsonName.GetRawString()); - _models[1]->GetModelMatrix()->TranslateX(0.2f); -#endif - - if(_renderTarget == SelectTarget_ModelFrameBuffer) - { - for(Csm::csmUint32 i=0;i<_models.GetSize(); i++) - { - // レンダリング先とスプライトを作成 - _models[i]->MakeRenderingTarget(); - // αを付ける - LAppModel* model = _models[i]; - float alpha = i < 1 ? 1.0f : model->GetOpacity(); // 片方のみ不透明度を取得できるようにする - _models[i]->SetSpriteColor(1.0f, 1.0f, 1.0f, alpha); - } - } - } -} - -void LAppLive2DManager::CreateShader() -{ - const char* vertexShader = - "attribute vec3 position;" - "attribute vec2 uv;" - "varying vec2 vuv;" - "void main(void){" -#if defined(CC_USE_METAL) - " gl_Position = vec4(position.x, -position.y, position.z, 1.0);" -#else - " gl_Position = vec4(position, 1.0);" -#endif - " vuv = uv;" - "}"; - - const char* fragmentShader = -#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) - "precision mediump float;" -#endif - "varying vec2 vuv;" - "uniform sampler2D texture;" - "uniform vec4 baseColor;" - "void main(void){" - " gl_FragColor = texture2D(texture, vuv) * baseColor;" - " gl_FragColor = vec4(gl_FragColor.rgb * gl_FragColor.a, gl_FragColor.a);" - "}"; - - auto program = cocos2d::backend::Device::getInstance()->newProgram(vertexShader, fragmentShader); - _program = program; - -} - -void LAppLive2DManager::SetUpModel() -{ - _modelDir.Clear(); - - // ResourcesPathの中にあるフォルダ名を全てクロールし、モデルが存在するフォルダを定義する。 - // フォルダはあるが同名の.model3.jsonが見つからなかった場合はリストに含めない。 -#if defined(CSM_TARGET_IOS) || defined(CSM_TARGET_MACOSX) || defined(__ANDROID__) - LAppLive2DManagerInternal::SetUpModel(_modelDir); -#else - const csmString resourcePath(FileUtils::getInstance()->getDefaultResourceRootPath().c_str()); -#if defined(_WIN32) - struct _finddata_t fdata; - csmString crawlPath(resourcePath); - crawlPath += "*.*"; - - intptr_t fh = _findfirst(crawlPath.GetRawString(), &fdata); - if (fh == -1) return; - - while (_findnext(fh, &fdata) == 0) - { - if ((fdata.attrib & _A_SUBDIR) && strcmp(fdata.name, "..") != 0) - { - // フォルダと同名の.model3.jsonがあるか探索する - csmString modelName(fdata.name); - csmString model3jsonPath(resourcePath); - model3jsonPath += modelName; - model3jsonPath.Append(1, '/'); - model3jsonPath += modelName; - model3jsonPath += ".model3.json"; - - struct _finddata_t fdata2; - if (_findfirst(model3jsonPath.GetRawString(), &fdata2) != -1) - { - _modelDir.PushBack(csmString(fdata.name)); - } - } - } -#else - DIR* pDir = opendir(resourcePath.GetRawString()); - if (pDir == NULL) return; - - struct dirent* dirent; - while ((dirent = readdir(pDir)) != NULL) - { - if ((dirent->d_type & DT_DIR) && strcmp(dirent->d_name, "..") != 0) - { - // フォルダと同名の.model3.jsonがあるか探索する - csmString modelName(dirent->d_name); - csmString modelPath(resourcePath); - modelPath += modelName; - modelPath.Append(1, '/'); - - csmString model3jsonName(modelName); - model3jsonName += ".model3.json"; - - DIR* pDir2 = opendir(modelPath.GetRawString()); - - struct dirent* dirent2; - while ((dirent2 = readdir(pDir2)) != NULL) - { - if (strcmp(dirent2->d_name, model3jsonName.GetRawString()) == 0) - { - _modelDir.PushBack(csmString(dirent->d_name)); - } - } - closedir(pDir2); - } - } - closedir(pDir); -#endif -#endif - qsort(_modelDir.GetPtr(), _modelDir.GetSize(), sizeof(csmString), CompareCsmString); -} - -Csm::csmVector LAppLive2DManager::GetModelDir() const -{ - return _modelDir; -} - -Csm::csmInt32 LAppLive2DManager::GetModelDirSize() const -{ - return _modelDir.GetSize(); -} - -void LAppLive2DManager::SetRenderTargetClearColor(float r, float g, float b) -{ - _clearColor[0] = r; - _clearColor[1] = g; - _clearColor[2] = b; -} diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManager.hpp b/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManager.hpp deleted file mode 100644 index 754ae7d..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManager.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#pragma once - -#include -#include -#include -#include "LAppModel.hpp" - -class LAppSprite; - -/** - * @brief サンプルアプリケーションにおいてCubismModelを管理するクラス
- * モデル生成と破棄、タップイベントの処理、モデル切り替えを行う。 - * - */ -class LAppLive2DManager -{ - -public: - - /** - * @brief LAppModelのレンダリング先 - */ - enum SelectTarget - { - SelectTarget_None, ///< デフォルトのフレームバッファにレンダリング - SelectTarget_ModelFrameBuffer, ///< LAppModelが各自持つフレームバッファにレンダリング - SelectTarget_ViewFrameBuffer, ///< LAppViewの持つフレームバッファにレンダリング - }; - - /** - * @brief クラスのインスタンス(シングルトン)を返す。
- * インスタンスが生成されていない場合は内部でインスタンを生成する。 - * - * @return クラスのインスタンス - */ - static LAppLive2DManager* GetInstance(); - - /** - * @brief クラスのインスタンス(シングルトン)を解放する。 - * - */ - static void ReleaseInstance(); - - /** - * @brief 現在のシーンで保持しているモデルを返す - * - * @param[in] no モデルリストのインデックス値 - * @return モデルのインスタンスを返す。インデックス値が範囲外の場合はNULLを返す。 - */ - LAppModel* GetModel(Csm::csmUint32 no) const; - - /** - * @brief 現在のシーンで保持しているモデルの数を返す - * - * @return モデルリストの数 - */ - Csm::csmUint32 GetModelCount() const; - - /** - * @brief 現在のシーンで保持しているすべてのモデルを解放する - * - */ - void ReleaseAllModel(); - - /** - * @brief モデル描画用のレンダラを再構築する。 - * - */ - void RecreateRenderer() const; - - /** - * @brief モデル描画用のView行列をセットする。 - * - * @param[in] matrix View行列 - * - */ - void SetViewMatrix(Csm::CubismMatrix44* matrix); - - /** - * @brief 画面をドラッグしたときの処理 - * - * @param[in] x 画面のX座標 - * @param[in] y 画面のY座標 - */ - void OnDrag(Csm::csmFloat32 x, Csm::csmFloat32 y) const; - - /** - * @brief 画面をタップしたときの処理 - * - * @param[in] x 画面のX座標 - * @param[in] y 画面のY座標 - */ - void OnTap(Csm::csmFloat32 x, Csm::csmFloat32 y); - - /** - * @brief 画面を更新するときの処理 - * モデルの更新処理および描画処理を行う - */ - void OnUpdate(Csm::Rendering::CubismCommandBuffer_Cocos2dx* commandBuffer) const; - - /** - * @brief 次のシーンに切り替える
- * サンプルアプリケーションではモデルセットの切り替えを行う。 - */ - void NextScene(); - - /** - * @brief シーンを切り替える
- * サンプルアプリケーションではモデルセットの切り替えを行う。 - */ - void ChangeScene(Csm::csmInt32 index); - - /** - * @brief レンダリング先をデフォルト以外に切り替えた際の背景クリア色設定 - * @param[in] r 赤(0.0~1.0) - * @param[in] g 緑(0.0~1.0) - * @param[in] b 青(0.0~1.0) - */ - void SetRenderTargetClearColor(float r, float g, float b); - -private: - /** - * @brief コンストラクタ - */ - LAppLive2DManager(); - - /** - * @brief デストラクタ - */ - virtual ~LAppLive2DManager(); - - /** - * @brief シェーダーを登録する。 - */ - void CreateShader(); - - /** - * @brief Resources フォルダにあるモデルフォルダ名をセットする - */ - void SetUpModel(); - - /** - * @brief Resources フォルダにあるモデルフォルダ名を取得する - */ - Csm::csmVector GetModelDir() const; - - /** - * @brief Resources フォルダにあるモデルフォルダのサイズを取得する - */ - Csm::csmInt32 GetModelDirSize() const; - - Csm::CubismMatrix44* _viewMatrix; ///< モデル描画に用いるView行列 - Csm::csmVector _models; ///< モデルインスタンスのコンテナ - Csm::csmInt32 _sceneIndex; ///< 表示するシーンのインデックス値 - - // レンダリング先を別ターゲットにする方式の場合に使用 - SelectTarget _renderTarget; ///< レンダリング先の選択肢 - LAppSprite* _sprite; ///< テクスチャの単純描画クラス - Csm::Rendering::CubismOffscreenSurface_Cocos2dx* _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング - float _clearColor[4]; ///< レンダリングターゲットのクリアカラー - cocos2d::backend::Program* _program; - - Csm::csmVector _modelDir; ///< モデルディレクトリ名のコンテナ -}; diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManagerInternal.cpp b/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManagerInternal.cpp deleted file mode 100644 index 2452423..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManagerInternal.cpp +++ /dev/null @@ -1,208 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#include "LAppLive2DManagerInternal.h" -#if defined(CSM_TARGET_IOS) || defined(CSM_TARGET_MACOSX) -#include -#elif defined(__ANDROID__) -#include -#include -#include "platform/android/jni/JniHelper.h" -#endif - - -namespace -{ -#if defined(CSM_TARGET_IOS) || defined(CSM_TARGET_MACOSX) -inline Csm::csmString GetPath(CFURLRef url) -{ - CFStringRef cfstr = CFURLCopyFileSystemPath(url, CFURLPathStyle::kCFURLPOSIXPathStyle); - CFIndex size = CFStringGetLength(cfstr) * 4 + 1; // Length * UTF-16 Max Character size + null-terminated-byte - char* buf = new char[size]; - CFStringGetCString(cfstr, buf, size, CFStringBuiltInEncodings::kCFStringEncodingUTF8); - Csm::csmString result(buf); - delete[] buf; - return result; -} -#elif defined(__ANDROID__) -// jobject, jstring -template -class ScopedJObject { -public: - ScopedJObject(JNIEnv* env, T ptr); - ScopedJObject(const ScopedJObject&) = delete; - ScopedJObject(ScopedJObject&& move) = default; - ScopedJObject& operator= (const ScopedJObject&) = delete; - ScopedJObject& operator= (ScopedJObject&&) = default; - ~ScopedJObject(); - inline JNIEnv* env() - { - return _env; - } - inline const T& get() - { - return _ptr; - } - inline void reset(T ptr = nullptr) - { - if (_ptr != nullptr) - { - _env->DeleteLocalRef(_ptr); - } - _ptr = ptr; - } -private: - JNIEnv* _env; - T _ptr = nullptr; -}; - -class JniContext; -class JniAssetManager; - -template -ScopedJObject::ScopedJObject(JNIEnv* env, T ptr) - : _env(env) - , _ptr(ptr) -{ -} -template -ScopedJObject::~ScopedJObject() -{ - if (_ptr != nullptr) - { - _env->DeleteLocalRef(_ptr); - } -} - -class JniContext -{ -public: - JniContext() = delete; - JniContext(const JniContext&) = delete; - JniContext(JniContext&&) = default; - JniContext& operator= (const JniContext&) = delete; - JniContext& operator= (JniContext&&) = default; - JniAssetManager getAssets(); - static JniContext GetContext(JNIEnv* env); - -private: - JniContext(JNIEnv* env, jobject obj); - - ScopedJObject obj; - jmethodID method_getAssets; -}; - -class JniAssetManager -{ -public: - JniAssetManager() = delete; - JniAssetManager(JNIEnv* env, jobject assetManager); - JniAssetManager(const JniAssetManager&) = delete; - JniAssetManager(JniAssetManager&&) = default; - JniAssetManager& operator= (const JniAssetManager&) = delete; - JniAssetManager& operator= (JniAssetManager&&) = default; - - jobjectArray list(jstring path); - Csm::csmVector list(const char* path); - -private: - ScopedJObject obj; - jmethodID method_list; -}; - -JniContext::JniContext(JNIEnv* env, jobject context) - : obj(env, context) - , method_getAssets(env->GetMethodID(env->GetObjectClass(context), "getAssets", "()Landroid/content/res/AssetManager;")) -{ -} - -JniAssetManager JniContext::getAssets() -{ - return JniAssetManager(obj.env(), obj.env()->CallObjectMethod(obj.get(), method_getAssets)); -} - -JniContext JniContext::GetContext(JNIEnv* env) -{ - cocos2d::JniMethodInfo getContext; - cocos2d::JniHelper::getStaticMethodInfo(getContext, "org/cocos2dx/lib/Cocos2dxActivity", "getContext", "()Landroid/content/Context;"); - return JniContext(env, env->CallStaticObjectMethod(getContext.classID, getContext.methodID)); -} - -JniAssetManager::JniAssetManager(JNIEnv* env, jobject assetManager) - : obj(env, assetManager) - , method_list(env->GetMethodID(env->GetObjectClass(assetManager), u8"list", u8"(Ljava/lang/String;)[Ljava/lang/String;")) -{ -} - -Csm::csmVector JniAssetManager::list(const char* path) -{ - JNIEnv* env = obj.env(); - ScopedJObject jstr(env, env->NewStringUTF(path)); - jobjectArray files = (jobjectArray)env->CallObjectMethod(obj.get(), method_list, jstr.get()); - int length = env->GetArrayLength(files); - Csm::csmVector list(length); - for (int i = 0; i < length; i++) - { - ScopedJObject jstr(env, reinterpret_cast(env->GetObjectArrayElement(files, i))); - const char* jchars = env->GetStringUTFChars(jstr.get(), nullptr); - list.PushBack(Csm::csmString(jchars)); - env->ReleaseStringUTFChars(jstr.get(), jchars); - } - return list; -} -#endif -} -namespace LAppLive2DManagerInternal { -#if defined(CSM_TARGET_IOS) || defined(CSM_TARGET_MACOSX) -void SetUpModel(Csm::csmVector& dst) -{ - CFBundleRef mainBundle = CFBundleGetMainBundle(); - CFURLRef rootUrl = CFBundleCopyResourcesDirectoryURL(mainBundle); -#if defined(CSM_TARGET_MACOSX) - rootUrl = CFURLCopyAbsoluteURL(rootUrl); -#endif - Csm::csmString rootPath(GetPath(rootUrl)); - rootPath.Append(1, '/'); - { - CFArrayRef arr = CFBundleCreateBundlesFromDirectory(NULL, rootUrl, NULL); - CFIndex count = CFArrayGetCount(arr); - for (CFIndex i = 0; i < count; i++) - { - CFBundleRef item = (CFBundleRef)CFArrayGetValueAtIndex(arr, i); - CFURLRef itemDirUrl = CFBundleCopyResourcesDirectoryURL(item); - CFArrayRef model3json = CFBundleCopyResourceURLsOfType(item, CFSTR(".model3.json"), NULL); - if (CFArrayGetCount(model3json) == 1) - { - Csm::csmString itemDirPath(GetPath(itemDirUrl)); - dst.PushBack(Csm::csmString(itemDirPath.GetRawString() + rootPath.GetLength())); - } - } - } -} -#elif defined(__ANDROID__) -void SetUpModel(Csm::csmVector& dst) -{ - JniContext cxtObj = JniContext::GetContext(cocos2d::JniHelper::getEnv()); - JniAssetManager assetManager = cxtObj.getAssets(); - Csm::csmVector root = assetManager.list(""); - for (int i = 0; i < root.GetSize(); i++) - { - Csm::csmVector files = assetManager.list(root[i].GetRawString()); - Csm::csmString target(root[i]); - target += ".model3.json"; - for (int j = 0; j < files.GetSize(); j++) - { - if (target == files[j]) - { - dst.PushBack(root[i]); - break; - } - } - } -} -#endif -} diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManagerInternal.h b/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManagerInternal.h deleted file mode 100644 index 4287f4d..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppLive2DManagerInternal.h +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#pragma once -#if defined(CSM_TARGET_IOS) || defined(CSM_TARGET_MACOSX) || defined(__ANDROID__) -#include -#include -namespace LAppLive2DManagerInternal -{ - void SetUpModel(Csm::csmVector& dst); -} -#endif diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppPal.cpp b/Samples/Cocos2d-x/Demo/Classes/LAppPal.cpp deleted file mode 100644 index 00d466b..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppPal.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#include "LAppPal.hpp" -#include -#include "cocos2d.h" -#include "LAppDefine.hpp" - -using namespace Csm; -USING_NS_CC; - -csmByte* LAppPal::LoadFileAsBytes(const csmChar* filePath, csmSizeInt* outSize) -{ - ssize_t size = 0; - csmByte* buf = FileUtils::getInstance()->getDataFromFile(filePath).takeBuffer(&size); - - if (buf == NULL) - { - if (LAppDefine::DebugLogEnable) - { - PrintLogLn("File load failed : %s", filePath); - } - return NULL; - } - - *outSize = static_cast(size); - return buf; -} - -void LAppPal::ReleaseBytes(csmByte* byteData) -{ - free(byteData); -} - -csmFloat32 LAppPal::GetDeltaTime() -{ - if(Director::getInstance() != NULL) - { - return Director::getInstance()->getDeltaTime(); - } - return 0.0f; -} - -void LAppPal::PrintLogLn(const csmChar* format, ...) -{ - va_list args; - csmChar buf[256]; - va_start(args, format); - vsnprintf(buf, sizeof(buf), format, args); // 標準出力でレンダリング - cocos2d::log("%s", buf); // cocos2dのログ関数で出力(関数で改行される) - va_end(args); -} - -void LAppPal::PrintMessageLn(const csmChar* message) -{ - PrintLogLn("%s", message); -} diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppPal.hpp b/Samples/Cocos2d-x/Demo/Classes/LAppPal.hpp deleted file mode 100644 index bbf793d..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppPal.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#pragma once - -#include - -/** - * @brief プラットフォーム依存機能を抽象化する Cubism Platform Abstraction Layer. - * - * ファイル読み込みや時刻取得等のプラットフォームに依存する関数をまとめる - * - */ -class LAppPal -{ -public: - /** - * @brief ファイルをバイトデータとして読み込む - * - * ファイルをバイトデータとして読み込む - * - * @param[in] filePath 読み込み対象ファイルのパス - * @param[out] outSize ファイルサイズ - * @return バイトデータ - */ - static Csm::csmByte* LoadFileAsBytes(const Csm::csmChar* filePath,Csm::csmSizeInt* outSize); - - - /** - * @brief バイトデータを解放する - * - * バイトデータを解放する - * - * @param[in] byteData 解放したいバイトデータ - */ - static void ReleaseBytes(Csm::csmByte* byteData); - - /** - * @biref デルタ時間(前回フレームとの差分)を取得する - * - * @return デルタ時間[ms] - * - */ - static Csm::csmFloat32 GetDeltaTime(); - - /** - * @brief ログを出力し最後に改行する - * - * ログを出力し最後に改行する - * - * @param[in] format 書式付文字列 - * @param[in] ... (可変長引数)文字列 - * - */ - static void PrintLogLn(const Csm::csmChar* format, ...); - - /** - * @brief メッセージを出力し最後に改行する - * - * メッセージを出力し最後に改行する - * - * @param[in] message 文字列 - * - */ - static void PrintMessageLn(const Csm::csmChar* message); - -private: - LAppPal(); - -}; - diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppSprite.cpp b/Samples/Cocos2d-x/Demo/Classes/LAppSprite.cpp deleted file mode 100644 index 47d9856..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppSprite.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#include "LAppSprite.hpp" -#include "base/CCDirector.h" -#include "LAppPal.hpp" - -LAppSprite::LAppSprite(backend::Program* program) -{ - _program = program; - _drawCommandBuffer = NULL; -} - -LAppSprite::~LAppSprite() -{ - if (_drawCommandBuffer != NULL) - { - CSM_FREE(_drawCommandBuffer); - } -} - -void LAppSprite::RenderImmidiate(Csm::Rendering::CubismCommandBuffer_Cocos2dx* commandBuffer, Texture2D* texture, float uvVertex[8]) -{ - if (_drawCommandBuffer == NULL) - { - _drawCommandBuffer = CSM_NEW Csm::Rendering::CubismCommandBuffer_Cocos2dx::DrawCommandBuffer(); - } - - PipelineDescriptor* pipelineDescriptor = _drawCommandBuffer->GetCommandDraw()->GetPipelineDescriptor(); - backend::BlendDescriptor* blendDescriptor = _drawCommandBuffer->GetCommandDraw()->GetBlendDescriptor(); - backend::ProgramState* programState = pipelineDescriptor->programState; - - _drawCommandBuffer->GetCommandDraw()->GetCommand()->setDrawType(cocos2d::CustomCommand::DrawType::ELEMENT); - _drawCommandBuffer->GetCommandDraw()->GetCommand()->setPrimitiveType(cocos2d::backend::PrimitiveType::TRIANGLE); - _drawCommandBuffer->CreateVertexBuffer(sizeof(float) * 2, 4 * 2); - _drawCommandBuffer->CreateIndexBuffer(6); - - // 画面サイズを取得する - cocos2d::Size visibleSize = cocos2d::Director::getInstance()->getVisibleSize(); - cocos2d::Size winSize = cocos2d::Director::getInstance()->getWinSize(); - - // 頂点データ - float positionVertex[] = - { - visibleSize.width / winSize.width, visibleSize.height / winSize.height, - -visibleSize.width / winSize.width, visibleSize.height / winSize.height, - -visibleSize.width / winSize.width,-visibleSize.height / winSize.height, - visibleSize.width / winSize.width,-visibleSize.height / winSize.height, - }; - - short positionIndex[] = - { - 0,1,2, - 0,2,3 - }; - - _drawCommandBuffer->UpdateVertexBuffer(positionVertex, uvVertex, 4); - _drawCommandBuffer->UpdateIndexBuffer(positionIndex, 6); - _drawCommandBuffer->CommitVertexBuffer(); - - if (!programState) - { - programState = new cocos2d::backend::ProgramState(_program); - } - - // attribute属性を登録 - programState->getVertexLayout()->setAttribute("position", _program->getAttributeLocation("position"), backend::VertexFormat::FLOAT2, 0, false); - programState->getVertexLayout()->setAttribute("uv", _program->getAttributeLocation("uv"), backend::VertexFormat::FLOAT2, sizeof(float) * 2, false); - - // uniform属性の登録 - programState->setTexture(_program->getUniformLocation("texture"), 0, texture->getBackendTexture()); - - programState->setUniform(_program->getUniformLocation("baseColor"), _spriteColor, sizeof(float) * 4); - - programState->getVertexLayout()->setLayout(sizeof(float) * 4); - - blendDescriptor->sourceRGBBlendFactor = cocos2d::backend::BlendFactor::ONE; - blendDescriptor->destinationRGBBlendFactor = cocos2d::backend::BlendFactor::ONE_MINUS_SRC_ALPHA; - blendDescriptor->sourceAlphaBlendFactor = cocos2d::backend::BlendFactor::ONE; - blendDescriptor->destinationAlphaBlendFactor = cocos2d::backend::BlendFactor::ONE_MINUS_SRC_ALPHA; - blendDescriptor->blendEnabled = true; - - pipelineDescriptor->programState = programState; - - // モデルの描画 - commandBuffer->AddDrawCommand(_drawCommandBuffer->GetCommandDraw()); - -} - -void LAppSprite::SetColor(float r, float g, float b, float a) -{ - _spriteColor[0] = r; - _spriteColor[1] = g; - _spriteColor[2] = b; - _spriteColor[3] = a; -} diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppSprite.hpp b/Samples/Cocos2d-x/Demo/Classes/LAppSprite.hpp deleted file mode 100644 index 9ccc1e4..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppSprite.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#pragma once - -#include "Rendering/Cocos2d/CubismRenderer_Cocos2dx.hpp" -#include "Rendering/Cocos2d/CubismCommandBuffer_Cocos2dx.hpp" -#include "cocos2d.h" - -USING_NS_CC; - -/** -* @brief スプライトを実装するクラス。 -* -* テクスチャID、Rectの管理。 -* -*/ -class LAppSprite -{ -public: - /** - * @brief Rect 構造体。 - */ - struct Rect - { - public: - float left; ///< 左辺 - float right; ///< 右辺 - float up; ///< 上辺 - float down; ///< 下辺 - }; - - /** - * @brief コンストラクタ - * - * @param[in] x x座標 - * @param[in] y y座標 - * @param[in] width 横幅 - * @param[in] height 高さ - * @param[in] textureId テクスチャID - * @param[in] programId シェーダID - */ - LAppSprite(backend::Program* program); - - /** - * @brief デストラクタ - */ - ~LAppSprite(); - - /** - * @brief テクスチャIDを指定して描画する - * - */ - void RenderImmidiate(Csm::Rendering::CubismCommandBuffer_Cocos2dx* commandBuffer, Texture2D* texture, float uvVertex[8]); - - /** - * @brief 色設定 - * - * @param[in] r (0.0~1.0) - * @param[in] g (0.0~1.0) - * @param[in] b (0.0~1.0) - * @param[in] a (0.0~1.0) - */ - void SetColor(float r, float g, float b, float a); - -private: - - float _spriteColor[4]; ///< 表示カラー - - cocos2d::backend::Program* _program; - Csm::Rendering::CubismCommandBuffer_Cocos2dx::DrawCommandBuffer* _drawCommandBuffer; -}; - diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppView.cpp b/Samples/Cocos2d-x/Demo/Classes/LAppView.cpp deleted file mode 100644 index 2d29192..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppView.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#include "LAppView.hpp" -#include "LAppLive2DManager.hpp" -#include "LAppDefine.hpp" -#include "LAppPal.hpp" -#include "LAppModel.hpp" - -using namespace Csm; -using namespace LAppDefine; - -USING_NS_CC; - -LAppView::LAppView(): DrawNode() - , _debugRects(NULL) -{ -} - -void LAppView::onEnter() -{ - DrawNode::onEnter(); - - // タッチ関係のイベント管理 - touchMgr = new TouchManager(); - - // デバイス座標からスクリーン座標に変換するための - deviceToScreen = new CubismMatrix44(); - - // 画面の表示の拡大縮小や移動の変換を行う行列 - viewMatrix = new CubismViewMatrix(); - - Size size = Director::getInstance()->getWinSize(); - - float width = size.width; - float height = size.height; - // 縦サイズを基準とする - float ratio = width / height; - float left = -ratio; - float right = ratio; - float bottom = ViewLogicalLeft; - float top = ViewLogicalRight; - - viewMatrix->SetScreenRect(left, right, bottom, top); // デバイスに対応する画面の範囲。 Xの左端, Xの右端, Yの下端, Yの上端 - viewMatrix->Scale(ViewScale, ViewScale); - - deviceToScreen->LoadIdentity(); // サイズが変わった際などリセット必須 - if (width > height) - { - float screenW = fabsf(right - left); - deviceToScreen->ScaleRelative(screenW / width, -screenW / width); - } - else - { - float screenH = fabsf(top - bottom); - deviceToScreen->ScaleRelative(screenH / height, -screenH / height); - } - deviceToScreen->TranslateRelative(-width / 2.0f, -height / 2.0f); - - // 表示範囲の設定 - viewMatrix->SetMaxScale(ViewMaxScale); // 限界拡大率 - viewMatrix->SetMinScale(ViewMinScale); // 限界縮小率 - - // 表示できる最大範囲 - viewMatrix->SetMaxScreenRect( - ViewLogicalMaxLeft, - ViewLogicalMaxRight, - ViewLogicalMaxBottom, - ViewLogicalMaxTop - ); - - // イベントリスナー作成 - EventListenerTouchAllAtOnce* listener = EventListenerTouchAllAtOnce::create(); - - // タッチメソッド設定 - listener->onTouchesBegan = CC_CALLBACK_2(LAppView::onTouchesBegan, this); - listener->onTouchesMoved = CC_CALLBACK_2(LAppView::onTouchesMoved, this); - listener->onTouchesEnded = CC_CALLBACK_2(LAppView::onTouchesEnded, this); - - // 優先度100でディスパッチャーに登録 - this->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 100); -} - -void LAppView::onExit() -{ - DrawNode::onExit(); - - delete touchMgr; - delete deviceToScreen; - delete viewMatrix; -} - -void LAppView::draw(cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t flags) -{ - DrawNode::draw(renderer, transform, flags); - onDraw(transform, flags); -} - -void LAppView::onDraw(const cocos2d::Mat4& transform, uint32_t flags) -{ - _commandBuffer.PushCommandGroup(); - - Director::getInstance()->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); - Director::getInstance()->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, transform); - - LAppLive2DManager* Live2DMgr = LAppLive2DManager::GetInstance(); - - Live2DMgr->SetViewMatrix(viewMatrix); - - // Cubism更新・描画 - Live2DMgr->OnUpdate(&_commandBuffer); - - if (_debugRects) - { - drawDebugRects(Live2DMgr); - } - - Director::getInstance()->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); - - _commandBuffer.PopCommandGroup(); -} - -void LAppView::onTouchesBegan(const std::vector& touches, Event* event) -{ - // タッチ開始 - size_t touchNum = touches.size(); - - if (touchNum == 1) - { - Point pt = touches[0]->getLocationInView(); - if (DebugTouchLogEnable)LAppPal::PrintLogLn("[APP]touchesBegan x:%.0f y:%.0f", pt.x, pt.y); - touchMgr->touchesBegan(pt.x, pt.y); - } -} - -void LAppView::onTouchesMoved(const std::vector& touches, Event* event) -{ - // タッチ中 - size_t touchNum = touches.size(); - - float screenX = this->transformScreenX(touchMgr->getX()); - float screenY = this->transformScreenY(touchMgr->getY()); - float viewX = this->transformViewX(touchMgr->getX()); - float viewY = this->transformViewY(touchMgr->getY()); - - if (touchNum == 1) - { - Point pt = touches[0]->getLocationInView(); - - if (DebugTouchLogEnable) - LAppPal::PrintLogLn("[APP]touchesMoved device{x:%.0f y:%.0f} screen{x:%.2f y:%.2f} view{x:%.2f y:%.2f}", pt.x, pt.y, screenX, screenY, viewX, viewY); - - touchMgr->touchesMoved(pt.x, pt.y); - } - LAppLive2DManager* live2DMgr = LAppLive2DManager::GetInstance(); - live2DMgr->OnDrag(viewX, viewY); -} - -void LAppView::onTouchesEnded(const std::vector& touches, cocos2d::Event* event) -{ - // タッチ終了 - LAppLive2DManager* live2DMgr = LAppLive2DManager::GetInstance(); - live2DMgr->OnDrag(0, 0); - - if (touches.size() == 1) - { - // シングルタップ - float x = deviceToScreen->TransformX(touchMgr->getX()); // 論理座標変換した座標を取得。 - float y = deviceToScreen->TransformY(touchMgr->getY()); // 論理座標変換した座標を取得。 - if (DebugTouchLogEnable) LAppPal::PrintLogLn("[APP]touchesEnded x:%.2f y:%.2f", x, y); - live2DMgr->OnTap(x, y); - } -} - -void LAppView::updateViewMatrix(float dx, float dy, float cx, float cy, float scale) -{ - LAppLive2DManager* live2DMgr = LAppLive2DManager::GetInstance(); - - // 拡大縮小 - viewMatrix->AdjustScale(cx, cy, scale); - - // 移動 - viewMatrix->AdjustTranslate(dx, dy); - - live2DMgr->SetViewMatrix(viewMatrix); -} - -float LAppView::transformViewX(float deviceX) -{ - float screenX = deviceToScreen->TransformX(deviceX); // 論理座標変換した座標を取得。 - return viewMatrix->InvertTransformX(screenX); // 拡大、縮小、移動後の値。 -} - -float LAppView::transformViewY(float deviceY) -{ - float screenY = deviceToScreen->TransformY(deviceY); // 論理座標変換した座標を取得。 - return viewMatrix->InvertTransformY(screenY); // 拡大、縮小、移動後の値。 -} - -float LAppView::transformScreenX(float deviceX) -{ - return deviceToScreen->TransformX(deviceX); -} - -float LAppView::transformScreenY(float deviceY) -{ - return deviceToScreen->TransformY(deviceY); -} - -void LAppView::setDebugRectsNode(DrawNode* debugRects) -{ - _debugRects = debugRects; -} - -void LAppView::drawDebugRects(LAppLive2DManager* manager) const -{ - const Color4F hitAreaColor = Color4F(1.0f, 0, 0, 0.2f); - const Color4F userDataAreaColor = Color4F(0, 0, 1.0f, 0.2f); - - CubismMatrix44 projection; - const Size window = Director::getInstance()->getWinSize(); - const CubismVector2 windowSize = CubismVector2(window.width, window.height); - projection.Scale(1, window.width / window.height); - - if (viewMatrix != NULL) - { - projection.MultiplyByMatrix(viewMatrix); - } - - for (csmUint32 i = 0; i < manager->GetModelCount(); ++i) - { - _debugRects->clear(); - LAppModel* model = manager->GetModel(i); - const Csm::csmVector& userDataAreas = model->GetUserDataAreas(projection, windowSize); - for (csmUint32 j = 0; j < userDataAreas.GetSize(); ++j) - { - _debugRects->drawSolidRect(Vec2(userDataAreas[j].X, userDataAreas[j].Y) - , Vec2(userDataAreas[j].GetRight(), userDataAreas[j].GetBottom()) - , userDataAreaColor); - } - - const Csm::csmVector& hitAreas = model->GetHitAreas(projection, windowSize); - for (csmUint32 j = 0; j < hitAreas.GetSize(); ++j) - { - _debugRects->drawSolidRect(Vec2(hitAreas[j].X, hitAreas[j].Y) - , Vec2(hitAreas[j].GetRight(), hitAreas[j].GetBottom()) - , hitAreaColor); - } - } -} - -LAppView* LAppView::createDrawNode() -{ - LAppView* ret = new(std::nothrow) LAppView(); - if (ret && ret->init()) - { - ret->autorelease(); - return ret; - } - CC_SAFE_DELETE(ret); - return nullptr; -} diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppView.hpp b/Samples/Cocos2d-x/Demo/Classes/LAppView.hpp deleted file mode 100644 index a33ad1f..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/LAppView.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#pragma once - -#include -#include -#include -#include "TouchManager.h" -#include "2d/CCSprite.h" -#include "cocos2d.h" -#include -#include "LAppLive2DManager.hpp" - -class LAppView : public cocos2d::DrawNode -{ -public: - LAppView(); - virtual ~LAppView() {} - - virtual void onEnter(); - virtual void onExit(); - - virtual void draw(cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t flags); - void onDraw(const cocos2d::Mat4& transform, uint32_t flags); - - void onTouchesBegan(const std::vector& touches, cocos2d::Event* event); - void onTouchesMoved(const std::vector& touches, cocos2d::Event* event); - void onTouchesEnded(const std::vector& touches, cocos2d::Event* event); - - void updateViewMatrix(float dx, float dy, float cx, float cy, float scale); - float transformViewX(float deviceX); - float transformViewY(float deviceY); - float transformScreenX(float deviceX); - float transformScreenY(float deviceY); - - void setDebugRectsNode(DrawNode* debugRects); - void drawDebugRects(LAppLive2DManager* manager) const; - - static LAppView* createDrawNode(); - -private: - TouchManager* touchMgr; - Csm::CubismMatrix44* deviceToScreen; - Csm::CubismViewMatrix* viewMatrix; - Csm::Rendering::CubismCommandBuffer_Cocos2dx _commandBuffer; - DrawNode* _debugRects; -}; diff --git a/Samples/Cocos2d-x/Demo/Classes/SampleScene.cpp b/Samples/Cocos2d-x/Demo/Classes/SampleScene.cpp deleted file mode 100644 index 76468a3..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/SampleScene.cpp +++ /dev/null @@ -1,202 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#include "SampleScene.h" -#include "LAppView.hpp" -#include "LAppLive2DManager.hpp" -#include "LAppDefine.hpp" -#include "LAppPal.hpp" - -USING_NS_CC; - -namespace -{ - SampleScene* instance = NULL; -} - -SampleScene::SampleScene() - : _pView(NULL) - , _changeItem(NULL) - , _closeItem(NULL) -{ -} - -Scene* SampleScene::createScene() -{ - return SampleScene::create(); -} - -SampleScene * SampleScene::getInstance() -{ - return instance; -} - -// Print useful error message instead of segfaulting when files are not there. -static void problemLoading(const char* filename) -{ - printf("Error while loading: %s\n", filename); - printf("Depending on how you compiled you might have to add 'Resources/' in front of filenames in SampleSceneScene.cpp\n"); -} - -// on "init" you need to initialize your instance -bool SampleScene::init() -{ - ////////////////////////////// - // 1. super init first - if (!Scene::init()) - { - return false; - } - - // Live2DManager実体化の前に必要となる - instance = this; - - auto winSize = Director::getInstance()->getWinSize(); - auto visibleSize = Director::getInstance()->getVisibleSize(); - Vec2 origin = Director::getInstance()->getVisibleOrigin(); - - ///////////////////////////// - // 2. add a menu item with "X" image, which is clicked to quit the program - // you may modify it. - - // add a "close" icon to exit the progress. it's an autorelease object - _closeItem = MenuItemImage::create( - "CloseNormal.png", - "CloseSelected.png", - CC_CALLBACK_1(SampleScene::menuCloseCallback, this) - ); - - if (_closeItem == nullptr || - _closeItem->getContentSize().width <= 0 || - _closeItem->getContentSize().height <= 0) - { - problemLoading("'CloseNormal.png' and 'CloseSelected.png'"); - } - - // create menu, it's an autorelease object - auto closeMenu = Menu::create(_closeItem, NULL); - closeMenu->setScale(0.9f); - closeMenu->setPosition(Vec2::ZERO); - this->addChild(closeMenu, 1); - - _changeItem = MenuItemImage::create( - "icon_gear.png", - "icon_gear.png", - CC_CALLBACK_1(SampleScene::menuChangeCallback, this) - ); - - if (_changeItem == nullptr || - _changeItem->getContentSize().width <= 0 || - _changeItem->getContentSize().height <= 0) - { - problemLoading("'icon_gear.png'"); - } - - // create menu, it's an autorelease object - auto changeMenu = Menu::create(_changeItem, NULL); - changeMenu->setScale(0.9f); - changeMenu->setPosition(Point::ZERO); - this->addChild(changeMenu, 1); - - ///////////////////////////// - // 3. add your codes below... - - // add "SampleScene" splash screen" - - auto sprite = Sprite::create(LAppDefine::BackImageName); - if (sprite == nullptr) - { - problemLoading(LAppDefine::BackImageName); - } - else - { - // position the sprite on the center of the screen - sprite->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y)); - sprite->setScale(2); - - // add the sprite as a child to this layer - this->addChild(sprite, 0); - } - - // add "Live2DModel" - _pView = LAppView::createDrawNode(); - this->addChild(_pView); - - // Live2DManager実体化 - LAppLive2DManager::GetInstance(); - - if (LAppDefine::DebugLogEnable) - { - LAppPal::PrintLogLn("=============================================="); - LAppPal::PrintLogLn(" Live2D SDK Sample App "); - LAppPal::PrintLogLn("=============================================="); - } - - if (LAppDefine::DebugDrawRectEnable) - { - auto* pDebugRects = DrawNode::create(); - this->addChild(pDebugRects); - _pView->setDebugRectsNode(pDebugRects); - } - - // update有効 - this->scheduleUpdate(); - - return true; -} - -void SampleScene::update(float delta) -{ - Node::update(delta); - - { - auto winSize = Director::getInstance()->getWinSize(); - auto visibleSize = Director::getInstance()->getVisibleSize(); - Vec2 origin = Director::getInstance()->getVisibleOrigin(); - // 端に隙間なく位置すると端末によっては描画されないことがあるのでマージンを設ける - Vec2 margin = Vec2(20, 20); - - if (_changeItem) - { - float x = origin.x + visibleSize.width - _changeItem->getContentSize().width / 2 - margin.x; - float y = getContentSize().height - _changeItem->getContentSize().height / 2 - margin.y; - _changeItem->setPosition(Vec2(x,y)); - } - - if (_closeItem) - { - float x = origin.x + visibleSize.width - _closeItem->getContentSize().width / 2 - margin.x; - float y = origin.y + _closeItem->getContentSize().height / 2 + margin.y; - _closeItem->setPosition(Vec2(x,y)); - } - } -} - -void SampleScene::onExit() -{ - Node::onExit(); - - // LAppModelがRenderingSpriteを使用していることがある。これはCocosのExit以降に開放することが出来ないので、 - // モデルはここですべて消えてもらう - LAppLive2DManager::GetInstance()->ReleaseAllModel(); -} - -void SampleScene::menuCloseCallback(Ref* pSender) -{ - LAppLive2DManager::ReleaseInstance(); - - Director::getInstance()->end(); - -#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) - exit(0); -#endif -} - -void SampleScene::menuChangeCallback(Ref* pSender) -{ - LAppLive2DManager::GetInstance()->NextScene(); -} diff --git a/Samples/Cocos2d-x/Demo/Classes/SampleScene.h b/Samples/Cocos2d-x/Demo/Classes/SampleScene.h deleted file mode 100644 index c81ff64..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/SampleScene.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#ifndef __SAMPLE_SCENE_H__ -#define __SAMPLE_SCENE_H__ - -#include "cocos2d.h" -#include - -class LAppView; - -class SampleScene : public cocos2d::Scene -{ -public: - static cocos2d::Scene* createScene(); - - static SampleScene* getInstance(); - - virtual bool init() override; - - virtual void update(float delta) override; - - virtual void onExit() override; - - // a selector callback - void menuCloseCallback(cocos2d::Ref* pSender); - void menuChangeCallback(cocos2d::Ref* pSender); - - // implement the "static create()" method manually - CREATE_FUNC(SampleScene); - - // constructor - SampleScene(); - -private: - LAppView* _pView; - - cocos2d::MenuItemImage* _changeItem; - cocos2d::MenuItemImage* _closeItem; -}; - -#endif // __SAMPLE_SCENE_H__ diff --git a/Samples/Cocos2d-x/Demo/Classes/TouchManager.cpp b/Samples/Cocos2d-x/Demo/Classes/TouchManager.cpp deleted file mode 100644 index 474d88e..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/TouchManager.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#include "TouchManager.h" - -TouchManager::TouchManager() - : lastX(0) - , lastY(0) - , lastX1(0) - , lastY1(0) - , lastX2(0) - , lastY2(0) - , lastTouchDist(0) - , deltaX(0) - , deltaY(0) - , scale(1) -{ } - -/* - * タッチ開始時イベント - * @param x - * @param deviceY - */ -void TouchManager::touchesBegan(float x, float y) -{ - lastX = x; - lastY = y; - startX = x; - startY = y; - lastTouchDist = -1; - flipAvailable = true; - touchSingle = true; -} - -/* - * タッチ開始時イベント。 - * @param x1 - * @param y1 - * @param x2 - * @param y2 - */ -void TouchManager::touchesBegan(float x1, float y1, float x2, float y2) -{ - float dist = distance(x1, y1, x2, y2); - float centerX = (x1 + x2) * 0.5f; - float centerY = (y1 + y2) * 0.5f; - - lastX1 = x1; - lastY1 = y1; - lastX2 = x2; - lastY2 = y2; - - lastX = centerX; - lastY = centerY; - startX = centerX; - startY = centerY; - lastTouchDist = dist; - flipAvailable = true; - touchSingle = false; -} - -void TouchManager::touchesMoved(cocos2d::Point touches[], int num) -{ - // 前回のクリック位置に最も近いものを選びだす - // pt1、pt2の両点への距離の和が最小となる点の組み合わせを総当たりで探す - int index1, index2, minDist2 = 999999999; - index1 = 0; - index2 = 1; - for (int i1 = 0; i1 < num; i1 ++) - { - cocos2d::Point pp1 = touches[i1]; - - for (int i2 = 0; i2 < num; i2++) - { - if (i1 == i2) continue ; - - cocos2d::Point pp2 = touches[i2]; - - int distTotal = ((lastX1 - pp1.x) * (lastX1 - pp1.x) + (lastY1 - pp1.y) * (lastY1 - pp1.y)) - + ((lastX2 - pp2.x) * (lastX2 - pp2.x) + (lastY2 - pp2.y) * (lastY2 - pp2.y)); - - if (distTotal < minDist2) - { - minDist2 = distTotal; - index1 = i1; - index2 = i2; - } - } - } - - if (minDist2 > 70 * 70 * 2 && num > 2) return; // 処理しない - // pt2に一番近い点 - cocos2d::Point pt1 = touches[index1]; - cocos2d::Point pt2 = touches[index2]; - - touchesMoved(pt1.x, pt1.y, pt2.x, pt2.y); -} - -/* - * ドラッグ時のイベント - * @param deviceX - * @param deviceY - */ -void TouchManager::touchesMoved(float deviceX, float deviceY) -{ - lastX = deviceX; - lastY = deviceY; - lastTouchDist = -1; - touchSingle = true; -} - -/* - * ドラッグ時のイベント - * @param x1 - * @param y1 - * @param x2 - * @param y2 - */ -void TouchManager::touchesMoved(float x1, float y1, float x2, float y2) -{ - float dist = distance(x1, y1, x2, y2); - float centerX = (x1 + x2) * 0.5f; - float centerY = (y1 + y2) * 0.5f; - - if (lastTouchDist > 0) - { - scale = (float)pow(dist / lastTouchDist, 0.75); - deltaX = calcShift(x1 - lastX1, x2 - lastX2); - deltaY = calcShift(y1 - lastY1, y2 - lastY2); - } - else - { - scale = 1; - deltaX = 0; - deltaY = 0; - } - - lastX = centerX; - lastY = centerY; - lastX1 = x1; - lastY1 = y1; - lastX2 = x2; - lastY2 = y2; - lastTouchDist = dist; - touchSingle = false; -} - -/* - * フリックした距離 - * @return - */ -float TouchManager::getFlickDistance() -{ - return distance(startX, startY, lastX, lastY); -} - -/* - * 点1から点2への距離を求める - * @param p1x - * @param p1y - * @param p2x - * @param p2y - * @return - */ -float TouchManager::distance(float x1, float y1, float x2, float y2) -{ - return (float)sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); -} - -/* - * 二つの値から、移動量を求める。 - * 違う方向の場合は移動量0。同じ方向の場合は、絶対値が小さい方の値を参照する - */ -float TouchManager::calcShift(float v1, float v2) -{ - if ((v1 > 0) != (v2 > 0)) return 0; - - float fugou = v1 > 0 ? 1 : -1; - float a1 = abs(v1); - float a2 = abs(v2); - return fugou * ((a1 < a2) ? a1 : a2); -} diff --git a/Samples/Cocos2d-x/Demo/Classes/TouchManager.h b/Samples/Cocos2d-x/Demo/Classes/TouchManager.h deleted file mode 100644 index a3b8177..0000000 --- a/Samples/Cocos2d-x/Demo/Classes/TouchManager.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Copyright(c) Live2D Inc. All rights reserved. - * - * Use of this source code is governed by the Live2D Open Software license - * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. - */ - -#pragma once - -#include "cocos2d.h" - -class TouchManager -{ -private: - float startY; // タッチを開始した位置 - float startX; - - float lastX; // シングルタッチ時のxの値 - float lastY; // シングルタッチ時のyの値 - float lastX1; // ダブルタッチ時の一つ目のxの値 - float lastY1; // ダブルタッチ時の一つ目のyの値 - float lastX2; // ダブルタッチ時の二つ目のxの値 - float lastY2; // ダブルタッチ時の二つ目のyの値 - - float lastTouchDist; // 2本以上でタッチしたときの指の距離 - - float deltaX; // 前回の値から今回の値へのxの移動距離。 - float deltaY; // 前回の値から今回の値へのyの移動距離。 - - float scale; // このフレームで掛け合わせる拡大率。拡大操作中以外は1。 - - bool touchSingle; // シングルタッチ時はtrue - bool flipAvailable; // フリップが有効かどうか - -public: - TouchManager(); - float getCenterX() { return lastX; } - float getCenterY() { return lastY; } - float getDeltaX() { return deltaX; } - float getDeltaY() { return deltaY; } - float getStartX() { return startX; } - float getStartY() { return startY; } - float getScale() { return scale; } - float getX() { return lastX; } - float getY() { return lastY; } - float getX1() { return lastX1; } - float getY1() { return lastY1; } - float getX2() { return lastX2; } - float getY2() { return lastY2; } - bool isSingleTouch() { return touchSingle; } - bool isFlickAvailable() { return flipAvailable; } - void disableFlick() { flipAvailable = false; } - - void touchesBegan(float deviceX, float deviceY); - void touchesBegan(float deviceX1, float deviceY1, float deviceX2, float deviceY2); - void touchesMoved(cocos2d::Point touches[], int num); - void touchesMoved(float deviceX, float deviceY); - void touchesMoved(float deviceX1, float deviceY1, float deviceX2, float deviceY2); - float getFlickDistance(); - -private: - float distance(float x1, float y1, float x2, float y2); - float calcShift(float v1, float v2); -}; diff --git a/Samples/Cocos2d-x/Demo/Resources/CloseNormal.png b/Samples/Cocos2d-x/Demo/Resources/CloseNormal.png deleted file mode 100644 index b65498c941595b7dfe49e3bd8d21c3cb2c23c868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3596 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 M07*qoM6N<$f>}*|D^_ww@lRz|vCuzLs)$;-`! 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 diff --git a/Samples/Cocos2d-x/Demo/Resources/fonts/Marker Felt.ttf b/Samples/Cocos2d-x/Demo/Resources/fonts/Marker Felt.ttf deleted file mode 100644 index 3752ef31106960b4a060bcc850ac89d8de7c71b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25776 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 Oh;?XN1X%k=Y5jl3*|FsS diff --git a/Samples/Cocos2d-x/Demo/Resources/fonts/arial.ttf b/Samples/Cocos2d-x/Demo/Resources/fonts/arial.ttf deleted file mode 100644 index abc899cd55086105f439df7a6d01db84168aebb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778552 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�~L; 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 z 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

%_(Aj7q33!xs4IE+IDaLfo1Ni*OlT3|2Q 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≻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

^0r7XT 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 =6j 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

okG(z1$EL-Iw)0HFW9 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

5T4(J7RUssJ3lH8XDc6u&1)6 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 diff --git a/Samples/Cocos2d-x/Demo/Resources/res/.gitkeep b/Samples/Cocos2d-x/Demo/Resources/res/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/Samples/Cocos2d-x/Demo/proj.android/.gitignore b/Samples/Cocos2d-x/Demo/proj.android/.gitignore deleted file mode 100644 index 7f96cab..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.gradle/ -.cxx/ -build/ -/local.properties diff --git a/Samples/Cocos2d-x/Demo/proj.android/app/AndroidManifest.xml b/Samples/Cocos2d-x/Demo/proj.android/app/AndroidManifest.xml deleted file mode 100644 index 08df45c..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/app/AndroidManifest.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/Cocos2d-x/Demo/proj.android/app/build.gradle b/Samples/Cocos2d-x/Demo/proj.android/app/build.gradle deleted file mode 100644 index 21cd464..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/app/build.gradle +++ /dev/null @@ -1,102 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion PROP_COMPILE_SDK_VERSION.toInteger() - - defaultConfig { - applicationId "com.live2d.demo" - minSdkVersion PROP_MIN_SDK_VERSION - targetSdkVersion PROP_TARGET_SDK_VERSION - versionCode 1 - versionName "1.0" - - externalNativeBuild { - cmake { - targets 'Demo' - arguments "-DCMAKE_FIND_ROOT_PATH=", "-DANDROID_STL=c++_static", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_NEON=TRUE" - cppFlags "-frtti -fexceptions -fsigned-char" - } - } - - ndk { - abiFilters = [] - abiFilters.addAll(PROP_APP_ABI.split(':').collect{it as String}) - } - } - - sourceSets.main { - java.srcDir "src" - res.srcDir "res" - manifest.srcFile "AndroidManifest.xml" - assets.srcDirs "../../../../Resources", "../../Resources" - } - - externalNativeBuild { - cmake { - path "../../CMakeLists.txt" - version "3.10.2" - } - } - - signingConfigs { - - release { - if (project.hasProperty("RELEASE_STORE_FILE")) { - storeFile file(RELEASE_STORE_FILE) - storePassword RELEASE_STORE_PASSWORD - keyAlias RELEASE_KEY_ALIAS - keyPassword RELEASE_KEY_PASSWORD - } - } - - debug { - storeFile file("debug.keystore") - storePassword "android" - keyAlias "androiddebugkey" - keyPassword "android" - } - } - - buildTypes { - release { - debuggable false - jniDebuggable false - renderscriptDebuggable false - minifyEnabled true - shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - if (project.hasProperty("RELEASE_STORE_FILE")) { - signingConfig signingConfigs.release - } - } - - debug { - debuggable true - jniDebuggable true - renderscriptDebuggable true - } - } -} - -android.applicationVariants.all { variant -> - def dest_assets_folder = "${projectDir}/assets" - - // delete previous files first - delete dest_assets_folder - def targetName = variant.name.capitalize() - def copyTaskName = "copy${targetName}ResourcesToAssets" - - tasks.register(copyTaskName) { - copy { - from "${buildDir}/../../../Resources", "${buildDir}/../../../../../Res" - into "${buildDir}/intermediates/assets/${variant.dirName}" - exclude "**/*.gz" - } - } - tasks.getByName("pre${targetName}Build").dependsOn copyTaskName -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation project(':libcocos2dx') -} diff --git a/Samples/Cocos2d-x/Demo/proj.android/app/debug.keystore b/Samples/Cocos2d-x/Demo/proj.android/app/debug.keystore deleted file mode 100644 index 9746acf89d5aeb4ffee48cbf1f7080aa6f9a069b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2521 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 Uks}X2zP>h)&Mp9A15%6s0@9O;QUCw| diff --git a/Samples/Cocos2d-x/Demo/proj.android/app/jni/demo/main.cpp b/Samples/Cocos2d-x/Demo/proj.android/app/jni/demo/main.cpp deleted file mode 100644 index 6cab47c..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/app/jni/demo/main.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#include - -#include -#include - -#include "AppDelegate.h" - -#define LOG_TAG "main" -#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) - -namespace { -std::unique_ptr appDelegate; -} - -void cocos_android_app_init(JNIEnv* env) { - LOGD("cocos_android_app_init"); - appDelegate.reset(new AppDelegate()); -} diff --git a/Samples/Cocos2d-x/Demo/proj.android/app/proguard-rules.pro b/Samples/Cocos2d-x/Demo/proj.android/app/proguard-rules.pro deleted file mode 100644 index 9f6d4ff..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/app/proguard-rules.pro +++ /dev/null @@ -1,39 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in E:\developSoftware\Android\SDK/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Proguard Cocos2d-x for release --keep public class org.cocos2dx.** { *; } --dontwarn org.cocos2dx.** --keep public class com.chukong.** { *; } --dontwarn com.chukong.** --keep public class com.huawei.android.** { *; } --dontwarn com.huawei.android.** --keep public class com.oppo.oiface.engine.** { *; } --dontwarn com.oppo.oiface.engine.** - -# Proguard Apache HTTP for release --keep class org.apache.http.** { *; } --dontwarn org.apache.http.** - -# Proguard Android Webivew for release. uncomment if you are using a webview in cocos2d-x -#-keep public class android.net.http.SslError -#-keep public class android.webkit.WebViewClient - -#-dontwarn android.webkit.WebView -#-dontwarn android.net.http.SslError -#-dontwarn android.webkit.WebViewClient \ No newline at end of file diff --git a/Samples/Cocos2d-x/Demo/proj.android/app/res/mipmap-hdpi/ic_launcher.png b/Samples/Cocos2d-x/Demo/proj.android/app/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 45ee51d15f96e3b1b15972a3ca613d15e1487016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22975 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 diff --git a/Samples/Cocos2d-x/Demo/proj.android/app/res/mipmap-xhdpi/ic_launcher.png b/Samples/Cocos2d-x/Demo/proj.android/app/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index a32f16f930b3d39ef8c64d81f084ebc2646da310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26514 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 e`C8=Z85P8 - Demo - diff --git a/Samples/Cocos2d-x/Demo/proj.android/app/src/org/cocos2dx/cpp/AppActivity.java b/Samples/Cocos2d-x/Demo/proj.android/app/src/org/cocos2dx/cpp/AppActivity.java deleted file mode 100644 index 661fe75..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/app/src/org/cocos2dx/cpp/AppActivity.java +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -Copyright (c) 2015-2016 Chukong Technologies Inc. -Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - -http://www.cocos2d-x.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -****************************************************************************/ -package org.cocos2dx.cpp; - -import android.os.Bundle; -import org.cocos2dx.lib.Cocos2dxActivity; -import android.os.Build; -import android.view.WindowManager; -import android.view.WindowManager.LayoutParams; - -public class AppActivity extends Cocos2dxActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.setEnableVirtualButton(false); - super.onCreate(savedInstanceState); - // Workaround in https://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508 - if (!isTaskRoot()) { - // Android launched another instance of the root activity into an existing task - // so just quietly finish and go away, dropping the user back into the activity - // at the top of the stack (ie: the last state of this task) - // Don't need to finish it again since it's finished in super.onCreate . - return; - } - // Make sure we're running on Pie or higher to change cutout mode - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - // Enable rendering into the cutout area - WindowManager.LayoutParams lp = getWindow().getAttributes(); - lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; - getWindow().setAttributes(lp); - } - // DO OTHER INITIALIZATION BELOW - - } - -} diff --git a/Samples/Cocos2d-x/Demo/proj.android/build.gradle b/Samples/Cocos2d-x/Demo/proj.android/build.gradle deleted file mode 100644 index ff9d35c..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/build.gradle +++ /dev/null @@ -1,26 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/Samples/Cocos2d-x/Demo/proj.android/gradle.properties b/Samples/Cocos2d-x/Demo/proj.android/gradle.properties deleted file mode 100644 index 21b0b5c..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/gradle.properties +++ /dev/null @@ -1,42 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx10248m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# Android SDK version that will be used as the compile project -PROP_COMPILE_SDK_VERSION=30 - -# Android SDK version that will be used as the earliest version of android this application can run on -PROP_MIN_SDK_VERSION=16 - -# Android SDK version that will be used as the latest version of android this application has been tested on -PROP_TARGET_SDK_VERSION=30 - - -# List of CPU Archtexture to build that application with -# Available architextures (armeabi-v7a | arm64-v8a | x86) -# To build for multiple architexture, use the `:` between them -# Example - PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86 -PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86 - -# uncomment it and fill in sign information for release mode -#RELEASE_STORE_FILE=file path of keystore -#RELEASE_STORE_PASSWORD=password of keystore -#RELEASE_KEY_ALIAS=alias of key -#RELEASE_KEY_PASSWORD=password of key - -android.injected.testOnly=false diff --git a/Samples/Cocos2d-x/Demo/proj.android/gradle/wrapper/gradle-wrapper.jar b/Samples/Cocos2d-x/Demo/proj.android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 8c0fb64a8698b08ecc4158d828ca593c4928e9dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49896 zcmagFb986H(k`5d^NVfUwr$(C?M#x1ZQHiZiEVpg+jrjgoQrerx!>1o_ul)D>ebz~ zs=Mmxr&>W81QY-S1PKWQ%N-;H^tS;2*XwVA`dej1RRn1z<;3VgfE4~kaG`A%QSPsR z#ovnZe+tS9%1MfeDyz`RirvdjPRK~p(#^q2(^5@O&NM19EHdvN-A&StN>0g6QA^VN z0Gx%Gq#PD$QMRFzmK+utjS^Y1F0e8&u&^=w5K<;4Rz|i3A=o|IKLY+g`iK6vfr9?+ z-`>gmU&i?FGSL5&F?TXFu`&Js6h;15QFkXp2M1H9|Eq~bpov-GU(uz%mH0n55wUl- zv#~ccAz`F5wlQ>e_KlJS3@{)B?^v*EQM=IxLa&76^y51a((wq|2-`qON>+4dLc{Oo z51}}o^Zen(oAjxDK7b++9_Yg`67p$bPo3~BCpGM7uAWmvIhWc5Gi+gQZ|Pwa-Gll@<1xmcPy z|NZmu6m)g5Ftu~BG&Xdxclw7Cij{xbBMBn-LMII#Slp`AElb&2^Hw+w>(3crLH!;I zN+Vk$D+wP1#^!MDCiad@vM>H#6+`Ct#~6VHL4lzmy;lSdk>`z6)=>Wh15Q2)dQtGqvn0vJU@+(B5{MUc*qs4!T+V=q=wy)<6$~ z!G>e_4dN@lGeF_$q9`Ju6Ncb*x?O7=l{anm7Eahuj_6lA{*#Gv*TaJclevPVbbVYu z(NY?5q+xxbO6%g1xF0r@Ix8fJ~u)VRUp`S%&rN$&e!Od`~s+64J z5*)*WSi*i{k%JjMSIN#X;jC{HG$-^iX+5f5BGOIHWAl*%15Z#!xntpk($-EGKCzKa zT7{siZ9;4TICsWQ$pu&wKZQTCvpI$Xvzwxoi+XkkpeE&&kFb!B?h2hi%^YlXt|-@5 zHJ~%AN!g_^tmn1?HSm^|gCE#!GRtK2(L{9pL#hp0xh zME}|DB>(5)`iE7CM)&_+S}-Bslc#@B5W4_+k4Cp$l>iVyg$KP>CN?SVGZ(&02>iZK zB<^HP$g$Lq*L$BWd?2(F?-MUbNWTJVQdW7$#8a|k_30#vHAD1Z{c#p;bETk0VnU5A zBgLe2HFJ3032$G<`m*OB!KM$*sdM20jm)It5OSru@tXpK5LT>#8)N!*skNu1$TpIw zufjjdp#lyH5bZ%|Iuo|iu9vG1HrIVWLH>278xo>aVBkPN3V$~!=KnlXQ4eDqS7%E% zQ!z^$Q$b^6Q)g#cLpwur(|<0gWHo6A6jc;n`t(V9T;LzTAU{IAu*uEQ%Ort1k+Kn+f_N`9|bxYC+~Z1 zCC1UCWv*Orx$_@ydv9mIe(liLfOr7mhbV@tKw{6)q^1DH1nmvZ0cj215R<~&I<4S| zgnr;9Cdjqpz#o8i0CQjtl`}{c*P)aSdH|abxGdrR)-3z+02-eX(k*B)Uqv6~^nh** z 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/Samples/Cocos2d-x/Demo/proj.android/gradlew.bat b/Samples/Cocos2d-x/Demo/proj.android/gradlew.bat deleted file mode 100644 index 8a0b282..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/Samples/Cocos2d-x/Demo/proj.android/settings.gradle b/Samples/Cocos2d-x/Demo/proj.android/settings.gradle deleted file mode 100644 index 38016e1..0000000 --- a/Samples/Cocos2d-x/Demo/proj.android/settings.gradle +++ /dev/null @@ -1,4 +0,0 @@ -include ':libcocos2dx' -project(':libcocos2dx').projectDir = new File(settingsDir, '../../thirdParty/cocos2d/cocos/platform/android/libcocos2dx') -include ':Demo' -project(':Demo').projectDir = new File(settingsDir, 'app') diff --git a/Samples/Cocos2d-x/Demo/proj.ios/scripts/proj_xcode b/Samples/Cocos2d-x/Demo/proj.ios/scripts/proj_xcode deleted file mode 100644 index adb231c..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/scripts/proj_xcode +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env sh - -set -ue - -SCRIPT_PATH=$(cd "$(dirname "$0")" && pwd) -CMAKE_PATH=$SCRIPT_PATH/../.. -BUILD_PATH=$SCRIPT_PATH/../build/proj_xcode -THIRD_PARTY_DIR=$SCRIPT_PATH/../../../thirdParty - -# Run CMake. -cmake -S "$CMAKE_PATH" \ - -B "${BUILD_PATH}_iphoneos" \ - -G Xcode \ - -D CMAKE_SYSTEM_NAME=iOS \ - -D CMAKE_OSX_SYSROOT=iphoneos diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/AppController.h b/Samples/Cocos2d-x/Demo/proj.ios/src/AppController.h deleted file mode 100644 index f0e78b7..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/AppController.h +++ /dev/null @@ -1,38 +0,0 @@ -/**************************************************************************** - Copyright (c) 2010-2013 cocos2d-x.org - Copyright (c) 2013-2016 Chukong Technologies Inc. - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#import - -@class RootViewController; - -@interface AppController : NSObject { - -} - -@property(nonatomic, readonly) RootViewController* viewController; - -@end - diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/AppController.mm b/Samples/Cocos2d-x/Demo/proj.ios/src/AppController.mm deleted file mode 100644 index 18c90eb..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/AppController.mm +++ /dev/null @@ -1,147 +0,0 @@ -/**************************************************************************** - Copyright (c) 2010-2013 cocos2d-x.org - Copyright (c) 2013-2016 Chukong Technologies Inc. - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#import "AppController.h" -#import "cocos2d.h" -#import "AppDelegate.h" -#import "RootViewController.h" - -@implementation AppController - -@synthesize window; - -#pragma mark - -#pragma mark Application lifecycle - -// cocos2d application instance -static AppDelegate s_sharedApplication; - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - cocos2d::Application *app = cocos2d::Application::getInstance(); - - // Initialize the GLView attributes - app->initGLContextAttrs(); - cocos2d::GLViewImpl::convertAttrs(); - - // Override point for customization after application launch. - - // Add the view controller's view to the window and display. - window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; - - // Use RootViewController to manage CCEAGLView - _viewController = [[RootViewController alloc]init]; - _viewController.wantsFullScreenLayout = YES; - - - // Set RootViewController to window - if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0) - { - // warning: addSubView doesn't work on iOS6 - [window addSubview: _viewController.view]; - } - else - { - // use this method on ios6 - [window setRootViewController:_viewController]; - } - - [window makeKeyAndVisible]; - - [[UIApplication sharedApplication] setStatusBarHidden:true]; - - // IMPORTANT: Setting the GLView should be done after creating the RootViewController - cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView((__bridge void *)_viewController.view); - cocos2d::Director::getInstance()->setOpenGLView(glview); - - //run the cocos2d-x game scene - app->run(); - - return YES; -} - - -- (void)applicationWillResignActive:(UIApplication *)application { - /* - Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - */ - // We don't need to call this method any more. It will interrupt user defined game pause&resume logic - /* cocos2d::Director::getInstance()->pause(); */ -} - -- (void)applicationDidBecomeActive:(UIApplication *)application { - /* - Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - */ - // We don't need to call this method any more. It will interrupt user defined game pause&resume logic - /* cocos2d::Director::getInstance()->resume(); */ -} - -- (void)applicationDidEnterBackground:(UIApplication *)application { - /* - Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - If your application supports background execution, called instead of applicationWillTerminate: when the user quits. - */ - cocos2d::Application::getInstance()->applicationDidEnterBackground(); -} - -- (void)applicationWillEnterForeground:(UIApplication *)application { - /* - Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. - */ - cocos2d::Application::getInstance()->applicationWillEnterForeground(); -} - -- (void)applicationWillTerminate:(UIApplication *)application { - /* - Called when the application is about to terminate. - See also applicationDidEnterBackground:. - */ -} - - -#pragma mark - -#pragma mark Memory management - -- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { - /* - Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. - */ -} - - -#if __has_feature(objc_arc) -#else -- (void)dealloc { - [window release]; - [_viewController release]; - [super dealloc]; -} -#endif - - -@end diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Contents.json b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 51cbd32..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-29.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-40@3x.png", - "scale" : "3x" - }, - { - "size" : "57x57", - "idiom" : "iphone", - "filename" : "Icon-57.png", - "scale" : "1x" - }, - { - "size" : "57x57", - "idiom" : "iphone", - "filename" : "Icon-57@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-20.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-29.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-40.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-40@2x.png", - "scale" : "2x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "Icon-50.png", - "scale" : "1x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "Icon-50@2x.png", - "scale" : "2x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "Icon-72.png", - "scale" : "1x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "Icon-72@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-83.5@2x.png", - "scale" : "2x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20.png deleted file mode 100644 index 8ead23e36507677386c7b73e23af7763fea31a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2374 zcmV-M3Ay%(P)KLZ*U+@Om_!p#rO2g^M0T2_xn8WlYz|VRo{2h z7R-8~s+989_{5}@xj~v|SVK2!s&?S#%H<(|s_(lza_;?13gFuImGA%atf|SshSU>4 zvliI1kU9psYx^n$;})>zXy}KKc^2qW;}esR$pT&VC@uh9Q&Bt)bg9uwKV)3Mv>VkL zWafdMsYJe>h$9aGbd{thm1A3#Qr;@7=CtF=gx$wn|Iah)wwCoa0c(Sqkwd^%NF8ga zfl3^IVpoeJz>AQ&?1%XZuo+T+v}VR~z&1!fHLVVeMfmiqCmN$~0_z}MbHc&VIDf*M z8a^D=rq9eY4^?8!WjpAf1fGZV&4wHtiu`EQWT6Q3fVQd88i@I|gTdTLahc~tqklN! z(bPNDgJqx_wD(oBayas=osn*-67g#n{jeN+&=x&+cqrl&rVNTB%lWV|IuO;0-Ju$d zYsKWWb6_yW&--q9DDo!Gs#awz#$2tcVkzPge@kyH=F~UTs)a+q4$${=BvnPyWD1Fm z$9*g+l*nV@qi8aXgG&jCheY9|o@54R6KaTg@e5cCQ`T^W13>U$ckMe zEB1;Zu}|y~eOTf(@w(VA3L-1|#NKvoIiYV+=XRUtU0O&iDjXqyy1TWtqjyrh?bugN z-Fcw8`G{w^>?b(^0%qFC?aBTx&40I{!*N}ld+XZTOY};n7Us9#EY2PIq^1>?^14$oGct4Rf-m zlg<8;{WE(#`)T%U_V9}@3pVBZ?qq=wDZ~p?Fa3m_NDf1;;mNSkM`S> zOLQyoR-CoOHS^|1^98eDK4-pU4t4m<^=7X*U~VxB=EnBBCH0cMI85NSr@FFMgd4-d z;V2SCKou8{;}7kBTrD<q>F#F8d z({@v4ZJf^|Ec~fm0g@UehjCx2NOjYt^Ym%RVZRq*el~g(MxJR zCX6qp6_9o_l+rGjPkUzzr3~M^{|2?LHRRS^j;fTwBp?LBl9)IS zt){Ja?*<&B6-Ft<@-D{TdW}7~fXAMF4uBIwLujqJvTq$KC~^GgcSLo~xXn!%1Yi)- z!o+bTlbVOFdT1|13Wtd!M;ZA2Bv0;r8Gve~%0jV3u~f3e;A)UncQ7!FM_r1rP_ikfJr1|0d?`g@kuyW-}nwlD^1_6`9KO?eP zf?A1UsYczFTQSweiw>hGlDg)jBSlg!G5yLjT%8K&+tknDLxYsdW#TC2@Zm!Y4i17+ zq}p;+hE8(x=FK#^P&q&Quelkd@qEmZhe~X$6JN3^lQ16%`une9!^REFU6^BJWQ2+F z3G#&kvC;@*K&DBHgm7jG>D2wDhn>_supJ8Xd9K~Ioolz;z|_c=Sn;MbL%~%atgl%86XAE}Y`JlmZ8aO*M&+NHL=FaCC zK0QVdhJ5nb7xb>*fMwZy^wGzJK-CM#FO;YW8~?{4bXx}^Qx8I58$UqD3H8k`7s`gQ zi8F-8AqYd3 zIh`CIKF#u6mX^ADyzU;d*I!Sa)}(bp>(*_k-Zj)C$c6z?7}2uxVN5L`E-s*#YKX?` z9Dc)w zrhEaJ&0-?IYB?)5KaI4~V6Y`DaGPag|KrY zxh?l&J2u8d2q%rqxL~xgobF9`lB&Pt&p%DFG=~)xNrX)~KSODuKoCcieV@gJ63S%A zEL(}G7D(a<>0|(bbTX(?e%Lla`Cb99Bdn`18tgj2kZy8tnmbXUM-oQ}3~s%Pm1#oQ sHb&H8LX9dGko7KVu{fj`<{tTD0OvqqILQCGTmS$707*qoM6N<$g3dLN;{X5v diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20@2x.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20@2x.png deleted file mode 100644 index 775685daca94f00c7d83d961c92302c92f30cbe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5478 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 HvylG)n@aO= diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20@3x.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-20@3x.png deleted file mode 100644 index a5b49ccbb1993e3e5eb1a3d6e6a690b79ddbee73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23871 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�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 diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-29.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-29.png deleted file mode 100644 index 0500184c869c890cc100fdb75458d7d7cbd79a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4038 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 S4Ow{h=d6R&M-*$^3jGHfYD234 diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png deleted file mode 100644 index f0f8b7fe9833b84329b8163b040d98d63ad612da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8433 zcmaiZ1yEhxk~I+A9fAaRxWL8T;o|NVoQu0(AUGtrOK^85xVw9>;1(bd+?jmeym|BH z&D8&&s&h{7-mAM;uiCZiNTiCA3>q>KG87aPnk-0C?a!V6uM-je&vm<9jvfjMmKrP} zp&~0GL9XKBXbHBnfP&)13f0_nT+_f6j&xKj#1|pgkqM6)tkG20ZzU$G8iJQiEIO0J zFFO9tNWI6;6In)#uy)*BuI&4X2mTpabmbieNRR>z-qd&Hwx>~6J)E&z7UX+0fI&ff z2B*2*?qN!&K45V3IL^1pcPMaZv?eKJ3~tJJuNje2QT=tAIytcfKPg)=YOY~H{@p^w zu@X!C_#`%<7w>NBWScY!ar`X)*Q?SkRkzRQ_1Q>D)SP220n=N9%i3_zy)^{HX7&Qn%VtJyb<$RA9%8eNeh%T3oL7xJ~nHLbEH z0dV)Rk8^%7USz7*WeE_sABQr=##OjK;D5mR&N`K#C_dS^v-^?|*3I6~oTQCV@h-bt zVK)>K1fFZ%H-0xeiZ2~e2XC2d^~yoY(~UEnwGKiy#vAm~Ct#>z&AUq`_W}_DMH;I* zO5rBw_<1<;@h|1IZ5^u1#8#^_bX8GafawB8u_Fxj?a6&fWaH><9(nJ_@#ThQk7)y{ zEPbr7R=>lwXA`W(Le9t^Zl<(#5MTbLnvFFEQoQKfgTy-eBYvA)Msa!sbLg*t@r&i919w%d8 z!!l~+nXajnXV^LQ&v3{QaID>V=7dXZZADJe1;^mq@2AeXY;E11ov)%dKHCp-*E$R} z_uYT5sbhJzSA!Aw=o6KaH+JFChvY>?Dr5jXPlI;ixTQO@s?urM%@wK0K z=FoiituZ#i*@!ZWH4w#ngj(ekf+S=lGH?N5}Z2bIN_RI=2BOE(l`JJ_-u94j`XC@8(;WyFqWh*?E zxX19cS8B>@7?AwNz5xvvWy0|$Iq|0V>A5|>b@qKOpzaE$j5!kf@zf>dv4Lv;OJ6el ztxw=Y%UZt_2Xcma(@nG*cA?~Vz>)tM;ij!~=db{@2OqD_U%UB4dMv-Q;np(i6?msP zO(!Wp#zXX0%|j$$O!0_nO!L81JyQE;H4GO`GvpkTbf z8ai$|iVFN@j`jc(b4ODPfS0|~A2bw{pcnri)84|(gxt&C&cT)6ONjDs1pgoVFE=YC z`QH#XTOmpvMHO-hM;8lnE&w|KNGXg=PEIc9Vs6Q=CMo@o@INCVN^3VaCw^8|Pft&P zCkMdM#fp`kkB^U)4af=vviw1?xOzLdnRu}{xKjORlK;vhY2j+-0(No(J35g6mDj}7 z(cMjmlJc)Y|2+P|)86Tyg&bV}(bb>+SiMY~SlIz=tpCjXCs6QDkNgrY7A9_vE*g%G zcEVzRi9oJm?day{YVGJmE}_mvu4rNgcKB;7$olW_f7BOb{fpGUko;SLzw-Z^|Nlqc z4Q%<}GW`$sf6e@F`hR)(b=53f9qruz5=WQ^D9HN1od2zo;NNq~E?|p4I{zKO{tx`W z`u-iS^M4iiSLgpzhW`}j&q@$R{v+Ujttw&UXI=3uD5&@6vXWvN)^JVwNO6W1=|Xp1 zO)bkC$G_Z45~t=?a8g2;&DkSSEA*H{`3tbz*Td>1Sq8PFXjzP5Irb+vJqv4o_{_PTcqIsfs*dZ<5j_p%A$^|~Al zynDT~>ft_oJ*-As(D?CFvhU=f>HF^vW)kg|sqQ)^7_lDr?V^OhL+8?-hgjEYA>N$B z@1`;xk}lfC1&0WeEt~hY?w;8`jH1lhXk2&OoAzi*H4iSO$sjW_LfP$iksG z3i_A0bhJ!9cDk(wuGPLaI$9lZT>lO|4xt3Ods0E_ce~7T+Afvc*>Z10p3jz%Qvh8k zfT9FYA!2s9S0?!)i-ZI{z2xNpJF4KDdQxRKGF)oqUL5*xtgRl*!S7g@6J9VK2~w{s zyZ^<^a)z+`;>IU3sT7B(i85bK6@v&n!R#GI@n%Z0vJ}W`I31M>2_1b% zl8HqVPIb9+mQHK1-BKPK35>{F-E`ZB=wrAJ1^)ezpv&awx8GM^Sz#GP{MI&RANf+f zcMBSs-i^+0t~5SZBJf~KS(+pMCI|?AP4y4YPLWnf=YHql&XNVS99L|x2|&nlj?{yK z88M&hjgnjbJj_vzgXC}l!8RxL-TEStwWb)8h!+coS)Gn9>(oCKUAlUO!0GpB`Q_y& z1BVHnp7r#LnO&MgLa6*?A4`OtQ>UAUgNGeShp117s1lWTB%F8DWOhxrPQVJ#@9D6+ zXQ!#c+3$pu@bz~~{MiZ6`1Y_<)YY|_C-X4s_b8vMp`7qm(cHz{`wvM%T)#c#bYlW^heA5o*HKz);@nB((>Qy=Y6=pbGA9rjsx2Vfwg#9lXCfzxHwdRb-S=Z z!XTJEYNHf?iB0jIB8<_5O=(oT5fwyem%e+HZt;1;mes88@2^aLoizmKdhPf^!NF-w zPFUHkCje9)9+TIla|&KZq)G2}1Y441{nJohXGK&GPIeoYoj4Em1po&B)q|`qdA|uP zVX#cI2$+0%)_mFV`^Ry}OEiy)j=>i+6#S379p3kQu>q)!WD>hFHByfw#7>lO!ioke zlaCz|RySg!ZYF`QR_{(Tuldql(F^5sK(Ck1B;DuZ_owzbz1rsiP*;ajgH8jy*}eu`)z$#cNu57AL1bs6{8LU&lhjEZ@vJkyB=+>?`~EwQ>%1?`_#|A6_#S= zyzaA}W%O8P#Lifi>CXRzgBdrmZsUv2XgvVQE>j1}>T%Wcf8|4=cGXKok$-&zb3$xU zgl~Vx?)HX%5Kr48CMI^CSL9Jer(o7^M#W3UgD)>GhL_i_5x<;%s;jTW%~`$eFm${h zvmeRk-_ESNH_cak6?FbRK}Oq_CcVkIf^7rX+Ol?j-?%B_5T67CL*%5dP}93w&3k-Q|dK)yIR76$caEF#ViJ7ar-`YTNM( zSmKU;+P}@}N0_-(-76vDN7%%v$pu}$Lz`Dx8X<9^OZ&LQJQdZ_mz4OqU~)3T!@a=g z0SK#IHSl`A9t#y&wzY$2kVgrfi1GF66QBS}0(J&fJ-Gf3I(M#Ed9U_DUBi3c*Cqj7|vAEJd80?bFlK?7~7wnR>};T$`3S z{;!{BQjXdLa$#Yrt^PtoW8+Ro`geJy{uGp-0b(ibxqD^1PM@Q;!y2{p2Kd6rk?1+t z=z*7t>Xu+j#)bthfu{o-%PbzNE3hT8o1>LEtkCo;thI2&aE>?r_(<_we&F%UA!?4Y ztzEN&!&irI+wi9w?aP5BBRz0%a6@Ae((&Y53<&5uQ5g0^6P|{_yLanhoH)o9Ji%-J z(v#QySTik@QknbL0e(Q>N50E=G9?n>kDn{}E)Ht2VIZ{ajs$JleuSPs9xOVZ+D>vq zV`F32_|ie-y;SK6l!Fpgd3n%nuOn2kxt*OG2;;t{`wXaDW}Lg6qZP#^1k39UgO6@+ zr>fLM7`b<4GOcH}J6tO--j7V7zibx*krs?`rUpD|hhD9O`$N4QFvT+L`U4<1sY}Yk zGQy8FZZrh_{r&L353x_=Xm(kAviJ~GCYVPOiP3|}%sR7S^rKdGWLi0Ur5xc6*n~LZ zGw=7VOpMNp7y*H=C1itJIGa2(yL&;W_w-F;U-!JhixRo!8#nsvxf5c-a=OO@!L0$m zvfidR2$(OOylw54-%PESJ=X84!fSo@8NbBDP)dlEWja>Bhe=wQOI>NIX~9U=OiokA zuP&<=i&J1BTMV!P-YntJVU}p};#xYn!NO&7=T{ZM83x=}-Nu4qqVvrc;bF&_CbOn# zq%2ZCE4+yUVh*^{d8Q*>jS~5vh^AdK34Zc^YLR#^&a{Fbat~DI-eym-uEP;@J1KkB>ea`m@;? zyKy1kw)*;DQWDf?bD3Y*dI!3LM5zcA#kP|edV=&&Nxa?-o_||4X4+sD2}5&R6Tw@hj{Qj_X0k5^ue2%@8 za#?t=K>Ij7BFmr6PTS&U`mqC=vTBiuLat+!k=`lG9(B^!!y>PB;~-Vmn;i6uGAaXtD3q>GI=S@j+VEvBw0DI?^Bx8n^b~KAOY{pbu)7>D&zv z>;8sgp;uG4?=Nm!bzd{Knu0kS(tjSU11P47lEUEb@-Hyko~5j}18u*UEuF6DbeZBA z`Mz)^`UKVBGoQpC@Wpe|vgr;|a6?bg-OSb2)7TG;k6Tw$myM0dwbMcu!7!LP4DPC0 ziY(Va6|F zVPWufucXB34Yxb@k-KRezUYcP4wdDT*Sx|0R#ph`$qrbJoa(wa-;uZW&V+{-Sd~|)hxV!4G;}9HYSr<_BHPlbfrOiOi;QwM-szhF$)?~ z-TCqPP>#`$Xn?~SavF0|VqMX@(6sDorO#zoDa>#!=b%KW22=sRfcL8i6$0!79HGEIvXppJq9_I zH2q!moOOXA`%i}}JqNq==54Jpf1WFk$7rt)stQqss%qByG_YpG`%QxKH$CQAEARndrz%col$hBl2hOv$# zhL@W6*}OC()=ymklf^R)ih7orZY|&lQHjl5!2zbqtbcVpokSyTNqkkOq3B`EDPq^X z!SC|vYdfuH!}oP5B@kQT0tXZFti~>NK6x*#tWQ}s_cs)7XB#PG7~H3*G%w=}VZ#P( zY;X0+92V6$hAS14XuM=y<3&GMwc~U|sSM2o|N4S{QGB*0rotf!^9@9tSHjTzX4kv% zqo2pcWwF?>EtZ1V22Rt|aqRVOX%Kp?h7?4&d|oCVOm+)IeyJX$;uLFQX)i{mXk4fI zCb-DmVe2WMrarFu7UgByW-t!if-YVqNprM2wxwCG8z{^%09T$PW2uGC9IT;kA$|ou z#f7GOe31*te?av4;EQ?o_A2E-^0*&zjW49apQ3Z6(4!ZA)(%9*32U_+&>idtEvO_zNr^%g5-{ zWw^HFC&eaM`L8y`D6}``0!AA2+m_rukl>T&|V(GIURV5o}1B5-l(dyX#Kvo zF#Vi-KrcCRPK1~5#3VDPr8~mSr$Z;B#ngO&Z-<{8dn~Xr8>j9nYtbYUP$oIKO@$AM zvv~+u+Kt6mCUZosZAj}U+Ua;la1U)4C=pncqprAY=8rLC_Jfgcy~XDwD1!o@8%-%< zNPqNaV9v7&(*Nu}hf6hf?6a8S8Y{mY6ySpZL~ zR!=C!@tT}>FfLN?G?fch_X_gr@6OvIs=P|RYEIXyP*EVKHI}+6RXl!(STJl3ZL>l+ z){>vk8#+(upe_tf4pW&CBfBd?W-tF<24G5Av<(jqN7wJe+-`WsQiX^s8Fxx7dRaHj z_Pm3lGjz5R#OKO3KrO~qpoVOnB`)}5E=U|e-MdU&PnJb}DHrGqgyK>=cZ%Kk0YI;jYz0JLpx2c9cG%~U=v&`pO!$J=(_@e$K zm^^Ho>fDrG2y1z1G-ZlV;Re5@6!B6`|CAvsg&efTpbYyXUzgIySvz_*IRwLiA0~`cCFMctal6c3)9G9&n(7s7(%W8~PyV!U!?&l>ZpTEp z28~P0Svw^OL@XNKb}7XyUHuAy^C%Y843JunBo2 zxkAbSuF-keSQ0^NUrlFPq2bkT$R$qN&|Ti-Y*nlbhG)Y0-1ov7g&A;rU*S??w67;OXS=1k+Fkv zgo=&u$tu7Uw`(T2LQA2TW!brtJ@m3`Ql7l~sLbuKbRCroA7~b~SK$l~@iPXrM&pH} z317-VN!NZp8#kZ>4Pj_<1PcV?5yNg6I^_caYga@e?jY2OFyvadlXH$KLUqnx0LNVu zQS(r9--tEy=m8hTlNEMlW2683I`~T^qf|z^Zd8wf1CijP|J@O9o6-8G{LehOPB%?o zLi}GqBJX^_ zIPG_7grWJC2C0TA+ZZ#*SvOe_I>96PL-`h|WpQEE_dpwI*u6Qqy-Wt9abUOyLmIB9 zup#G0wh(Kc(=5>dcV}!~l$NMcZO*>Sd&_{Feue3e0r>V|;v5 z7v-;mZd{-b%+pG$a6z-!*DW6;=~_$xMU@cqKosrz^8l?prWi38+%kGAMIiN2Muv^J zsq{~1pQ~S*8m39xg}ag*VYlZpvvX+lMgcgxOgM-^S!n^lG(mcSE3AHo+-C(Q3Y8Z? z>LmY43CFYQxdBJ*HCT=bWXc$cYw`_@5yQ!y`=w|a8L;HR&J3#ffV*cNHM~lGZ-~Um zs*X%s(S|unH&|&E^3lf_lCF#8sc7pc?KaB)sEf7vIc62OOlM@1Juj35dwawo8`Z{R1;UPsX119%!1kHEcb|uh zvMKVs&4IZx{M!Mie8it`8zTtlvoWb0ZYok*ty36xZ_}-4)u|TT;&CIjBZI+w`9j1I zi@AXwi6nM1BCeZaA3{0%F`*G;RRCPfJ>?X(EZ|3rgvDU?M@G*ZZs|r3Ve!QqgM!Zs zvajEwAS5;mXdFf6t4DFpXWE>8(9&;P2^PAj4E!z`3x@{rtS4-gE>9kDcwzUBk-mH~ zmbuh3-KtrW02~Tl)+!$~2vY&ai_|8X^{;kQ7J(3C`AGwuNOt_iwDThsGt?%P+`)Z6 zjZ`iRdhSq>eTKT3c+y{=(CH*qV2?2iiMOZy?w^d(>(qOUOD<-Feo@Hs@|_(t+R^AA zv*1o$22eYtvpv&dGNiBmge%D0Kn%{MgS}qshRJ-&*O1S+E|mqVhYL5Ln%!uAT7Y~a zz|4sDQ-|Y-Ph|A09*K~|%}s~j>;B>l4dB%Q1yV|e6U_;p)@WZU1(JIyPJm%{R^;gT zPqN487dm9Mv9)$}EfvZYRCu?|PwKjQ&!z)XmUVQxjvixS<;vgIA_od7sA!KK7FUqgOfi8HkPuY_WVuLRZ zV!F|?T11!fc8S*l#|2vUFj!EeU9<|Bd{y_$TroZS=wBCLIlD!JlDhYsMuKW;*t5ad zukMg$E0-0F7s2yPe_GrNLOGI83wm>qGt$U|p)~|g;oEPD2zJ}&c<1pWs%%e}e7$qW znGA#O27@lumKoim8$yPes0Mden^)GfcYGUM!j6IN_<4IhR~etuzVSTpZCvHt!6moT ynYzpKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C zE_O*oK~#9!%$<3>WmR?Ozk8qI&Tp=fS5;6&4GhIRg90(4fFcb<+a?mnXoom~eoR!_ zZWDzz=}sJCV@x8nn4ly%0GW!p2C9mp=2x%YeBZnC8TQ`&$3Ay>MG--Y;eI~n zbI(2J+;h)aXYI9qYpvhfS1`UC4$VQek9i-RX7IX6>f8N-FUiX)< zZ^pD%-HGJqp$Pb8iVjWWGaKIRY64{AE!|%t*cMLPR02{^etCJaEUx2_gz4W5UAbktKiNJSVE1XTmqrfe1_# zA<|j=1q)kS<9$Qy{o)_9>vLC7-?9;R?gC_?+up=m@g*fD3_-F4M_wUS9Q}b6s(#b$ zmXH#E;bO#o54n8jzq9L4KEUJ+--9r~>F!Om*SsZVEDRXT`=nOtR1*f)p1sL-OI1pw z4qHiT^~nGnf86n$c(PrOc5P$tfBOu3ulY1OsN?kXfpp&d>pqYRQ3_+sAyQ~PV3fir z4Mx9t7b^t1R>L1$OzzaPtO-*QKe+w}T=R`@fad`){mWa}`KSMd+B1*i&0UD_{kNc* zFaW;PN;^gy>yaak(TRZHXdx%RC%ZkeN2~_mx%C?mM)UPAf0@r;`%Su*Ed`+V@O|vL z>LZly`Z?a*`N(v}D#lyKFaSuW|B5TG5>T)=m)J35?3xgWH^MU~P|TY%pX%d}G5Rr`}JvZPTnn)~#E|i!Z(iz>>v-%%7a(zh8YdAN>CJtsM>; z41eu&jDG*Gkohj0Lf2cy21{eCBQx3x)Wmk(7){gBwYDjZ!5o}eUu$GnH?pUf(eGTx z@K^o>JyRr`$#ChVm$G>A;?|)fBO?IJKV*-W(|LI&N+PKU;YKUx&Rpa>#s8M zw|`+rL80d@fg&Wa!f4gfP@@tpRT`sA>$81VkO=xUVN9)&-Mt9kXW#$&8Y9>Kd282= zKmIYF`qZbGnwnzi(xs$QDQ>>`=GOjIt5@Uq^e}VZeSGN5Gx_8#x8Tj655V|$|B`+G z`)i1_kIWa|bOB2gpo}#GO4(pSw*@?Fz4JKrJHj@tae8`@uFLQ>pJDvle*r+DP~gWu z{xO$bdMUTxemj*)g?sP4mm6-lf&1^jpQ)*-BzAW=7`V}8M=_EdL+im!R zg8)qY-F1w9_gaMGA=245RlrW~`~UcAixxTtyP<^~gz4O7x3{*5rV|ve%!z1?)7674 zbTj<*tC+g!2LO1U$IUn2%pd&0A5bh7x#Ef|xa_ja_}Irj#?eO~&EVi5aU3(42r!$; z5ChwG>>#y$JI9=RF1hp0W9`p=28{;Q#~(x%x+t7+t{rjl8=Nyq9GcU6*~hO&P?&{( zO(NL+k()900BQFKz5hA?gB#EWna$&5v+VnuzhL4Ae+58KPY?h4um8$>-t!&+?!5C( zZo26vZn@FMdg_x;xCdb+zAnV4X5dKz!X4vswQEOKX`&C|d51*Tr7 z^2q(j-hK*aoMYqtIDX><+(Zj#(?SPEHIad7+gYV%BL=N)bwVY!TIrU}Ml1W>1L4?o z3Yp6>`n_uz|Mu4{hF!FX8*jXk^UpuOb?Al-8~D_xKE=wFD`%Y|pU=D{Ca^b0`^6{Vl0;kI&hLOMgBE?&Og4;I-;ks|QiD;t*)3mJy)3m8gc$U~# zV=QFTiL-02H*K-qegJzcC2rpUGxyxi*mu9#+I;=>*K^TD7qvbYi$(hS`uNh9zVwPN ze#xPSGIwBrn&Z&W8gs`TT=cfHxa5aFw9hmO8UFg!RG)gZBiZvt+T8#2k*i5;?t#Kl zYhTT5Tf5&e`DR%AHfk>w@l?vX-2rJ+BK1PIK*P1n$dX@Udb#%YuLfrlVbggQIYz!imYUg1O zrr?`4x98#yw;WniN}?lmhMB#s85+;pu1(_H5`j0PI&E;edolGIyFdR&1RI_K;0s^) z0$=&cS6^~XnM{U(fq|FU?l_K-FOzHT?(U{sE;BJcj@Q+N8XYAU$1J=2a&~Op%Gmn# z#ACz6uvJ$v}r4L7jxlvC_EZu=>dH~j#&yBC?sBK#D^U*1Av(|Vk2?)AdCO$TKK zNSxSE(~%uhDzU4kjdc@2qfFw+lH;3B(16q3!_57^qWH5L066T>L;3D^zl-BIuM!$- zzWL2>^7+qy{($@E&6~%91q*1@>mVgMlObHQhGjzVhd14Xo5|Q9Fn3MB7Mrk#gqg~+D$AdJ!oKMe>be)Jupp`8F+dF7Ry_s(~swI&JzR2={IMOl*1 zt+(DvHkae~fB*OS+Sk6u=FOXJbs`Ljq6nik3l}V4&YU^aYBh8ep>sK+>1oW`wY=*C zAK;h|e;9!JQ;#tDZ#NTK3Z+)3#dHvw?mamVrXuUl+etJP3iqm=p&msrI(QW69W)~{d3XFvN{?!NnO zF249;uKd$KrO{~MCmPxa0)&*zpEnPkj0zRU#Q8kI+O-r$N4ezN-==5TGMfnc)>j$3 z;s4mu-NYy}_x#f0;Dc-$oUZdPzgiekXhNvY5V(yNI_iN2W>a=(K`)HKN#}?sMj5&8 zi^LP7q*E#W?bcg4{P4pml}adEUqWmBTNaBRe)5x_P^;Fs_S$RleV+?2ypRnWpQl!> zaP;ccG?GyOkn(-@?j539tK&$=B15In+qcty+G)gtgKYfS&(JePqFpbx;8!#`M(*UZ z@aHYG<@z$tBEB&_gFqkG5?g*s&FvP9IcQCfU!KwW2Gd+wd%I zXUJN^znSZ8g~|$%$r0?@#>_ppCz-B1*IaXrttd=QVG<`4MG@&thIBe@?PeSkE7h@R z!Z4&#DRaTQ-^H@Smohp!iZ+JPu~B^A=jdaOq1LDqgb}gUG{TTrDFz1zNu^RWnh#Pd zR3T5iW(@nVpjS7>Bos@idMh}6^bX(a2uPxBoK$bLY(A zLm&D>!Z4&6hV^m z>+0&_`X5}+ZMWTqlib8?lkoD(OU=jZB?v=|un$&BK@bLLrO+xyIS#53;IDa*!TIw! z^nLH+$oca)`lOR^lBlr!;IFNsc>Y0wWfIj{knFI#YQJ@*5yAnjnf%9ZQhn+noI)Qa zRtV{0!ie&kUjmTJX8G91K89AxLNBGzaZF!t4{IJ+!xz5zMVmHE`2>xIb!@){^Tr9D zZLYr@E{=kL-rioanG8`Q#5A*bTBAG{e{>i#IZ35jW66pY%wMz!XXPsUkf)2NO4*vY zgOJFPblOyH3y``a3Ts}N9sV&Ql|fIBQ~c@oi6=&oxdONz^>u4$Y_TQr^Dnr7<;z#J zpjWIEp6jAw#b18o8?BIaar2G_J z-Ce|55h>Ni)zU?}K4aHkPhsOm`WG!mYR$3lwTb$0_cm%zKZ?v`4vui`lT8AKI9ZZX zJ4Vk=l*iUgxN{evCP$dL>u2Dm5PpWr(+^>)B>>*`wzrY;Q&g)}Vx~!JGchrR5#nV-;4q4C90#owx8Hs{`-VqJrPBma_>yCzI3|p& zY3S`2Ypp`}+ z==eA$j$%C5OX>6GRV##}Bg|W}gudT<2LO%X-Kg;~WO9$M zIdRhrc`>TRVdyODv_f8ETDUgJoKSk`4l2+5hH(3)R?u+NQAaX9F>dn+aZEm+XU&>5 zjE#=+=_^0Y?p=GRR%?9lga3tmK2N1wMwtVL#8OHOhTlB=5L#>2tXV@GMYxXBG8;-M zlvZf1h+{<*g}APZlme}6u%fjhjzSzMS-EN@!Vxr7Of)@1x9c)*#R?1ko_vJH_RR+c zlDVkF+Y4#SIMN`Hpd>h^-S8o#MHS2@={25ykns5@(bMB(G8x|Xwzr{_qEfEnI1(Wx zrBaD)+qUsXAO0h{ySo_~9>!oeWZ?ql&6`WPTs~kP*BFEEdCW|gxZ{pH0C?=tN2!*p z2q_4|u>Cz_3#3vCqR@^O*L4UQK`UH0Nf9*&0<ZjT5De`kd*T@f z!=b5Ga=TTSjIB27Bpk*VbSKTJQvi)BYTA}=R;*aT$`vb_F3u!c6oWQQO%*w8=`xNx z?l`84MPeOejHX(x5e8u^*|PtlltKuHty^E@g%`H6aN!|TYE^Fh@r~qid30h*;@D!^ zMi5f1)-c8(rGw*mM9DtYG!04-MfTpbv6}8o&(ODI38Zb=Cmb8WM2*+Xw3nT>wUt6_ zX1O|9I8EUz{jzM${=R++T?Hz&O3TJI!hkrAS+Zm?0ztJ_MH`)X@`x}Ft;0FMqP50x zC3oNRYvL&8?|*PTpZLTl_`g5?Fu}2@}*kg}j z_3G6uTe_4?I?cw78#(jLo|dqTGI+j6yXC0jzADB}itknz0C&-<4 zI$ehy%ES{-5KoNRI$Jt}iNfER8z-A3@@9Fao#9fgOjs);7RP9%5sBaqIbh1>M=%ZE>M;1Ocy|<2SfDk2NY^+og1SnLjQL+6TAHef#t(l&gp}V`A(@s5&(oBib zu`$kj=Xo4;#8H%HO3C*u7RFeT$*$eI7}`68@26}PMJaTwI>Pn#DAfp5sX{uNBh}Y$ zvt)aBqiWTJ>+l+hcyy!~QEhf(yEdjeP($2$l2gSZM;&=2pZ)Zwab1^%3l|cGAz>I2 zDMh3#_KcFyHHsqZq|#~9=`5*q8b6)E^HXST2&1Tdys|cTVq%;XD_3&zDW^~@7O6Mt z%#>zuTnD8UQSzNQjtRnmY%YiAdJGNiMF>GUo5AyZkdipIHdpJ8#XwxI<9aTB&K4@8 zo!ij$8aVE2L<>3@=29Sx!AJo{TCS1-jI<^}ilnz%K-RLKD&;c6`}T3ghd#tFZo7>; z?zn>!PdvfazB)Lv#uyBSTqcL>xfG|Sm>3%;jzUtIH2rht(%scf6h}1bb&N3xArMB; zXf#;3U?E*yUDO-(1mEgeBh>&}DbndQJ-xl8(kY(bxB)-q)2P?U=JRxQ_u!{fG#d3J zl(+mgp_OH%8-tf1hIn)@x?Vwe-fOkF#xfgelIcVeoQR|@(JV;_h&4hwh-?B|lw#k$ zVGx2(e)5xi;~U@L;fEjLq!UkM-^e~3$FcCvK%u*vTBX9{k37uQO&h6HOBgM19fzL& zewME~lGVo^N1?l$YPCWfMQE)NQnF~#AX+QJ&}O;z=b#BG$>s8dVZ`R=H?sEOhuO1d z7mni~5V)SloVjy3eC0~|`sdK7)onsvN`%%36{D+l{5f+vP*6adjPV*Ann+q0jgUz% zgaYAMqMcFJp=p5;3gJ6Ag+2g+MxAQ8%E-tlC!TOTmtA%lzr5oPmMvY1=Xr!-fDn>= zp}^4YUEKHUI~m%!i*!0gDxE9nIn;hoS=;d|7zt8iv_Lrap&64joXAA*DhATXoONK0Fk)1z%g%|Q~!N0S1?c6+i)kUBb<#GkrvGil# z^GK&N)M^#hKm8PrBbmSO5aLF|=Bt&$L?Ld1bAhA^ZeBYS69x;tjIc>?frVkhvF6tp zkl4~YAX9C|;pF557(=B}A&O((aqjOiIXS`f^fZ1dO{3A^p?mLPrZ~ld!9`%e^IX#D zG_KCbhP}fh zOqXX+O5r#T-T4BCESS&W;36g`#(DnPXUOI9^!E2#CQTs#VrK`2=AYvSi7j z#42Xr$QV0z?xI+l!Es$OzE4k2H@SR{FbE-^qh75tyk|FuEnk5V*gzwWiR<+a&9y~@ z*Mh}dltIgcK`sGe%N3Er+F~OU?Nt~dAqo+G4&i4oVVy?Mpb@mItqoPf0FL9*Xw=xd zXD5#1lF#SKX0q%Z8R3a%o@HcolzOAlW-IzWa|Q-D;n>w2bJS5xPE4@vh0Ux!{zQzh zc2jhctPSkkv5i`_!s5k?*f%o9qfb1^(C{#oYPD^X9Z7egz>>j14p}fCM>*(NQ7)CJ zRcmBi7o`o_7@~5et*}i#Z>(*k@jIj-U9Gh3H$z~w1S1f_vj2>>kW65sG=xG&0V0(} z&Rv2U+Dy4LL%CE23`#|0W3c`?~;bDe` zhnbk1;_NfeK&hDVu@MI5&O@uVa9z)*Se#;dVx0N&7qIz-E!^?zd#ToHFXfpjO>ugL z;`9uSAmE53`xQkYjarpdE^iA2KsY(sAza@ElS(0sO+Z=Y6R#qOFt&8w$tpJ;mEKl$ zH_7|zFo0ARr*9DeW1}OCPmCj_Llm`xhB%I?l*$;T85o#Dai+wb_uhLz!S4ThWbG3? z_S944@_8yVGc;=TR{FA;W}GQbk;`Uy{)HE~DkhF2v{vNuc}B-4 z*s^uo%Ts?k7ugY6!m(IU}gpYfBBIZrKoRO$Ml-J7{2b$s66_BB^Vl7DT3do#Yy-pnoUqPk0mYi z5=JJG8a9Y9+QOzVK&11K>xaq&+qP|^R4O48;+%9GwAM%|$!4=`c=!>*FnlS-ahgJq z?WDXhAZ#gr`>tK=+_{?t3kRt*LYh-?_@iUv zEMIzo7Ul2U|IMMh%^_FIWYhC9ZAS zw3$X=>6c*~5++Gz*Y{tVs1|_hLw7ewAMc!VS@=)?z`}p}A>P^N+N@l64>*!yu}Ha6 z1_4nVp^`?!maXmX2I(ReAI8A9{wIt6FipeL(4qeUSTIgX=oDjzj2qY+AF1 z@iq6eU|@hVPCuRQp5E4j>%08F;`Yx&%}iM(Y!YQ!J=4}y8D(08#iqk^4^$Mi-I2OA zkC&0scD~4@O-CDa7~sxbhSR$MHMWCio_(5g&pw+}DrGqWKqw`-T<)bk5JG~Vg2*73 zAIc&B>#ylsx)=d?CmqY4KfV&ZZ40C`m}(W3I1m-ts)9kHnzcN~g;b9DU;Q)Yzvp}e zP`Knmc6>%q|M{&}v!%2{H@UZzpCX&fp|oLWY>b)59^>tE=5W~C-_Gb%k;XH&>nL}| zJL!Js`%tA)!Yq=OiY%Lxd{~4m5?YrLqV2bY;bkjuO?rO2mX>gLTR1oZ$Hkw2c+zn* z!*lD_;d!1d{>7T0-XN37GH1@feia>IolqE&J>_J2mM$g$0-$%r;pE=+PN>#f12mn< z633c2iizR~M@kC0Bm}QiagRTazW1Du25Jh@K<{OjKvx0uOWRVjnGA(|fl9qjS1!lV zr=G@P#~eds3=ci_D2+w~9FMNwzZl`BP}MSas?c^adQ}JBYjRNE=Y>+0FJH+exKtuR;_@Ocje9v1%2^tUhWsOo}2%`81w>lD*&h zTWZB=s?*a9{q^4xJn#VcE~uDOPdSNvF2~Hw3D-8I@Yij)X=7M+!!?V*N(Th8O7^eV2R$>8H@O zYO5``$xPBMhuG?3YD{1s;qkG@Ew(ctm5kF$8uBBbjO z2LaR5)70k8<=y9<$J5U~*Qy>6MGyqw)+pV0Bee$~0txYs?N)_{$H`^VoO0UfgkeOr zQYD+qqGHAPn60ZFwQ?mJw`_r>hZ8*X0J}cE3$M4I@WriAD%z}8GwGdN_p!$uL%vX8 zcz6V(Vq7Uv0|Tso>Pf;;OUdeb?;ny`bsTDX+EPjr){lj(5`@CYCKJ+Pf19V(m}U>J z04KHbY}@<$>ZEL|KiXcj+ciL397dPMn3$Mk{`~pOn>UX}y+N#Frl-psedLkED&~c) zTiX*}#!;fh0eb6;=$$(O1vAr7DRc2f@8z6x&gSW-pCeW=GO?YLQ&SwdY88u?Eau+( z?uSwtGHKYg3$=L@M1d`&mP=N9W1Bi$bjU*9ecpMDPfSp*R`6qmJ7<6mNLHTzR?ksbmkbVw~BHC;D3p1q>E0!-u zNI|S(YPC8+81jyD&SrFMgx!0F+N{Yive3^@BCM$*)N34h#1VY{^PgkW^Ut$qXoyrg zg-Y_PN-3tNXE@{Z(+Glq=QnP&f=qdK2^&zW+L004=9M`E16+8)1(eDaM#m@cwZ`x6 zW+-3axqI$`Y88>nF!wWmN$Rjw=;_IqPHEU|9vAHytXe@AFX?=G?ZR!^W2buosx*o& zjZrF<@LZR{Lk5Y05a|de#wXE6bK&{#CYQ@HIyy$BQn5of3a#@A8hDQ6w9`)It6%vt zVWYus9(j~>I+dhEO)|O#mU;8$vV8dp=FS;l>kBV3G_nsbib&`4lvb_cnMWR_ z`qWbv?j3g)eINKVx>m!~8`h3u>xykvO)xIfmXf5lS}PM?k(gaE7ln(i8OE^SwNv^W zgzMAT^Z?=WcLBC0cJW2;qma*0sa61Cd&@EzPCNZnmMuNhR$jHjb3M}OG)60)eClb| zKKUe4xa4wKwAPlf7zT`vj?vfKOQBG}Xv4_JDB5U_KKdxSySoU&$X1;J*L9hhnPJP8 z7nrV8NGna+_i3DTGV5R1!sP$6%t_h5ka<`AHK|31qe_!WV!WMQYZhq{qP5TFTmUCo zZzheTgRuMe9z5YDQwAa&YERrkyysZ}1_uw}!gpVY6i}{IkkTQHLV_S9pSANV^!D~5 zgka~6o$MRkM=qNqo6UldD5Y>+7lC2dp54T;;?O0FN%^+dZ1>P^N~H>!bc%dFPodC- z=ejf+4NBz_^`w*C4+H#cj>gHSuzB-l#(#AuXpP7gnDgoD$Sge))u<&&IypAlS=snL4Xtj z&v6LDkjcqOhK7dNH!?!KQD<_>QkF95431+10IfBnW1~zLZON#orlBMcCa0z>p;~KPA@G6#+0#q;$fJ4Th0RR-`YtQjTo*m>{|x!#&qCKK&{0Zi zB7oK(4Tz-9I14RwD3%d0`yUv}2T!;y0Y^B60o>j}qP-hIg%pd^j8BYn$ihR&q|>dW zw~!Lob@4n8*LBHebNH^u*w`qgY8l6MNvG0GPE9c}F@ba>U4;S|!QOqt)EjkN$4ii% zNI1C;uIE~2xl+hR1Ln@7e8LI5xPCpwd+tu4prrTmFHku10@Tcu&C`n6Uca?s#H`-u zPWaH8`fLBG!NkE9Zu2MO0NFhkw{MVmbSuOGl}d$u`$ouQGURi4gb;1MY(h?s;~3BL zEJ!SuY1He~YW2ikgCiZ3(iDqDqA0>~Ty!$Akxmw43?hy(wHio?I%+kOix#nc&Ha=g zeZ*d%pQiUeUq$}pccM#08_LV1EYR{t?P(QT0_-R&SY2ucxH=K2XtPz!>m*z-phBGP zLvVTrQImTxVTF3V&Yqz?)arG7*ToT{)p0I`NHTH;$8iZ70Z|+igf@hgLZXc(2rU!c zezwAFEm|X*P1SSfQD1&IBT>YjU*Ape!WR2Gee>zL^iRp2a4xzsW4qLaw9Gg&d-l~< zP(bIrYR%dVtxo;+oIvg9RbXB(;fkar5+J+g;?7-;s!n1m6PC6#HO1)In9UIjTUHOl zFrjs7Jl|?$y-`mf5w>lhR6W*RRkeTN`r+ zm(zRc=SZ(O9$m2-E1HR&R@r7hY}=Y;YBo)~X@A@6%{i4s^BiSSc<(hMz&sB6t2w?T zB9n)pMzCoO!L~;sw&iulaTw_Dr?01%TrP)nB+_y4T^F>bQn3{O*6?czH|eSu3F*W5 zDNJ_{aep5b$6;n{oYJP}iINN#(jk4^xfITMKiojuMU2ffQ&WhlI1x zf?~-rO=QtT6-f_;kP;!~unR=ZdA44&F!!SzS@~*AbsFiVNgeeLM9)IPtq-B6cB7PH zbZm^tsVTa;y6EreC6mcemjdZ}IG%@8sy*L>w0|>$lo-!L`#xbNL!+yUdK5GB!d7Z~ zcB7L?H34MLT(YNJNcPybBRmgP9JQoE$MWD1vSnWl2BEb59Zg%n9SH-I*khAC070|% zXzP$R#i=nEEeh|w<|%|c;dh?%JE0b}TBuAy%T%#VRGXwMq~oOH%0bsF#KRkj$G2nZ zrP*}QY?f3mhu_srI+wF$BGY!tZWdn}6*RVRV@EO(=|tY-UPDpkuU(5IP1O0TQQs0mAiB)5GZUBqk2f zMpLO)E!S&o3{rOfM<Zd@=Og@N-A^I>G}7}CzHhk+Udkrxo32TiR?gi>5J*cuNT#H*R0M-imb_@BhcITF z$R2;$sqXTV9x{!(_o}ovA(5a$h{HsfAtqKB9f1yPQaz3_#vWt;VBZ}y! zAXBZbo!_cD(((^n&w5G~x8@m>Dzfu4=){?+$ZDgBt(I%uq2bNB$xPBQWI9SSvtv$! zg+nbE)l8O1$C?1?ARH%|C(J`MAAslCch>{Y$MLLy?dKH2bHGVHCyuQBk1sMoKgmci zCgCk7v?c_&4k(StbzNO~{;6M;{^6^*JiW@O@(j+q;$MiGdVegOA0gbnSN2yjZKIBm z2v@f1_9X357}c8Z(a_P?W=w}*o4l^1WKA-OTzew3Sp!NWSkffJ+uA(G4sEBY!7>r9 z6}I%;L~yQ!bFO_Cj3~bJMf?-ZR3WxpXUT<@?`2x{Hwne1NFHJb z0i32YOQJEU(U@O4ncTN4zrOjNaMu=8WjbNpxH0&uo!QZP9a?`FqyOH(r65non0_Gt z${GYrD|c~V;fR;6cM{lMP3u=HB$e&FD>8Xz$=tY7Ct8@ad&zcGW(6+W1yhj_5T&%c zjqN?A)%YmD7-@{Iqh--Z^HfygR<}>z?W8g)+_8zqrnRlh`~L#~z;lx(fla4j00000 LNkvXXu0mjf!aBL* diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40.png deleted file mode 100644 index 775685daca94f00c7d83d961c92302c92f30cbe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5478 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 HvylG)n@aO= diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png deleted file mode 100644 index d9c7ab446bb7646de85061e8ddb7620880b18f79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12489 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 diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png deleted file mode 100644 index a5b49ccbb1993e3e5eb1a3d6e6a690b79ddbee73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23871 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�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 diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-50.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-50.png deleted file mode 100644 index ac381bc20e85c77f9c204e333bfc9d689243a562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7038 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 M07*qoM6N<$f~?T_U;qFB diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-57.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-57.png deleted file mode 100644 index 4fcc6fddffe10a0b6130d498d1857071b59b464d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8960 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

K|Mwy$R z#~MpMmu1C@K?;Q~D&-QDa+$t#8XZOGb{ip`4nwif+7PegT{YGwk~E9OaUxZN1R-(K zdD_J}=H_PU>F%c0YT-C8)nXBAG_f%}`P5U4oSV3yIv5=vXLfFmoBe?PWy^3~2dypE z8k+Sgm2!y#hYoY(_zCLu#^T@2mr4{X6)xYpm24_Sqh6=r`$SPhT&p5eK>|#JaDA+b zelbuB((0ttLaU_I>XcoJREPnmdpRl!nVm_}xHyh!wOYhcgbq}^_D;Lu_AA3Sscz=f?^t#SIy5Ecu@poE}NtD&kj+}=xY z2Ua1{dE(hwY#8&4TaOmGn3yY*FaS$SEu}zP+`d(Wp<;OWY{xq$6@(CiYQ4_U<0md? zr6=~CRPfeX4j(O$Yb}*p zJ<+OMo<^;XGM4b{31+_jMatj*d;C=!0Evy4R8k9loz64dBwQG5Ooy=QyiJp2J{FBk z6%gHn%uG)+Ha5oK-~dq=1A^89KuDOhR2ur0;cniHwFZ6U2uw~;oS&y!tZ+|;$|N3jJ z{*PZKbNd}29ik{<0F2Q|`K1(K@vi?DthoR4tpBUOr2D=1AbR@~Np_^^c`i2anLTlw zHH|vgU3E37z=u?tuHU=|D`LY>BH(XYs#(_v#e+-oPNRWVjsf)(3{5F9#m zkV>V3(FS8-aB%QKSC-9^xqcVDmu{fz${nP4?E)Z3r|~?GW~+%1kV>b)La=QcT{rEf zXWd#dyLLjMYYB4?U4<@;bjSc3SFfgAuTyU{DZKI5@mF1nX}1%QY6*R#mU77k`Le~e zg+*J9lO$c{`f&y>V|rqo6DLmMI1cSro56uWE?vL=yiGP5)EMi|KwBDo_rDn zEE~9lTsB9kSi+Gmz1=DYkCi!v2E?Ik)#`%>Mb8 zk(mr?dIHMxi^=zvEn7&XGnjUZS}xBEhxXH~H|V|RL-@;AW5dL5tpmaetW1i2Ym-th z;ff7Tu<^z{NH6zFg(p@ZQ+eXjIqFlx|S*I!;nOUC@MDO8Z!FB)U?rJN{+6_lQ>lxd7DhaMF2N zBL}IJiwv$ zN~OY<&0E;8em$l6BF#n(M+#O946GL(WLNl1IggfD^k*cp?&l*)aj?$c-dv#ddsaCZBSa#zpRh` z{$;pQf`A|u(5N*S8Xlq1Xc7cI^$y?KUFgPQF-GJ0K3XZ1R!AYKHX77tXOUgqOnM$C zfBOGu&llV&$o_sNeUCHGJVSeKp02mOpUn2%9SNEwCR@%|O!6g-Dk&BnkmFx=!ye%T zxr?5mu@>oNaJp9z&5trWewJpV#U;y@;kYiXW|L;KNvqW+4BHgTWg4vp2tlz}Bn(4* z&!bc+Q*YF-_6^vu(=XJ#n8`FF^@;qHVp>crOzhE$iTt6kDV zl@eX8)E)oQ8}ddvGsU-xSXkDxo0$&y6jg3fqn*g-74CncsuAj`c?<5-9OY7uM86FvCdS)gWWhrzK1ResBn2t$U0U;&Ub5Xue=m*q+ z^2iX)bEBw66K~}v@^AbdyfvEuKJh$I#+Oja5Tt_0JmV5~e}{Vd#f6jo{BS{=>` z!Sah1r0u+Y9bv8s)YLr@_$4zZmhI>PD*x3C=J_?Y@EQM*Z0 zDp9LcIwLXX31e%Mg<%ZB^>KR#ae4+2o{yRs0^diZGRPpE9Mf53I*UkU5$Oz0I)`vw ztkdaLE-)GkO=Cx5V@-JG)IP@>xNKN>nR|qv4t{a0w8>btju&^U6JV$XfNki27Q!MN zAK`gO>2#c*y-?+)i{l13=>kr+8yRGh*>z(&oo&&v43V&gLUzs_kWRw$2>J3Ej|JiT z#8Z=|v48IeTrj6hb^O!P^}Zpz449XjdzA<;1&)hQ0oDt#Dh(>asxUcrB#G*%u~t~4 zKr0;6srMGgx)y@B3yuq}hx9yf1B4eK{Q%*ol08TxQ)xudk!p}a_yGuczBrcWc_|@* zw1+B}sXzVX7twmJ3mA;~mYzE+ovu~)id4Q2>0CIVv{)4T$wJ6>W(hjfpfL#`qrr5D zF=LYC!J3W`^^)g_r1j=F;5tahNnW7qBRm)3dC9Q8>n%BV!I8_oLv1a}GyyKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C zHO5IqK~#9!?7erG9rb= zJGP(L#y=+p8{hc;An|pH9pi>uY!D!W5Jfbhh9o4d`mT0YThE?8GvDw1W9Cdb=d21s z0@*pwGtZtfXU@*N=hNPw@)ajPx0{1J&H!!%E&@6M$$vkN#X|$Kz#8DYz@rD+SsVb! z`M~FaYXI}Vuj?EBcpA6^STzyqb>IS@^zMZB{Wpkjn#cLTlfZuf9gTpj1@k`OE+GA8 zJ}axQhuqV@|6>Ew1g-}j01~x8#zL?E75KpMa7KDl3w{6m83w-jWn>}u#|G%7!0*G7 zsR7D+eyg_~AD%!uL+UMOGxUT1pPe6g54mUl=%n*p;GQs$Wnd2QmE-M9(q~-&KzZ9H z_T2V<_T2GT*n|ClOkmys{8`x9xdCW8?hMAXuE^`$%E#FGfvd+l$R^1K&j*J-xq@Pxl1Pe*cs2V_tUq~^O+A}5AFX$26C~6 zlqaDiO1j(e259Q7=Y((-+}cwrNVLsmhTc6-bHl z{vI!YCQn|B(a{NjQi{&bP9FRH@45WiYe5URj?$~Iu=8)OWaPmg{2>CF)+fFHLw5pk zaJf0WCnBW2-qhMP7N@jvE#>W702mt^tase-p-%}9NKgnwL>k}hfZBuoWFPr8R?lu9$ZM{-hWRI)K(nSX^UO2Z zJ37knu3dp6^z0KjLj$DGz6hb~e+WR9^o|=p_$eSBfhjDJVI1FNU{-c^v+IL@L22{) zz`=1G7A;!Dx#yinb5j#?aFFxf`(6e$ja@Ik7@Ya$^%OU)C3D^qv_$f_2U2rwqe4j) zI6GlmDJ4~B=*?t1^UpoW?%Qs}>fKZK*@_h_0O;uGVD_9j7@Ie9%gr~l^y44LNTq^f ztXjdIkKTyAzwfvgNzM0GrSt%eIzGw+Is*0^4CwHW{+-<)zP=%d08c&j6uF#Bq%S(< z6edldj@Y`DTmIrNxb>$$Ma1L&zQv7e+4XnVP~Nfi_y!W?#*j)yr7-|kqMTZ=J%E)W z;M|YRW9WzX(f^Hqih8cesA}A|Zy&ono2Y3TXP$W`@l1xw#*JJuWeR`$lb?{DJULL& zdv~(?L)TI6e)ag4$gng9D%Atb1G-Kkr405zM$*~$l}|Bn@0TLK_tB4jlv{4OC9uDkBy{`>D|U|@h}o_Pj<&wcK5EL*mWcfIRf{OVV~a{r&|iFztF znM~ps25Re8PA!+Yec3Xmo^ndy^^OkH^XXgtxb!$utttwL3QJ#zx(fs5C~yLReQ9=H zXYW=i_I>%|ZdxkzxclzA`Q#@*iKb~h_uO-gjg4{ES!Z#}Ew_-#Wcc~de@?d7vne%$~0m9dKL@~@xg~4ib!TLOG}FjW;_nBzRG;t=EILY7LiP=zn9)G-hnedc3c1{=Kl2gF(E`VS~cL; z5Y^{GfF@kFM-%>gLU@dU&|LCB)4bQ=&x7yyuMgufaPOBG`r&<%_kQq$AMn2Sy)WX_ z%$+-z&dyF=c;SUZcbfY8Sg~RSnx-LyKvXI?XPw2X@i^bO_+o~3?)3LfoqiTGzw!OL zyyu(jF{1erRaKX&LHrnUd>Y$FIdQxx4`1C5{@;5eAeyGh*S_|(2#5gP-QDcnyO*zi z^{a<<)>EfWWzL*AIF93L@K_A}g%_BYOmge8Wwgzl>F--u`vQIc-<`*SjZ`jpek@r_ z4mh$QIZ$43k@r6M!4LBO_rHGvUr2Gs9e2E@6Hld5%$zwB+qQi& zSpeqp<(&GKxA4C2e%Cb_-edp$caweeH*Z=X^|n91`BV7W56_e-mpDg(P!TTOeN(v^ z5>efW+I=P<-cf|V63(pH`}^2+%QZM-BmVv$|Mue>>${ZREF z1kY6f_5|RelzUNBa5qGDSK;rw`v{@f_vKGe+z_xTZ++`q`O%Mlgg!xY;;Uc% zDq~{@4j<;uol8?w6EajjsbVqW+qRMF?&hZNe22yFd}nanP3!3S+(%Hgp^cObe&?IW zV*ZWfT0KCVM%j)4VC50$b@tBlcq7hG9hp#bLwLu|KmR1dKfFJ}+C1>U1DtTe2}g8d zmSyp|&wY-Mee7cgmC6}2W(2mf3Z`k2ShI$Vlw5P)eZ)fPukptpBD?&*qQ5t=kHPPJ zlhVeuZ?An{I`EY52@4r z|L3bzc5e^Dlr_(z$|bVD|J@rck*ZEw)Pz)BW9bSfqZ{sDqi*}Z`6WuP2HE{?6PM|B=a)Cv(p|_n?$&c(D(4tJ=DiD^~(AZQ3*d{^_6oiCiv+5TfoomSr(}_H0tA zR8%UJ!Z8eDyLaOZ46x)ApJ2+#Cr9jMRmE1*U*%oh6xP4=MsckT*cnF=Et3pM*hGou zFxbukq}Qr2_}zOW|HzlV^d+WEn?|WvL^{rE-=w5mF0*>|YLdw$%aKGRfr0ld&q5y5lLwA@jr&Bpiq9e)J>EP$GNa-Y+u##KV*}t@oXt zkq5s0#$-S6ZCc3QslWrJ2Be^pU;=epC(YqJr)2b3KcuoVD6P2SiYvJJ=9|gq^Egr- z(PkJ1n>KD_%a$$NefQm*eDcX$ef8Dcci(;d>$kqehF4y}FwMH}*^a}MDN|5@R4TGL zLLhQE;;U9M=k(LL^s}E0;@ROrdcSZxs#5mf%RT!9R)6oYB?MY7zs@HFglZ7Lha&j; z0KYaQAi^dzibc!ao9O?SPlIR6X3d(#gAYDPJRZlgDo5nxD5XdylYIX3pXbs`FXfY; z_yl9wEah^Uv(G-8>C>n4%U}G0rAsfvvaF~IbsRF84E_E6z6y>UTL_HdVe(yF%v!pX zS08$av7R2+fwC$!IaCWRktBWQ`NuAfjHt*4_Aa6leVeFi$nbEbUDTne{qD$5{ylQ{ zUVH7e%$zZkVxfq1ElLA(2edv$uzeWw|;j@as@QLmwT*Hci?tzL?=1JLp^6IBt}M98G_A z1x9Q8v0`>)z|Pc$4-vMewh${Sk&RMWwXx*zkMBno3z3+ytE-DrsnpmDwQWq(L;%hq zc(S%*qX~g++f*tQ99jFhGx2XZ4wh|`OeB~*xzh_poam+;99<{<;){q!c=4 zYE0-?Dr6t|^&3#?;WWtZ*QKT!#gDRa?y<%hDsSCDepS%tfByOB^R9QklabL;H*Tv@ zbB^Om$BGpz*tB^wnyw#`dad37uT?$UwnIxxi~Bz*g_NPqQSP*;Vi9B0CYsvXSakK( z{y9zS>SETspc5>+{5Pm_>Da}QC|Q#{u8l1lm3~y&95sPGR1vU8fBAi1r2^b^<4u^c z7*@rqmn_>MnMm-+vSnO-_0@EDccW|C5fcT6vRPJz=H?c3U3cSBC8L{^*t$+?^~=ao zi3>jWIg;(J`aEsXDO~c7%Y)jVo!#VLdgcw_TEpRjb09V+S~;gmrRe8Qbbpx}r?fe+ zC9`MG=Aw%)VtjlYscJ$9#|8l}^#z)QoN05vIrA z0BwAn#EUP{I%Nvye&Q3Z&7V7m8M9_Z(nHzhzde?T<#7BLEu@OXj!K2N*8t#=pZ^=B zZ5yN9YKYCrF8?J?HpnyHcH3=qw6{~K4ZeL=MRMEix6#|{#$x$=&b=XygeW+~&2bzA zFlEYQm*uJTUcJpRbW-cqqS-brr<_7M7GvSOd34U4N!v*$1sv?^RX&Y(3+0Y}qpZJENW* zJr=6fwUaijt*vN6cv7h9H$W7N#QOW$^w2}hJK+SHT3SfzI`c2SI3NrL2aZXTkS~$Z z?1dsIT&~F_sv2)qNwh?g%HHjaKlZaadzyb?1y*0sY;*I?H`CnQ?5WJ?MHE8N+tb5c zcirU|NmZ-fUMrAFDL1@1EIVnDPNhku(-W&#N1}8C9(jb_zxowtoO2G2RH&gLPFu1B zyiAFzl*v8!9R-5gpdb-tEF}v)?*aN+UXAT-`Y z>Q+SuNXYy+gWvu#GCvMV;fxMZ?%wGC*y)QGGkex7N~KZ*+X(r5fp2~5Tby;)S={@L zZ?Nd(lezQGJK3^zD`R7$DAZxuyJRB40}njF=Rf~>blq^h&O;*J9i-#ZebSNjo~yUn zj>Gm{ySVbI_h9ITANph}6=q*{SzssEzl4(=Jq8l#sG3T1IYIWKM%_AItQk6BW#_Am z{q6yjBeC{uLzRpEXYYFFJ4q&!*tX?Lhrc<*VkRqBu4LP`ZT!nW|1-_a%?u6>asBnz zbLy$5vT4(1w5n7c!X~ApR4VhkhaTd|C!eIdyW3N-@(?%ME0>fLN@TH6;4N=?3kw%6 zbZ<^2aR6;#fZ3rEO=o0?(&i0ESt3K({Yd<%8req`mEO?4;Ya?Nhq3qfQhX)I%caw4 zF1X+V^7*`XA;PSQ3+7LL@)O>7-E~ZxI*nW|kK;HLi$(tG=D)&mY%kwIL&QYrh|NdXKF(lKKOTBtU*u;%%r z3Z#KlD4{@T2;r7Gs%q)KSMslf*EZk|5u|dvd!tyL0{KYT)MDtTm zKh4eWzu9wu4)iV8$cxNZYJ+7lyTzk}klwO~P ztj_cZ{wL{U=iX_;D|JMmWC-j=#ZUWoMP8qG-nl5L{5Y+KyJu){h-M+PtY5#LZQb3>oH>I^rPAhH?1YztIw@YP^;riPz~UyNFU-vkNNW#P%f8o9En}CRVo(A zbc$0?In_-rH`vE^oCfbT-gLuY{e}(n_4Tn}!2)i*7YoTId0ZIcQmEUotd}$O1 z6_iXSLwkE06{~`jP6PGiFuAi6O%s0c)R8?Dn>M>$%vZeQ9en6RAEHn!@V)PSk87^E zhPiX+Qfa`p7`nmW;2>k8W6Yg57bzvCX&|LDq2_6*o|Qz5jnQ`6X`z#JaK?|G=W4h) zJmuR!6|$8spq_n{RohvkZizPKB$G*I&z>D=GF`A>0qyPWl*{D<{xh!+h;F6a=1rSO zrBW13bkI@;L_sazn1 z5L|lcrIbr$H@Y`#*4qJ6D> z(1gY#k1X>m)efG0kZ78QuIm(wMMg%386F-Ymm5c-&~@XW$10UeoOt4i#1nBW+d9nb zha{OyU>F8NLxb$vwSz(-N2%nVlcsBKZqzw|*Q%u3E%qDKCR(^20xnAbc80@ z(Y=kWn>W$7ua{EMrTAj87;Wv7IAPvA=FVS8I+O9sCu=3raUAB)pC4%W3fU@S^%$c|#%m&pdKKY3|=-bb*3=K95q0Tt3IO*Ivsj8#nUsvSs}32R=Z#RIVpy z6zGOdzL012^Q+jnZXHTVOw&a3PP$UAu&-w?J$rVuaosxJde+&@o-+rbxwSmuW9qt2 z=cGw~?dn0p1tBmDgMq$2)~$YtS2u5_e{esBZum~8ZP|3HrpPf6lbJC(yX`eI+ z$9C$wuf5VqW!o6(V2FgQl#%5!S~7JMBvMH)yr_}DD)Z(I>~N{P8n8Vn)|;Xwe`8}= zlyrMIQ1Ho5e1gw>_OraS`Xx>|0vTtJ*3ezwd92j8v!@napo+X}0pjCg%t9%w- zeWehBVlmHCk3Yt?SGzd(!b?bH+`OUi3!??`cp~)P#POyO8VbcrtDj@@hV?j(O*|eW z9*-jszD-sNbmiVur9zRlFTKF5IrEq^cb@AEMI_QoKHD~W2sBkHqDnO(v6O(&Qk(VWg5#Nj+*d(w9i- z0p>~}vT6@q^{KqSqB=hZ;d8NCss&-j{L=Z6kr6*zQB}1kE?h_~7Gq>&gx1zJq?bLg z?J}!Yt{^)$>P>lUEQLOpAxSk&lR`evb5F12oC_`@kxaU3_Ru(WG)?fz%d6SDYZs|> z+AqX5m2&N+M*{elUwO}~H=)qjzHKY!HqvoWwu5?|NRC6I=v0ku^e>(e zC?P#^TzZ)i19{;I`$K#ZW1vai-!|7+99cgwwm}9eJ+ZJ|h? z{rkxm3Rt#{q3a~#aXQ-DIAPW-nlc$I%fc`WMuvyz-m;lF^B3YAkWN!*n$GCx2)nBw zdN+-2+wAS#N6)@}4D27ovTcMWh?yptbec)+?Zo3TY};|=R6)#)F`gY`Y;>6BmNu7{ zmDL(p+aHYYt5%OWt7@IsG5nBG2d2(L^~muC;YZl{(VIH3``y%4*6V=6w=E4q4P9qs zc#x5yLCkpEn}8;W#bWFq9OAjvtJ$?@;&nPQ={20OcrkzSmc{OP7u%+Lj5Z5uaZF-+5>r*|JKSFNI_cVZeX5s$NQ-dv_no$5)a7qZ!k@v$+Qnp<6y z;nluMsj$b#gPS)NM>9-nwczUks4J0LO*ka0oVn`+sjB2vouRPwdMZP2of7g|#~2?U zCzHuE%yv}OM)(A2(h17qm1tGdeO% zYkLQYWU}FLY{y}Le?KuZh8Z(?__5`zUc2tFF4~@+UO;gAsi(LhjwZ3J3guFfSUiDp z93V-6Rddp znZpJ#0JDcZJw2GF={aPAa=GkQ`gvW>j%8CG7zoTsduPxc-f(4y*FNi3tL@W>^nIv_ zX4KUVte0rblhB&l`~z>qMGRl$B$Jt;IlnpZ`Z(Rn?@x&1i-G{yD56Tko8ig zux$%X*D(x(Y%a$uHPen8@MzKJ4QR2=Tes5N*U#*kGqEcb%(#gBwv-a9Tt;XbE1r7h z(2jk8i|IHH!=q!gG&j3>NUs7N$H7S?C}*>j2Lsh=&YTmmkColq$UXHaS~5l3H8O0!1Yn`L*BDKUCMga8s8OxYL`cth31>dspkK)PaHB5P)Ie{V6e+jZx@{|6 zUDNA;6hfjD9w{x@v1|8%LDY43o zL*kS(2ykdnKNXG=CIHj$ogE<}-m8BXC?a*N6RKM!Fgj!1|EGl0=pQ3Z9ZRdrjfvUG7G_Lb*5Yvn?p374x7AKZQ!+?0g%@`z8?sLtn{E`loicl;-p#Z7^ zwng{$9bA0jg>E%K=-QbvgM20E9rt)J#M)K6$Q#^XrD`^ zlAG`rnoG?YCItoAS6(@wU2D4F?HKKy_2Gyg)&&wNLj1SCZ?%ds0;F$pCOT-1y7emS zYIB$7j72_>7rRNcGS8AxX^Pdb@tcic{T(IS*%G5qjj4BUIKyRYS`z;cOV zvE+q0G8jPbUF>41TxG{0k%UYWq%x$IEMfZJ--_8e8GB@iegAqtxn&Orwz6Uc_Ob>^ zGiIXc8rW{@`l~O#NcYcvMps7%)22;l_6f7u(!HJaYuEVSX}#(uVl(G?85Yry_Vn#z z_1+FkWDSXP;5zua5oXo-thK8R1dTpgb0@~6U`qchuWWRO-zvNkM0c|t2dNa9OcUu; zy0KcVN@OAdi6oP5x`~#zE(XIuOD5^O>RmLy;|fEI^OU4_(q$t9T0X{6;ITUuZwVl-WNp}VhXxciI7M0$IB zoA+CauIXLOn>U|SrU}ckDA_iv*1Sw5N8t#ASohd53;y?pR zDFm+3F*EYj7higjVzCgZev^(v#kNpFa8jtdccL&vS+-l5CL+0EWV!6AJI{DIl1UvM z7=}s3vLe4%u2{6Rw0d4|h$v{}Yym1l+&7LRJ3BkcWHMN`?a^~?U9D}~Xeb6sB?fly z4tc7RNT2s-!8``1!SF@rK+9UmV0cw%Hqv3V7!d-jwk$GwmuO9$7}FN`U)$H$$DX}C z2u;+@(;3g@`I9rwAd^lvEWO9E!M2fo`xtrjF?2vP-OaAp3_kE<*K@TkZ~YOQMJJu) z9X~WJOFHBW1v)x9h{fYzJFZPtitO^`eIa^jVmJB`S&z*|` zDizCjuB3A9YB8PW<@M|R0g3<}@4p>A(;DqJjm)}jJSR8OAs*@&uRhn~Cte&`F5<92 zt$JB?OG*f|SPESsW+Af$E0Ad4GBi#ZuXC3UY@JO0;Bx z4Fmhxw>s49d)CFYz2~oKl&}(!iz%vwss4utnao*w?LdYBZLqwAmTtot+J(%I0x&o< z#LTW4G&j40h^m#_wpTDUf8Jc4T)EQC?h8>*&jDB##nr1BeRMfvzk7(vhV@V?KrRdU z9AvYc_owG@`TzJI?Ap28S9jGL$F?k5TUu#uZsNt~pLcH%wYG30pG1+h{Nfb<^coOveGr%z*KWYinF=t`_EH1=mQtbgDPOm~?*V3+PR) zHGqWHLQw}EwR(VcR$d1nLlPO8C@BP5sugS38lSKp9v$K2lTUI>K&rhYD6-?@%HHHh{-Llw|)mgTC$LO$5Wv#!Jx3Q#HY_qX1H5Q5!%d(diTu1YB>TNdY^cP?u; zZe(b0k83X-+YMhT708c!Qke6eyT`?L0xuJoHFGAHzHJG8{R3ED?4*=JI1a_xvsnH7 z^OU@Kt}YdK9qDu4RxeQ^JXy0bVD;eERs)LH3CLP?>)l;iB7@bt5mhPpB_LhXyJ%}| zi%6xEit+Ir7hZ54*=*KTv9%cp$8qgorQ)j6qQ~eIJ?5p5=km)h=hC-b!us{EL{**N zT?XZHnJJSyS#;uw{C>p>WTosLzfy4lE0w(C7TxESvI}&Gb4{mGTygnQ3Z)XGV_9Dj z3fso&oXmzjdl+1`D)4MiJe`i4?f}2UvPw}jGD|cBJ37eN16;hGs&(ROLl8Pzx)p10 zz&Q>M4RNC9rOK*%jiOX8kJ(Nz`z)$lcBQS#tyan&!Qg3tkV@@nZ|A-5 zxe5^U^zL(8)$tsnwsv;LOm_V8mytT1DIfc1^mKCrdpH4rVT9ELt0IY`p;`|hoqDDN zIX-|KAM|TnQMhc6?RcyBxauUE%~7sYxa!JxlSm}k*4<5|TnVi~q5`I+Tn5`BZkjAv zvV@O)Hs>RMABecEA@Ii zJBI+M-Z=+r&l+%C!{58Fmq{HRw70cm+m?6TU0!iybc~_FA(mWnG4EKql=k*EhKEPU zX0s93yQ8CnOD?{MfB4w#{Q0}z&CXrBc>0-D*p}-&)h_5#EEXx1ikM~$fnaE8m{PIC zIp>^3XJ;qLM3O?GKp~%Zi;BIQA(KwCaN$DU_0B6e=j^lT>+5INu3f=$g^mNJ!O*<< zyz+|&DTnN0`rNnEe)TPZSgD#tQA#-T zF^PA-^PN896K1_^+Z|{2Cuh8sg$ox@DwXKz?WMoJpGu`dM@I)I%%07pjt?cXV{n+}up5RAm3)AY)@$EZd?v(?mx{ zJLyb@vC%Ph?AXER=$K3M3Adsg!z6#!S!`auoY5D9DI$7v8&f}XzdOZa!c}gmUj&`ZJ4I%78396VLUfZe_ucS1N+f+&8<{#;8G9l-%qJjVrJJ2e@#eD2*$Em z`uqDyrPH*xx6;zmLQ8WChG77TVzI>N*eGLTS%!y4kkWCx!vqLNqD+(V(@tgQORE`r z`l*0fOgGVS^PR*Ooa$H4Q&Uk<48F2qd5?Me>h-%lBddPFlE-3(miQ zO1a#S1grA1)#7Dc*Fh1w}8 zFkVf1*Ik6BUMYlaA=4Sg7cFA%y0r{G^;F~>o0ncs>dd!AgZ)PKZbG(39lCdWOr4!t zDQTXJmTJN7do{wvmdj;kbanYPFB7gr7xG9A!(=QwMlP4bs#GvzF?S_%uhzAHpx^&q zDw!miaFe_J1O0xYyU|K_fl>}HMIphmDNmb9?zF}1e&TV4o_#h7;yZ36bMckYr84T+ zno#_x4hGNxyjyjw!jA)jIRzXGXJl_AzO*V9t*xzYDZaOy(L{hsuO?PHl5(X?#j?of z^M3c%;LxC#R2E*ZNQOe8z|ineKz=C>X~U5yO;DLJlkD^^_N{oF(KTzLImspOq3M$M zOyG^G31YPbUGP^Bam zi%~3Md^rz%^Mali< zr8knf=*kGIHL*H8#PDLG__6WlZyb;SddF;cK<{vnud7rl?CbBtaU66#ptM9yPSjV0 z!X4w1FBGba1_f1no=8chaH?(Sq4y`=q#NW5L3#Q#3iB5*vSSCmzxyqAE?1*Y-%sl7 z%O+r4RAUKj$kwO{rSD*Loe=7c1rorRbOKts9cOTdUq>XX#DVNK^#1KWjUFFcE5ZguxD0fbxxZp%`hC$zoCm4R=1yrc8NN?_-^{T%o zdCH$2hJ=L)aZxXwYJz}>}Ni1d(Gh^tcfuXz8s!HY3Yia@#)nWXahSk!7HDdNy(Ui)ECwC47g1|8sjLAc-Drh+yB*`Qk-f)Z82?HbAtPmXCE zdC)ksn5DAw1uEO>SFcGWleD$9F{!-+-OxSH)|~^OYdX5FVOch^IuqewdADjy00JkK z!tQ9tX=$YlWV^e`Z`($BWVr5|=?ktT`Ifh#r80*eu#0FZVA2G8+|r zt?Q_G9H+S%yS0@{B1t8mV|?8@^4quLli9jY2gB}LP_KD!!t>oEaLxg~IJsbA1n zp{mc7n?P1df>p-q*?>K;4OPxJU~P1oG8vNT46#&-cylv`VNm5?l#(Dcln^Mx0K-5U z21?hlOp}V^P|9Yp$Hyt|>!mU@)KD#J$tKJbP9d@IY_vogbPZvc2;BffcmL`}=sm*) zSo1)hh+EYTAiW~g^r{_Pa7rcYd>$)1hMmhr zoR>x{lre1%v6+j|5-DVU6j>Ta=mtVJJrGTI^LkT+;R5PDufC4CUCLfrrwB=7!-gqu zn2|r0yul!=>hP+NY8^I!Ujo;^t^i60CG8M+w%^&L!tX@@_Db@l9Rk~ZuD47+usWE&>JMe;&EhA_Mj4uP5T!JQY%%DzJwr@AIm!q3f=s#1m-o6q*^2)YORJ$_3KuSNCb|#9BX# zQERg_@B7uyw3>=Q5m|nsadB1SMaS#N1i^ox)c-bI;p8{K9$@B?s3q{4M*V>KvY`^bihQ6SHNwnGl4`$4WVlwbd=_J7vDfh8zCLg zY!`@-4fH`#o*h-vSF1i)O8SnG@T;ud_X)29O}H9d)#Z$Y5TQmKPg=C96XNxbR6)=^ zP<${$9%{(p!7$OPpjPdo9(H(Kn~7nf3>{6^{TNnx$Or(Z);_u&#tm(0(8c^!A=IWS zkX1>24EQMUzmM4HXqp?}=w@iSCMOhf*!3Vu2O$GBE5d47ItZnFm8_Hu*ceo_*Pnon zt8-)`?!6Z6impmb2vnhKQEAl!Y1RDarmv=h@WVti46pgeQ~zFKT6vnHI{wXPe?$ZO z*vPxps`Q=qe}OMnPt$Pk1^@A{-j(!8Z;~PV>6J@{ z*5j(G&ftAjC07HLKG87E2$)rgtj2nJaKXb;st0Nk!*EMILJ}GV7fo~fBsD#-g#;NK zLQ7LcC9DCN&}fvL*W!;R?nPH030q48sGSw|Eno}qe}MU~f0=*?8fbA%Mqu<^FjNQ> z(Man2_oDmOu0c|(T_ZP_&_J&O>H;XL!yt6s1GG9IB6uDA4LdV<`*|G{)wTyALTnBG zS}75G7a1)sqRU!IBKA=U2GP_Ph0?!KmwcGuaz6$v2HppJ3YdFL=(_MIuS5Mxm^(eZ zA9G_cO`DKmspUTXp?%)O1adlw?dRqcqgL4^1>p=+u#~dU7d)Oe% zS55B=-{^Ct*M{TAR<(U+ZTH z4C`+%ueJdIz3!b0fmT`;od=RupZTlO{;5hn?UqhMnxqyhU9#y6@yv3We^MSR@YA+` z)mzl1bGGct&rgBMdnu98gd8c)PSZ|Sq^s4_l%RA+Rr8|$lN&B~0#%ZWxdCa??>IGH zM)H=X6m`P6LwPqs0KrvFN*W8C0>SkxvqsHTRlZxzcQ!yD6fLrE-@NsO7#*ULuK~hW z=;z<>oqzjR@$9D>OScPv^c!?}`po0{AV_^-$c;- zq8{!s5Aei2n~9yNqlE-G>ujmuQ>`}|d*!UhN3VlZ_j3m_k3<$vAS`dNA0X2MW&_xV zZ~$rG$zJeDA}|y$fdbo;1T;YEb)bDbhKG9uB#;9AgoCRXD2~B6(7a=;yYZK7z{>_w ze!w$ms0NoJu5VhaiG2+R#js=~EMg$7z%3pY4+)iv_<4zIW}GUxesPF5yxBm{Mx3A9 z*ys)q{DfiikU%xtxukOy&egn!0$Qxsajy-*L%M$aCGl}dlN2_~_?kMEmt4XW*ckgR zAz|ixut*tXk#s<{Y687Z$R_`zvhHieKt=K8l(%f?6gDnfBN#7aHhy1%*G#^{^n!Sj znWkNGgZOnbr4UY}!PDFbSy)>9<4TzAJ6Y?iY-vfCjBcS%R-Uspwf$EuI;=1(dlRz5 ze%VB>f@|o4pVIcZP!TP@>o`SIb>gp~!l8(vxg~W3j6nEGcJ$Cuo+)DK*RoVz06aZ; zS5y^;r1X2falH2uIKsV>?BmHg23n0 zN9sr?K(eqY)zLu5s?|{Bbeq(toNaT(Dzm(thWyaP&_|)!+i8|E0r{ss@p=RAooUXE z$)y$1?BgXpq-Rc(AB@S`p8l$+EW2TNLaFBTU+HFh71Mgx&8m5>PyT0H3*Hr^^Iy4{ zaP|K1*&2@;C;zmDnuhYw`p`F_`PFkyvrzsxyZOL)b$$|D{~lrB{tbO7AO=% zeLnqJf>Rg6Y{4|eMP-f{k8fV-ll$RmrECnEgs(=vKk`ztryBF z-Er=4s`oPQ%Ojt@8vv8$Vai&w0{XcG4mK{`P&){gJb$?3b^UT(h^`wXwQ3SsP<}&pGMoY;_*d?rDg< z&!zj1Z`OXkrf@~~*j_w<@bFtI#UT>g|Bh z_4?Ndw@Yq6T)U;4A!?*#yN;W@9P2n`sPEQ(i9rAcV*E+xH87|;{*S{^XM_BIfAcWP ztH}2tc)Xpd=Ka#!BRg14SxS2I^iJZ&?K!tOYZ(C0S9Rk!nt>0(A z)A!b&B`%OctM5k6R?qZ?2L_h~f4h4rSZiUs<7a2_`ox0HqUT)w{2AL#>F|2kbI-cr+55%YgC0sgN)H?=NBcQmoLq6(j?8aOXqEd| zzQ1%tjr|bgF?F&nI!5gEu=6LEpEFQeD{XgQcXM>ZdW)e4;F}h+IZ0I;QbVcNsi&Oa zKRL|5Ei!|oL_T^%rX*e=E&8z3^AIr}1t_R&#-9NkjrIw~eq$p*VFMJ4=YgXdZ;k$Wa;l%NY zY-vU5q|=Qub9t5d)*IfDsjZLr?-#r*z+X)mjvvldD{c7buNo5+XQWloCiC$M`sA_Y z4trRVOHw6r7kLdCq-vyU?Q4ExqyDgd=WT?y^?cJ}%t!9Vtj5>c4hj)>*OsE5?KBD# zxs-)JsNW3ipVDaiaA*smKc&5SCF)YjDb2CZO8FJ| z{zstct;O5xQyy(zj4bP<)s6sT8RI|3VrfoYqirh3&u3pGJ$$2mWFc?Cz1Fch`%h^6 zU)_;kO{l-s-!aiC-G4sY^&R!2(UrSy3hwr9Z?o&Hn}Vu3o;|+XzCgczq<^*BVX`LV z_03oI&nInlBXF@8DshhdKRTqnTVB zT*h2t+0?8I5iXta?|whV#;S&|euJrVmOjfe7Hv7mTv30hKu~CW)iCmSZn}xO|2C+y z{gl>B?BgTpIq$v*=c#M&ZO1u&RqU?r7H92e@K@xl!Xkc#H^v5SALo9*`Rv6& z@1wJt78<44@EO;E=ATY*o76yc&1lS$k!@SuWhc z%Du5UYFTK`xhJe|@9sq+R#YQ@dvdQA*mD20rKIj0q7R;^bPt?lht=eCs z>n~eXQT!^Q5gH+p^NL4n^B=3CmDX=elw<4uN*sF3NY$AB$-XZ-dR)EdwUY9ux7c>{ zYugzEYtf81-H#Xr^zX?Vv}g0r{_s8L%gp!9fA(zR*=;?S<3QTI<*kFi@#Rmjuj49? zW?S4vuzyRP&a2Y%7$GyGvksfJS*>onAEHOFyBnqR>RWe{g8od2#`Z*x9_g(fcg8G0 zSCiASqr_VD?qQ>va$4)C!h4BZN1tYEKQoyn%MF9e1^~dDte7L)eCB&`FEhK#06^4f z005T&030xw<6i(E3I-$pM8MObwc(o`0n=r(p*i5#xS%IG_@Rw6kh{2A23i^t`M^#Bbr=aZ)eqB z_CXLorJS*XWT^H-)AU$A(+x%;Jm?JA5SsVkD9L~}a2J9x#O!ZneL2uqbpe7o-=3yS zO?AL5`(ZFF19+b} zDI8J6l7twmnn%#V=`}Olq|-m9+A$1OmHJ>+6;&tt(Ux`Afqo?kYtpUf-3S17%C8E2 z8HiaQ5ktx-6ByVysH(C`BOuIQ6&JEnu202@RGA|kAJ(B_G-C^9D9cH(m)}BQFHhK^ zm7mU(=X=}%rTL|}AK-EW`Zwp)<<@@%-C&ud(WIz{a$q#zO)%~7AbSQ{M?c>9eyB}h zoWsPvfDC*mO=$Z`3FH>wGYz;QzKXXAN~U|D9ky zfc!?sjeL>pXCOi}+8OsY$~PDw8+i~5&s$s1&UUP!&@6*~eACz4D+2PP5ti`gbr&xg z_EMhY$y~8^(HhYvIzguX+jJsK)w%*ZXkFrI zJ1htQN^#P8Rj{#$^^Nf5&I-l6{^PU16-`}qEszu%ySu-WFthj86gH*w&|{x*EKC^` zE=07sw~zpVF{nBYcGbF+6r)+hM2nY58!v2ITGjykLZO0z#m0Jhd+Gsr(EXlHJMmch zaSi01K_;DX)T1VSMS+JNwTYWq*#HO6w2MtD$AC@tYpunQxZi9L0b6B=jMZAj6|Gzs zR|fbfdqL)_xx>aq=N51>T|x68LZ_UrCSQ3jzAq)fG7i&77bKfXEc=zlc~ z*Z<osMk z>8j#swFa7^TxUHQt#Msc)J zQy*{a@9uInojcs2ic;Q7MI*+psv*ao{E^VSR~_*rM-m~9!||3~;W+mKX=?%?ZP~%7 zB41K2a+R1t!k~`iu%-3ILB!;%vO%h^J)F7L9Qz0X12uV`SFe)rs7(*74y}7~ydjmq zk@E$x$~P4iTs||{5`hV0;F^(Fy;a%Mm4kcblu`9}VE@ca(lGx;VAdyy2}&NyNDfsX z9bbg72n)1K`!_QZB=eBPPWU_2?3u-n!muFwey{zeTU<>(86wK%`dD8cetvK2<|fE= z*Bt|1p(H?IpKm^g>5x(wEW?bofm6Lh+Ne=RQylNaAI~c`z8H{+%AC!uNC{&U8lcQ+ zd?Q|}i1!u@{=|>)XOdyIag3c#yJeFLD=DQ%9m-Pr%wNIWamK3*rSj=4ufz|31?%2) zefjc*=hUe$B-k(o`Z8G`e0Sr$LoH(X+Eql=zg5H}NZ4ITR2MYb$I!!i@5lWS0ZYNf zz@-K9b;4ce=cSliTa-lRrImA@em-5itFPuIWvV7r&g&Nby{5Sz6h3tWQ`J^7@tHce z%!*mrgM-i1SE)H)e$*)s`}_o~B$bN_dyni`e-MJ~-G+D%C)i`jzi%mtnO}8-On4_cI~8ySvkmi;_!|XVyNpOw$$FsNf^gz`($CFZ3_# z$sd+X5E*oD#q4h!o=MGHT>@ic0L)DpPwJ9zf3cK=HIXPFb)n5n5U;FEF0IQ>s7}XtsdN$gJH2W41kM9YmMa^Tg7-{9PE5B3p1zkcwtP)fnh7s ze_;6L7<37NI(#SHz~udO%utMSK1h$1EViyRXd zuzdix(hHq{|6-T$Orr5|uF0FBWv}@O&H$gv;l5xzqq?}LW1^pp<0|GWEso4j82zq= zq{l_Uvt6-REaC7lDtL_s$RM7Svqy<&hi6DADrQNXKF#VX|DvWwxs_$4nK+@qJXUqV zt2Yvs=ij4a+uN`=Fu)6K`}ik`MUCev)}k2Y_GtA^_4YWB%V;5qONkp}nps#F^;G>KT|aH(9WUhCt62<1 ze%Jqm zVcptsPm3ATBIDn_bzoQmffUkQPc~A~t+jW0X{i(A=f@@p{S(Uc=OEXvT`TBi1=`!& z*J&szDN&S&r3}1`D30A&z)}53`i!c^ReKc_c*SSP?`OH7HFEN0Sr65tCo1>|thT7d z|NqBYB`)M-7VB;%gt_<+TDg~=>++2nw~3wTx{#ZRvYEyUX_muRF_F5J$umqe0tblT zojcE;KR+EMFyeQ3e56hxCqR*FQ|*I8BO{R8t`aXjSxlv?Cw)3Sm8#2Wd}Gi!c*fNs z9(KMuE8n;+0$$iLB3)YpMPoIgR=&MK+UjR8cQ(842GWtqBsG3CRQMlG5eLWsAWIg8 zz<>?Kp>87kQ(X5{44)u!S3LdPi*wm)`VvJps(r;xJ_Sd-AcZNShT5i@`l*jw9?Xo! zngt*W`V5VXkk6k#C*^W}&LmF2RQL*_;bMBQwR88PqCDrX(mcp)ud}DX>5JKVVrHiBjISL?9<83EM4< zxR^oe;))=|$|nrs3#>3W#oV7xc|-x5;$w!?;AvV` zXerq70c|6yQD4U$DL#lgHa!Q(=}Ay-aUBaeKgMmdH@9a^MMJ7>S&=TjfRSg9VRsk$ zeS$+mI-HXYg?`C1!Cv-^-3c;LQmnucU5T+Inn66o%UNXyYF~XJJ*n;u7IZvGV=>Y4 zGng7IEkqV286%rQVdQ+VrLOZ$5|GzzbS}sLVLc8j>0OWK6*4m0k$)KhE{{ZeyH%Ba zO6mP==A$n4AOx9*%@w|FqiQhMhmBK?(W@_<`7+E+XkT|Tl5)tXXlTfgkdy>Xd?7oJ zgMR~_8*Lb`6)L$S+&)IJzV1P8%&XZ*ajSt@m#?TMEZ-RmdGtOA>1dG3<|y_S#CO8a zY)f#+a)={mebE{f+GBSDJK8(OCTym^lSKDpyM0T%c#x-+Kt?TCQKxk)0x zp|gf&Fsa5YE_4O+-3vG;1Ogs$>{YcCM3_pha=pwqpE?s39aDFnlX<)35!lwXTHm2~# zdvmHc5Ok2s2$2=5kK;1DeK#6n@4*|X3spJ#O*qNK9$g;{bmYf$g?-e{!~f;*B6RF9 zgMp!B^IUi-mOhZYozGCAF*sL*RnhYv={q^wI0D+ks3cgGUb%r^z@=Rnvgfm5Z0_YJ z!z>x%(R~Ix3bG*{%~^RL+ll^^-z^cUp%D?P6D<+&pbh{RAtfb+bViO82QcOyf<0In zMegG@N0pVb4Z6N?y51Ha(`7H3SyUe{nKdCSc)ux4IA8N}#R#^X$D$~MUlqYN3RAM8xr zAq$EoWr|CfFEUsvroo-2+(g=jhTFZf9Ctl?`cV-TG_!C z`4*E4uv6Yw9wFlNTcK{TDm(xtC!Ur{We!j7vE#zOvt28eHKSho=)+*u@V>i0Q zhSCGuNrO2Xf*h3M3&&~4+dw@k;9Q9TSV(+_m~y~riJr&s0K&?%L^MH)PYpaR9>{w* zHU&#G$wGDt8JMq9pf6oSHahfFG59-?J;gMe$?n-rPC0gH+`q5P257OJe$9tcakuur zu@4j~@bCnhta%Z~ya-tI9s?+_o)g=*9pumCPJG~T`5^|@k8+=3(?w?_Z6bMi`*8fJ z)I@4FkODKioh&dTA2^NPZ;Iff1Pxhog+73)JrfoagFEp+IWQPvemWTluQEswCw78L z3ILa-21?blX9gZ>Q-Q_pW>M(yO#okUQ4-vL+ZfA`(8d zXoH#4bt+=kj+;1_#4sN@onIXYjyXWi)c4&$#OcPeIW?N!V9H%fL@uD#f+4Zb$h}K- zUuu}aMqZ~e7}%!Dae`q^&t<0^g9xJx2!Z$bpdkYec1W>Rr~% zuZO}^G`%%|sU43ZAl`CJt);wm&sgf!b6WOzlEH1;N|>Cgr&uXH8#^F2f`H!J?s*sh z3o5ko*+1Uqb+j@zPLhz40=Ej!Xrs>H7W~OOVol=v)UmMhc^V3RAR6UQCBer%Pw1-?g!4B05pwyEDUaWDjFHa=4UJRWptBC41u7O z;wjbV+xlSea*6!B=JiPUU;W(_ZwzkqnXE6vRCEcQ5vUAw$;axodhCZ{geir(rPB*l zPoChV5W}G3os}~Ux_e@_S~)la-oAnE0qW{cRRZ#@FaDXp+}tc84scgWHaWh#o|T0K z!F@`nmsn9lCiV2dZ)cEwd(g%gsy_gVw>ZW+pz7~172sFt2B&%WP(T_);E$((04y7? zd8moXBVR(V)Z@b?60lQxs=>0)mFvz{11vK1L(~7$gocyZ+hR2utXmAp+F@K2_mj1x zFf1lPwEFtFivhyQ-&vMJXsy`vnXTRXDX&wDWE1dspvI5^=K>w?vQxeD*WGT}jd-1C zH~lBQ5Y}zd4I>+nr@P0MFhmB6zzh901|~S{jt?6Q#$uvTC&qb|bHHDAf#x+m_Xqrb z-ryQ*R3TjC6Z-8KF84ERIG~{9Gf7D<-8n|$WRHFj;O=?9&-nvJCCt3vzbKI8Go$@2 zM>UjF#&uIH&{hY$&)sA5g=!|l&VB?_;{Q^h1T4t}39mb*?$Tok>ZI;pm zKo-!Fk*@!z=m`3;ky@gS%n?K4!^Pf!*F$FxJp$_K5)m~yf)KQFWOYjM%+XFd%zalP z%~#=;0`;4)hlB*vCb2&w3u45h>_%CoA&*2^w91Oscx6@S3F-b9s5~;&DaLEu$3TT5 z#tx_36y4}8+*`l87m~y$3%$FwiTlNpLl|>sgIqu`@Za=?M0Pm^5svt-Mk5#DgmZOV z_(ook{Dby~y4;f)+@h7fj|V+CnA^(|@Q-Phi8Znr3jH)}XkZvzQG8CrE}@}mqTb4W zZ{Q^;M%0c7r8at0q6=F0=Fj2^^bv@*{fAT1kbzD&U-CO4dj|jEy!vZ*C{)dFiAOs5 zZ4sd{g@I0Uj|>pG%%w4l=RJUrq?zPH|3Vv=?%_50^M=s-`k;gfpwQ=-qX&5QB|RW! z?lNRaP;uz7E>WbqQBgvQLXs0_8(`5NEXVAJFR*!^NU)0aWJawgExY07=9GSwYpNcN zZKY50k8`AAvVC9g?JTej*0;3>Tw)u=&rmnE1YE`&wSqoWL(5m!Tk?-oTue0$A~Zfr4YOoPejg>|z}F!Ux~MM_=j!4?-|F27V-)Vf*7dAYm0yC_pj;WF{v# z|CxR)_VEWd2RBh@L7hp^f+oCqa&x?M?uK|zKPd3dVHr7oE>r?LVP{7LFz&1fMMlHG z4@W|QEId^y^mNDden2{rQC;Z-GYebA&VQA|%rR|+1jbH>Ex~#w`r z*pFK|H{m%%g!n0_R$Fu2+@KrZJe#n@Ahn&THgj$8`Ho;3gO&vIh(GLfs72Mq(mTbgpL`MLl7H@V5Q*f+9|y(_2`T%< z!iCD|_f~{LyEAwHCwgssaYHTY42DGJ6{(X`X3Jy+3!-WJ>h(eDy>&=%Y(L=DGmp2X z;^(K79(nHHIZ~PM3=$KAT;}2;1i80A=6^E%DI9~to8%8X((b9l%)}6$k?8WW@_KPJ zwyQ_NZ`-6<=U%jYMOAwra>_q7IL+>N0;Dp_T7$Jc{4LG^@k#ro!sY6U=(K%hiYcZ> znpOTG%fUV(630su8%YA4+#x>XBTcgCGU=Iw^H*3-9IDkeQSS#dAmx~m{1pLy&(R*k z^6ms2uu_yhq^ejfZmiBjk2@%sS)6O3p4K2fc|Pv!JZ-`z8~^o28oEoedhC&k4+qn4 zgG(3-qioQ;u;q8OqvY`-$wUv$6W(yYClJdFq8kxwu#2Yw&iOl{pRv)p^kO(3X@F%c z7hK*W+Eyn%k=QK@VnR0mvpIaH3v)0wVG*X5?jVZ~<=JBBf#E7;08_L>=FJn^Q_i9b z-uNtuvt1fxud!fVO+cYGH&kh?nKrlFyQ$FD2?8&(1?sPux+03!6b`w4*6$z_RtMZ% zSyT!xWF1Zd&P)xNhuh$;L*Eq{yhRglbNih>T|F4ZJ9Y~AgTf=nd&oA^K4b)OeSx-lDSO^Q!@>=8^nI81IuojNEu)ikEx@c2;Q`3={ti^_%~M_ZHU z3AKyafR#T=7&tD1wKcMny7$kb>B*%_mtZsyZTf!3Scp>fQT?4clVET4;ZfDju5Oj3 zzso8*_cjw}D9PE>2{YHVW3aneIIsx)ZhZ`x3bR?+6I0GdV#%+3WqdIKLTa+0@_uyn z0bKYD;BZeF1-%RW{R$#qQG`FHi@7s%F5uq@o|9e}mhf`Ynd8XC z%XXmqenN48_>7O_w0VZv^-^rL9EvWLZB2=s{=e zBn)=r1fC{@P=lyB^X`#f;iW)Os*+Y4n-OaM!Q5kh;KoEH_vU^o=U8O?HR%4AeRypxIiLZqqM`Li!VeGVm+cC-Ag?lcOtYCXAh9xmvS=iXOhwGVy(aE zeS(-3WPt{P-f>38fa_Vy-kNgE;dUmb zO;erygcFar1NZ_kULYGmC8S(PT9JJt3NVvylj-|;DUu@PnmH!2!gbQPX1;@=4ThOf zewj$ww1;JIG-TY=m*oQDCr)iC6o}Zry90{MD(V}Cd^3K+%e?3UV+RE!(23>l_BzTF za+k7nJtHCg=Dtd#jWX9tw}jF!1EE#=9{oI}=VZP?1(^y*Ac@1ZuU@eZd=%fUb$3VP z^l9XbMPQ~A7H)s(|AN%PX&(RD3!1LDnDPnBM8Ys}WpieH)MeJo=)!Q=Rl zYnpz6&9wy*cqZnsgLH-j6}?K<^o3vUWsvhFiQj=^#M_K6(l$fCNZG9!DLpAQ~8cTDt!^$-Si?XXFHP(>x$mf7E3&m8(26cz?ge z#F8NW*+I$16c1JCuWDv z$T=HaSF`yJx@xT-eaPRs$HwnOG>_vsT5WziU1R7Q{E;E}0-2MV+)iC)o6v_U@OOR_ zH0d`sGG&>Goo7swd1Qw0DAH|-(lU9S_Y68Mb!O_lQp$;Z$p5R}h+aQ;B#8aG6QHRs4vEuJ7OZB*1-y1D^*c7sxua{$| zv%r32oybhJCjJBXR1Mo5ihJGz9%bMQAshFSQ4&wXk;peQmdkZ9k=EZ&iZVH1VymUV z&KLn}CMV6Hm_Dg{UC*-UX(FO6MC2Rnmxmd4#1HM*>+^oUZ3AaJ7th}(+1|2V zA-T2QP%IxD{GA(8t;B;hD?&wdT3pgL4M?BKM7NtL{Ez$$q`DE)Pm!ojh?-k5eRc>!-d6mCFy-Yw;3M5o>7EX(;TOQK#%* z^<|c5zDZ(MSnt2E$AkI#?|eRYiF9~hSkE#=q08=V)gk=43a7ImSII8;)IWd_*AYkH z#{`H1+QRS8pFa}6uHkmHHf!Rh<5!fbW}uf|W|!;uMsDvbCp?Y^#T0g7sjJ94fQbz7 zcppfz+_6~^U0g<$|u>n-~L-z>z2dv=WXOE6o)VBf}y(wqr zQ1N_xvUvZS{>qL{j)nvigD1@T?!&%qXqg--ipdf7)O^g_y0lvALK6tE`bLX!u;eSHvX~#HaHIjF{dP zW=5y>;!g!a9v6%Au})v@+7^3rNoZmnlepT0KMnFr$jHrye@%r(EvVKdv7MWpn3zD^ zo@)D27d?6#6055le335=TtTxh>?!ripYV$**06Tf#TzN_G&x~@(Msw=~H1zZ)l|-XM`blM+%O-a~7NR!kN17r&QV6Yd`Fk03)bhr#ye;n8JMAMQNN1jhp!YUvrjCLitZm^ZZX_eEZE>^Hj#U1 z)pFf?9n|>^FrkoSFYgz5f`3V#*)j6i4rgHJ{J_B3in|}eH9-23;2SElR4-~{WNzpR zs{gjRF1AmXa+K`&@zE=B@)Ju*W7N?C7p1YU5TCjVjhSYhH?e8Acf80lrp<%5I&CQQ zFvIVcmqFKoKBkchZ)Hg-#$R_P%&2Z_q+p4+PsDsYvjao}#s_>^4a8ICuyU1DyAjQd z>YiTcK+oB*w;*=@ghWX#mYb?8ukH7EHi*3)t3keHO3^!h#dg*PHv^KSb&~A9cbj@e zJYlnMDfgcb>?7qdcwc^Yn46&9|LfACX!xe5duzUkb?s;-$Z~{j{AmEkmo{^HFQ4tS z)WofgrYWX(SLn4dXxi|yF8oYjYN-z>X+A8w4N}Cvn!Tj$!3k1_LmFRf0c%X ziY%WVhh_xxfbi>5mrvA`_+XN`eZ>cBd%v-GouKv?dtDsxdFXSl%`IT*62eV5S?5eR zIHA?p_r=z;;Tade8(g4$v7o1}?Q;CUHDQBL?7T0&?g!eewD7edlsLdm=r_imgP zGh3t4kPUWoN==jCMp1*~!K8En<<;Nsv&o}9!ez5$iz^0r)9c>Y)VVzI z_Qs_;fF|$9Pdx1O2kd|?!m zzb6n`c4mGH6V|8NP<4RQiN;;x=YO}i4_yZ3kcn8V1m~Jllg5nK1Z+rA@Y1oNF@Oj6 zF2LMCoKR7FE>7Sh4kf&fJ$WaX<^A%KeP8tp@<`11KCtlh2iYe>RiFASO0tHhI9%_s zE8h>6O;8$;EVl75b7s$}20e;8Hbvd-&CrOhk&`*KEGCT;7T`Cn5At=+yR0^)XwLVI ztKD5Ya9QYCxb@mZUs>O^^w(;MZ@xOcNcYe___JDwHvkclFF!m%e~c>(Ly^c0U=f;>rdsY_=SZ zs)U=*l z_}Ae$yZ#|r!M#)T!F#CoW``ebp`m7{x!KN5UbXetMmD=uO4t&vIB28a&CB9#(t452 zZ(ad&iIUsT?%cs|wcoc2)ic;^X&^gE`HX<}o}nhAe10yjuu5!f8O4fBeN(M?DU3U^ z#wheSS!S{d4RqqKw6zFG>8OqMW3MdUzhq+gi8FT|==xgo8gTK7w#pUqSyNeeyKLjT zi*Tq$3@h=Ut1}M)FFs*n!%LTiJh<=nl3ReS1`-$otUuAn2}o3{-*CCkwK=Dbt*?-82gqc0toAAwn8E z8v|Y|E4n2%Qhds5UvNpJ?dx8isZDqi{lqe0d-YEHwO?Px{h})(*2}jm2mA52Q$>=) z&vdK2vFtUEqe&)({jSkkRzJP0cyfAI06h&tOKKU!&ph$(8H+EKqfI2pc7OJ!<`T zBNxx9#@{it!BG9n6X%M5RRR7;Uypl0;Ob(#W{e!2F>P36fnpS*fiC4(jaNDd zl6gAv~;n-zuB-skjW)~E3p2ZViI3jgzp*0! z>?!HXqh_&!<5!yhPUFOxGRV&=scTk${;a4>CjiHO zMtDEgQU9+n7ii4dt?6VI@QPmf@3P^lZv3seeX!!|ViqDV?9v~S2vE!aRO?+)XYb0} zUum3^giSCahd6SkS{D2xmiU#pRj8!u+7_27osDzuSHC^wp%J&BM!A9U;=C#pb9Bh6 zL&#_Yh{iMUg8Q++g%JB8Pc4kbqn60xnX#Jh7flsmxNwunSSmmVP2mWH#XHXvXAxJm zj`9CG0i%&5x;Dyzfg4atkODZ~MA2@LCVn1>9mFVa)|&rkvCVtsPisSG~+M8k=O0i3^q&%J&GSo!#CZ>?hZ z$3<&i(7)!eMN!Hp)kTuAPPO&npYLaSJ;NG~+r^IzQh6Hc`Gz&Lv42%4U-{0E6=FgF zOYzy!d+P}fIXHrHF`}5fOUFMv-_gtB)C?Mb4sJ}~9rN`NC?tryVbM-vD|luAJ~xf$ znZLr{o9@kYKMW^>365WZUtZf74bgL9N;gYLcMP{@bH)dNmgVXa%z>!p2m|1XpW&GaMq6r2Wj zY)Du>5+p$;9=7aJv$FZXqWaMT)HO=9-)K5A>?gM>r$#&$D4bSTVJQ5*6l3w%n=GRWPdPH)4P|F+Q zU|)K3LRM|lSOTqV^Lt-t?C^g6eekX>w(`_fZcR&?QZ*U;QfBQpmPDQYDkZ&zw6U5n z)++(I0}_@G_ekN;YM()lN9qJ=UuK)2m>eaDnd;-SVsJ9jGC&LqXPV)t&oOkWWq)ht z7D1^8j;c#HM^O(52|sYEJba-6N`YP=J}KK5XaI;B7N*ITfNH{o7VB@Ym8P0*vpwp~ z-}hBHe>*xDin16g`tc6e1?^Ft!5bdL$yVo`RQL@XUd%M(=IcW_C+e6>YGA5^sfq;; zYsuc6=)Ih+?6chZI{{$#t1i}m`L;ei3XckFj=wv&L3*0>y_@#@s`4!MhN&%1a)=xeV?tP$&jYWJc)1Ghku6~q7 zL|_E;CO)!8_)Ujtb(Eqd9Pq)6AGhIrmu5U|F#ACg;(-;Cuy30VKOvQ7V%Im|x>0}Qc z$YTP>*_#g6YQOocWAi7((^H;`=?C&ZGZ*|R&T0{p@g*Z!9!^iZ(6s?8ihrcFLZjllXe;n%g-s^nWN31L~Xv8YMjxGMz92FR^S0TM9 zd1k(;(hBv4e8jhs_|LFH;rVhxZ>OP}xEqm?KhA7BJdM10QTUyc>-A69ckeyt-F`ui zKectun);2w{41Yo54jvB!6m3UC1&?py*+e1D*aY&o5*n5tH#OW7&-@fv~gaXt#jxO zf_5=p(J?1d96o*g9+FzLWXQ+b-4bXh>pe8~Go;Z0UD)V^ zd_K#0UPRdNv%1}`#oODSUu`D;PRIaJQ^=mLdwu=+l5E2|KLSWM4a}6(CqCxC;)I|b z1%AKJTv>Opqtd|hmivlUyfJFTg~%=&kU(|+_mwsL_)u@!j0 z*W;wskQ?_$eD`;@FHjhT5u``D_m-s-bn3{IGbDITaxtbb3WXlgH86cs7co!NL=;3D z@ckjqSYk#EWwkR6NCVtsJRUdpA^j(V9=!J6Z}Z_qJ=-u!3$Phr*;Q)C9&;njnQ=@@ ze)q0eqZl7MqCZ_>UT2DS0O1sg-WVT@{S{vxD=WEckKzkX z5PMnot}`S*WSS|%gt8%jy%JwbVOcGw;Ul#-_V;Er6Edo#6Y?bME_V#}1$ZVP@+mMXYjm+;R>gFGiB~l9UbRIKrJ|Bl+{#eU=5qagJ=S6d>!) zxOJVx?$7#5v!_g|e#3?yrV^t{i`_HuNJsAu4#^<^DH`K|D@}&l70?dgL1podA|wDl z^hvP15cIT)%?A590+#MIy|d-R6JB=%1HQ}-x<(aV0=uZ|BOd`>X0YoM7oY1_th^?1 zeQ2jDT*&Ch@?!s=(vd5J`Igv&i!AN2l4KZj_H8f3`!`RB%MwP1JxF}H=3%QoRUEa&S$C?w zo?AryHWal^Cz^XSkT!~7SBoXA^8z$lHi}Tm5?<<>Z6wRnb5QvaWSY5_39Ya70hamo zgQfCZvk$*J1g{6coVNgCB4LOK^}y19Xa}glDt@Rqvxpopf_dO8C_%?3fCm3z10H{2 z#U^O50cai<4;O=hjt-6m;EYJcH7f%XJ3Gd_I1^}ikeeIDy`Z^XK_OwJlimNp?FJ2S zZ~=>a(0*RT5e7g#pyf2IEU4ZF_fUY1K^`8|!4ND19iWyo=v*z(VgcBS7B)7>jisRO z(a%4>8D0Vt`kSXu5UWTPRl$ubNHvF=X<%XfANfcPtS9jQhj!BuXP$v*fB+(GP6|4r z13#<Shz5-ib9RZ6*IbdgR6LfQy_euLFYOG$#w1oe0SfX1Vd&Y%SKRk?ws256B0q@Vi}Tz~z0{*2-6 zqNNP)cI{>O{q8-(-!ESoKApeF@N)hlhToT=M?`_~UyOkcP_Zm4D+4*25!fd9hjfxW zC`W^Oymw!}VR#AZD*c5FFmY-dG4NQrK+YS3W)9SYUKtQaYy3r;FF-j-AIk;Z(4#p3 z0*IpX^x!-D|1lyhdxSRKfwex1m@)&i@C}APUmzD^+*j{~zaXmsQYWSQ&VKd2*GKp-M444(h~16?i*ZvTMRYytUy zdAS�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 diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png deleted file mode 100644 index d4bc53132ce3f28582bbcf452838552a73349503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36700 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

w5!X^-MAv`xT#+T|PQ+i0( zZ%Y)Vj_xDcj6c#b{&#&D5>er)B>WYv`Ix?$t}7ckgL&7oL+02Smz$w6s|a7;V5qX& z%6vsX^4fQM4s!RxznRvT>5N>LfOd(2(Y({@%LQ|**KYnazLObI=pAPqcYMG;7gug5%YGM*< z`d&=mD)%rQ%AQa<#&J8v3^>Ff9{ZUjH%pfMi!QtvG{Hi9e(bXr!lIWYnlQC&%C`Gc zr(N+7Mz#1kzWB&1(|>7z%e?Ta|@088nerT1h{hA&H38x zD$4Db&Y=ya4W>$6m@|kwquMH+Zhb>oB>XMNme0qvM^#wQC3uuNKUe>^J2H3i3Trun z6;i!r=iq!}k79Qm^DFbCCx)MakJ>dpu>Et{+tjbZ53*@LJ|`fCS>2<7@d`|HY+Epu z&fC>y4LX|+NEaG3YzwuHjQ1p4$n2;^|3BMDf?0kG7i z!Nth=r}DFZl~(RoG~fz%a9lc_g9V|C=YUg4wF=tfA@CRPrgukvI}``9J5J#arCptK z02x&u@jZ{IezO`7(g|@-o)Znv#3`!TifU`9j#&|6@ve?Ac_q=4HNsV}Nql=Zz>;#7 zLxwfU5QKfs_mc>n<3d1Pu5+0ETd6aR^T$A_!j{V1R}1yN$pNk~jT9pjm7?>m2b}E3 z0dH#3n5lKkjJfnrJ$=p>Ab(sB8vdSK)j+1&69RHAiIQX&5yd{tvS&I&DBC{e2r55o zj#U&=<4N>vQu!~24mi>83Pf6Z_^hX;BsDvs+#?Gs)`*(LyGJJc>Y9bRYeQk@Kt7$7 zTYfzZ=ssFV7{lCLHl{mlezZ!6gCoKBhI_%PJ3 zO5KDY<`sru+hvI=ILWmkKg+?=0NeGJaF>fVi4GbhKG_g|ZOiht#rq_0nscz8lT;$O zWB;Y9+c$`EJV@@zkx>q&BGpczqV&~Y4^-P~j*Kd@)dehtrHsbr{n>o2RfdL4tUmf| z#Q5z}>pxe$hFL)Aq}RsXf96yS>#>*)u$Q-hh`j3BXxEMTm;hB@d>gcM{-PoHiAYw& z(n2x(OXp@u87ZzR3kB-5I}BZ>R;lpGT&rUVee~oqG z5}yX2)`7Z8`BZiDSBd_zqnP8&XF@R0u48^6;yiD5N3}Vj&eo6mIx(~G&t{5n&!z?{ zq_E1xh0Lgoav8nFoX-K6dwO$W6H2~-w#QtRRbpu{$AIhh!NZ{u;hi=br_IRef(U+)CWN{{smc6 zm!M?Jlzj8=RmzN*__-GXOgtYk@$<)28-Q@ar`XQUg+PE0dhm1zZ)z3kG40;{t0(aM7Wr;W3 zl^bTreV8p$=xn#QTg}NZ@D{m*wWiNDj%~Br92Dj=?}F-IwNe%VZ(JOR25x5Td^-nJ zqvyaUK1aun9+wmtE@)JblAb}82}*T}No`e9h00(%zA%6_6O$Kca(tYorzhp#RVzy- zTQnPAAzz>_zF-5x!!*nR=@8$0x_eD9WQp@Sqcxp12zOjC=r&6{a(W+YI^kC1^SlbG z&&$B}51tBwW^})tIDSl+drFz}=u%W7yURulu6N%+zcey*bae~-QOb#->$Q=zVZ572BA2pz&%rw(y>0Yi#=OF~uLiPGRQG~E^L;D1ioE{qj<;pd%(#!PB7$K*Y@PeFBwSKV{pg;2j~$D|pw=NQ|$z!`o#L;zX(dpNYTXdtemB z#KbtAKQ}51eST&}77VJQE=LcSgicFUuE=W^OAE4q`v-<-aA;W4qCd&8B|5{+!! z$VM?hg<=Q4-jIc)+az()hHZvL1l?*`U|Od_is}lD+3Ln&H^Lp`D==(x^5R7r9~-4f zUYusC?4q16Csdw{*3fC^3XXB5v`m#{K&^^60vu0IPp@>$08Y6nw#kGmS8Q-YpTw7$ zp3#8g4~(Q%L5i0JmY^5W(-wTkD}{-ET}DevHII<+hNw7JRw93!eMTy;t89%B#$M=T z4_!u8AOD079y&;S_ueKWC=k&b&!>|tfuU0< zshZ()fiF*;I8LWeo?yeCk=Fg3Wu@VQNWkQcUrw`(I%zb;aZFELq{XFqnwgxSt=o6f z#;x0=eF<3viFG4)&LVQ{4Nx_5?-eK6!`@YPm$5OKQY&p@l1dAN zgoXFb1!-WJq#wyPVMNC0mU#i7pKyhZd)n&+#y8r(Bh3qdT5XI@tYvb0$SaIP` zvoRk(e28YICdELYsq6;y_+2>46LrjZOJ%y%VUWPv<&wep2w>4P(9_#%3l|3FD1Y@Q z$RVZ%0Cx!oZ55G1^Bph_4tW3UnbYi<&#{+Y6pz|wAsZHG)pn>DVv_bQjYpZpZYB$> zF8I4rnc(wVmDpk!q$5ft zb(2UyweCLgbE*l;&ZP4K2@2aXnF!>eA;#jWX+kJs!>+}QlX;s2PThaU9pag0I2gfJ z+i5YXc)=xd+*jbEi+y>Ep*43(pD$l}JC#+jf5&{3>rAVq(zdLIw6eDhMTp z4Q1=EF&3Q?>{*9VZ`(%QjH{JxDwTlIq1X(I@Ct`jD%&-~zhL1^UcA8H;h5n5a(RUf zxghyxW#OKrA;o!kRb59z@Fm)uT|;>kaS9(hpwtwm02K1lIFT^*>~51(W3`oWi!J29 zH3U?`PJ`P+~ytR(OxXh?v>DeF#q6&tDBvWE`a6191$6!OJ`_8dGC zw(U3$6Cys0JeSYWKz~2oe%ozAn#W@@sIt8y@q(`XsKQ?U{JFDq=EN~t;EM*mjW(-3 z>MC-9wN{mQXNUV$wxVVixNx%DU`%y6R#`CYHPJ-7ZO1M)>Rv+~^*U)1&wMqCjLOJ+ z3Cx(h$e(eF;m)LZ)*^q`f)!#-@^v6vMwwrE$~3N>WYCBrmP3K{D-% zGSpM?AUZJUGA!^#$!9qr(u23cc(s-kF&zK5j!G4oV*%!a5xX>4l$nE~1XC|D)EMLF ze~zPn7&)3d{awVRzyiyc#ulDQ|2e&DPfE(=pYeQj&EWHwS4uQ-eoUsqqVb@;t3$po zy2!J`lCJFPN?->iem)1YeC%VRXT_*-&N~FJn}Ab^^jBc00JXXV(=|_*Lwn3g9Y?7& zunky6(J3^;hH6ob=H})Zigk*SBiNOEyN=RSt%V#SG~_ytsCkq%HO+i~$18<_Cp%zR z`a1btrF2l&$Cp$Cy)7=b^9Jo>%85KW9S`8!T#$*7lU%gOdex=K5(KI8kSn}E<05B? zOpzxjWBTh1E=Cy`d}?GeaMDA@nxU2BN|YItG2$R_FeAtYxSH&U=d>Xeh72x)DI=!~ z0~NZ-3*&4M9W)Y-P>|1MaPyV(fJ}N0M+BUFapFA9LY0WmL1;(K1%AfKW|fjUm+RZq zD(MQB{SSd9?rzM7hmqmk0qYR-B6vntM))AYskT}uma!1UE-jae`!waOJ>{);zVxlh zYjkZGP^nsb8r1+twBIf6WA8YPB$Xiq$lSa}p?Pi7Tev$#p^VJ0r9%dudXM8LI3rr- z=zSj94EAy`W(0s(Jh-61;UNq&G+QpV^~I%<6m!bbNgf$`stmW}=P`E9gVn~6rH8lU zuI^63ud(QP1WC>u!QwPy-6B8M#jpqkjYvmVk-pN&5F`Yf=yaKznvx18xDznw5FOoi z;uHes#brM3l~smR3mkitI54aU6)&(|D>#09_jbT7zK5Za2##&V(ltMX;>*C@UgmRG zlFBBY@49@P@d~F!0^hosdE?Jv%vgh0Txsmc|9ux$OqIzG-OPwI7l`<&0xe5A z9Y}8%h|}&+-V7BEZlt(Ut9rT2)S!J?uM9GeOrF|59$6~vIjW2^OC`R*3v+Vvfq9{_ zsYL1C4wST7(M!vV?8)ajz?-4@#d#{NtXj%vY_X;ip%@V7J38BGpl^VNq}tXeJ$&F$ zNOw{tCn?8y1fC$-L#@;5C10tR7KFpcCzy7Ao}tn-!>?t*y3n2r?GQ}tPz#F-Z1A(f zgI+8xN!$U$cCx&Vc!e2;$mn$QLhSDDqRtMJ-H|G*)2HSWBWy!k$wW-D%!ZBUAlK}2 z(~biYyYml{6&f(2sJXJ4Bx}6>QT2`(wDv}^d6SJ|PewOWr%#J38H!%AGE>+=zIv&h zm=zQl6L$7fw7QbC&kOC6JrulDL8elrX{0P2DlO2P$UP^Xb$NM-N|5J;#4EfMj9GB0 z* zuOVwNFWCa&Oh|zv)sqX>$TkNad;rH}o{tT130@Wp5=Llto@EJ!&y1dvE^1^$S$Q)kc7==t+&vfr|#Dc+88X9I#)yf`@}5CwNk;p$}rF18gpD65Dl3(|=&@=i?m zN)z~NChW9z0$9jP?0uJbLEVqj3%ruZTAtrwXG`IxRswo{e>Q zXvmbkMK&zNr7S7+FHj>8=@INZVMVdKB8nlpZ*qGs|YPIeZCpTO`-Q?}G zct{vC@~f@`S~w7SL&PaD&Kw;(Pj4PMOw;U{uk{A*$FY;AXl`MVJ@pQ{mAy5L1kk_; zg|G5)EE(A>nHf%(&0*m=;Et4}idRpXV1c2*3qN%1IGsFwP8R#M-T+I^temG+HpVS{ zZUz}Xq3kW9lrsCq?4DSZ!c)mdsSL8O>I%9oFS0tAcAhMRvSUQZ>pE|=jKnD_dfN%p zp^iN~94IgSqtXhX-^F6#L;6_SGnknRZZWj>1s`GV=zn8_2Cu^zKRg4rRu~_0&O*Da zU3$Elq{QnSoK`RQQP%0Z3sw{y?xpBw7nwYHus(d>I?QGDwVuH0$zD2Ua%bTeu# zunRJ#MztvUZnlK3g^+J@#;4AnrRQIMnRk^7cFf%MyWyLo8hdeSiUV(kHY1_PDoDyy z8!D|(N-cv=B|y?tCnGQ-F|s4_Q>~=cmm!`5B7PFr>}{?#-&IZdy<@uuXsZ`-|F zDv97)n>=z`$|{Ug>Dpx69D83p7srg>Q7r{-9ve3kx!#_GHnSNoOk9-AP5b(S5lpAh zW=_C7!S)SmkN4oIqmdOePS=S%FDE1=Vcwx&5E=e6FdoEHkVQx) zx+VrqP32@@WGBLC3S%z25lVyYC^}PS=h7hMTD)_Htkv2=#`trfy|H=YMus3A7D7d0 zq$W5_aiuZnK+YTB1_D~6d0nP6ya18Wxa_c^%O2C^79!D7X<2r#p}_$|+OjQbt`QlA z4CPVHFet(dMC>MfjMz~UsRHEo*_eaALB5vla$Tjq0N97`jNz#Z(-bYuOCv$p(@){R zkeLLK=x=K;3449Kbf_D}8U3lSN!=tn=etooS!KGhR8!hUdnH-)s>zoJ*&kF=D{LOw zoU0jATubn$IlibVCu$U5jliMw4WhFH<0{yb%r7j8;P_Qt_?FN{wE%*YVH3)T4ED%V z43|2(Iz_rnYz`eU7K5gewZ;j^3?&hmFid(s2CSmn; zw+Utj+#oB*tLvtZPzMFl`J7!Jv_YUbXpY9hnB?=}9UdJ4n@2 z$Dm^#d;mZi5o`aq~29t;<(u$f^|` zHb@Hvfp_ZTbb-St=NV69N9gP8p@F{sWI{j^;b+Dqr^_BNbCDMxAOJElneVBBEM+%I z{08aP-O8A+z_1b6Vi!Z{yuYWw{eDdVtv9{f0k-95=Qb4LSX)MSPVX}8vF#2cqQm=;c;6b-4|%_AeUb#sJV zC@(H!$brW>G3hKf&V!`*gRTGUxlt*_Ck3A%@Tq^zJA{8sPH{nkhiwZQI(S(7u991k+Q;GeZq$EiLwE^`i{N*XUMP+`v< z)V5hEvQgqY2 z{kt6Yn%Fr5Cp@aGC@Q&N#g}hzeBi(oh&-klU;>&HX6NQ4OCuy7i=X2p(?LR`jqTh< zbWgzxPS4HKISyW7*oiSaMxt#eGd}~*vUQqblEo5PX=9ze0+%pqES|DV12ZEta!z&0 z9WV0G?44r>&GU6xonnLKg`2!5reTeqrWMA>5(}-AD4LrwBP!gw8(c^2`|hE(joT>f zA2fV%8J3!I==B;bmqcIuY7IIG?BpOl`k}Yblhxx&+*b1`ffWrvNPDD(jAouSXo>XO zdnpG_N1kz7r6i9c!*S-!8JVlHapMU2eB{7;lUT(`nHS`C;cnQ>2%>l=8+JwB*`=18 zA%)JMgH#QOoM(yc&mg5uT8@h3dC>{Ni>V#?X;58bN|c9)oX)dpN=BgpI2H>5_nLz! z`1~N3LXN=xI~SytD{Y6IA|AnqSrsNtFA(p_>TZlZ79wkS4cD{hOM5x2z><;NYIPxfY$ir*4H-s(V=3gJwPk*H z%rQ$M5=HxR#WaMXZQo7EMd}grvuEdMobm9;h7rc}V7Ju_$J=YkavzC~7qIALZj3V$ zlT5dgX@R7}z)mE{e8Hu=e7=b~(P3=vI35IYGN#T9VM?F3wwK1v2ZQd`-NLeSm|e~x z`YAD4i;aDCVV=qyw8k8pG`HxjQ8+4gQ2Q;nQ}MO~0tGShnleQXtM!r?YtFN)G{Z(g zkQh0sl%u~Ewho)XfyL0$auWnzk68*Fl%Lvgi_Pg&G<-u}EHLqEppdqAu~D0Wj@o0G ziq`;UEC>fmoD$E>`?1;RZR7Vesi!D=sE z3XffEH^+oyQ7~-pIz{@D1DW6;>XE6m!eQj>u4E^jo9n{oqz?5|4j#+AP<6xn^)*Sc zd`tz#&23wDNXwnBp@38|^LP>mXB&|N7k@W%teYXNPK$XtN&`9%j)ZHafHLx4J_ipR zS(Oq~{6dQpSW5Z?f@Xq~dru+Xvtb8}rDIHRimOS48w5XK!kAc7tHmeH-h7hk zw!8VV`DU%NFaw`~N*DMSDE8nCGlp05vqacI0ydb{su4=)}vEAQ8faY|vn~ zP0!8>Puc}HhEuH4LRro-)ZE-{e-Y;L>G7Z?s-tLN;6jPi;<92#rXa(B4xd~&g926g&Y7D z?|zWlw%=kGn`c*6ccc;L>n7fg6R}LYV3baaGKqp~1H29|!$oWmoUvtXt7)tq-nJ)0 zS>Zz+*mj^uw@8a=vqj>hh3ym$Y@&FPvDo6Y2}B_D!rplf8qvJnp;!@X!*)yh9IaB3 zL9fJ_iK&okV8R_N>+AXliUKDhW1i&BXzu`Kd*fl?K zLG0s?&BH4yE%_%zj5(L4LY(xj4w|OTrfIHJYRa7RNU|hBp^I|EJ4ww=@(E)@ zsTk4wsE5rY%mI9`Smww>E};V z^{uz~xR=d>BsX8ME-)w^Ssk>5A5LW|Knqu(5_l-w8VnAdn4rlQo~Pi%3F_uRcd)OY zMz(Ag8Hpv{K_N$m+Cj4OGCT@5Y@*`c160_&Lz+2st!&|gg$J$)#Lr#?K82z&MM@2@ z!Y;c6tHgHkn)eH@02H+zK%dYzR1y$sn`bq#VFTXQDygvd`qqO(7+eoj|Nd+r=JgKT(j!enBt&q2~`!3<0o%C;DJv6rQHUleYaF~ks-ABD2 z{xEgkdk^KiJCnSB+vd&E))ifxqT12JGOB^Xy78#+$X>r=Qg^Wu04`mRIpR7WC!`-R z^dc`uonU7i6Sm;>8>st}pP=5)e40A<>=tb~#{57EYczxXgLtXgoTbf_L%`r1AWrzzET;rqnJ~&lIrQB z_Pak!9sBR45F8Kr{=A^o2)x? z0N%oiRhs=s9uNH4zLZ!zP9kGQM8i48(Gdp^NYuL=DbjEAY}h4ib?9|dK@-nG-WD3p z5H@8`3o0i(wbqxx8>WBD24JCq3>aU=M%(?!!_;}(UMjLN$7w81#l9Yj@BRQ)M$gkC zA5(nxw53YgAkKqUGHODaUri66%MLj;Pp8j^U^eIPC_ygO17QqX;04|L$w#Ss?`_gt zoVIT%DsJ9H!N-bJKR-tEqobrjyeE~W_*Bq98E7_W&}=&(#gH?aopnj$m1QQmifT02 z)k$4^96jsSQ~S`MG!ECnyD6>Eg$ox1UL`RLw6%veQ2Xt7Q*k>VFE5lB_&ITYDvRr> zk?hu}J+8borS;ZTI?Rr?DX4yK+^|7TzMGI0c$q_#Y3h(TV93zX-YGqaEvKj|LW#=*r zydc`PZlTV7cW_WMXx6RGe&MSjJ>0f_9d)tiuADkW<@2Kk`;rrTPqQZ>FVvhBl#C*y zsvp?Ac^uiix&q3{o0cd)jfkQ0KpP_reeUF~d)pRCOV+hvXgXc`9KS(2jNnSwX z98*+WH5QAwZ;%Sx_fXq9-f{Ug;+^X?BU_O)dpPLfmydNyH`bo#Q|X|o1fF;NQJ!Cmz|hqv+{%fqu@=@1 zQ#d%t9y6b+40$_1fiW<;#!(0|!EBs4X2={wRzSR?Sm5VdQT1eYiSeqz-~fee)UJ+| z9E+`|$hWCfDF-d;k&S8HK(#2}uW^Gxqaq8qCSCXZ+2~m5XRO@YKOkc-Vl*$a_lGkn z@#js?L(J!_s8pq?g*M7>+Cl9c2>ah%EbCfaLm?{>3Wlq=ivr7d>x7TaTTmiDcY%f+^~i31_1?W4;= zH&8)c+6YF2N*e;39ox3i`1uP|S}F-1yppu3xJyiY;@~eXSNtA=WLBf86-Clh7xQA% zeg-Et`~=|9fx#h;>DmO+V_{-xgkf|2xtOLE!Z4- zQ4LYA&!L#NI~xWph}4E1i_gT$Ei9! zlT@;i636klaVB+Wikv+|RX%2cDhZLkg)El`H?Z3c@-DMs{rc=Vwb#!r#0aDG*l;nY zu*&CddVZcJIY_K!WDFR$ZrVnLTW_bZZ%8s7+K#bEq%9KTcHTENcl@nph*EKU}r^;LD;&aba`Scl~K&Ax>JSC!) zlc%Zl)YDWubl6l2!@#_jcY-|sx^De2ZQZ&_ydPjvtzJ*MKpblj$5_TJ6n;;nzkpXo z0s!y}Ia?Z+|Uvii(Ct(-VXE6=}35mI+9-|P4$jpsiD zHS#i`X@Jj>Oi+-H@2rGD?D0-&{QNooE@;}F<;5I%oNaKNJNDg2#ohbG@C|WGCy+CR z5UKuM6C7R3X8cJ4I$ryE-aVwZjhnhiTKMjdY$bK*oj?OMIXwwG?kq+=gtmj932o~OBKjLFqqV5l|(eQVY zr_IgN>fs|);$vNX3W6kU}Z8)-j_#s+qIts2M7o z!nOGJZ8B(oi?b1KLh_0I79Y@%TP0@3`q!LjwS5 z%{!^%&JR&x)Aj_q=(?Si=txBlFS*QCpi=8qjik0X<+QkrR3j0|JwH}i+OIY2x6hy( zy>+6TuM^UTPbW3avwalwt`ioXl*0MqVC%yizH_|QfmVtL94hwc$W7fmuI9z8ck^RAw zYhaNmCe^LltHrQ*E(f?ZUgV4Xni)3e)$?PPkY()(dGb4X*En!LU$-98IPM@j=C84} zFY(B+XUsvfYFFZ@f`*0>q9z`-Y9Qgi{RX{e2So!b&r0a#dPgW6-XnSudhwzd9@0tY z*-M`q9HM>u+RfBdM_BT>xX5%YuwkHS6&){_UNyw<1Nb{b_)qR87)%p$HkAk>dj(w= zH3Lb&vFLzt*-jDQSp;^=E3z!NZQVu>+32cQFP2ega>w)D)zE7*3hu?U}0`! z;{pW0=!tWq|37!%+9TJMUAND@RsDXEO|nUf50Mo0j-;_h@@U2rIZ-f^4>k-NaPn93 zUy^S@0t5(>PaY&NVmM<@#x^qJnbDgMiR6$JNp+L#cURZF=VY&aUi;jtrYK`1QE8&k z?CRUMs_xxqpZ!>St(%eym^c|?L&D0*D4&=d9@5`6-YcW4Xv2cU1G`PcZFj;fe0H?2 zpSf_J7yEf>d4v2>M4F@s;Ue;1kaq3j0-<(-fr$qk`dH20RI_(JdYmSYpQd`@5IGsD z9p*lcCMPl-11`o>oo`#4P8X1hX}*#d(v}_aVlhC@j=s(>=hApr0;g2LQ%gd`20gt< zj=gmIfRhiCF$kFGxN`N1c$a=(^IqgBUnF2i-Y_IP(VL)iPd`on{0DD|L49)VlPnPt zy_e!>OVy74(030fY7Y{MYAZRqfv?rCZj2`i;e)L*lf|{`UxUpzh;B( zc4l%%po7}k+!{`M~at&l|!|$-o!*JLj@LLE7z4YRXB4mUXGUCmx zIB_0;{Dp@}J*75ib#LiK&42K0hY4DgRRbpHo-BU4i7l>S#gXxI1R+(AAXf`8bI-b02l;Nj(^0~MFT?jpD z`X(5C^#?aqFz!}RT7vBuX4+jOelTiu0+H09O$%uS8*g0r+-O{Y6AqXPBwg@Ic<##8 zPfB_&=f;%sRI=Cvk30+$DiXU6e5}gv1q@F={_&6LNALVg0qoqqeOuU?hSKuYynkhB zDh(|(o}?0>pOYL*gOd-#vS=t#tmRUsBK978KU7wRVR3~?mE@UK$PvD9?$=&>g+s6t z^7%o_i;yP@5D9k*WH&$!#*X4Xd-J=W-=nn;Kk&OnxMpaeOuza)ntk(M(A3ix)M}G2{B3G?W@u zu3*rp;Ue}lRaTHqBs9j$#lZujCVZTeL?Kl~IgM{5&M^Xw)!$>mKEgs_&@f`ekuW5F zJy7TVt9Ra^Kl$T7l4S7q?a%1)l`Aq*RRsYclK}!_Cf7Z-0~7Ax!CPFMXM9}#xF%DdFlXV1#(VXDT5MAi>b1nFax=Nu=D zn|xjGuxDQ7n7+AjqbUDX({nWY!+%XPFTX+c?3_o^S&wHix(4U80F?sg>zkd(iIgWI zQw(l&Ip&O32`J)iF?7Hhp8$g%gS9YKpD!@BTlUghfk)c8qH%+ji8?Cy*%HfAsHjvj zc|nOp9oOaf@e?B4iCA)XXE!BE!$_WDl~J_e5o*k0L|_}`#x)4GiPKsfJhLaxsCM#_wdR_lE8{Ad**Fk_@6@` z@xAwG=lXS(Fq2?cCeJ>@9{T$$|x zqf?w9!OO0%KTO^Xk4k6}Oj4zV_rwFQ_3U%c(K~va(L!D zcRrIYpkRwB*Pb=~Lu@HW6Xr#o4g@@N!T3q5J@dz)RMQNc+7Zj{Sk<2~Z%t-E9 z1zfY|#O~3tm1FeW#f$X9i!ac{XD-qr8!C1yG^k{{d^iZITjZ-X7(Y0?OgkJ~ukymW zd-W=9@`K_ohIh!HY2xg2H2=<@($u-?$Ye1voysX7jyBge?e((aW5~o#ABe)ag@n{_GiH$_M^>Z+Ax$rhU25M#2?%IxL#y<->I0 z!UZ8^1Yinr4LtLuOPA^9&0Aum=v0;zz*%-0@jT*qujkTA=`r&0VW)ry(B;clrMYqD z>}jb_Z?HjPfgquSLGJGDh?JX%f3`kuMe++!6v8jW;5hcg@fBJ=d{~sOR##W$u^Xtm z1gjlz4`{i!9OCS8o^hYwP5T>oQazLiJ>ow#sM? zd8`(PQ8`>3WHPZy;xbuLfmCW$z@b=e3u=szLRJ+$c?MmKOZCW1%u>B@oGi!EZuem# zZGi!O^695yaLb35`DQ9F?J{vB5=VGyFa_Pbd7G2UJ;8dMIB}f5^XjXjQj0+XR8OE0 zh%I?H0HM&9hGAgA9O3wKabZ!62T9*8J{O43VbsuXfp_#xQCp1A#WECpB94P$c`?t4 zM27|TQs7d+WP}BBj}tP$O5t@coIfw210*j1)WR_+`N`ZOzryt7G|h87i%QA#+^iSq z@dm{@5!wr_TtA?(VODLmQW`6k&$M%?pQV>a`!x)Jxx` zYI4Q{$^wo($&fgg<^etZo0^o;m@uc*hO4{`lB{&ZI;TpVipfJzM1Hx1x8Y(5bLq?URw|i8jzCj z4R)pTi1Obu$Hn-L#)#KTY_ozadqAj40gR7$7Q7*!@dM`pWdS^9zxJbFQ7C9sTEqy$ z=;rpOyysa=)`TVxysap2@q$2jarfRGy7AlV9*W9~2?Gv@`+<&I;01+-P1E{WL=tFc z2sbd*)2n^^e`8CATd_E?@I`tPtf26MyS_o<_5!SvEYQUH zmuT{tm#JPl>H$Jcn*sKtyjYzH{|*HosmeyDd~0;q#pIb0V>|R+iU8D%v6&~>L;Ers zDjvP16YLrG$qqO>U%f_78TEq)_vwR=KH!^ac$+>M$i|JdbN#4$Rm{-AV8LXMQKQd3 zyDOdz?dn+oh2}itQBS5w{B%1=ACc^#g9pBlb@q@V@VV`$oe}qTn>;Q#j$pKW95fBl zvFyd^bk%ebvPA5hP^snDdx*($wwO)eQrN>vuE2{5;T3A|6E%kyVK)M~4wA};Xk$Zf zhVzT9&24$Vz>SEY55gM3I5(2aSzf>cHs*DHevRYh`yYNt&HdG46`F-ZH2LiB(d;YV zqyF-7N#tzc5{%O|E;HI^jmi#rxzqR3C@*W(*rN$h(ByyuXw6lbSSWy>jjEzJ>IzCd z=?0zlJ@$Z0C#iq>RT}b#Y43epl=84eU;SiCycJlBCfOiSA8i7HECX{YG5E;7iSiY& zAJfxQBD)NOo@K*y;w#A_<|siYytkW}|B=LPb8HXqjp-2>G^C)gyv(di<&HZ#wh<>I^vP{_q^%d;5FxPUFZ~ zBgE)Ksi{ZEY^C@~L~hOH36;1LC2zwzihJ z15RV*G|jy7eVTge996UPl<38DpSiP>7C;T-I)krt0R8VM^HHjIdMra=$1n%96(c2X zKHIm$Lq~!`#H#a0$gMm}?(QXWDCY%Nu(!7_^M{^-%Sxh%t=0zZy<~VDF?)$+1Nhz! zG4t1?1uy8Wo)-W@RRTu08Guf+b~aD|)TwczN5qE13}?l67#_kR6Pg8Lh=I8@QU@SR zNQ18FJ!Y{?JEFC1RMX6)ib=Y=2x$-|^e4$4K12h~8MgSi`|!-~voYVhTUIo97wD~= zq3IXipb0kWYHrEXRK#|=IA0q8LZ*i_SlpCiBRh{5~i$guKVO}#@E4nz49_9Y&HmCcDFOhd*umT;^r&iNYL&U zqeoRn)zm2%X?&llb*}2Uc_udVnt0mUM${7A%oGh*IN3dNls5SKtg$h#U;3DackYzN z%tqfkd4Z;1`vaOrd2VJY4CFR`5F>*#gqypN@JlebD#W{#7H*nvG$t6Z4iN%vu5le5 zLz87roW@L3V(Ic-Mpfkq=lj+ebj-8>TB`diey8H_qxtLu{#}y+OnlQI7_=XFkB{+< zG-0dH%BY%d&5dtZstFTO2;fi#wO*VbWj)N>4V!%_;bGWRIH7}4d1KxdV+GcvU-uJy zRd_>Cp&9H8%oGbGiUcL2Es%MgH&%3hT`2>C-vvChJOdG6v^t0cg{?VsA20V;)xhR93@-~;sk)(G2f(ADY#+LmSusC$v6P5C%_vz1bO$Er}Ei&>xI+1##i@YR_X08eQxn zDC0#bFTF&tHDm~i4eGe->@^4`%SBE+F9pUS08xJ~?MN$=HFsTkKfGJZ5w#JHt86jLZDYVWCSg}SQYs!kyJvI{s2(PLZn_eF)n zsmg~LlW-~wbRCb?(P2^vkRWZ-!;VFrVt zuRklvI`@cy)&r4=T0tNP{5b3$E5~WDe3de&5ZDkOkU0oVK% zO}+Rg^$s8PN#x#6Hn`U5B7y?lgRfI*c*kMqFgNAYafVDux7_8wiSwb<)$}oe6Eu@= zB>c0@YpYa`FyBUlR<4XaGDeB|%jY~{1v+ROoa_uTh8o^BsCK#!xp<98xts=vyQ}|C(yA29f1s$`kOLzo^iaWHc;l;j_gT>sHk>)DKKI( zewS*%c50GZ_RKA6%oCHeyR}K%_aD;6#~;z)ldGLYQ3>~S@6Y3#bSnVn`K?xI;IWupDDvDN;Nj1lvSiPPLZud!z){~s`ZL4U1*cX7&!7*OA_kxs8?6F zyi!c1^d%m~W~{aa4jcmXyf~YsMcU_`XBYAj+nkKvyhR(o`L%DDbl_=b?hs8}c!fiZ z->1n_7pVq046b3sT~}r_0qb(eX%kEw1SVA>M*pVkNnLrKak6x#``V_+2D^(v;G^bA zMB9C-=)-HaNOsM}Tpzu_j(Ucgs!zjvACuc&>o^q;sE4-(2lX*dn9wLeTiH`>dEtA^ z`C**OcjT&26SV;$<{JS>5Ye1Lg~ID&ry^SNTJ8Y%mWF1@edz^kf@E<6-npeEYL}L& znVF`&oo(8_dX2U|e4q9~S2h@o=%E0hKXLwL2{R_yLqirs7IHht%@6A`v3#U#iwia3 zk#i{06^xSk!mfvpNV;h3iKW)5&_R(&R`L2&D#5hbu&bD4M)~dhr{8XaP6c}>r6o+c zU}{__#n?yzW^x<%MvNMjg$L^orIo!nKTiuls-flG>wB$0xn>^P3Bwf~L}*(J(>*$I zMhqV9XaMnBKtchUH}yzC?clWTfEZZ=dtks3(2w*NQzh()fnRPo#AqO^%yByusOpyBj1HJtnn`MvC;Jb3FS?OeM?duwaHI?CCHC3n25b+@OKwj2Q*k+ zqrv_AqVT%^@FDHrUmL+O6EEg!eu?@gFL*;feqL0^lBQuW-VrVg>lFD5DU_UQjI<$f zG&xMkp0xF)$Q1u(;C>leX!a|kc%#*N(F)K(^+Cc7tCWG)6@F^jK|% zC$Nl{s`^f0H!IPi?kyhkqg)Hesr~#DviGmEC)+6~5>T_ogSH?tH7&JejAsGmhBz7F zMI~UNhKNe$S8oG~P{xd|FRcPKwh{-!f(M%DiN=aW`Hj7CgHjy7_K*#5e`Ay1*FaQV z_c*NB|CASKGaQ>&P(4BQ%F{G)?j@Qyd7gU9CpdmykkY1)->pIu8`5Zu?hxu1mk+zn z_R-piMeIv7z8d02iYcj~G(v-+URtmme9#Ub(=Yfyp8WVi)qY$NOOM2IXr1=_gUwaj61qE{bziY887q=~04 zurZ$!id&1s&kjP8Tl;o)OwmqbSPoqQeW?RLTpqR>WHJL^G@XSV$I&%>9U=T zMy90LQaMjoPmCfpcRAdU3r`B*RAu$pP#RNOFxpWihUR_|>OvknP`S?4sWi1zFxj7)o&QLWqM|Nj}?Di_T{k@TQBc$I! z@fBUiZ8j>QAww8~$rgkqlat=SVH6@O=M6>(bLudg&EKtwF{qKnh;RX+s2FRgX%7K< z!iW?<+U;!`Zf|zVZ)2_)b`B1!YTktqGxrXyaQ?6$*U%0)5#A#)W{hXKxEly`0A4!C zA=g1Xsj7oISd;-v4YcyU>t)UHpxqLUEE|@xm)PM`#bV>i>WM<56v)!i>UXTRC^&7A zZiLw0rP3k#xx=1u_A>w3Jpb~jKS}$|*|W2yAyZp0zMB9nN``C48FXZZj~vNP@E#`M ziDNw%eAKQ70>*i7a69Y5b}Am*HY4%fFldkMdO!W&1;M3ANf64 zW)JJ)&#oX;vDB*amMxBV>3b{ZGa)>2LDI^Gi&}+?f}4gIyW#{Ar9CO{4R^dTxl%9N z#f2jHj)t0m;Q<$(3HpLCbeZFeQg5N*660QZz;O3HFSQ-+Ka!lhXjvP-3xIkUUf6J= zhh~ZIkUE*>wrLRrk6L>pbwQX&3>V2^3_Fs?4hAiJDBh_3b3H#TE{5J0c{y$P*44pt z8>OM6=)O`09ZMEA>hWda7+oohd67||Cf#oqj9s>Dr-LKwL1_0j^Er1rs}_m z#^~2(&rVU{MuQWhYm-rXZ<`I;**1CTQ!K6PT%a z!G?<$6+<3|BMb{y4B(8PS@I z3!oPSeQGjJmmVAyoEpv)^tr}4HFwwvK|&W$S5Q3lLmbqlTm-lFCjb9$YPdE31NX8-}vX^Vh|)-_&GdhtS2<| z&jTx0i*|T0py+vwdA!`BOEUhb#}|HiaYSIhv3o$A)SyK_$qTQZ^d6LK zhxe{k;))$nq>flm*1DloN7vXAlc?8J9#iO^P$>UdmHwCn4alLj(_wM$0-8sr|H*@! z14{Npd9t40{{}m|ziw^&-)g(H*7Q$4->c`3tne>S@rs@+-pE&E&pBaJVFM{5a%+=N z%t-R5D;Zi{D~24l3`Ly&Ii8o=Qjsefe~7t#NN2)KUoLG?WlD{;F#!BWC%xUqtO@@@ z@>S*SzQz_m5n|2To^V-g-*U@FxJcc#W+KCe@5z~>BWXmfia8d#PJE$^!z}Mg>oTvO%k1m|2W@7GF zRYO0kYV#%^yYkf=GpTaS;~YDR+;XFL=+ST6bV4=Nxyr(gRLYQ%moOG+s`aHU>)N!F zh*uoxL%7HIK%M6z_($Sy9}dX2j&LGWN?h#PX;87~&QV$TRUgJAsnY{nQK_P2r~}ql z_LaNft^m^)yKU$&8qH2=C~<3~4oHa|rP0Y8_3kVw*<(Eo>vdd2*RpLt=lk)q+R)F@ zAnef(zi)=OkM7mG_Wf$6z3l4#OFrCIyvI(+wd2t5mVaW)T_x=XJUA zP0o^2mRzA>NKjkqv$Q=+8dP&%T{Vz)w<-y*SaZGC#cGmigaA8Rs;hVW357U zA|-=WF5QKlK^91?V1xyh&QZm4^g{VgmH4WtE}%e6t_Yd~$BfM(o0>PI$eLvIc$TVw zSXJpTl225fZ^7tuV*?56lug;j1TK*&_)@w$+h2z)ec_V1*7sLIVKsU zZ=l4AM>tO}l<}gcmabv0L%Uec3(Xdz4H_lCAdlg@pTS#qy1CA1fRSpVh|kiAqD|dK z6LYJoEO(@aOq7HZFqD13UjKiz)ccG5OTV~1_{YEUJczVDPc->qZ6~Y74vyTan)SbM zZs&xf>fi7?dCFf6M_*Cwp-elpWn&p95|~TI-4+>o`dO9kjB}|RrxQXyIqVJ7D6gIq zP^*~lo$4&w@ye!=AHro^gNX{Px~VWWSu`058Aq^4ZQVL4i`}`P20$8np}KY^8GA3) zgXQ-z6p3L=G*Y8Fg(>u?vIj3baxZs0qenKidQH;>X&exxmmh6pwlKEBi|%44{x{)j z zN`rPq$x1B*&6%47pxh%9!=m00Vo+x?o06(Uh5Boi7rTmQjW+hsrZyA}IEOFMpiMI9 zup?I4D2?*uF{}}2tno3rKaO%JLseO3k1?;p*%(c4q@8V7pguOYik!-%Yo3JbWB4JL zzP-;+{Vm_J|HOCa=lpgCb$=pdmp!VFS$cog(#D>%CvH>qa=)3VdLQiC{eRE-(H=YK zKj9DYjMRf410MLhDT8F%sPbla>Y~&!G8HEWu< zBRS=VI*VRAnMANsrJGwtqbA?fF;y;;xvEMfDsOC*m_LmQL891_3kjWx6a>kjO=z^J z1W+&>CV2KbhclHYqV#3Sx|kVEA%R>Dlf*7ei0 z_xNW1hlb28KK9@81^BM1CIo)vF$S)ax_{M1PHI@vsKu`Uf|Vi(OuBhpkrP|a?pWoO zsVj_PJ0&q&mYGsz#vWWdv}La(zQ0trEh+|8PMS!0;TZcyJBS|E=&D1mP#FDuIxeH_ zQVl&Vo~oEIak18HTtScIY>xjk)YB@@-~U^;H~7oJ2fzH)?gxM0v_fIwt1Zo)Ys#QU z+(`C<5H+_{ea3P1f9I{~SFUZp!|&p4UNvv<_hWqEwCqbp*hO^Lz52$0PK8X^m!_$L zyEtNH)b)wsL99@ygw`cFhzl;OBl1kFZXM{x*V6#WsW)ijsy1>`T6tw z%M<+E668L}yZTA~qy89o_+(7FJht~YqpjfdWBvHu?#CKka3fWpVm8BRz*D!wnqyj1 zmF?ypPg8DdNZgm@o^uTIr9tG@861>1;joNz#M$BL67;ugz3-tT>P*X`9i$K z=l*?Opqw-spypxBFz#9ZNsOg$^_TnlUn|j1w4uYPD*%D4vOBg!rl@mwZ+Eui@CPa! zi()%v$YH2dwi;cG{xA~;upMQ6AJ@TgxG`EN6t}(s|8|RafgS#i$*CKavA=5D`seF+ p>t9aH*a7&~tI9q0jro593;;?ZzW=HH$=d(`002ovPDHLkV1fnKW5)mh diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-72.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-72.png deleted file mode 100644 index 2c573c8df4c35ff612dff9376edd90b85972d5b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11453 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

f4WQGS(17rS_?rE2wUF8lA<{jFQv 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 diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-76.png b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/AppIcon.appiconset/Icon-76.png deleted file mode 100644 index 8a1fa1850c039786458c0b1cb9f45206cba75964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13250 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 Wj9V9269=P`z$r7ElNBbUf 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 n^47n??u-x`p?9Pf=e@Mw`dgHLT1a^s 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 KMNUMnLSTXuF$XjN diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/Contents.json b/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/Contents.json deleted file mode 100644 index da4a164..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Info.plist b/Samples/Cocos2d-x/Demo/proj.ios/src/Info.plist deleted file mode 100644 index 94a0080..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - Icon-57.png - CFBundleIdentifier - com.live2d.demo - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIAppFonts - - UILaunchStoryboardName - LaunchScreen - UIPrerenderedIcon - - UIStatusBarHidden - - UISupportedInterfaceOrientations - - UIInterfaceOrientationLandscapeRight - UIInterfaceOrientationLandscapeLeft - - - diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/LaunchScreen.storyboard b/Samples/Cocos2d-x/Demo/proj.ios/src/LaunchScreen.storyboard deleted file mode 100644 index 068bbaa..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/LaunchScreen.storyboard +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/LaunchScreenBackground.png b/Samples/Cocos2d-x/Demo/proj.ios/src/LaunchScreenBackground.png deleted file mode 100644 index dadccee68624b1c6aa9ebb7eecc150619b0e52bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587472 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

{DqF?Xp9vxkm{5V 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

0G~VZqpb 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%0AWGmwp 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

^FNkw#m8E77TQpYs= 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%0DMUB#V>sl(01>Ok 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 diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/Prefix.pch b/Samples/Cocos2d-x/Demo/proj.ios/src/Prefix.pch deleted file mode 100644 index ce1833f..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/Prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -// -// Prefix header for all source files of the 'iphone' target in the 'iphone' project -// - -#ifdef __OBJC__ - #import - #import -#endif - -#ifdef __cplusplus - #include "cocos2d.h" -#endif diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/RootViewController.h b/Samples/Cocos2d-x/Demo/proj.ios/src/RootViewController.h deleted file mode 100644 index ed4046d..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/RootViewController.h +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** - Copyright (c) 2013 cocos2d-x.org - Copyright (c) 2013-2016 Chukong Technologies Inc. - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#import - - -@interface RootViewController : UIViewController { - -} -- (BOOL) prefersStatusBarHidden; - -@end diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/RootViewController.mm b/Samples/Cocos2d-x/Demo/proj.ios/src/RootViewController.mm deleted file mode 100644 index 7f5ca28..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/RootViewController.mm +++ /dev/null @@ -1,129 +0,0 @@ -/**************************************************************************** - Copyright (c) 2013 cocos2d-x.org - Copyright (c) 2013-2016 Chukong Technologies Inc. - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#import "RootViewController.h" -#import "cocos2d.h" -#import "platform/ios/CCEAGLView-ios.h" - - -@implementation RootViewController - -/* - // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { - // Custom initialization - } - return self; -} -*/ - -// Implement loadView to create a view hierarchy programmatically, without using a nib. -- (void)loadView { - // Initialize the CCEAGLView - CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [UIScreen mainScreen].bounds - pixelFormat: (__bridge NSString *)cocos2d::GLViewImpl::_pixelFormat - depthFormat: cocos2d::GLViewImpl::_depthFormat - preserveBackbuffer: NO - sharegroup: nil - multiSampling: cocos2d::GLViewImpl::_multisamplingCount > 0 ? YES : NO - numberOfSamples: cocos2d::GLViewImpl::_multisamplingCount ]; - - // Enable or disable multiple touches - [eaglView setMultipleTouchEnabled:NO]; - - // Set EAGLView as view of RootViewController - self.view = eaglView; -} - -// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. -- (void)viewDidLoad { - [super viewDidLoad]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; -} - - -// For ios6, use supportedInterfaceOrientations & shouldAutorotate instead -#ifdef __IPHONE_6_0 -- (NSUInteger) supportedInterfaceOrientations{ - return UIInterfaceOrientationMaskAllButUpsideDown; -} -#endif - -- (BOOL) shouldAutorotate { - return YES; -} - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; - - auto glview = cocos2d::Director::getInstance()->getOpenGLView(); - - if (glview) - { - CCEAGLView *eaglview = (__bridge CCEAGLView *)glview->getEAGLView(); - - if (eaglview) - { - CGSize s = CGSizeMake([eaglview getWidth], [eaglview getHeight]); - cocos2d::Application::getInstance()->applicationScreenSizeChanged((int) s.width, (int) s.height); - } - } -} - -//fix not hide status on ios7 -- (BOOL)prefersStatusBarHidden { - return YES; -} - -// Controls the application's preferred home indicator auto-hiding when this view controller is shown. -// (better use preferredScreenEdgesDeferringSystemGestures for controlling the home indicator) -- (BOOL)prefersHomeIndicatorAutoHidden { - return NO; -} - -// HOME Indicator need to be tapped twice --(UIRectEdge)preferredScreenEdgesDeferringSystemGestures -{ - return UIRectEdgeBottom; -} - -- (void)didReceiveMemoryWarning { - // Releases the view if it doesn't have a superview. - [super didReceiveMemoryWarning]; - - // Release any cached data, images, etc that aren't in use. -} - - -@end diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/exportoptions.plist b/Samples/Cocos2d-x/Demo/proj.ios/src/exportoptions.plist deleted file mode 100644 index 14a6dc5..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/exportoptions.plist +++ /dev/null @@ -1,15 +0,0 @@ - - - - - compileBitcode - - method - development - provisioningProfiles - - Bundle Identifier - Provision Prifile Name - - - diff --git a/Samples/Cocos2d-x/Demo/proj.ios/src/main.m b/Samples/Cocos2d-x/Demo/proj.ios/src/main.m deleted file mode 100644 index 6217853..0000000 --- a/Samples/Cocos2d-x/Demo/proj.ios/src/main.m +++ /dev/null @@ -1,7 +0,0 @@ -#import - -int main(int argc, char *argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, @"AppController"); - } -} diff --git a/Samples/Cocos2d-x/Demo/proj.linux/scripts/fix_libs b/Samples/Cocos2d-x/Demo/proj.linux/scripts/fix_libs deleted file mode 100644 index 7a1c33f..0000000 --- a/Samples/Cocos2d-x/Demo/proj.linux/scripts/fix_libs +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env sh - -set -ue - -SCRIPT_PATH=$(cd "$(dirname "$0")" && pwd) -COCOS2D_DIR=$SCRIPT_PATH/../../../thirdParty/cocos2d - -cd $SCRIPT_PATH -curl -fsSL -o cocos-3rd.zip \ - https://github.com/cocos2d/cocos2d-x-3rd-party-libs-src/archive/v3.zip -unzip -oq cocos-3rd.zip -cd cocos2d-*/build/ -./build.sh -p=linux --libs=freetype --arch=x86_64 --mode=release -mv linux/freetype/prebuilt/x86_64/libfreetype.a \ - $COCOS2D_DIR/external/freetype2/prebuilt/linux/64-bit/libfreetype.a -cd $SCRIPT_PATH -rm -rf cocos* - -cd $COCOS2D_DIR/external/linux-specific/fmod/prebuilt/64-bit/ -ln -sf libfmod.so libfmod.so.6 diff --git a/Samples/Cocos2d-x/Demo/proj.linux/scripts/make_gcc b/Samples/Cocos2d-x/Demo/proj.linux/scripts/make_gcc deleted file mode 100644 index 184dafe..0000000 --- a/Samples/Cocos2d-x/Demo/proj.linux/scripts/make_gcc +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env sh - -set -ue - -SCRIPT_PATH=$(cd "$(dirname "$0")" && pwd) -CMAKE_PATH=$SCRIPT_PATH/../.. -BUILD_PATH=$SCRIPT_PATH/../build/make_gcc - -# Run CMake. -mkdir -p "$BUILD_PATH" -cd "$BUILD_PATH" -cmake \ - -DCMAKE_BUILD_TYPE=Release "$CMAKE_PATH" \ - -DCMAKE_SYSTEM_NAME=Linux -make diff --git a/Samples/Cocos2d-x/Demo/proj.linux/src/main.cpp b/Samples/Cocos2d-x/Demo/proj.linux/src/main.cpp deleted file mode 100644 index 2bd3032..0000000 --- a/Samples/Cocos2d-x/Demo/proj.linux/src/main.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************************** - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#include "../Classes/AppDelegate.h" - -#include -#include -#include -#include - -USING_NS_CC; - -int main(int argc, char **argv) -{ - // create the application instance - AppDelegate app; - return Application::getInstance()->run(); -} diff --git a/Samples/Cocos2d-x/Demo/proj.mac/scripts/make_xcode b/Samples/Cocos2d-x/Demo/proj.mac/scripts/make_xcode deleted file mode 100644 index 96cef9e..0000000 --- a/Samples/Cocos2d-x/Demo/proj.mac/scripts/make_xcode +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env sh - -set -ue - -SCRIPT_PATH=$(cd "$(dirname "$0")" && pwd) -CMAKE_PATH=$SCRIPT_PATH/../.. -BUILD_PATH=$SCRIPT_PATH/../build/make_xcode - -# Run CMake. -cmake \ - -S "$CMAKE_PATH" \ - -B "$BUILD_PATH" \ - -D CMAKE_BUILD_TYPE=Release -cd "$BUILD_PATH" && make diff --git a/Samples/Cocos2d-x/Demo/proj.mac/scripts/proj_xcode b/Samples/Cocos2d-x/Demo/proj.mac/scripts/proj_xcode deleted file mode 100644 index b00671d..0000000 --- a/Samples/Cocos2d-x/Demo/proj.mac/scripts/proj_xcode +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env sh - -set -ue - -SCRIPT_PATH=$(cd "$(dirname "$0")" && pwd) -CMAKE_PATH=$SCRIPT_PATH/../.. -BUILD_PATH=$SCRIPT_PATH/../build/proj_xcode - -# Run CMake. -cmake -S "$CMAKE_PATH" \ - -B "$BUILD_PATH" \ - -G Xcode diff --git a/Samples/Cocos2d-x/Demo/proj.mac/src/Icon.icns b/Samples/Cocos2d-x/Demo/proj.mac/src/Icon.icns deleted file mode 100644 index 2040fc6fe624353ae1d3db50cd3d450f4fda5afc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716318 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%0AYSG@l1Pyfym0LW(jFe2|4 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

?RW<0sDVMUL}fs^UK`pV4paP)I_a+ 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

RbbCYIZ{LGV!E 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

v3QMLc=!|M9(PIbM#f)@g>O&9eJ-lMpV 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�lb+2EE8GK6{eN;Q@1xR3AO#y$5scL%p)WNs5j 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%0AI_Pq4>%+uMpjwQz&m_ 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�RG~vUEdrMxw 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 diff --git a/Samples/Cocos2d-x/Demo/proj.mac/src/Info.plist b/Samples/Cocos2d-x/Demo/proj.mac/src/Info.plist deleted file mode 100644 index e4be49d..0000000 --- a/Samples/Cocos2d-x/Demo/proj.mac/src/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - Icon - CFBundleIdentifier - com.live2d.demo - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSApplicationCategoryType - public.app-category.games - LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} - NSHumanReadableCopyright - Copyright © 2013. All rights reserved. - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/Samples/Cocos2d-x/Demo/proj.mac/src/Prefix.pch b/Samples/Cocos2d-x/Demo/proj.mac/src/Prefix.pch deleted file mode 100644 index dde8bdc..0000000 --- a/Samples/Cocos2d-x/Demo/proj.mac/src/Prefix.pch +++ /dev/null @@ -1,11 +0,0 @@ -// -// Prefix header for all source files of the 'Paralaxer' target in the 'Paralaxer' project -// - -#ifdef __OBJC__ - #import -#endif - -#ifdef __cplusplus - #include "cocos2d.h" -#endif diff --git a/Samples/Cocos2d-x/Demo/proj.mac/src/main.cpp b/Samples/Cocos2d-x/Demo/proj.mac/src/main.cpp deleted file mode 100644 index ed8ee7c..0000000 --- a/Samples/Cocos2d-x/Demo/proj.mac/src/main.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** - Copyright (c) 2010 cocos2d-x.org - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#include "AppDelegate.h" -#include "cocos2d.h" - -USING_NS_CC; - -int main(int argc, char *argv[]) -{ - AppDelegate app; - return Application::getInstance()->run(); -} diff --git a/Samples/Cocos2d-x/Demo/proj.win/scripts/_msvc_common.bat b/Samples/Cocos2d-x/Demo/proj.win/scripts/_msvc_common.bat deleted file mode 100644 index 053bf13..0000000 --- a/Samples/Cocos2d-x/Demo/proj.win/scripts/_msvc_common.bat +++ /dev/null @@ -1,74 +0,0 @@ -@echo off - -setlocal -set VARIABLE_EXISTS=TRUE -if "%MSVC_VERSION%" equ "" set VARIABLE_EXISTS=FALSE -if "%MSVC_NUMBER%" equ "" set VARIABLE_EXISTS=FALSE -if "%VCVARSALL%" equ "" set VARIABLE_EXISTS=FALSE -if "%VARIABLE_EXISTS%" equ "FALSE" ( - echo [CubismNativeSamples] Invalid batch call. - exit /b 1 -) -endlocal - -cd %~dp0 - -rem ============== -rem Dialog Options -rem ============== - -rem Core C Runtime selection -echo. -echo Select which cubism core c runtime library to use -echo ************************************************** -echo 1. use the multithread-specific and DLL-specific version of the run-time library (MD) -echo 2. use the multithread, static version of the run-time library (MT) -echo. -choice /c:12 /n /m ">" -set SELECTED=%errorlevel% -if "%SELECTED%" equ "1" ( - set CORE_CRL_MD=ON -) else if "%SELECTED%" equ "2" ( - set CORE_CRL_MD=OFF -) else ( - echo [CubismNativeSamples] Invalid option. - exit /b 1 -) - -rem ======== -rem Validate -rem ======== - -rem Make sure toolchain exists. -if not exist "%VCVARSALL%" ( - echo [CubismNativeSamples] Visual C++ Compiler %MSVC_VERSION% not found. - exit /b 1 -) - -rem ===== -rem Build -rem ===== - -rem Execute build. -echo Building x86 with Visual C++ Compiler %MSVC_VERSION%... - -rem Initialize Visual Studio toolchain. -call "%VCVARSALL%" x86 -if %errorlevel% neq 0 exit /b %errorlevel% - -rem Build for native development. -if "%CORE_CRL_MD%" equ "ON" ( - set CORE_CRL=md -) else ( - set CORE_CRL=mt -) - -set BUILD_PATH=..\build\proj_msvc%MSVC_VERSION%_x86_%CORE_CRL% - -cmake -S ..\.. -B "%BUILD_PATH%" ^ - -G "Visual Studio %MSVC_NUMBER% %MSVC_VERSION%" ^ - -A Win32 ^ - -D CORE_CRL_MD=%CORE_CRL_MD% -if %errorlevel% neq 0 exit /b %errorlevel% - -exit /b 0 diff --git a/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2015.bat b/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2015.bat deleted file mode 100644 index b6c7a37..0000000 --- a/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2015.bat +++ /dev/null @@ -1,13 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2015 -set MSVC_NUMBER=14 -set VCVARSALL=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat - -call %SCRIPT_PATH%_msvc_common.bat -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2017.bat b/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2017.bat deleted file mode 100644 index 9efbe7f..0000000 --- a/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2017.bat +++ /dev/null @@ -1,18 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2017 -set MSVC_NUMBER=15 -set VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe -set /a _MSVC_RANGE_S=MSVC_NUMBER -set /a _MSVC_RANGE_E=MSVC_NUMBER+1 -for /f "usebackq tokens=*" %%i in (`"%VSWHERE%" -legacy -version [%_MSVC_RANGE_S%^,%_MSVC_RANGE_E%^) -property installationPath`) do ( - set VCVARSALL=%%i\VC\Auxiliary\Build\vcvarsall.bat -) - -call %SCRIPT_PATH%_msvc_common.bat -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2019.bat b/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2019.bat deleted file mode 100644 index 1a57455..0000000 --- a/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2019.bat +++ /dev/null @@ -1,18 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2019 -set MSVC_NUMBER=16 -set VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe -set /a _MSVC_RANGE_S=MSVC_NUMBER -set /a _MSVC_RANGE_E=MSVC_NUMBER+1 -for /f "usebackq tokens=*" %%i in (`"%VSWHERE%" -legacy -version [%_MSVC_RANGE_S%^,%_MSVC_RANGE_E%^) -property installationPath`) do ( - set VCVARSALL=%%i\VC\Auxiliary\Build\vcvarsall.bat -) - -call %SCRIPT_PATH%_msvc_common.bat -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2022.bat b/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2022.bat deleted file mode 100644 index ecfbf93..0000000 --- a/Samples/Cocos2d-x/Demo/proj.win/scripts/proj_msvc2022.bat +++ /dev/null @@ -1,18 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2022 -set MSVC_NUMBER=17 -set VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe -set /a _MSVC_RANGE_S=MSVC_NUMBER -set /a _MSVC_RANGE_E=MSVC_NUMBER+1 -for /f "usebackq tokens=*" %%i in (`"%VSWHERE%" -legacy -version [%_MSVC_RANGE_S%^,%_MSVC_RANGE_E%^) -property installationPath`) do ( - set VCVARSALL=%%i\VC\Auxiliary\Build\vcvarsall.bat -) - -call %SCRIPT_PATH%_msvc_common.bat -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/Cocos2d-x/Demo/proj.win/src/game.rc b/Samples/Cocos2d-x/Demo/proj.win/src/game.rc deleted file mode 100644 index 338b8f9..0000000 --- a/Samples/Cocos2d-x/Demo/proj.win/src/game.rc +++ /dev/null @@ -1,86 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#define APSTUDIO_HIDDEN_SYMBOLS -#include "windows.h" -#undef APSTUDIO_HIDDEN_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -#endif // APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -GLFW_ICON ICON "res\\game.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904B0" - BEGIN - VALUE "CompanyName", "\0" - VALUE "FileDescription", "game Module\0" - VALUE "FileVersion", "1, 0, 0, 1\0" - VALUE "InternalName", "game\0" - VALUE "LegalCopyright", "Copyright \0" - VALUE "OriginalFilename", "game.exe\0" - VALUE "ProductName", "game Module\0" - VALUE "ProductVersion", "1, 0, 0, 1\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 0x04B0 - END -END - -///////////////////////////////////////////////////////////////////////////// -#endif // !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) diff --git a/Samples/Cocos2d-x/Demo/proj.win/src/main.cpp b/Samples/Cocos2d-x/Demo/proj.win/src/main.cpp deleted file mode 100644 index 9a39bdd..0000000 --- a/Samples/Cocos2d-x/Demo/proj.win/src/main.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#include "main.h" -#include "AppDelegate.h" -#include "cocos2d.h" - -USING_NS_CC; - -int WINAPI _tWinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPTSTR lpCmdLine, - int nCmdShow) -{ - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(lpCmdLine); - - // create the application instance - AppDelegate app; - return Application::getInstance()->run(); -} diff --git a/Samples/Cocos2d-x/Demo/proj.win/src/main.h b/Samples/Cocos2d-x/Demo/proj.win/src/main.h deleted file mode 100644 index dba8f53..0000000 --- a/Samples/Cocos2d-x/Demo/proj.win/src/main.h +++ /dev/null @@ -1,37 +0,0 @@ -/**************************************************************************** - Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. - - http://www.cocos2d-x.org - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - ****************************************************************************/ - -#ifndef __MAIN_H__ -#define __MAIN_H__ - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers - -// Windows Header Files: -#include -#include - -// C RunTime Header Files -#include "platform/CCStdC.h" - -#endif // __MAIN_H__ diff --git a/Samples/Cocos2d-x/Demo/proj.win/src/res/game.ico b/Samples/Cocos2d-x/Demo/proj.win/src/res/game.ico deleted file mode 100644 index feaf932a7465e435af6271bd8204c0145731a6eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47629 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 - #include -+#include - - #include "platform/CCPlatformMacros.h" - #include "base/CCRef.h" -@@ -129,7 +130,7 @@ protected: - float _lineHeight; - Font* _font; - FontFreeType* _fontFreeType; -- void* _iconv; -+ iconv_t _iconv; -``` - -NOTICE: Cubism Core は i386 アーキテクチャをサポートしていないため、**iPhone Simulator 向けのビルドは行えません。** - -### proj.linux - -Linux 用の CMake プロジェクトです。 - -`script` ディレクトリのスクリプトを実行すると `build` ディレクトリに CMake 成果物が生成されます - -| スクリプト名 | 生成物 | -| --- | --- | -| `make_gcc` | 実行可能なアプリケーション | - -ビルド前に下記の手順を行なってください。 - -1. [Dependencies that you need] ドキュメントを参照して必要なパッケージをダウンロードします - -[Dependencies that you need]: https://docs.cocos2d-x.org/cocos2d-x/v4/en/installation/Linux.html#dependencies-that-you-need - -NOTICE: Linuxビルドには制限があります。使用する際は必ずトップディレクトリにある[NOTICE.md](../../NOTICE.md)をご確認ください。 - -### proj.mac - -macOS 用の CMake プロジェクトです。 - -`script` ディレクトリのスクリプトを実行すると `build` ディレクトリに CMake 成果物が生成されます - -| スクリプト名 | 生成物 | -| --- | --- | -| `make_xcode` | 実行可能なアプリケーション | -| `proj_xcode` | Xcode プロジェクト | - -WARNING: macOSビルドにつきまして、`Cocos2d-x V4.0` に起因する不具合のために正常にビルドができない状態となっております。対処方法につきましては、以下の Issue をご確認ください。 - -* [cocos2d/cocos2d-x error: Objective-C was disabled in PCH file but is currently enabled -#20607 -](https://github.com/cocos2d/cocos2d-x/issues/20607#issuecomment-780266298) - -ビルド時に下記の手順を行なってください。 - -1. `cocos2d/cocos/2d/CCFontAtlas.h` に以下の修正を加えてください -```CCFontAtlas.h -@@ -30,6 +30,7 @@ - - #include - #include -+#include - - #include "platform/CCPlatformMacros.h" - #include "base/CCRef.h" -@@ -129,7 +130,7 @@ protected: - float _lineHeight; - Font* _font; - FontFreeType* _fontFreeType; -- void* _iconv; -+ iconv_t _iconv; -``` - -### proj.win - -Windows 用の CMake プロジェクトです。 - -`script` ディレクトリのスクリプトを実行すると `build` ディレクトリに CMake 成果物が生成されます - -| スクリプト名 | 生成物 | -| --- | --- | -| `proj_msvcXXXX.bat` | Visual Studio プロジェクト | - -NOTICE: nmake を使用したビルドは Cocos2d-x のエラーが発生するため対応していません。 - -### Resources - -Cocos2d-xのテンプレートプロジェクトで参照しているリソースが含まれます。 - -### CMakeLists.txt - -CMake 用の設定ファイルです。 - -各プラットフォームのビルド設定が記載されています。 - - -## thirdParty - -サンプルプロジェクトで利用するサードパーティライブラリとビルドスクリプトが含まれます。 - -### Cocos2d-x のセットアップ - -`script` ディレクトリ内のスクリプトを実行することで Cocos2d-x のダウンロードを行います。 - -| プラットフォーム | スクリプト名 | -| --- | --- | -| Linux / macOS | `setup_cocos2d` | -| Windows | `setup_cocos2d.bat` | - -スクリプト内の `COCOS_COMMIT_HASH` を変更することで、使用する Cocos2d-x の SCM 上のバージョンをコミットハッシュで指定することが出来ます。 - -ダウンロード後は `thirdParty/cocos2d` というディレクトリ名で展開されます。 - -[Cocos2d-x]: https://cocos2d-x.org/ - -NOTICE: MacOSにて thirdParty/cocos2d 内のスクリプト download-deps.py で一部URLの解決が出来ずエラーとなる問題を確認しております。 diff --git a/Samples/Cocos2d-x/README.md b/Samples/Cocos2d-x/README.md deleted file mode 100644 index fba210c..0000000 --- a/Samples/Cocos2d-x/README.md +++ /dev/null @@ -1,202 +0,0 @@ -[English](README.md) / [日本語](README.ja.md) - ---- - -# Cubism Native Samples for Cocos2d-x - -This is a sample implementation of an application implemented with Cocos2d-x. - - -## Development environment - -| Framework | Version | -| --- | --- | -| [Xcode] | 15.1 | -| [Cocos2d-x] | 4.0 (`95e5d868ce5958c0dadfc485bdda52f1bc404fe0`) | - -For other development environments and operation environments, see [README.md](../../README.md) in the top directory. - -Please also check the [Cocos2d-x Documentation Prerequisites]. - -[Cocos2d-x Documentation Prerequisites]: https://docs.cocos2d-x.org/cocos2d-x/v3/en/installation/prerequisites.html - -### Regarding Cocos2d-x v4.x - -With support for the Metal API since Cocos2d-x v4.0, the configuration of the Renderer has changed to make it impossible to use the OpenGLES API directly. -Please check the [Cocos2d-x Documentation](https://docs.cocos2d-x.org/cocos2d-x/v4/en/upgradeGuide/) for more information. - -Along with this change, we have prepared a dedicated Cocos2d-x Renderer for the Cubism Framework in the Cocos2d-x v4.x series. Currently, each platform uses a common Renderer, and it is possible to cross-compile across macOS, Windows, Linux, iOS, and Android. - - -## Directory structure - -``` -. -├─ Demo -│ ├─ Classes # Sources for sample projects -│ ├─ proj.android # Android Studio project -│ ├─ proj.ios # Additional files and build scripts for iOS -│ ├─ proj.linux # Additional files and build scripts for Linux -│ ├─ proj.mac # Additional files and build scripts for macOS -│ ├─ proj.win # Additional files and build scripts for Windows -│ └─ Resources # Resources of cocos2d-x template project -└─ thirdParty # Third party libraries and scripts -``` - - -## Demo - -A sample that uses each function of [Cubism Native Framework]. You can play motions, set facial expressions, switch poses, set physics, etc. You can switch models from the menu button. - -[Cubism Native Framework]: https://github.com/Live2D/CubismNativeFramework - -The items contained in this directory are as follows. - -### Classes - -Contains the source code used in the sample project. - -### proj.android - -Contains Android Studio projects for Android. - -NOTE: You need to download the following SDKs in advance. - -* Android SDK Build-Tools -* NDK -* CMake - -Follow the steps below before building. - -1. set `File - Build, Execution, Deployment - Build Tools - Gradle - Gradle JDK` to `1.8` in Android Studio - -### proj.ios - -CMake project for iOS. - -Running the script in the `script` directory will generate a CMake deliverable in the `build` directory. - -| Script name | Product | -| --- | --- | -| `proj_xcode` | Xcode project | - -Follow the steps below when building. - -1. Rewrite the `Executable file` in `Info.plist` stated in Xcode's `Project Settings - TARGETS - Demo - Packaging - Info.plist File` to `$(EXECUTABLE_NAME)` or `Demo` (app name). - -1. make the following modifications to `cocos2d/cocos/2d/CCFontAtlas.h`. -```CCFontAtlas.h -@@ -30,6 +30,7 @@ - - #include - #include -+#include - - #include "platform/CCPlatformMacros.h" - #include "base/CCRef.h" -@@ -129,7 +130,7 @@ protected: - float _lineHeight; - Font* _font; - FontFreeType* _fontFreeType; -- void* _iconv; -+ iconv_t _iconv; -``` - -NOTICE: Cubism Core does not support the i386 architecture, so **it is not possible to build for iPhone Simulator.** - -### proj.linux - -CMake project for Linux. - -Running the script in the `script` directory will generate a CMake deliverable in the `build` directory. - -| Script name | Product | -| --- | --- | -| `make_gcc` | Executable application | - -Follow the steps below before building. - -1. Refer to the [Dependencies that you need] documentation to download the required packages. - -[Dependencies that you need]: https://docs.cocos2d-x.org/cocos2d-x/v4/en/installation/Linux.html#dependencies-that-you-need - -NOTICE: Linux builds have restrictions. Please be sure to check [NOTICE.md](../../NOTICE.md) in the top directory when using it. - -### proj.mac - -CMake project for macOS. - -Running the script in the `script` directory will generate a CMake deliverable in the `build` directory. - -| Script name | Product | -| --- | --- | -| `make_xcode` | Executable application | -| `proj_xcode` | Xcode project | - -WARNING: Regarding macOS build, it is not possible to build normally due to a problem caused by `Cocos2d-x V4.0`. Please check the following Issue for the workaround. - -* [cocos2d/cocos2d-x error: Objective-C was disabled in PCH file but is currently enabled#20607](https://github.com/cocos2d/cocos2d-x/issues/20607#issuecomment-780266298) - -Follow the steps below when building. - -1. make the following modifications to `cocos2d/cocos/2d/CCFontAtlas.h` -```CCFontAtlas.h -@@ -30,6 +30,7 @@ - - #include - #include -+#include - - #include "platform/CCPlatformMacros.h" - #include "base/CCRef.h" -@@ -129,7 +130,7 @@ protected: - float _lineHeight; - Font* _font; - FontFreeType* _fontFreeType; -- void* _iconv; -+ iconv_t _iconv; -``` - -### proj.win - -CMake project for Windows. - -Running the script in the `script` directory will generate a CMake deliverable in the `build` directory. - -| Script name | Product | -| --- | --- | -| `proj_msvcXXXX.bat` | Visual Studio project | - -NOTICE: Builds using nmake are not supported due to Cocos2d-x errors. - -### Resources - -Contains the resources referenced in the Cocos2d-x template project. - -### CMakeLists.txt - -Configuration file for CMake. - -The build settings for each platform are listed. - - -## thirdParty - -Contains third-party libraries and build scripts used in the sample project. - -### Cocos2d-x setup - -Download Cocos2d-x by running the script in the `script` directory. - -| Platform | Script name | -| --- | --- | -| Linux / macOS | `setup_cocos2d` | -| Windows | `setup_cocos2d.bat` | - -You can specify the version of Cocos2d-x on the SCM to be used with a commit hash by changing `COCOS_COMMIT_HASH` in the script. - -After downloading, it will be expanded with the directory name `thirdParty/cocos2d`. - -[Cocos2d-x]: https://cocos2d-x.org/ - -NOTICE: Setting up a Cocos-2dx environment on macOS using `download-deps.py` in `thirdParty/cocos2d` fails to resolve certain URLs and causes an error. diff --git a/Samples/Cocos2d-x/thirdParty/scripts/setup_cocos2d b/Samples/Cocos2d-x/thirdParty/scripts/setup_cocos2d deleted file mode 100644 index 95aa53f..0000000 --- a/Samples/Cocos2d-x/thirdParty/scripts/setup_cocos2d +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env sh - -set -ue - -COCOS_COMMIT_HASH=95e5d868ce5958c0dadfc485bdda52f1bc404fe0 - -SCRIPT_PATH=$(cd $(dirname $0) && pwd) - -cd $SCRIPT_PATH/.. - -################# -# Setup Cocos2d # -################# - -# Download and extract the archive. -echo - Setup Cocos2D -mkdir cocos2d -cd cocos2d -git init -git remote add origin https://github.com/cocos2d/cocos2d-x.git -git fetch --depth 1 origin ${COCOS_COMMIT_HASH} -git reset --hard FETCH_HEAD -python download-deps.py --remove-download yes -git submodule update --init -rm -rf .git/ -cd .. diff --git a/Samples/Cocos2d-x/thirdParty/scripts/setup_cocos2d.bat b/Samples/Cocos2d-x/thirdParty/scripts/setup_cocos2d.bat deleted file mode 100644 index 0431670..0000000 --- a/Samples/Cocos2d-x/thirdParty/scripts/setup_cocos2d.bat +++ /dev/null @@ -1,30 +0,0 @@ -@echo off - -set COCOS_COMMIT_HASH=95e5d868ce5958c0dadfc485bdda52f1bc404fe0 - -set SCRIPT_PATH=%~dp0 - -::::::::::::::::::: -:: Setup Cocos2d :: -::::::::::::::::::: - -cd %SCRIPT_PATH%\.. - -:: Download and extract the archive. -echo - Setup Cocos2d -cd ..\..\..\ -mkdir _l2d_tmp -cd _l2d_tmp -git init -git remote add origin https://github.com/cocos2d/cocos2d-x.git -git fetch --depth 1 origin %COCOS_COMMIT_HASH% -git reset --hard FETCH_HEAD -python "download-deps.py" "--remove-download" "yes" -git submodule update --init -rmdir /s /q .git -cd .. -robocopy _l2d_tmp %SCRIPT_PATH%\..\cocos2d /MIR -rmdir /s /q _l2d_tmp - -echo. -pause diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt b/Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt index 3b23cd6..572069e 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/CMakeLists.txt @@ -15,6 +15,7 @@ set(FRAMEWORK_PATH ${SDK_ROOT_PATH}/Framework) set(THIRD_PARTY_PATH ${SDK_ROOT_PATH}/Samples/D3D11/thirdParty) set(DX_PATH ${THIRD_PARTY_PATH}/DirectXTK) set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) +set(SAMPLE_SHADER_PATH ${SDK_ROOT_PATH}/Samples/D3D11/Shaders) # Set project. project(${APP_NAME}) @@ -47,11 +48,7 @@ else() message(FATAL_ERROR "[${APP_NAME}] Invalid linker flag ${CMAKE_EXE_LINKER_FLAGS}.") endif() # Detect compiler. -if(MSVC_VERSION MATCHES 1800) - # Visual Studio 2013 - set(COMPILER 120) - set(MSVC_YEAR 2013) -elseif(MSVC_VERSION MATCHES 1900) +if(MSVC_VERSION MATCHES 1900) # Visual Studio 2015 set(COMPILER 140) set(MSVC_YEAR 2015) @@ -114,6 +111,7 @@ find_package(OpenGL REQUIRED) add_executable(${APP_NAME} WIN32) # Add source files. add_subdirectory(src) + # Link libraries to app. target_link_libraries(${APP_NAME} Framework @@ -131,6 +129,9 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E copy_directory ${RES_PATH} $/Resources + COMMAND + ${CMAKE_COMMAND} -E + copy_directory ${SAMPLE_SHADER_PATH} $/SampleShaders ) # Set project properties. diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/scripts/nmake_msvc2013.bat b/Samples/D3D11/Demo/proj.d3d11.cmake/scripts/nmake_msvc2013.bat deleted file mode 100644 index 50de20f..0000000 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/scripts/nmake_msvc2013.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2013 -set MSVC_NUMBER=12 -set VCVARSALL=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat -set GENERATOR=nmake - -call "%SCRIPT_PATH%_msvc_common.bat" -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/scripts/proj_msvc2013.bat b/Samples/D3D11/Demo/proj.d3d11.cmake/scripts/proj_msvc2013.bat deleted file mode 100644 index d11674f..0000000 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/scripts/proj_msvc2013.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2013 -set MSVC_NUMBER=12 -set VCVARSALL=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat -set GENERATOR=proj - -call "%SCRIPT_PATH%_msvc_common.bat" -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CMakeLists.txt b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CMakeLists.txt index c0db52a..1731730 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CMakeLists.txt +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CMakeLists.txt @@ -12,6 +12,8 @@ if (CSM_MINIMUM_DEMO) ${CMAKE_CURRENT_SOURCE_DIR}/TouchManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/CubismSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/CubismSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismUserModelExtend.cpp @@ -44,6 +46,8 @@ else () ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXRenderer.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXRenderer.cpp index d3628ae..b5b001a 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXRenderer.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXRenderer.cpp @@ -40,12 +40,6 @@ CubismDirectXRenderer::CubismDirectXRenderer() , _depthTexture(nullptr) , _depthStencilView(nullptr) , _depthState(nullptr) - , _rasterizer(nullptr) - , _samplerState(nullptr) - , _vertexShader(nullptr) - , _pixelShader(nullptr) - , _blendState(nullptr) - , _vertexFormat(nullptr) { } @@ -56,27 +50,11 @@ CubismDirectXRenderer::~CubismDirectXRenderer() void CubismDirectXRenderer::Release() { - if (_samplerState) - { - _samplerState->Release(); - _samplerState = nullptr; - } - if (_rasterizer) - { - _rasterizer->Release(); - _rasterizer = nullptr; - } - if (_renderTargetView) { _renderTargetView->Release(); _renderTargetView = nullptr; } - if (_depthState) - { - _depthState->Release(); - _depthState = nullptr; - } if (_depthStencilView) { _depthStencilView->Release(); @@ -213,231 +191,6 @@ bool CubismDirectXRenderer::CreateRenderTarget(UINT width, UINT height) return true; } -bool CubismDirectXRenderer::CreateShader() -{ - // 一旦削除する - ReleaseShader(); - - // スプライト描画用シェーダ - static const csmChar* SpriteShaderEffectSrc = - "cbuffer ConstantBuffer {"\ - "float4x4 projectMatrix;"\ - "float4x4 clipMatrix;"\ - "float4 baseColor;"\ - "float4 channelFlag;"\ - "}"\ - \ - "Texture2D mainTexture : register(t0);"\ - "SamplerState mainSampler : register(s0);"\ - "struct VS_IN {"\ - "float2 pos : POSITION0;"\ - "float2 uv : TEXCOORD0;"\ - "};"\ - "struct VS_OUT {"\ - "float4 Position : SV_POSITION;"\ - "float2 uv : TEXCOORD0;"\ - "float4 clipPosition : TEXCOORD1;"\ - "};"\ - \ - "/* Vertex Shader */"\ - "/* normal */"\ - "VS_OUT VertNormal(VS_IN In) {"\ - "VS_OUT Out = (VS_OUT)0;"\ - "Out.Position = mul(float4(In.pos, 0.0f, 1.0f), projectMatrix);"\ - "Out.uv.x = In.uv.x;"\ - "Out.uv.y = 1.0 - +In.uv.y;"\ - "return Out;"\ - "}"\ - \ - "/* Pixel Shader */"\ - "/* normal */"\ - "float4 PixelNormal(VS_OUT In) : SV_Target {"\ - "float4 color = mainTexture.Sample(mainSampler, In.uv) * baseColor;"\ - "return color;"\ - "}"; - - ID3DBlob* vertexError = nullptr; - ID3DBlob* pixelError = nullptr; - - ID3DBlob* vertexBlob = nullptr; ///< スプライト描画用シェーダ - ID3DBlob* pixelBlob = nullptr; ///< スプライト描画用シェーダ - - HRESULT hr = S_OK; - do - { - UINT compileFlag = 0; - - hr = D3DCompile( - SpriteShaderEffectSrc, // メモリー内のシェーダーへのポインターです - strlen(SpriteShaderEffectSrc), // メモリー内のシェーダーのサイズです - nullptr, // シェーダー コードが格納されているファイルの名前 - nullptr, // マクロ定義の配列へのポインター - nullptr, // インクルード ファイルを扱うインターフェイスへのポインター - "VertNormal", // シェーダーの実行が開始されるシェーダー エントリポイント関数の名前 - "vs_4_0", // シェーダー モデルを指定する文字列。 - compileFlag, // シェーダーコンパイルフラグ - 0, // シェーダーコンパイルフラグ - &vertexBlob, - &vertexError); // エラーが出る場合はここで - if (FAILED(hr)) - { - LAppPal::PrintLogLn("Fail Compile Vertex Shader"); - break; - } - hr = _device->CreateVertexShader(vertexBlob->GetBufferPointer(), vertexBlob->GetBufferSize(), nullptr, &_vertexShader); - if (FAILED(hr)) - { - LAppPal::PrintLogLn("Fail Create Vertex Shader"); - break; - } - - hr = D3DCompile( - SpriteShaderEffectSrc, // メモリー内のシェーダーへのポインターです - strlen(SpriteShaderEffectSrc), // メモリー内のシェーダーのサイズです - nullptr, // シェーダー コードが格納されているファイルの名前 - nullptr, // マクロ定義の配列へのポインター - nullptr, // インクルード ファイルを扱うインターフェイスへのポインター - "PixelNormal", // シェーダーの実行が開始されるシェーダー エントリポイント関数の名前 - "ps_4_0", // シェーダー モデルを指定する文字列 - compileFlag, // シェーダーコンパイルフラグ - 0, // シェーダーコンパイルフラグ - &pixelBlob, - &pixelError); // エラーが出る場合はここで - if (FAILED(hr)) - { - LAppPal::PrintLogLn("Fail Compile Pixel Shader"); - break; - } - - hr = _device->CreatePixelShader(pixelBlob->GetBufferPointer(), pixelBlob->GetBufferSize(), NULL, &_pixelShader); - if (FAILED(hr)) - { - LAppPal::PrintLogLn("Fail Create Pixel Shader"); - break; - } - - // この描画で使用する頂点フォーマット - D3D11_INPUT_ELEMENT_DESC elems[] = { - { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - }; - hr = _device->CreateInputLayout(elems, ARRAYSIZE(elems), vertexBlob->GetBufferPointer(), vertexBlob->GetBufferSize(), &_vertexFormat); - - if (FAILED(hr)) - { - LAppPal::PrintLogLn("CreateVertexDeclaration failed"); - break; - } - - } while (0); - - if (pixelError) - { - pixelError->Release(); - pixelError = nullptr; - } - if (vertexError) - { - vertexError->Release(); - vertexError = nullptr; - } - - // blobはもうここで不要 - if (pixelBlob) - { - pixelBlob->Release(); - pixelBlob = nullptr; - } - if (vertexBlob) - { - vertexBlob->Release(); - vertexBlob = nullptr; - } - - if (FAILED(hr)) - { - return false; - } - - // レンダリングステートオブジェクト - D3D11_BLEND_DESC blendDesc; - memset(&blendDesc, 0, sizeof(blendDesc)); - blendDesc.AlphaToCoverageEnable = FALSE; - blendDesc.IndependentBlendEnable = FALSE; // falseの場合はRenderTarget[0]しか使用しなくなる - blendDesc.RenderTarget[0].BlendEnable = TRUE; - blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; - blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; - blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; - blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; - blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; - blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; - blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; - - _device->CreateBlendState(&blendDesc, &_blendState); - - return true; -} - -void CubismDirectXRenderer::SetupShader() -{ - if (!_device || !_vertexFormat || !_vertexShader || !_pixelShader) - { - return; - } - - // 現在のウィンドウサイズ - int windowWidth, windowHeight; - GetClientSize(windowWidth, windowHeight); - - // スプライト描画用の設定をし、シェーダセット - float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; - _deviceContext->OMSetBlendState(_blendState, blendFactor, 0xffffffff); - - _deviceContext->IASetInputLayout(_vertexFormat); - _deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - _deviceContext->IASetInputLayout(_vertexFormat); - - D3D11_VIEWPORT viewport; - viewport.TopLeftX = 0; - viewport.TopLeftY = 0; - viewport.Width = static_cast(windowWidth); - viewport.Height = static_cast(windowHeight); - viewport.MinDepth = 0.0f; - viewport.MaxDepth = 1.0f; - - _deviceContext->RSSetViewports(1, &viewport); - _deviceContext->RSSetState(_rasterizer); - - _deviceContext->VSSetShader(_vertexShader, nullptr, 0); - - _deviceContext->PSSetShader(_pixelShader, nullptr, 0); - _deviceContext->PSSetSamplers(0, 1, &_samplerState); -} - -void CubismDirectXRenderer::ReleaseShader() -{ - if (_blendState) - { - _blendState->Release(); - _blendState = nullptr; - } - if (_vertexFormat) - { - _vertexFormat->Release(); - _vertexFormat = nullptr; - } - if (_pixelShader) - { - _pixelShader->Release(); - _pixelShader = nullptr; - } - if (_vertexShader) - { - _vertexShader->Release(); - _vertexShader = nullptr; - } -} - void CubismDirectXRenderer::ResizeDevice(CubismUserModel* userModel) { // 今のクライアント領域の大きさに合わせます diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXRenderer.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXRenderer.hpp index eb6fc06..a2ee9be 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXRenderer.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXRenderer.hpp @@ -61,26 +61,11 @@ class CubismDirectXRenderer */ void ReleaseInstance(); - /** - * @brief スプライト描画用シェーダの作成と頂点宣言の作成を行う - */ - bool CreateShader(); - /** * @brief レンダーターゲット作成内部関数 */ bool CreateRenderTarget(UINT width, UINT height); - /** - * @brief シェーダをコンテキストにセット - */ - void SetupShader(); - - /** - * @brief CreateShaderで確保したオブジェクトの開放 - */ - void ReleaseShader(); - /** * @brief アプリケーションを終了するかどうか。 */ @@ -120,15 +105,7 @@ class CubismDirectXRenderer ID3D11RenderTargetView* _renderTargetView; ///< 描画ターゲットビュー ID3D11Texture2D* _depthTexture; ///< Zバッファ ID3D11DepthStencilView* _depthStencilView; ///< Zバッファビュー - ID3D11DepthStencilState* _depthState; ///< スプライト描画用深度オブジェクト - - ID3D11RasterizerState* _rasterizer; ///< スプライト描画用ラスタライザ - ID3D11SamplerState* _samplerState; ///< スプライト描画用サンプラーステート - - ID3D11VertexShader* _vertexShader; ///< スプライト描画シェーダ - ID3D11PixelShader* _pixelShader; ///< スプライト描画シェーダ - ID3D11BlendState* _blendState; ///< スプライト描画用ブレンドステート - ID3D11InputLayout* _vertexFormat; ///< スプライト描画用型宣言 + ID3D11DepthStencilState* _depthState; ///< 描画用深度オブジェクト CubismTextureManager* _textureManager; ///< テクスチャマネージャー diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXView.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXView.cpp index cc8690e..e7f08f0 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXView.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXView.cpp @@ -9,6 +9,7 @@ #include "CubismDirectXRenderer.hpp" #include "CubismSampleViewMatrix.hpp" +#include "CubismSpriteShader.hpp" namespace { CubismDirectXView* _instance = nullptr; @@ -25,7 +26,7 @@ CubismDirectXView* CubismDirectXView::GetInstance() } CubismDirectXView::CubismDirectXView() - :_windowWidth(0), _windowHeight(0), _renderSprite(nullptr), _renderTarget(SelectTarget_None) + :_windowWidth(0), _windowHeight(0), _renderSprite(nullptr), _renderTarget(SelectTarget_None), _shader(NULL) { _clearColor[0] = 1.0f; _clearColor[1] = 1.0f; @@ -37,6 +38,9 @@ CubismDirectXView::CubismDirectXView() // デバイス座標からスクリーン座標に変換するための行列 _deviceToScreen = new CubismMatrix44(); + // スプライト用シェーダー + _shader = new CubismSpriteShader(); + Initialize(); } @@ -44,6 +48,9 @@ CubismDirectXView::~CubismDirectXView() { _renderBuffer.DestroyOffscreenSurface(); + _shader->ReleaseShader(); + + delete _shader; delete _renderSprite; delete _deviceToScreen; @@ -54,6 +61,9 @@ void CubismDirectXView::Initialize() { CubismDirectXRenderer::GetInstance()->GetClientSize(_windowWidth, _windowHeight); + // シェーダー作成 + _shader->CreateShader(); + InitializeSprite(); } @@ -94,7 +104,7 @@ void CubismDirectXView::InitializeSprite() CubismDirectXRenderer::GetInstance()->GetClientSize(_windowWidth, _windowHeight); float x = _windowWidth * 0.5f; float y = _windowHeight * 0.5f; - _renderSprite = new CubismSprite(x, y, static_cast(_windowWidth), static_cast(_windowHeight), 0); + _renderSprite = new CubismSprite(x, y, static_cast(_windowWidth), static_cast(_windowHeight), 0, _shader); } void CubismDirectXView::ReleaseSprite() diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXView.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXView.hpp index 5c1db4a..6e0bc33 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXView.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismDirectXView.hpp @@ -15,6 +15,8 @@ #include "CubismUserModelExtend.hpp" #include "CubismSprite.hpp" +class CubismSpriteShader; + class CubismDirectXView { public: @@ -144,4 +146,6 @@ class CubismDirectXView Csm::Rendering::CubismOffscreenSurface_D3D11 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + CubismSpriteShader* _shader; ///< スプライト用のシェーダー準備クラス }; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSprite.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSprite.cpp index 140e819..3dd0107 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSprite.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSprite.cpp @@ -13,18 +13,20 @@ #include "LAppDefine.hpp" #include "LAppPal.hpp" #include "Rendering/D3D11/CubismType_D3D11.hpp" +#include "CubismSpriteShader.hpp" CubismSprite::CubismSprite() - : _rect(),_vertexBuffer(nullptr),_indexBuffer(nullptr),_constantBuffer(nullptr) + : _rect(),_vertexBuffer(nullptr),_indexBuffer(nullptr),_constantBuffer(nullptr),_shader(NULL) { _color = DirectX::XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f); } -CubismSprite::CubismSprite(float x, float y, float width, float height, Csm::csmUint64 textureId) +CubismSprite::CubismSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, CubismSpriteShader* shader) : _rect(), _vertexBuffer(NULL), _indexBuffer(NULL), - _constantBuffer(NULL) + _constantBuffer(NULL), + _shader(shader) { _color = DirectX::XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f); @@ -130,6 +132,8 @@ CubismSprite::~CubismSprite() { CubismDirectXRenderer::GetInstance()->_textureManager->ReleaseTexture(_textureId); + _shader = NULL; + if (_constantBuffer) { _constantBuffer->Release(); @@ -203,7 +207,7 @@ void CubismSprite::Render(int width, int height) const renderContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); // 描画用設定 - cubismDirectXRenderer->SetupShader(); + _shader->SetupShader(); // テクスチャセット ID3D11ShaderResourceView* textureView = nullptr; @@ -275,7 +279,7 @@ void CubismSprite::RenderImmidiate(int width, int height, ID3D11ShaderResourceVi renderContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); // 描画用設定 - cubismDirectXRenderer->SetupShader(); + _shader->SetupShader(); // テクスチャセット { diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSprite.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSprite.hpp index 546c909..de05add 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSprite.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSprite.hpp @@ -12,6 +12,8 @@ #include #include +class CubismSpriteShader; + /** * @brief スプライトを実装するクラス。 * @@ -52,8 +54,9 @@ class CubismSprite * @param[in] width 横幅 * @param[in] height 高さ * @param[in] textureId テクスチャID + * @param[in] shader シェーダー設定 */ - CubismSprite(float x, float y, float width, float height, Csm::csmUint64 textureId); + CubismSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, CubismSpriteShader* shader); /** * @brief デストラクタ @@ -106,7 +109,6 @@ class CubismSprite static const int INDEX_NUM = 6; private: - Csm::csmUint64 _textureId; ///< テクスチャID Rect _rect; ///< 矩形 @@ -115,5 +117,6 @@ class CubismSprite ID3D11Buffer* _constantBuffer; ///< 定数バッファ DirectX::XMFLOAT4 _color; ///< スプライトカラー -}; + CubismSpriteShader* _shader; ///< スプライト用のシェーダー準備クラス +}; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSpriteShader.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSpriteShader.cpp new file mode 100644 index 0000000..040aeb6 --- /dev/null +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSpriteShader.cpp @@ -0,0 +1,280 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "CubismSpriteShader.hpp" + +#include +#include +#include "CubismDirectXRenderer.hpp" +#include "LAppDefine.hpp" +#include "LAppPal.hpp" + +CubismSpriteShader::CubismSpriteShader() + : _rasterizer(NULL) + , _samplerState(NULL) + , _vertexShader(NULL) + , _pixelShader(NULL) + , _blendState(NULL) + , _vertexFormat(NULL) +{ +} + +CubismSpriteShader::~CubismSpriteShader() +{ +} + +bool CubismSpriteShader::CreateShader() +{ + ReleaseShader(); + + ID3D11Device* device = CubismDirectXRenderer::GetInstance()->GetD3dDevice(); + HRESULT result = S_OK; + + ID3DBlob* vertexError = NULL; + ID3DBlob* pixelError = NULL; + + ID3DBlob* vertexBlob = NULL; + ID3DBlob* pixelBlob = NULL; + + // ファイル読み込み + const char* shaderCode; + Csm::csmSizeInt shaderSize; + { + // シェーダーのパスの作成 + Csm::csmString shaderFileName(LAppDefine::ShaderPath); + shaderFileName += LAppDefine::ShaderName; + + // ファイル読み込み + shaderCode = reinterpret_cast(LAppPal::LoadFileAsBytes(shaderFileName.GetRawString(), &shaderSize)); + } + + do + { + // ラスタライザ + D3D11_RASTERIZER_DESC rasterDesc; + memset(&rasterDesc, 0, sizeof(rasterDesc)); + rasterDesc.FillMode = D3D11_FILL_MODE::D3D11_FILL_SOLID; + rasterDesc.CullMode = D3D11_CULL_MODE::D3D11_CULL_BACK; // 裏面を切る + rasterDesc.FrontCounterClockwise = TRUE; // CCWを表面にする + rasterDesc.DepthClipEnable = FALSE; + rasterDesc.MultisampleEnable = FALSE; + rasterDesc.DepthBiasClamp = 0; + rasterDesc.SlopeScaledDepthBias = 0; + result = device->CreateRasterizerState(&rasterDesc, &_rasterizer); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create Rasterizer 0x%x", result); + break; + } + + // テクスチャサンプラーステート + D3D11_SAMPLER_DESC samplerDesc; + memset(&samplerDesc, 0, sizeof(D3D11_SAMPLER_DESC)); + samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; + samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; + samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; + samplerDesc.MaxAnisotropy = 1; + samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; + samplerDesc.MinLOD = -D3D11_FLOAT32_MAX; + samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; + result = device->CreateSamplerState(&samplerDesc, &_samplerState); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create Sampler 0x%x", result); + break; + } + + // ブレンドステートオブジェクト + D3D11_BLEND_DESC blendDesc; + memset(&blendDesc, 0, sizeof(blendDesc)); + blendDesc.AlphaToCoverageEnable = FALSE; + blendDesc.IndependentBlendEnable = FALSE; // falseの場合はRenderTarget[0]しか使用しなくなる + blendDesc.RenderTarget[0].BlendEnable = TRUE; + blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; + blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; + blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; + blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; + blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; + blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; + blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; + result = device->CreateBlendState(&blendDesc, &_blendState); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create BlendState 0x%x", result); + break; + } + + UINT compileFlag = 0; + + result = D3DCompile( + shaderCode, // メモリー内のシェーダーへのポインターです + shaderSize, // メモリー内のシェーダーのサイズです + NULL, // シェーダー コードが格納されているファイルの名前 + NULL, // マクロ定義の配列へのポインター + NULL, // インクルード ファイルを扱うインターフェイスへのポインター + "VertNormal", // シェーダーの実行が開始されるシェーダー エントリポイント関数の名前 + "vs_4_0", // シェーダー モデルを指定する文字列。 + compileFlag, // シェーダーコンパイルフラグ + 0, // シェーダーコンパイルフラグ + &vertexBlob, + &vertexError); // エラーが出る場合はここで + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Compile Vertex Shader"); + break; + } + result = device->CreateVertexShader(vertexBlob->GetBufferPointer(), vertexBlob->GetBufferSize(), NULL, &_vertexShader); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create Vertex Shader"); + break; + } + + result = D3DCompile( + shaderCode, // メモリー内のシェーダーへのポインターです + shaderSize, // メモリー内のシェーダーのサイズです + NULL, // シェーダー コードが格納されているファイルの名前 + NULL, // マクロ定義の配列へのポインター + NULL, // インクルード ファイルを扱うインターフェイスへのポインター + "PixelNormal", // シェーダーの実行が開始されるシェーダー エントリポイント関数の名前 + "ps_4_0", // シェーダー モデルを指定する文字列 + compileFlag, // シェーダーコンパイルフラグ + 0, // シェーダーコンパイルフラグ + &pixelBlob, + &pixelError); // エラーが出る場合はここで + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Compile Pixel Shader"); + break; + } + + result = device->CreatePixelShader(pixelBlob->GetBufferPointer(), pixelBlob->GetBufferSize(), NULL, &_pixelShader); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create Pixel Shader"); + break; + } + + // この描画で使用する頂点フォーマット + D3D11_INPUT_ELEMENT_DESC elems[] = { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + }; + result = device->CreateInputLayout(elems, ARRAYSIZE(elems), vertexBlob->GetBufferPointer(), vertexBlob->GetBufferSize(), &_vertexFormat); + + if (FAILED(result)) + { + LAppPal::PrintLog("CreateVertexDeclaration failed"); + break; + } + + } while (0); + + if(pixelError) + { + pixelError->Release(); + pixelError = NULL; + } + if (vertexError) + { + vertexError->Release(); + vertexError = NULL; + } + + // blobはもうここで不要 + if (pixelBlob) + { + pixelBlob->Release(); + pixelBlob = NULL; + } + if (vertexBlob) + { + vertexBlob->Release(); + vertexBlob = NULL; + } + + if (FAILED(result)) + { + return false; + } + + return true; +} + +void CubismSpriteShader::SetupShader() +{ + ID3D11DeviceContext* deviceContext = CubismDirectXRenderer::GetInstance()->GetD3dContext(); + + if (_rasterizer == NULL || _samplerState == NULL || _blendState == NULL || + _vertexShader == NULL || _pixelShader == NULL || _vertexFormat == NULL) + { + return; + } + + // 現在のウィンドウサイズの取得 + int windowWidth, windowHeight; + CubismDirectXRenderer::GetInstance()->GetClientSize(windowWidth, windowHeight); + + // スプライト描画用の設定をし、シェーダーセット + deviceContext->IASetInputLayout(_vertexFormat); + deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + deviceContext->IASetInputLayout(_vertexFormat); + + D3D11_VIEWPORT viewport; + viewport.TopLeftX = 0; + viewport.TopLeftY = 0; + viewport.Width = static_cast(windowWidth); + viewport.Height = static_cast(windowHeight); + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + deviceContext->RSSetViewports(1, &viewport); + deviceContext->RSSetState(_rasterizer); + + deviceContext->VSSetShader(_vertexShader, NULL, 0); + + deviceContext->PSSetShader(_pixelShader, NULL, 0); + deviceContext->PSSetSamplers(0, 1, &_samplerState); + + float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + deviceContext->OMSetBlendState(_blendState, blendFactor, 0xffffffff); +} + +void CubismSpriteShader::ReleaseShader() +{ + if (_rasterizer) + { + _rasterizer->Release(); + _rasterizer = NULL; + } + if(_samplerState) + { + _samplerState->Release(); + _samplerState = NULL; + } + if(_blendState) + { + _blendState->Release(); + _blendState = NULL; + } + if (_vertexShader) + { + _vertexShader->Release(); + _vertexShader = NULL; + } + if (_pixelShader) + { + _pixelShader->Release(); + _pixelShader = NULL; + } + if(_vertexFormat) + { + _vertexFormat->Release(); + _vertexFormat = NULL; + } +} diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSpriteShader.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSpriteShader.hpp new file mode 100644 index 0000000..4441410 --- /dev/null +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismSpriteShader.hpp @@ -0,0 +1,53 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include + +/** + * @brief スプライト用のシェーダー設定を保持するクラス。 + */ +class CubismSpriteShader +{ +public: + + /** + * @brief コンストラクタ + */ + CubismSpriteShader(); + + /** + * @brief デストラクタ + */ + ~CubismSpriteShader(); + + /** + * @brief シェーダーの作成を行う + */ + bool CreateShader(); + + /** + * @brief スプライトの描画直前に呼び出される + * シェーダーのセットを行う + */ + void SetupShader(); + + /** + * @brief シェーダーの解放を行う + */ + void ReleaseShader(); + +private: + + ID3D11RasterizerState* _rasterizer; ///< ラスタライザ + ID3D11SamplerState* _samplerState; ///< サンプラーステート + ID3D11BlendState* _blendState; ///< ブレンドステート + ID3D11VertexShader* _vertexShader; ///< 頂点シェーダ + ID3D11PixelShader* _pixelShader; ///< ピクセルシェーダ + ID3D11InputLayout* _vertexFormat; ///< 頂点フォーマット +}; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismTextureManager.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismTextureManager.cpp index 0f2a95d..2be1997 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismTextureManager.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismTextureManager.cpp @@ -35,7 +35,7 @@ CubismTextureManager::TextureInfo* CubismTextureManager::CreateTextureFromPngFil // wcharに変換 const int WCHAR_LENGTH = 512; wchar_t wchrStr[WCHAR_LENGTH] = L""; - LAppPal::MbcToWchar(fileName.c_str(), fileName.length(), wchrStr, sizeof(wchrStr)); + LAppPal::ConvertMultiByteToWide(fileName.c_str(), wchrStr, sizeof(wchrStr)); ID3D11Resource* texture = NULL; ID3D11ShaderResourceView* textureView = NULL; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismUserModelExtend.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismUserModelExtend.cpp index 6b605a9..83de091 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismUserModelExtend.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismUserModelExtend.cpp @@ -204,24 +204,10 @@ void CubismUserModelExtend::PreloadMotionGroup(const csmChar* group) csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // モーションデータの読み込み - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelJson, group, i)); if (tmpMotion) { - // フェードインの時間を取得 - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - // フェードアウトの時間を取得 - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } - if (_motions[name]) { // インスタンスを破棄 @@ -261,10 +247,9 @@ void CubismUserModelExtend::ReleaseModelSetting() * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 -* @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ -Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority) { // モーション数が取得出来なかった、もしくは0の時 if (!(_modelJson->GetMotionCount(group))) @@ -300,33 +285,16 @@ Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm:: csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // 一番先頭のモーションを読み込む - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, NULL, NULL, _modelJson, group, no)); if (motion) { - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } - // 終了時にメモリから削除 autoDelete = true; } DeleteBuffer(buffer, path.GetRawString()); } - else - { - // モーションの再生終了コールバックを登録 - motion->SetFinishedMotionHandler(onFinishedMotionHandler); - } // 優先度を設定してモーションを始める return _motionManager->StartMotionPriority(motion, autoDelete, priority); diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismUserModelExtend.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismUserModelExtend.hpp index 8a64d9b..595d9ee 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismUserModelExtend.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/CubismUserModelExtend.hpp @@ -82,10 +82,9 @@ class CubismUserModelExtend : * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 - * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority); /** * @brief 解放 diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDefine.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDefine.cpp index 2ca324c..3b3c147 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDefine.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDefine.cpp @@ -37,6 +37,11 @@ namespace LAppDefine { // 終了ボタン const csmChar* PowerImageName = "close.png"; + // シェーダー相対パス + const csmChar* ShaderPath = "SampleShaders/"; + // シェーダー本体 + const csmChar* ShaderName = "SpriteEffect.fx"; + // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる const csmChar* MotionGroupIdle = "Idle"; // アイドリング diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDefine.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDefine.hpp index 63740b1..6b1ae66 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDefine.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDefine.hpp @@ -35,6 +35,9 @@ namespace LAppDefine { extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* ShaderName; ///< シェーダー本体 + // モデル定義-------------------------------------------- // 外部定義ファイル(json)と合わせる extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDelegate.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDelegate.cpp index a4c14ee..46d29e7 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDelegate.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDelegate.cpp @@ -144,44 +144,6 @@ bool LAppDelegate::Initialize() return false; } - // ラスタライザ - D3D11_RASTERIZER_DESC rasterDesc; - memset(&rasterDesc, 0, sizeof(rasterDesc)); - rasterDesc.FillMode = D3D11_FILL_MODE::D3D11_FILL_SOLID; - rasterDesc.CullMode = D3D11_CULL_MODE::D3D11_CULL_BACK; // 裏面を切る - rasterDesc.FrontCounterClockwise = TRUE; // CCWを表面にする - rasterDesc.DepthClipEnable = FALSE; - rasterDesc.MultisampleEnable = FALSE; - rasterDesc.DepthBiasClamp = 0; - rasterDesc.SlopeScaledDepthBias = 0; - result = _device->CreateRasterizerState(&rasterDesc, &_rasterizer); - if (FAILED(result)) - { - LAppPal::PrintLogLn("Fail Create Rasterizer 0x%x", result); - return false; - } - - // テクスチャサンプラーステート - D3D11_SAMPLER_DESC samplerDesc; - memset(&samplerDesc, 0, sizeof(D3D11_SAMPLER_DESC)); - samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; - samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; - samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; - samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; - samplerDesc.MaxAnisotropy = 1; - samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; - samplerDesc.MinLOD = -D3D11_FLOAT32_MAX; - samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; - _device->CreateSamplerState(&samplerDesc, &_samplerState); - if (FAILED(result)) - { - LAppPal::PrintLogLn("Fail Create Sampler 0x%x", result); - return false; - } - - // スプライト用シェーダ作成 - CreateShader(); - // デバイス作成の後 _textureManager = new LAppTextureManager(); @@ -262,25 +224,11 @@ void LAppDelegate::Release() // リソースを解放 LAppLive2DManager::ReleaseInstance(); - // シェーダ類の開放 - ReleaseShader(); - delete _view; delete _textureManager; _view = NULL; _textureManager = NULL; - if(_samplerState) - { - _samplerState->Release(); - _samplerState = NULL; - } - if (_rasterizer) - { - _rasterizer->Release(); - _rasterizer = NULL; - } - if (_renderTargetView) { _renderTargetView->Release(); @@ -378,12 +326,6 @@ LAppDelegate::LAppDelegate() , _depthTexture(NULL) , _depthStencilView(NULL) , _depthState(NULL) - , _rasterizer(NULL) - , _samplerState(NULL) - , _vertexShader(NULL) - , _pixelShader(NULL) - , _blendState(NULL) - , _vertexFormat(NULL) { _view = new LAppView(); } @@ -413,231 +355,6 @@ void LAppDelegate::InitializeCubism() _view->InitializeSprite(); } -bool LAppDelegate::CreateShader() -{ - // 一旦削除する - ReleaseShader(); - -// スプライト描画用シェーダ - static const csmChar* SpriteShaderEffectSrc = - "cbuffer ConstantBuffer {"\ - "float4x4 projectMatrix;"\ - "float4x4 clipMatrix;"\ - "float4 baseColor;"\ - "float4 channelFlag;"\ - "}"\ - \ - "Texture2D mainTexture : register(t0);"\ - "SamplerState mainSampler : register(s0);"\ - "struct VS_IN {"\ - "float2 pos : POSITION0;"\ - "float2 uv : TEXCOORD0;"\ - "};"\ - "struct VS_OUT {"\ - "float4 Position : SV_POSITION;"\ - "float2 uv : TEXCOORD0;"\ - "float4 clipPosition : TEXCOORD1;"\ - "};"\ - \ - "/* Vertex Shader */"\ - "/* normal */"\ - "VS_OUT VertNormal(VS_IN In) {"\ - "VS_OUT Out = (VS_OUT)0;"\ - "Out.Position = mul(float4(In.pos, 0.0f, 1.0f), projectMatrix);"\ - "Out.uv.x = In.uv.x;"\ - "Out.uv.y = 1.0 - +In.uv.y;"\ - "return Out;"\ - "}"\ - \ - "/* Pixel Shader */"\ - "/* normal */"\ - "float4 PixelNormal(VS_OUT In) : SV_Target {"\ - "float4 color = mainTexture.Sample(mainSampler, In.uv) * baseColor;"\ - "return color;"\ - "}"; - - ID3DBlob* vertexError = NULL; - ID3DBlob* pixelError = NULL; - - ID3DBlob* vertexBlob = NULL; ///< スプライト描画用シェーダ - ID3DBlob* pixelBlob = NULL; ///< スプライト描画用シェーダ - - HRESULT hr = S_OK; - do - { - UINT compileFlag = 0; - - hr = D3DCompile( - SpriteShaderEffectSrc, // メモリー内のシェーダーへのポインターです - strlen(SpriteShaderEffectSrc), // メモリー内のシェーダーのサイズです - NULL, // シェーダー コードが格納されているファイルの名前 - NULL, // マクロ定義の配列へのポインター - NULL, // インクルード ファイルを扱うインターフェイスへのポインター - "VertNormal", // シェーダーの実行が開始されるシェーダー エントリポイント関数の名前 - "vs_4_0", // シェーダー モデルを指定する文字列。 - compileFlag, // シェーダーコンパイルフラグ - 0, // シェーダーコンパイルフラグ - &vertexBlob, - &vertexError); // エラーが出る場合はここで - if (FAILED(hr)) - { - LAppPal::PrintLogLn("Fail Compile Vertex Shader"); - break; - } - hr = _device->CreateVertexShader(vertexBlob->GetBufferPointer(), vertexBlob->GetBufferSize(), NULL, &_vertexShader); - if (FAILED(hr)) - { - LAppPal::PrintLogLn("Fail Create Vertex Shader"); - break; - } - - hr = D3DCompile( - SpriteShaderEffectSrc, // メモリー内のシェーダーへのポインターです - strlen(SpriteShaderEffectSrc), // メモリー内のシェーダーのサイズです - NULL, // シェーダー コードが格納されているファイルの名前 - NULL, // マクロ定義の配列へのポインター - NULL, // インクルード ファイルを扱うインターフェイスへのポインター - "PixelNormal", // シェーダーの実行が開始されるシェーダー エントリポイント関数の名前 - "ps_4_0", // シェーダー モデルを指定する文字列 - compileFlag, // シェーダーコンパイルフラグ - 0, // シェーダーコンパイルフラグ - &pixelBlob, - &pixelError); // エラーが出る場合はここで - if (FAILED(hr)) - { - LAppPal::PrintLogLn("Fail Compile Pixel Shader"); - break; - } - - hr = _device->CreatePixelShader(pixelBlob->GetBufferPointer(), pixelBlob->GetBufferSize(), NULL, &_pixelShader); - if (FAILED(hr)) - { - LAppPal::PrintLogLn("Fail Create Pixel Shader"); - break; - } - - // この描画で使用する頂点フォーマット - D3D11_INPUT_ELEMENT_DESC elems[] = { - { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - }; - hr = _device->CreateInputLayout(elems, ARRAYSIZE(elems), vertexBlob->GetBufferPointer(), vertexBlob->GetBufferSize(), &_vertexFormat); - - if (FAILED(hr)) - { - LAppPal::PrintLogLn("CreateVertexDeclaration failed"); - break; - } - - } while (0); - - if(pixelError) - { - pixelError->Release(); - pixelError = NULL; - } - if (vertexError) - { - vertexError->Release(); - vertexError = NULL; - } - - // blobはもうここで不要 - if (pixelBlob) - { - pixelBlob->Release(); - pixelBlob = NULL; - } - if (vertexBlob) - { - vertexBlob->Release(); - vertexBlob = NULL; - } - - if (FAILED(hr)) - { - return false; - } - - // レンダリングステートオブジェクト - D3D11_BLEND_DESC blendDesc; - memset(&blendDesc, 0, sizeof(blendDesc)); - blendDesc.AlphaToCoverageEnable = FALSE; - blendDesc.IndependentBlendEnable = FALSE; // falseの場合はRenderTarget[0]しか使用しなくなる - blendDesc.RenderTarget[0].BlendEnable = TRUE; - blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; - blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; - blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; - blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; - blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; - blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; - blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; - - _device->CreateBlendState(&blendDesc, &_blendState); - - return true; -} - -void LAppDelegate::SetupShader() -{ - if(_device==NULL || _vertexFormat==NULL || _vertexShader==NULL || _pixelShader==NULL) - { - return; - } - - // 現在のウィンドウサイズ - int windowWidth, windowHeight; - GetClientSize(windowWidth, windowHeight); - - // スプライト描画用の設定をし、シェーダセット - float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; - _deviceContext->OMSetBlendState(_blendState, blendFactor, 0xffffffff); - - _deviceContext->IASetInputLayout(_vertexFormat); - _deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - _deviceContext->IASetInputLayout(_vertexFormat); - - D3D11_VIEWPORT viewport; - viewport.TopLeftX = 0; - viewport.TopLeftY = 0; - viewport.Width = static_cast(windowWidth); - viewport.Height = static_cast(windowHeight); - viewport.MinDepth = 0.0f; - viewport.MaxDepth = 1.0f; - - _deviceContext->RSSetViewports(1, &viewport); - _deviceContext->RSSetState(_rasterizer); - - _deviceContext->VSSetShader(_vertexShader, NULL, 0); - - _deviceContext->PSSetShader(_pixelShader, NULL, 0); - _deviceContext->PSSetSamplers(0, 1, &_samplerState); -} - -void LAppDelegate::ReleaseShader() -{ - if(_blendState) - { - _blendState->Release(); - _blendState = NULL; - } - if(_vertexFormat) - { - _vertexFormat->Release(); - _vertexFormat = NULL; - } - if (_pixelShader) - { - _pixelShader->Release(); - _pixelShader = NULL; - } - if (_vertexShader) - { - _vertexShader->Release(); - _vertexShader = NULL; - } -} - void LAppDelegate::StartFrame() { /* diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDelegate.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDelegate.hpp index e073514..309fdef 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDelegate.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppDelegate.hpp @@ -60,7 +60,6 @@ class LAppDelegate */ static void GetClientSize(int& rWidth, int& rHeight); - /** * @brief APPに必要なものを初期化する。 */ @@ -103,21 +102,6 @@ class LAppDelegate */ void EndFrame(); - /** - * @brief スプライト描画用シェーダの作成と頂点宣言の作成を行う - */ - bool CreateShader(); - - /** - * @brief シェーダをコンテキストにセット - */ - void SetupShader(); - - /** - * @brief CreateShaderで確保したオブジェクトの開放 - */ - void ReleaseShader(); - private: enum DeviceStep @@ -179,12 +163,4 @@ class LAppDelegate ID3D11Texture2D* _depthTexture; ///< Zバッファ ID3D11DepthStencilView* _depthStencilView; ///< Zバッファビュー ID3D11DepthStencilState* _depthState; ///< スプライト描画用深度オブジェクト - - ID3D11RasterizerState* _rasterizer; ///< スプライト描画用ラスタライザ - ID3D11SamplerState* _samplerState; ///< スプライト描画用サンプラーステート - - ID3D11VertexShader* _vertexShader; ///< スプライト描画シェーダ - ID3D11PixelShader* _pixelShader; ///< スプライト描画シェーダ - ID3D11BlendState* _blendState; ///< スプライト描画用ブレンドステート - ID3D11InputLayout* _vertexFormat; ///< スプライト描画用型宣言 }; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppLive2DManager.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppLive2DManager.cpp index 1e1bf39..c25c4ef 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppLive2DManager.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppLive2DManager.cpp @@ -7,6 +7,7 @@ #include "LAppLive2DManager.hpp" +#include #include #include #include @@ -24,6 +25,11 @@ using namespace LAppDefine; namespace { LAppLive2DManager* s_instance = NULL; + void BeganMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion Began: %x", self); + } + void FinishedMotion(ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -78,6 +84,7 @@ LAppLive2DManager::~LAppLive2DManager() } } _releaseModel.Clear(); + _modelDir.Clear(); delete _viewMatrix; CubismFramework::Dispose(); @@ -106,30 +113,43 @@ void LAppLive2DManager::SetUpModel() { // ResourcesPathの中にあるフォルダ名を全てクロールし、モデルが存在するフォルダを定義する。 // フォルダはあるが同名の.model3.jsonが見つからなかった場合はリストに含めない。 + // 一部文字が受け取れないためワイド文字で受け取ってUTF8に変換し格納する。 + csmString crawlPath(ResourcesPath); crawlPath += "*.*"; - struct _finddata_t fdata; - intptr_t fh = _findfirst(crawlPath.GetRawString(), &fdata); - if (fh == -1) return; + wchar_t wideStr[MAX_PATH]; + csmChar name[MAX_PATH]; + LAppPal::ConvertMultiByteToWide(crawlPath.GetRawString(), wideStr, MAX_PATH); + + struct _wfinddata_t fdata; + intptr_t fh = _wfindfirst(wideStr, &fdata); + if (fh == -1) + { + return; + } _modelDir.Clear(); - while (_findnext(fh, &fdata) == 0) + while (_wfindnext(fh, &fdata) == 0) { - if ((fdata.attrib & _A_SUBDIR) && strcmp(fdata.name, "..") != 0) + if ((fdata.attrib & _A_SUBDIR) && wcscmp(fdata.name, L"..") != 0) { + LAppPal::ConvertWideToMultiByte(fdata.name, name, MAX_PATH); + // フォルダと同名の.model3.jsonがあるか探索する csmString model3jsonPath(ResourcesPath); - model3jsonPath += fdata.name; + model3jsonPath += name; model3jsonPath.Append(1, '/'); - model3jsonPath += fdata.name; + model3jsonPath += name; model3jsonPath += ".model3.json"; - struct _finddata_t fdata2; - if (_findfirst(model3jsonPath.GetRawString(), &fdata2) != -1) + LAppPal::ConvertMultiByteToWide(model3jsonPath.GetRawString(), wideStr, MAX_PATH); + + struct _wfinddata_t fdata2; + if (_wfindfirst(wideStr, &fdata2) != -1) { - _modelDir.PushBack(csmString(fdata.name)); + _modelDir.PushBack(csmString(name)); } } } @@ -189,7 +209,7 @@ void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) { LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); } - _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -305,7 +325,7 @@ void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); // 別レンダリング先を選択した際の背景クリア色 - float clearColor[3] = { 1.0f, 1.0f, 1.0f }; + float clearColor[3] = { 0.0f, 0.0f, 0.0f }; LAppDelegate::GetInstance()->GetView()->SetRenderTargetClearColor(clearColor[0], clearColor[1], clearColor[2]); } } diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppModel.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppModel.cpp index dc54d05..8afacb5 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppModel.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppModel.cpp @@ -290,21 +290,10 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -447,7 +436,8 @@ void LAppModel::Update() } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, + ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -477,21 +467,10 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -500,6 +479,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -519,7 +499,8 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, + ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -528,7 +509,7 @@ CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -582,7 +563,7 @@ void LAppModel::SetExpression(const csmChar* expressionID) if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppModel.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppModel.hpp index e366d78..18b1769 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppModel.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppModel.hpp @@ -67,9 +67,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -77,9 +78,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppPal.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppPal.cpp index d64781a..63c283d 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppPal.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppPal.cpp @@ -20,6 +20,7 @@ namespace { LARGE_INTEGER s_frequency; LARGE_INTEGER s_lastFrame; double s_deltaTime = 0.0; + const csmUint32 LogMessageLength = 256; } void LAppPal::StartTimer() @@ -29,12 +30,12 @@ void LAppPal::StartTimer() csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { - //filePath;// - const char* path = filePath.c_str(); + wchar_t wideStr[MAX_PATH]; + MultiByteToWideChar(CP_UTF8, 0U, filePath.c_str(), -1, wideStr, MAX_PATH); int size = 0; - struct stat statBuf; - if (stat(path, &statBuf) == 0) + struct _stat statBuf; + if (_wstat(wideStr, &statBuf) == 0) { size = statBuf.st_size; @@ -42,7 +43,7 @@ csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { if (DebugLogEnable) { - PrintLogLn("Stat succeeded but file size is zero. path:%s", path); + PrintLogLn("Stat succeeded but file size is zero. path:%s", filePath.c_str()); } return NULL; } @@ -51,27 +52,33 @@ csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { if (DebugLogEnable) { - PrintLogLn("Stat failed. errno:%d path:%s", errno, path); + PrintLogLn("Stat failed. errno:%d path:%s", errno, filePath.c_str()); } return NULL; } - std::fstream file; - file.open(path, std::ios::in | std::ios::binary); + std::wfstream file; + file.open(wideStr, std::ios::in | std::ios::binary); if (!file.is_open()) { if (DebugLogEnable) { - PrintLogLn("File open failed. path:%s", path); + PrintLogLn("File open failed. path:%s", filePath.c_str()); } return NULL; } - char* buf = new char[size]; - file.read(buf, size); - file.close(); + // ファイル名はワイド文字で探しているがファイルの中身はutf-8なので、1バイトずつ取得する。 *outSize = size; + csmChar* buf = new char[*outSize]; + std::wfilebuf* fileBuf = file.rdbuf(); + for (csmUint32 i = 0; i < *outSize; i++) + { + buf[i] = fileBuf->sbumpc(); + } + file.close(); + return reinterpret_cast(buf); } @@ -107,42 +114,25 @@ void LAppPal::UpdateTime() void LAppPal::PrintLog(const char* format, ...) { va_list args; - char buf[256]; + char multiByteBuf[LogMessageLength]; + wchar_t wideBuf[LogMessageLength]; va_start(args, format); - _vsnprintf_s(buf, sizeof(buf), format, args); - OutputDebugStringA((LPCSTR)buf); + _vsnprintf_s(multiByteBuf, sizeof(multiByteBuf), format, args); + ConvertMultiByteToWide(multiByteBuf, wideBuf, sizeof(wideBuf)); + OutputDebugStringW(wideBuf); va_end(args); } void LAppPal::PrintLogLn(const char* format, ...) { va_list args; - char buf[256]; + char multiByteBuf[LogMessageLength]; + wchar_t wideBuf[LogMessageLength]; va_start(args, format); - _vsnprintf_s(buf, sizeof(buf), format, args); - OutputDebugStringA((LPCSTR)buf); - OutputDebugStringA("\n"); // 改行を別途付与します - va_end(args); -} - -void LAppPal::PrintLogW(const wchar_t* format, ...) -{ - va_list args; - wchar_t buf[256]; - va_start(args, format); - _vsnwprintf_s(buf, sizeof(buf), format, args); - OutputDebugString((LPCSTR)buf); - va_end(args); -} - -void LAppPal::PrintLogLnW(const wchar_t* format, ...) -{ - va_list args; - wchar_t buf[256]; - va_start(args, format); - _vsnwprintf_s(buf, sizeof(buf), format, args); - OutputDebugString((LPCSTR)buf); - OutputDebugString("\n"); // 改行を別途付与します + _vsnprintf_s(multiByteBuf, sizeof(multiByteBuf), format, args); + ConvertMultiByteToWide(multiByteBuf, wideBuf, sizeof(wideBuf)); + OutputDebugStringW(wideBuf); + OutputDebugStringW(L"\n"); // 改行を別途付与します va_end(args); } @@ -163,7 +153,10 @@ void LAppPal::CoordinateFullScreenToWindow(float clientWidth, float clientHeight const float width = static_cast(clientWidth); const float height = static_cast(clientHeight); - if (width == 0.0f || height == 0.0f) return; + if (width == 0.0f || height == 0.0f) + { + return; + } retWindowX = (fullScreenX + width) * 0.5f; retWindowY = (-fullScreenY + height) * 0.5f; @@ -176,16 +169,21 @@ void LAppPal::CoordinateWindowToFullScreen(float clientWidth, float clientHeight const float width = static_cast(clientWidth); const float height = static_cast(clientHeight); - if (width == 0.0f || height == 0.0f) return; + if (width == 0.0f || height == 0.0f) + { + return; + } retFullScreenX = 2.0f * windowX - width; retFullScreenY = (2.0f * windowY - height) * -1.0f; } -void LAppPal::MbcToWchar(const char* src, size_t srcLength, wchar_t* dest, size_t destLength) +bool LAppPal::ConvertMultiByteToWide(const csmChar* multiByte, wchar_t* wide, int wideSize) { - if (srcLength<1 || destLength<2) return; + return MultiByteToWideChar(CP_UTF8, 0U, multiByte, -1, wide, wideSize) != 0; +} - memset(dest, 0, destLength); - MultiByteToWideChar(CP_ACP, 0, src, static_cast(srcLength), dest, static_cast(destLength)); +bool LAppPal::ConvertWideToMultiByte(const wchar_t* wide, csmChar* multiByte, int multiByteSize) +{ + return WideCharToMultiByte(CP_UTF8, 0U, wide, -1, multiByte, multiByteSize, NULL, NULL) != 0; } diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppPal.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppPal.hpp index 8eee246..47d94eb 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppPal.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppPal.hpp @@ -85,28 +85,6 @@ class LAppPal */ static void PrintLogLn(const char*, ...); - /** - * @brief ログを出力する wchar版 - * - * ログを出力する - * - * @param[in] format 書式付文字列 - * @param[in] ... (可変長引数)文字列 - * - */ - static void PrintLogW(const wchar_t*, ...); - - /** - * @brief ログを出力し最後に改行する wchar版 - * - * ログを出力し最後に改行する - * - * @param[in] format 書式付文字列 - * @param[in] ... (可変長引数)文字列 - * - */ - static void PrintLogLnW(const wchar_t*, ...); - /** * @brief メッセージを出力する * @@ -140,8 +118,21 @@ class LAppPal static void CoordinateWindowToFullScreen(float clientWidth, float clientHeight, float windowX, float windowY, float& retFullScreenX, float& retFullScreenY); /** - * @brief MbcからWcharに変換 + * @brief マルチバイト文字からワイド文字に変換する + * + * @param[in] multiByte 変換元 + * @param[in] wide 格納先 + * @param[in] wideSize 格納先の大きさ + */ + static bool ConvertMultiByteToWide(const Csm::csmChar* multiByte, wchar_t* wide, int wideSize); + + /** + * @brief ワイド文字からマルチバイト文字に変換する + * + * @param[in] wide 変換元 + * @param[in] multiByte 格納先 + * @param[in] multiByteSize 格納先の大きさ */ - static void MbcToWchar(const char* src, size_t srcLength, wchar_t* dest, size_t destLength); + static bool ConvertWideToMultiByte(const wchar_t* wide, Csm::csmChar* multiByte, int multiByteSize); }; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSprite.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSprite.cpp index a97ef43..aae3765 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSprite.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSprite.cpp @@ -10,6 +10,7 @@ #include "LAppPal.hpp" #include "LAppDefine.hpp" #include "LAppTextureManager.hpp" +#include "LAppSpriteShader.hpp" #include "Rendering/D3D11/CubismType_D3D11.hpp" using namespace LAppDefine; @@ -19,16 +20,18 @@ LAppSprite::LAppSprite() : _rect(), _vertexBuffer(NULL), _indexBuffer(NULL), - _constantBuffer(NULL) + _constantBuffer(NULL), + _shader(NULL) { _color = XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f); } -LAppSprite::LAppSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, ID3D11Device* device) +LAppSprite::LAppSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, LAppSpriteShader* shader, ID3D11Device* device) : _rect(), _vertexBuffer(NULL), _indexBuffer(NULL), - _constantBuffer(NULL) + _constantBuffer(NULL), + _shader(shader) { _color = XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f); @@ -130,6 +133,8 @@ LAppSprite::LAppSprite(float x, float y, float width, float height, Csm::csmUint LAppSprite::~LAppSprite() { + _shader = NULL; + if(_constantBuffer) { _constantBuffer->Release(); @@ -201,6 +206,9 @@ void LAppSprite::RenderImmidiate(int width, int height, ID3D11ShaderResourceView renderContext->IASetIndexBuffer(_indexBuffer, DXGI_FORMAT_R16_UINT, 0); renderContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + // シェーダーセット + _shader->SetupShader(); + // テクスチャセット { renderContext->PSSetShaderResources(0, 1, &resourceView); diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSprite.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSprite.hpp index 9f882a6..79a9021 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSprite.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSprite.hpp @@ -12,7 +12,7 @@ #include #include - +class LAppSpriteShader; /** * @brief スプライトを実装するクラス。 @@ -51,9 +51,10 @@ class LAppSprite * @param[in] width 横幅 * @param[in] height 高さ * @param[in] textureId テクスチャID + * @param[in] shader シェーダー設定 * @param[in] device D3Dデバイス */ - LAppSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, ID3D11Device* device); + LAppSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, LAppSpriteShader* shader, ID3D11Device* device); /** * @brief デストラクタ @@ -119,4 +120,6 @@ class LAppSprite ID3D11Buffer* _constantBuffer; ///< 定数バッファ DirectX::XMFLOAT4 _color; ///< スプライトカラー + + LAppSpriteShader* _shader; }; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSpriteShader.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSpriteShader.cpp new file mode 100644 index 0000000..3b04e19 --- /dev/null +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSpriteShader.cpp @@ -0,0 +1,280 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpriteShader.hpp" + +#include +#include +#include "LAppDefine.hpp" +#include "LAppDelegate.hpp" +#include "LAppPal.hpp" + +LAppSpriteShader::LAppSpriteShader() + : _rasterizer(NULL) + , _samplerState(NULL) + , _vertexShader(NULL) + , _pixelShader(NULL) + , _blendState(NULL) + , _vertexFormat(NULL) +{ +} + +LAppSpriteShader::~LAppSpriteShader() +{ +} + +bool LAppSpriteShader::CreateShader() +{ + ReleaseShader(); + + ID3D11Device* device = LAppDelegate::GetD3dDevice(); + HRESULT result = S_OK; + + ID3DBlob* vertexError = NULL; + ID3DBlob* pixelError = NULL; + + ID3DBlob* vertexBlob = NULL; + ID3DBlob* pixelBlob = NULL; + + // ファイル読み込み + const char* shaderCode; + Csm::csmSizeInt shaderSize; + { + // シェーダーのパスの作成 + Csm::csmString shaderFileName(LAppDefine::ShaderPath); + shaderFileName += LAppDefine::ShaderName; + + // ファイル読み込み + shaderCode = reinterpret_cast(LAppPal::LoadFileAsBytes(shaderFileName.GetRawString(), &shaderSize)); + } + + do + { + // ラスタライザ + D3D11_RASTERIZER_DESC rasterDesc; + memset(&rasterDesc, 0, sizeof(rasterDesc)); + rasterDesc.FillMode = D3D11_FILL_MODE::D3D11_FILL_SOLID; + rasterDesc.CullMode = D3D11_CULL_MODE::D3D11_CULL_BACK; // 裏面を切る + rasterDesc.FrontCounterClockwise = TRUE; // CCWを表面にする + rasterDesc.DepthClipEnable = FALSE; + rasterDesc.MultisampleEnable = FALSE; + rasterDesc.DepthBiasClamp = 0; + rasterDesc.SlopeScaledDepthBias = 0; + result = device->CreateRasterizerState(&rasterDesc, &_rasterizer); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create Rasterizer 0x%x", result); + break; + } + + // テクスチャサンプラーステート + D3D11_SAMPLER_DESC samplerDesc; + memset(&samplerDesc, 0, sizeof(D3D11_SAMPLER_DESC)); + samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; + samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; + samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; + samplerDesc.MaxAnisotropy = 1; + samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; + samplerDesc.MinLOD = -D3D11_FLOAT32_MAX; + samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; + result = device->CreateSamplerState(&samplerDesc, &_samplerState); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create Sampler 0x%x", result); + break; + } + + // レンダリングステートオブジェクト + D3D11_BLEND_DESC blendDesc; + memset(&blendDesc, 0, sizeof(blendDesc)); + blendDesc.AlphaToCoverageEnable = FALSE; + blendDesc.IndependentBlendEnable = FALSE; // falseの場合はRenderTarget[0]しか使用しなくなる + blendDesc.RenderTarget[0].BlendEnable = TRUE; + blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; + blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; + blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; + blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; + blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; + blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; + blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; + result = device->CreateBlendState(&blendDesc, &_blendState); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create BlendState 0x%x", result); + break; + } + + UINT compileFlag = 0; + + result = D3DCompile( + shaderCode, // メモリー内のシェーダーへのポインターです + shaderSize, // メモリー内のシェーダーのサイズです + NULL, // シェーダー コードが格納されているファイルの名前 + NULL, // マクロ定義の配列へのポインター + NULL, // インクルード ファイルを扱うインターフェイスへのポインター + "VertNormal", // シェーダーの実行が開始されるシェーダー エントリポイント関数の名前 + "vs_4_0", // シェーダー モデルを指定する文字列。 + compileFlag, // シェーダーコンパイルフラグ + 0, // シェーダーコンパイルフラグ + &vertexBlob, + &vertexError); // エラーが出る場合はここで + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Compile Vertex Shader"); + break; + } + result = device->CreateVertexShader(vertexBlob->GetBufferPointer(), vertexBlob->GetBufferSize(), NULL, &_vertexShader); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create Vertex Shader"); + break; + } + + result = D3DCompile( + shaderCode, // メモリー内のシェーダーへのポインターです + shaderSize, // メモリー内のシェーダーのサイズです + NULL, // シェーダー コードが格納されているファイルの名前 + NULL, // マクロ定義の配列へのポインター + NULL, // インクルード ファイルを扱うインターフェイスへのポインター + "PixelNormal", // シェーダーの実行が開始されるシェーダー エントリポイント関数の名前 + "ps_4_0", // シェーダー モデルを指定する文字列 + compileFlag, // シェーダーコンパイルフラグ + 0, // シェーダーコンパイルフラグ + &pixelBlob, + &pixelError); // エラーが出る場合はここで + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Compile Pixel Shader"); + break; + } + + result = device->CreatePixelShader(pixelBlob->GetBufferPointer(), pixelBlob->GetBufferSize(), NULL, &_pixelShader); + if (FAILED(result)) + { + LAppPal::PrintLog("Fail Create Pixel Shader"); + break; + } + + // この描画で使用する頂点フォーマット + D3D11_INPUT_ELEMENT_DESC elems[] = { + { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + }; + result = device->CreateInputLayout(elems, ARRAYSIZE(elems), vertexBlob->GetBufferPointer(), vertexBlob->GetBufferSize(), &_vertexFormat); + + if (FAILED(result)) + { + LAppPal::PrintLog("CreateVertexDeclaration failed"); + break; + } + + } while (0); + + if (pixelError) + { + pixelError->Release(); + pixelError = NULL; + } + if (vertexError) + { + vertexError->Release(); + vertexError = NULL; + } + + // blobはもうここで不要 + if (pixelBlob) + { + pixelBlob->Release(); + pixelBlob = NULL; + } + if (vertexBlob) + { + vertexBlob->Release(); + vertexBlob = NULL; + } + + if (FAILED(result)) + { + return false; + } + + return true; +} + +void LAppSpriteShader::SetupShader() +{ + ID3D11DeviceContext* deviceContext = LAppDelegate::GetD3dContext(); + + if (_rasterizer == NULL || _samplerState == NULL || _blendState == NULL || + _vertexShader == NULL || _pixelShader == NULL || _vertexFormat == NULL) + { + return; + } + + // 現在のウィンドウサイズの取得 + int windowWidth, windowHeight; + LAppDelegate::GetClientSize(windowWidth, windowHeight); + + // スプライト描画用の設定をし、シェーダーセット + deviceContext->IASetInputLayout(_vertexFormat); + deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + deviceContext->IASetInputLayout(_vertexFormat); + + D3D11_VIEWPORT viewport; + viewport.TopLeftX = 0; + viewport.TopLeftY = 0; + viewport.Width = static_cast(windowWidth); + viewport.Height = static_cast(windowHeight); + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + deviceContext->RSSetViewports(1, &viewport); + deviceContext->RSSetState(_rasterizer); + + deviceContext->VSSetShader(_vertexShader, NULL, 0); + + deviceContext->PSSetShader(_pixelShader, NULL, 0); + deviceContext->PSSetSamplers(0, 1, &_samplerState); + + float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + deviceContext->OMSetBlendState(_blendState, blendFactor, 0xffffffff); +} + +void LAppSpriteShader::ReleaseShader() +{ + if (_rasterizer) + { + _rasterizer->Release(); + _rasterizer = NULL; + } + if (_samplerState) + { + _samplerState->Release(); + _samplerState = NULL; + } + if (_blendState) + { + _blendState->Release(); + _blendState = NULL; + } + if (_vertexShader) + { + _vertexShader->Release(); + _vertexShader = NULL; + } + if (_pixelShader) + { + _pixelShader->Release(); + _pixelShader = NULL; + } + if (_vertexFormat) + { + _vertexFormat->Release(); + _vertexFormat = NULL; + } +} diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSpriteShader.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSpriteShader.hpp new file mode 100644 index 0000000..257f844 --- /dev/null +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppSpriteShader.hpp @@ -0,0 +1,53 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include + +/** + * @brief スプライト用のシェーダー設定を保持するクラス。 + */ +class LAppSpriteShader +{ +public: + + /** + * @brief コンストラクタ + */ + LAppSpriteShader(); + + /** + * @brief デストラクタ + */ + ~LAppSpriteShader(); + + /** + * @brief シェーダーの作成を行う + */ + bool CreateShader(); + + /** + * @brief スプライトの描画直前に呼び出される + * シェーダーのセットを行う + */ + void SetupShader(); + + /** + * @brief シェーダーの解放を行う + */ + void ReleaseShader(); + +private: + + ID3D11RasterizerState* _rasterizer; ///< ラスタライザ + ID3D11SamplerState* _samplerState; ///< サンプラーステート + ID3D11BlendState* _blendState; ///< ブレンドステート + ID3D11VertexShader* _vertexShader; ///< 頂点シェーダ + ID3D11PixelShader* _pixelShader; ///< ピクセルシェーダ + ID3D11InputLayout* _vertexFormat; ///< 頂点フォーマット +}; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppTextureManager.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppTextureManager.cpp index a332751..978eada 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppTextureManager.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppTextureManager.cpp @@ -31,7 +31,7 @@ LAppTextureManager::TextureInfo* LAppTextureManager::CreateTextureFromPngFile(st // wcharに変換 const int WCHAR_LENGTH = 512; wchar_t wchrStr[WCHAR_LENGTH] = L""; - LAppPal::MbcToWchar(fileName.c_str(), fileName.length(), wchrStr, sizeof(wchrStr)); + LAppPal::ConvertMultiByteToWide(fileName.c_str(), wchrStr, sizeof(wchrStr)); ID3D11Resource* texture = NULL; ID3D11ShaderResourceView* textureView = NULL; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppView.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppView.cpp index 9769c51..50862ba 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppView.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppView.cpp @@ -15,6 +15,7 @@ #include "LAppDefine.hpp" #include "TouchManager.hpp" #include "LAppSprite.hpp" +#include "LAppSpriteShader.hpp" #include "LAppModel.hpp" using namespace std; @@ -25,7 +26,8 @@ LAppView::LAppView(): _gear(NULL), _power(NULL), _renderSprite(NULL), - _renderTarget(SelectTarget_None) + _renderTarget(SelectTarget_None), + _shader(NULL) { _clearColor[0] = 1.0f; _clearColor[1] = 1.0f; @@ -40,6 +42,9 @@ LAppView::LAppView(): // 画面の表示の拡大縮小や移動の変換を行う行列 _viewMatrix = new CubismViewMatrix(); + + // スプライト用シェーダー + _shader = new LAppSpriteShader(); } LAppView::~LAppView() @@ -47,7 +52,9 @@ LAppView::~LAppView() _renderBuffer.DestroyOffscreenSurface(); ReleaseSprite(); + _shader->ReleaseShader(); + delete _shader; delete _viewMatrix; delete _deviceToScreen; delete _touchManager; @@ -97,6 +104,9 @@ void LAppView::Initialize() ViewLogicalMaxBottom, ViewLogicalMaxTop ); + + // シェーダー作成 + _shader->CreateShader(); } void LAppView::Render() @@ -107,9 +117,6 @@ void LAppView::Render() return; } - // シェーダー設定 - LAppDelegate::GetInstance()->SetupShader(); - // スプライト描画 int width, height; LAppDelegate::GetInstance()->GetClientSize(width, height); @@ -180,7 +187,7 @@ void LAppView::InitializeSprite() y = height * 0.5f; fWidth = static_cast(backgroundTexture->width * 2); fHeight = static_cast(height) * 0.95f; - _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, device); + _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, _shader, device); imageName = resourcesPath + GearImageName; LAppTextureManager::TextureInfo* gearTexture = textureManager->CreateTextureFromPngFile(imageName, false); @@ -188,7 +195,7 @@ void LAppView::InitializeSprite() y = static_cast(height - gearTexture->height * 0.5f); fWidth = static_cast(gearTexture->width); fHeight = static_cast(gearTexture->height); - _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, device); + _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, _shader, device); imageName = resourcesPath + PowerImageName; LAppTextureManager::TextureInfo* powerTexture = textureManager->CreateTextureFromPngFile(imageName, false); @@ -196,11 +203,11 @@ void LAppView::InitializeSprite() y = static_cast(powerTexture->height * 0.5f); fWidth = static_cast(powerTexture->width); fHeight = static_cast(powerTexture->height); - _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, device); + _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, _shader, device); x = width * 0.5f; y = height * 0.5f; - _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, device); + _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, _shader, device); } void LAppView::ReleaseSprite() @@ -420,9 +427,6 @@ void LAppView::PostModelDraw(LAppModel& refModel) // LAppViewの持つフレームバッファを使うなら、スプライトへの描画はここ if (_renderTarget == SelectTarget_ViewFrameBuffer && _renderSprite) { - // シェーダー設定 - LAppDelegate::GetInstance()->SetupShader(); - // スプライト描画 int width, height; LAppDelegate::GetInstance()->GetClientSize(width, height); diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppView.hpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppView.hpp index 553e46e..033f04f 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppView.hpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/LAppView.hpp @@ -16,6 +16,7 @@ class TouchManager; class LAppSprite; +class LAppSpriteShader; class LAppModel; /** @@ -170,4 +171,6 @@ class LAppView Csm::Rendering::CubismOffscreenSurface_D3D11 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + LAppSpriteShader* _shader; ///< スプライト用のシェーダー準備クラス }; diff --git a/Samples/D3D11/Demo/proj.d3d11.cmake/src/mainMinimum.cpp b/Samples/D3D11/Demo/proj.d3d11.cmake/src/mainMinimum.cpp index eae63a4..a777700 100644 --- a/Samples/D3D11/Demo/proj.d3d11.cmake/src/mainMinimum.cpp +++ b/Samples/D3D11/Demo/proj.d3d11.cmake/src/mainMinimum.cpp @@ -268,44 +268,6 @@ static bool InitializeSystem() return false; } - // ラスタライザ - D3D11_RASTERIZER_DESC rasterDesc; - memset(&rasterDesc, 0, sizeof(rasterDesc)); - rasterDesc.FillMode = D3D11_FILL_MODE::D3D11_FILL_SOLID; - rasterDesc.CullMode = D3D11_CULL_MODE::D3D11_CULL_BACK; // 裏面を切る - rasterDesc.FrontCounterClockwise = TRUE; // CCWを表面にする - rasterDesc.DepthClipEnable = FALSE; - rasterDesc.MultisampleEnable = FALSE; - rasterDesc.DepthBiasClamp = 0; - rasterDesc.SlopeScaledDepthBias = 0; - result = directXRenderer->_device->CreateRasterizerState(&rasterDesc, &directXRenderer->_rasterizer); - if (FAILED(result)) - { - LAppPal::PrintLogLn("Fail Create Rasterizer 0x%x", result); - return false; - } - - // テクスチャサンプラーステート - D3D11_SAMPLER_DESC samplerDesc; - memset(&samplerDesc, 0, sizeof(D3D11_SAMPLER_DESC)); - samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; - samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; - samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; - samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; - samplerDesc.MaxAnisotropy = 1; - samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; - samplerDesc.MinLOD = -D3D11_FLOAT32_MAX; - samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; - directXRenderer->_device->CreateSamplerState(&samplerDesc, &directXRenderer->_samplerState); - if (FAILED(result)) - { - LAppPal::PrintLogLn("Fail Create Sampler 0x%x", result); - return false; - } - - // スプライト用シェーダ作成 - directXRenderer->CreateShader(); - // デバイス作成の後 _textureManager = new CubismTextureManager(); diff --git a/Samples/D3D11/README.ja.md b/Samples/D3D11/README.ja.md index e370740..238dae2 100644 --- a/Samples/D3D11/README.ja.md +++ b/Samples/D3D11/README.ja.md @@ -11,7 +11,6 @@ DirectX 11 で実装したアプリケーションのサンプル実装です。 | 開発キット | Visual Studio | バージョン | | --- | --- | --- | -| [DirectXTK] | 2013 | April 23, 2018 | | [DirectXTK] | 2015 | December 17, 2019 | | [DirectXTK] | 2017 | March 24, 2022 | | [DirectXTK] | 2019 / 2022 | December 31, 2023 | @@ -72,7 +71,6 @@ CMake プロジェクトです。 | Visual Studio | スクリプト名 | | --- | --- | -| 2013 | `setup_msvc2013.bat` | | 2015 | `setup_msvc2015.bat` | | 2017 | `setup_msvc2017.bat` | | 2019 | `setup_msvc2019.bat` | diff --git a/Samples/D3D11/README.md b/Samples/D3D11/README.md index ff3bff8..768609d 100644 --- a/Samples/D3D11/README.md +++ b/Samples/D3D11/README.md @@ -11,7 +11,6 @@ This is a sample implementation of an application implemented with DirectX 11. | Development Kit | Visual Studio | Version | | --- | --- | --- | -| [DirectXTK] | 2013 | April 23, 2018 | | [DirectXTK] | 2015 | December 17, 2019 | | [DirectXTK] | 2017 | March 24, 2022 | | [DirectXTK] | 2019 / 2022 | December 31, 2023 | @@ -72,7 +71,6 @@ Download DirectXTK and build the library by running the script in the `script` d | Visual Studio | Script Name | | --- | --- | -| 2013 | `setup_msvc2013.bat` | | 2015 | `setup_msvc2015.bat` | | 2017 | `setup_msvc2017.bat` | | 2019 | `setup_msvc2019.bat` | diff --git a/Samples/D3D11/Shaders/SpriteEffect.fx b/Samples/D3D11/Shaders/SpriteEffect.fx new file mode 100644 index 0000000..cba1ca5 --- /dev/null +++ b/Samples/D3D11/Shaders/SpriteEffect.fx @@ -0,0 +1,46 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +// 定数バッファ +cbuffer ConstantBuffer { + float4x4 projectMatrix; + float4x4 clipMatrix; + float4 baseColor; + float4 channelFlag; +} + +// テクスチャとサンプラー設定 +Texture2D mainTexture : register(t0); +SamplerState mainSampler : register(s0); + +// 頂点シェーダーの入力定義 +struct VS_IN { + float2 pos : POSITION0; + float2 uv : TEXCOORD0; +}; + +// 頂点シェーダーの出力定義 +struct VS_OUT { + float4 Position : SV_POSITION; + float2 uv : TEXCOORD0; + float4 clipPosition : TEXCOORD1; +}; + +// 頂点シェーダー +VS_OUT VertNormal(VS_IN In) { + VS_OUT Out = (VS_OUT)0; + Out.Position = mul(float4(In.pos, 0.0f, 1.0f), projectMatrix); + Out.uv.x = In.uv.x; + Out.uv.y = 1.0 - +In.uv.y; + return Out; +} + +// ピクセルシェーダー +float4 PixelNormal(VS_OUT In) : SV_Target { + float4 color = mainTexture.Sample(mainSampler, In.uv) * baseColor; + return color; +} diff --git a/Samples/D3D11/thirdParty/scripts/setup_msvc2013.bat b/Samples/D3D11/thirdParty/scripts/setup_msvc2013.bat deleted file mode 100644 index c1666d9..0000000 --- a/Samples/D3D11/thirdParty/scripts/setup_msvc2013.bat +++ /dev/null @@ -1,21 +0,0 @@ -@echo off - -setlocal - -set XTK_VERSION=apr2018 - -set SCRIPT_PATH=%~dp0 - -:: Download and archive XTK. -call "%SCRIPT_PATH%_setup_common.bat" -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2013 -set VCVARSALL=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat - -:: Build XTK project. -call "%SCRIPT_PATH%_msvc_common.bat" %XTK_VERSION% -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt b/Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt index 4ec882c..f35f191 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/CMakeLists.txt @@ -13,6 +13,7 @@ set(SDK_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../..) set(CORE_PATH ${SDK_ROOT_PATH}/Core) set(FRAMEWORK_PATH ${SDK_ROOT_PATH}/Framework) set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) +set(SAMPLE_SHADER_PATH ${SDK_ROOT_PATH}/Samples/D3D9/Shaders) # Set project. project(${APP_NAME}) @@ -45,10 +46,7 @@ else() message(FATAL_ERROR "[${APP_NAME}] Invalid linker flag ${CMAKE_EXE_LINKER_FLAGS}.") endif() # Detect compiler. -if(MSVC_VERSION MATCHES 1800) - # Visual Studio 2013 - set(COMPILER 120) -elseif(MSVC_VERSION MATCHES 1900) +if(MSVC_VERSION MATCHES 1900) # Visual Studio 2015 set(COMPILER 140) elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) @@ -103,6 +101,7 @@ target_link_libraries(Framework add_executable(${APP_NAME} WIN32) # Add source files. add_subdirectory(src) + # Link libraries to app. target_link_libraries(${APP_NAME} Framework @@ -120,6 +119,9 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E copy_directory ${RES_PATH} $/Resources + COMMAND + ${CMAKE_COMMAND} -E + copy_directory ${SAMPLE_SHADER_PATH} $/SampleShaders ) # Set project properties. diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/scripts/nmake_msvc2013.bat b/Samples/D3D9/Demo/proj.d3d9.cmake/scripts/nmake_msvc2013.bat deleted file mode 100644 index 50de20f..0000000 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/scripts/nmake_msvc2013.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2013 -set MSVC_NUMBER=12 -set VCVARSALL=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat -set GENERATOR=nmake - -call "%SCRIPT_PATH%_msvc_common.bat" -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/scripts/proj_msvc2013.bat b/Samples/D3D9/Demo/proj.d3d9.cmake/scripts/proj_msvc2013.bat deleted file mode 100644 index d11674f..0000000 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/scripts/proj_msvc2013.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2013 -set MSVC_NUMBER=12 -set VCVARSALL=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat -set GENERATOR=proj - -call "%SCRIPT_PATH%_msvc_common.bat" -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CMakeLists.txt b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CMakeLists.txt index c0db52a..1731730 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CMakeLists.txt +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CMakeLists.txt @@ -12,6 +12,8 @@ if (CSM_MINIMUM_DEMO) ${CMAKE_CURRENT_SOURCE_DIR}/TouchManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/CubismSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/CubismSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/CubismUserModelExtend.cpp @@ -44,6 +46,8 @@ else () ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXRenderer.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXRenderer.cpp index 6ad81dc..da250b0 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXRenderer.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXRenderer.cpp @@ -7,9 +7,6 @@ #include "LAppPal.hpp" -#include -#include - #include "CubismDirectXRenderer.hpp" #include "CubismDirectXView.hpp" #include "CubismTextureManager.hpp" @@ -38,8 +35,6 @@ CubismDirectXRenderer::CubismDirectXRenderer() , _deviceLostStep(LostStep::LostStep_None) , _lostCounter(0) , _isFullScreen(false) - , _shaderEffect(nullptr) - , _vertexFormat(nullptr) , _model(nullptr) { _textureManager = new CubismTextureManager(); @@ -102,102 +97,6 @@ void CubismDirectXRenderer::GetClientSize(int& rWidth, int& rHeight) rHeight = (clientRect.bottom - clientRect.top); } -bool CubismDirectXRenderer::CreateShader() -{ - // 一旦削除する - ReleaseShader(); - - static const csmChar* SpriteShaderEffectSrc = - "float4x4 projectMatrix;"\ - "float4 baseColor;"\ - "texture mainTexture;"\ - \ - "sampler mainSampler = sampler_state{"\ - "texture = ;"\ - "};"\ - \ - "struct VS_IN {"\ - "float2 pos : POSITION;"\ - "float2 uv : TEXCOORD0;"\ - "};"\ - "struct VS_OUT {"\ - "float4 Position : POSITION0;"\ - "float2 uv : TEXCOORD0;"\ - "float4 clipPosition : TEXCOORD1;"\ - "};"\ - \ - "/* Vertex Shader */"\ - "/* normal */"\ - "VS_OUT VertNormal(VS_IN In) {"\ - "VS_OUT Out = (VS_OUT)0;"\ - "Out.Position = mul(float4(In.pos, 0.0f, 1.0f), projectMatrix);"\ - "Out.uv.x = In.uv.x;"\ - "Out.uv.y = 1.0 - +In.uv.y;"\ - "return Out;"\ - "}"\ - \ - "/* Pixel Shader */"\ - "/* normal */"\ - "float4 PixelNormal(VS_OUT In) : COLOR0{"\ - "float4 color = tex2D(mainSampler, In.uv) * baseColor;"\ - "return color;"\ - "}"\ - \ - "/* Technique */"\ - "technique ShaderNames_Normal {"\ - "pass p0{"\ - "VertexShader = compile vs_2_0 VertNormal();"\ - "PixelShader = compile ps_2_0 PixelNormal();"\ - "}"\ - "}"; - - ID3DXBuffer* error = 0; - if (FAILED(D3DXCreateEffect(_device, SpriteShaderEffectSrc, static_cast(strlen(SpriteShaderEffectSrc)), 0, 0, 0, 0, &_shaderEffect, &error))) - { - LAppPal::PrintLogLn("Cannot load the shaders"); - return false; - } - - // この描画で使用する頂点フォーマット - D3DVERTEXELEMENT9 elems[] = { - { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, - { 0, sizeof(float) * 2, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, - D3DDECL_END() - }; - if (_device->CreateVertexDeclaration(elems, &_vertexFormat)) - { - LAppPal::PrintLogLn("CreateVertexDeclaration failed"); - CSM_ASSERT(0); - } - - return true; -} - -ID3DXEffect* CubismDirectXRenderer::SetupShader() -{ - if (_device == nullptr || _vertexFormat == nullptr || _shaderEffect == nullptr) - { - return nullptr; - } - - _device->SetVertexDeclaration(_vertexFormat); - return _shaderEffect; -} - -void CubismDirectXRenderer::ReleaseShader() -{ - if (_vertexFormat) - { - _vertexFormat->Release(); - _vertexFormat = nullptr; - } - if (_shaderEffect) - { - _shaderEffect->Release(); - _shaderEffect = nullptr; - } -} - void CubismDirectXRenderer::RecreateDevice() { // Viewロスト処理 @@ -251,13 +150,6 @@ void CubismDirectXRenderer::StartFrame() const void CubismDirectXRenderer::EndFrame(CubismUserModel* userModel) { - // テクスチャの参照を外しておく - if (_shaderEffect) - { - _shaderEffect->SetTexture("mainTexture", NULL); - _shaderEffect->CommitChanges(); - } - if (_device) { //シーンの終了 diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXRenderer.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXRenderer.hpp index 0ce11aa..b197ccd 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXRenderer.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXRenderer.hpp @@ -52,21 +52,6 @@ class CubismDirectXRenderer */ void ReleaseInstance(); - /** - * @brief スプライト描画用シェーダの作成と頂点宣言の作成を行う - */ - bool CreateShader(); - - /** - * @brief シェーダをコンテキストにセット - */ - ID3DXEffect* SetupShader(); - - /** - * @brief CreateShaderで確保したオブジェクトの開放 - */ - void ReleaseShader(); - /** * @brief デバイス再作成 ウィンドウサイズ変更の時など * ロスト対応の+α処理を行う @@ -116,9 +101,6 @@ class CubismDirectXRenderer D3DPRESENT_PARAMETERS _presentParameters; ///< プレゼントパラメータ D3DPRESENT_PARAMETERS _presentParametersFull; ///< プレゼントパラメータ フルスクリーン - ID3DXEffect* _shaderEffect; ///< スプライト描画用シェーダ - IDirect3DVertexDeclaration9* _vertexFormat; ///< スプライト描画用型宣言 - CubismTextureManager* _textureManager; ///< テクスチャマネージャー CubismUserModelExtend* _model; ///< モデルデータ diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXView.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXView.cpp index c9551b8..45e4880 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXView.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXView.cpp @@ -7,8 +7,11 @@ #include "CubismDirectXView.hpp" +#include + #include "CubismDirectXRenderer.hpp" #include "CubismSampleViewMatrix.hpp" +#include "LAppPal.hpp" namespace { CubismDirectXView* _instance = nullptr; @@ -25,7 +28,11 @@ CubismDirectXView* CubismDirectXView::GetInstance() } CubismDirectXView::CubismDirectXView() - :_windowWidth(0), _windowHeight(0), _renderSprite(nullptr), _renderTarget(SelectTarget_None) + :_windowWidth(0), + _windowHeight(0), + _renderSprite(nullptr), + _renderTarget(SelectTarget_None), + _shader(nullptr) { _clearColor[0] = 1.0f; _clearColor[1] = 1.0f; @@ -91,13 +98,13 @@ void CubismDirectXView::Render(CubismUserModel* userModel) void CubismDirectXView::InitializeSprite() { + // シェーダ作成 + _shader = new CubismSpriteShader(); + CubismDirectXRenderer::GetInstance()->GetClientSize(_windowWidth, _windowHeight); float x = _windowWidth * 0.5f; float y = _windowHeight * 0.5f; - _renderSprite = new CubismSprite(x, y, static_cast(_windowWidth), static_cast(_windowHeight), 0); - - // シェーダ作成 - CubismDirectXRenderer::GetInstance()->CreateShader(); + _renderSprite = new CubismSprite(x, y, static_cast(_windowWidth), static_cast(_windowHeight), 0, _shader); } void CubismDirectXView::ReleaseSprite() @@ -106,7 +113,8 @@ void CubismDirectXView::ReleaseSprite() _renderSprite = nullptr; // スプライト用のシェーダ・頂点宣言も開放 - CubismDirectXRenderer::GetInstance()->ReleaseShader(); + delete _shader; + _shader = nullptr; } void CubismDirectXView::ResizeSprite() diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXView.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXView.hpp index 8d32c5b..358c7db 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXView.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismDirectXView.hpp @@ -14,6 +14,7 @@ #include "MouseActionManager.hpp" #include "CubismUserModelExtend.hpp" #include "CubismSprite.hpp" +#include "CubismSpriteShader.hpp" class CubismDirectXView { @@ -149,4 +150,6 @@ class CubismDirectXView Csm::Rendering::CubismOffscreenSurface_D3D9 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + CubismSpriteShader* _shader; ///< スプライト用のシェーダー準備クラス }; diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSprite.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSprite.cpp index dbce4e7..81b49f1 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSprite.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSprite.cpp @@ -10,6 +10,7 @@ #include "CubismDirectXRenderer.hpp" +#include "CubismDirectXView.hpp" #include "LAppDefine.hpp" #include "LAppPal.hpp" #include "Rendering/D3D9/CubismType_D3D9.hpp" @@ -22,10 +23,11 @@ CubismSprite::CubismSprite() _color = D3DXVECTOR4(1.0f, 1.0f, 1.0f, 1.0f); } -CubismSprite::CubismSprite(float x, float y, float width, float height, Csm::csmUint64 textureId) +CubismSprite::CubismSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, CubismSpriteShader* shader) : _rect(), _vertexStore(nullptr), - _indexStore(nullptr) + _indexStore(nullptr), + _shader(shader) { _color = D3DXVECTOR4(1.0f, 1.0f, 1.0f, 1.0f); @@ -79,6 +81,7 @@ CubismSprite::~CubismSprite() } _indexStore = nullptr; _vertexStore = nullptr; + _shader = nullptr; } void CubismSprite::Render(LPDIRECT3DDEVICE9 device, int maxWidth, int maxHeight) const @@ -93,6 +96,11 @@ void CubismSprite::Render(LPDIRECT3DDEVICE9 device, int maxWidth, int maxHeight) return; // この際は描画できず } + if (device == nullptr || _shader == nullptr) + { + return; + } + // 頂点設定 _vertexStore[0].x = (_rect.left - maxWidth * 0.5f) / (maxWidth * 0.5f); _vertexStore[0].y = (_rect.down - maxHeight * 0.5f) / (maxHeight * 0.5f); _vertexStore[0].u = 0.0f; _vertexStore[0].v = 0.0f; _vertexStore[1].x = (_rect.right - maxWidth * 0.5f) / (maxWidth * 0.5f); _vertexStore[1].y = (_rect.down - maxHeight * 0.5f) / (maxHeight * 0.5f); _vertexStore[1].u = 1.0f; _vertexStore[1].v = 0.0f; @@ -100,53 +108,23 @@ void CubismSprite::Render(LPDIRECT3DDEVICE9 device, int maxWidth, int maxHeight) _vertexStore[3].x = (_rect.right - maxWidth * 0.5f) / (maxWidth * 0.5f); _vertexStore[3].y = (_rect.up - maxHeight * 0.5f) / (maxHeight * 0.5f); _vertexStore[3].u = 1.0f; _vertexStore[3].v = 1.0f; { - D3DXMATRIX proj( - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - ); - - // このエフェクトで描画 - ID3DXEffect* shaderEffect = CubismDirectXRenderer::GetInstance()->SetupShader(); - if (shaderEffect) - { - // レンダーステート - device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); - device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); - device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); - - device->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, false); - device->SetRenderState(D3DRS_ALPHABLENDENABLE, true); - - - UINT numPass = 0; - shaderEffect->SetTechnique("ShaderNames_Normal"); - - // numPassには指定のtechnique内に含まれるpassの数が返る - shaderEffect->Begin(&numPass, 0); - shaderEffect->BeginPass(0); - - shaderEffect->SetMatrix("projectMatrix", &proj); - - shaderEffect->SetVector("baseColor", &_color); - - IDirect3DTexture9* texture = NULL; - if (CubismDirectXRenderer::GetInstance()->_textureManager->GetTexture(_textureId, texture)) - { - shaderEffect->SetTexture("mainTexture", texture); - } - shaderEffect->CommitChanges(); - - - { - // 描画 - device->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, VERTEX_NUM, 2, _indexStore, D3DFMT_INDEX16, _vertexStore, sizeof(SpriteVertex)); - } - - shaderEffect->EndPass(); - shaderEffect->End(); - } + // レンダーステート + device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); + device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); + device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); + device->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, false); + device->SetRenderState(D3DRS_ALPHABLENDENABLE, true); + + // シェーダー準備 + IDirect3DTexture9* texture = NULL; + CubismDirectXRenderer::GetInstance()->_textureManager->GetTexture(_textureId, texture); + _shader->SetShader(device, texture, _color); + + // 描画 + device->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, VERTEX_NUM, 2, _indexStore, D3DFMT_INDEX16, _vertexStore, sizeof(SpriteVertex)); + + // シェーダー後処理 + _shader->UnsetShader(); } } @@ -162,6 +140,11 @@ void CubismSprite::RenderImmidiate(LPDIRECT3DDEVICE9 device, int maxWidth, int m return; // この際は描画できず } + if (device == nullptr || _shader == nullptr) + { + return; + } + // 頂点設定 _vertexStore[0].x = (_rect.left - maxWidth * 0.5f) / (maxWidth * 0.5f); _vertexStore[0].y = (_rect.down - maxHeight * 0.5f) / (maxHeight * 0.5f); _vertexStore[0].u = 0.0f; _vertexStore[0].v = 0.0f; _vertexStore[1].x = (_rect.right - maxWidth * 0.5f) / (maxWidth * 0.5f); _vertexStore[1].y = (_rect.down - maxHeight * 0.5f) / (maxHeight * 0.5f); _vertexStore[1].u = 1.0f; _vertexStore[1].v = 0.0f; @@ -169,51 +152,21 @@ void CubismSprite::RenderImmidiate(LPDIRECT3DDEVICE9 device, int maxWidth, int m _vertexStore[3].x = (_rect.right - maxWidth * 0.5f) / (maxWidth * 0.5f); _vertexStore[3].y = (_rect.up - maxHeight * 0.5f) / (maxHeight * 0.5f); _vertexStore[3].u = 1.0f; _vertexStore[3].v = 1.0f; { - D3DXMATRIX proj( - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - ); - - // このエフェクトで描画 - ID3DXEffect* shaderEffect = CubismDirectXRenderer::GetInstance()->SetupShader(); - if (shaderEffect) - { - // レンダーステート - device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); - device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); - device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); - - device->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, false); - device->SetRenderState(D3DRS_ALPHABLENDENABLE, true); - - - UINT numPass = 0; - shaderEffect->SetTechnique("ShaderNames_Normal"); - - // numPassには指定のtechnique内に含まれるpassの数が返る - shaderEffect->Begin(&numPass, 0); - shaderEffect->BeginPass(0); - - shaderEffect->SetMatrix("projectMatrix", &proj); - - shaderEffect->SetVector("baseColor", &_color); - - { - shaderEffect->SetTexture("mainTexture", texture); - } - shaderEffect->CommitChanges(); + // レンダーステート + device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); + device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); + device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); + device->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, false); + device->SetRenderState(D3DRS_ALPHABLENDENABLE, true); + // シェーダー準備 + _shader->SetShader(device, texture, _color); - { - // 描画 - device->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, VERTEX_NUM, 2, _indexStore, D3DFMT_INDEX16, _vertexStore, sizeof(SpriteVertex)); - } + // 描画 + device->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, VERTEX_NUM, 2, _indexStore, D3DFMT_INDEX16, _vertexStore, sizeof(SpriteVertex)); - shaderEffect->EndPass(); - shaderEffect->End(); - } + // シェーダー後処理 + _shader->UnsetShader(); } } diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSprite.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSprite.hpp index 64cebac..462d888 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSprite.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSprite.hpp @@ -12,6 +12,8 @@ #include #include +#include "CubismSpriteShader.hpp" + /** * @brief スプライトを実装するクラス。 * @@ -52,8 +54,9 @@ class CubismSprite * @param[in] width 横幅 * @param[in] height 高さ * @param[in] textureId テクスチャID + * @param[in] shader シェーダー操作クラス */ - CubismSprite(float x, float y, float width, float height, Csm::csmUint64 textureId); + CubismSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, CubismSpriteShader* shader); /** * @brief デストラクタ @@ -114,5 +117,6 @@ class CubismSprite SpriteVertex* _vertexStore; ///< 頂点をストアしておく領域 Live2D::Cubism::Framework::csmUint16* _indexStore; ///< インデックスをストアしておく領域 D3DXVECTOR4 _color; ///< スプライトカラー -}; + CubismSpriteShader* _shader; ///< シェーダー +}; diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSpriteShader.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSpriteShader.cpp new file mode 100644 index 0000000..fe875a1 --- /dev/null +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSpriteShader.cpp @@ -0,0 +1,126 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "CubismSpriteShader.hpp" + +#include +#include +#include "CubismDirectXRenderer.hpp" +#include "LAppDefine.hpp" +#include "LAppPal.hpp" + +CubismSpriteShader::CubismSpriteShader() + : _shaderEffect(NULL) + , _vertexFormat(NULL) +{ + CreateShader(); +} + +CubismSpriteShader::~CubismSpriteShader() +{ + ReleaseShader(); +} + +bool CubismSpriteShader::CreateShader() +{ + LPDIRECT3DDEVICE9 device = CubismDirectXRenderer::GetInstance()->_device; + ReleaseShader(); + + // ファイル読み込み + const char* shaderCode; + Csm::csmSizeInt shaderSize; + { + // シェーダーのパスの作成 + Csm::csmString shaderFileName(LAppDefine::ShaderPath); + shaderFileName += LAppDefine::ShaderName; + + // ファイル読み込み + shaderCode = reinterpret_cast(LAppPal::LoadFileAsBytes(shaderFileName.GetRawString(), &shaderSize)); + } + + ID3DXBuffer* error = 0; + HRESULT result = S_OK; + do + { + // シェーダーエフェクト作成 + if (FAILED(result = D3DXCreateEffect(device, shaderCode, shaderSize, 0, 0, 0, 0, &_shaderEffect, &error))) + { + LAppPal::PrintLog("Cannot load the shaders"); + break; + } + + // この描画で使用する頂点フォーマット + D3DVERTEXELEMENT9 elems[] = { + { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, + { 0, sizeof(float) * 2, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, + D3DDECL_END() + }; + if (FAILED(result = device->CreateVertexDeclaration(elems, &_vertexFormat))) + { + LAppPal::PrintLog("CreateVertexDeclaration failed"); + break; + } + } while(0); + + if (FAILED(result)) { + return false; + } + + return true; +} + +void CubismSpriteShader::ReleaseShader() +{ + if (_vertexFormat) + { + _vertexFormat->Release(); + _vertexFormat = nullptr; + } + if (_shaderEffect) + { + _shaderEffect->Release(); + _shaderEffect = nullptr; + } +} + +void CubismSpriteShader::SetShader(LPDIRECT3DDEVICE9 device, LPDIRECT3DTEXTURE9 texture, D3DXVECTOR4 color) +{ + D3DXMATRIX proj( + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + ); + + // 頂点フォーマット + device->SetVertexDeclaration(_vertexFormat); + + _shaderEffect->SetTechnique("ShaderNames_Normal"); + + // numPassには指定のtechnique内に含まれるpassの数が返る + UINT numPass = 0; + _shaderEffect->Begin(&numPass, 0); + _shaderEffect->BeginPass(0); + + _shaderEffect->SetMatrix("projectMatrix", &proj); + + _shaderEffect->SetVector("baseColor", &color); + + _shaderEffect->SetTexture("mainTexture", texture); + + _shaderEffect->CommitChanges(); +} + +void CubismSpriteShader::UnsetShader() +{ + _shaderEffect->EndPass(); + + _shaderEffect->SetTexture("mainTexture", NULL); + _shaderEffect->CommitChanges(); + + _shaderEffect->End(); +} diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSpriteShader.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSpriteShader.hpp new file mode 100644 index 0000000..8ec730c --- /dev/null +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismSpriteShader.hpp @@ -0,0 +1,56 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include "CubismFramework.hpp" + +/** +* @brief スプライト用のシェーダー設定を保持するクラス。 +*/ +class CubismSpriteShader +{ +public: + + /** + * @brief コンストラクタ + */ + CubismSpriteShader(); + + /** + * @brief デストラクタ + */ + ~CubismSpriteShader(); + + /** + * @brief シェーダーの作成を行う + */ + bool CreateShader(); + + /** + * @brief シェーダーの解放を行う + */ + void ReleaseShader(); + + /** + * @brief スプライトの描画直前に呼び出される + * シェーダーのセットを行う + */ + void SetShader(LPDIRECT3DDEVICE9 device, LPDIRECT3DTEXTURE9 texture, D3DXVECTOR4 color); + + /** + * @brief スプライトの描画後に呼び出される + * シェーダーの後処理を行う + */ + void UnsetShader(); + +private: + + ID3DXEffect* _shaderEffect; ///< スプライト描画用シェーダ + IDirect3DVertexDeclaration9* _vertexFormat; ///< スプライト描画用型宣言 +}; diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismUserModelExtend.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismUserModelExtend.cpp index cf8c371..e1298f7 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismUserModelExtend.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismUserModelExtend.cpp @@ -200,24 +200,10 @@ void CubismUserModelExtend::PreloadMotionGroup(const csmChar* group) csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // モーションデータの読み込み - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelJson, group, i)); if (tmpMotion) { - // フェードインの時間を取得 - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - // フェードアウトの時間を取得 - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } - if (_motions[name]) { // インスタンスを破棄 @@ -257,10 +243,9 @@ void CubismUserModelExtend::ReleaseModelSetting() * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 -* @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ -Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority) { // モーション数が取得出来なかった、もしくは0の時 if (!(_modelJson->GetMotionCount(group))) @@ -296,33 +281,16 @@ Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm:: csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // 一番先頭のモーションを読み込む - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, NULL, NULL, _modelJson, group, no)); if (motion) { - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } - // 終了時にメモリから削除 autoDelete = true; } DeleteBuffer(buffer, path.GetRawString()); } - else - { - // モーションの再生終了コールバックを登録 - motion->SetFinishedMotionHandler(onFinishedMotionHandler); - } // 優先度を設定してモーションを始める return _motionManager->StartMotionPriority(motion, autoDelete, priority); diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismUserModelExtend.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismUserModelExtend.hpp index 92da8c7..32310ce 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismUserModelExtend.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/CubismUserModelExtend.hpp @@ -93,10 +93,9 @@ class CubismUserModelExtend : * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 - * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority); /** * @brief 解放 diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDefine.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDefine.cpp index 2ca324c..3b3c147 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDefine.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDefine.cpp @@ -37,6 +37,11 @@ namespace LAppDefine { // 終了ボタン const csmChar* PowerImageName = "close.png"; + // シェーダー相対パス + const csmChar* ShaderPath = "SampleShaders/"; + // シェーダー本体 + const csmChar* ShaderName = "SpriteEffect.fx"; + // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる const csmChar* MotionGroupIdle = "Idle"; // アイドリング diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDefine.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDefine.hpp index 6bf1bb8..ed50fc4 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDefine.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDefine.hpp @@ -35,6 +35,9 @@ namespace LAppDefine { extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* ShaderName; ///< シェーダー本体 + // モデル定義-------------------------------------------- // 外部定義ファイル(json)と合わせる extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDelegate.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDelegate.cpp index 0860c4f..7c611e2 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDelegate.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDelegate.cpp @@ -207,8 +207,6 @@ LAppDelegate::LAppDelegate() , _deviceLostStep(LostStep::LostStep_None) , _lostCounter(0) , _isFullScreen(false) - , _shaderEffect(NULL) - , _vertexFormat(NULL) { _textureManager = new LAppTextureManager(); _view = new LAppView(); @@ -240,102 +238,6 @@ void LAppDelegate::InitializeCubism() _view->InitializeSprite(); } -bool LAppDelegate::CreateShader() -{ - ReleaseShader(); - - static const csmChar* SpriteShaderEffectSrc = - "float4x4 projectMatrix;"\ - "float4 baseColor;"\ - "texture mainTexture;"\ - \ - "sampler mainSampler = sampler_state{"\ - "texture = ;"\ - "};"\ - \ - "struct VS_IN {"\ - "float2 pos : POSITION;"\ - "float2 uv : TEXCOORD0;"\ - "};"\ - "struct VS_OUT {"\ - "float4 Position : POSITION0;"\ - "float2 uv : TEXCOORD0;"\ - "float4 clipPosition : TEXCOORD1;"\ - "};"\ - \ - "/* Vertex Shader */"\ - "/* normal */"\ - "VS_OUT VertNormal(VS_IN In) {"\ - "VS_OUT Out = (VS_OUT)0;"\ - "Out.Position = mul(float4(In.pos, 0.0f, 1.0f), projectMatrix);"\ - "Out.uv.x = In.uv.x;"\ - "Out.uv.y = 1.0 - +In.uv.y;"\ - "return Out;"\ - "}"\ - \ - "/* Pixel Shader */"\ - "/* normal */"\ - "float4 PixelNormal(VS_OUT In) : COLOR0{"\ - "float4 color = tex2D(mainSampler, In.uv) * baseColor;"\ - "return color;"\ - "}"\ - \ - "/* Technique */"\ - "technique ShaderNames_Normal {"\ - "pass p0{"\ - "VertexShader = compile vs_2_0 VertNormal();"\ - "PixelShader = compile ps_2_0 PixelNormal();"\ - "}"\ - "}"; - - ID3DXBuffer* error = 0; - if (FAILED(D3DXCreateEffect(_device, SpriteShaderEffectSrc, static_cast(strlen(SpriteShaderEffectSrc)), 0, 0, 0, 0, &_shaderEffect, &error))) - { - LAppPal::PrintLogLn("Cannot load the shaders"); - return false; - } - - // この描画で使用する頂点フォーマット - D3DVERTEXELEMENT9 elems[] = { - { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, - { 0, sizeof(float) * 2, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, - D3DDECL_END() - }; - if (_device->CreateVertexDeclaration(elems, &_vertexFormat)) - { - LAppPal::PrintLogLn("CreateVertexDeclaration failed"); - CSM_ASSERT(0); - } - - return true; -} - -ID3DXEffect* LAppDelegate::SetupShader() -{ - if(_device==NULL || _vertexFormat==NULL || _shaderEffect==NULL) - { - return NULL; - } - - _device->SetVertexDeclaration(_vertexFormat); - return _shaderEffect; -} - -void LAppDelegate::ReleaseShader() -{ - if(_vertexFormat) - { - _vertexFormat->Release(); - _vertexFormat = NULL; - } - if(_shaderEffect) - { - _shaderEffect->Release(); - _shaderEffect = NULL; - } -} - - void LAppDelegate::StartFrame() { /* @@ -368,13 +270,6 @@ void LAppDelegate::StartFrame() void LAppDelegate::EndFrame() { - // テクスチャの参照を外しておく - if (_shaderEffect) - { - _shaderEffect->SetTexture("mainTexture", NULL); - _shaderEffect->CommitChanges(); - } - if (_device) { //シーンの終了 diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDelegate.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDelegate.hpp index c6ed3c9..25640fc 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDelegate.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppDelegate.hpp @@ -103,22 +103,6 @@ class LAppDelegate */ void EndFrame(); - /** - * @brief スプライト描画用シェーダの作成と頂点宣言の作成を行う - */ - bool CreateShader(); - - /** - * @brief スプライト描画時、頂点宣言をセットするとともにシェーダエフェクトを返す - */ - ID3DXEffect* SetupShader(); - - /** - * @brief CreateShaderで確保したオブジェクトの開放 - */ - void ReleaseShader(); - - private: enum LostStep @@ -173,7 +157,4 @@ class LAppDelegate bool _isFullScreen; ///< フルスクリーン中か D3DPRESENT_PARAMETERS _presentParameters; ///< プレゼントパラメータ D3DPRESENT_PARAMETERS _presentParametersFull; ///< プレゼントパラメータ フルスクリーン - - ID3DXEffect* _shaderEffect; ///< スプライト描画用シェーダ - IDirect3DVertexDeclaration9* _vertexFormat; ///< スプライト描画用型宣言 }; diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppLive2DManager.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppLive2DManager.cpp index 81df6e4..52c806c 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppLive2DManager.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppLive2DManager.cpp @@ -24,6 +24,11 @@ using namespace LAppDefine; namespace { LAppLive2DManager* s_instance = NULL; + void BeganMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion began: %x", self); + } + void FinishedMotion(ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -78,6 +83,7 @@ LAppLive2DManager::~LAppLive2DManager() } } _releaseModel.Clear(); + _modelDir.Clear(); delete _viewMatrix; CubismFramework::Dispose(); @@ -106,30 +112,43 @@ void LAppLive2DManager::SetUpModel() { // ResourcesPathの中にあるフォルダ名を全てクロールし、モデルが存在するフォルダを定義する。 // フォルダはあるが同名の.model3.jsonが見つからなかった場合はリストに含めない。 + // 一部文字が受け取れないためワイド文字で受け取ってUTF8に変換し格納する。 + csmString crawlPath(ResourcesPath); crawlPath += "*.*"; - struct _finddata_t fdata; - intptr_t fh = _findfirst(crawlPath.GetRawString(), &fdata); - if (fh == -1) return; + wchar_t wideStr[MAX_PATH]; + csmChar name[MAX_PATH]; + LAppPal::ConvertMultiByteToWide(crawlPath.GetRawString(), wideStr, MAX_PATH); + + struct _wfinddata_t fdata; + intptr_t fh = _wfindfirst(wideStr, &fdata); + if (fh == -1) + { + return; + } _modelDir.Clear(); - while (_findnext(fh, &fdata) == 0) + while (_wfindnext(fh, &fdata) == 0) { - if ((fdata.attrib & _A_SUBDIR) && strcmp(fdata.name, "..") != 0) + if ((fdata.attrib & _A_SUBDIR) && wcscmp(fdata.name, L"..") != 0) { + LAppPal::ConvertWideToMultiByte(fdata.name, name, MAX_PATH); + // フォルダと同名の.model3.jsonがあるか探索する csmString model3jsonPath(ResourcesPath); - model3jsonPath += fdata.name; + model3jsonPath += name; model3jsonPath.Append(1, '/'); - model3jsonPath += fdata.name; + model3jsonPath += name; model3jsonPath += ".model3.json"; - struct _finddata_t fdata2; - if (_findfirst(model3jsonPath.GetRawString(), &fdata2) != -1) + LAppPal::ConvertMultiByteToWide(model3jsonPath.GetRawString(), wideStr, MAX_PATH); + + struct _wfinddata_t fdata2; + if (_wfindfirst(wideStr, &fdata2) != -1) { - _modelDir.PushBack(csmString(fdata.name)); + _modelDir.PushBack(csmString(name)); } } } @@ -189,7 +208,7 @@ void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) { LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); } - _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -304,7 +323,7 @@ void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); // 別レンダリング先を選択した際の背景クリア色 - float clearColor[3] = { 1.0f, 1.0f, 1.0f }; + float clearColor[3] = { 0.0f, 0.0f, 0.0f }; LAppDelegate::GetInstance()->GetView()->SetRenderTargetClearColor(clearColor[0], clearColor[1], clearColor[2]); } } diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppModel.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppModel.cpp index ea84039..b47e37a 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppModel.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppModel.cpp @@ -290,21 +290,10 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -457,7 +446,7 @@ void LAppModel::Update() } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -487,21 +476,10 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -510,6 +488,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -529,7 +508,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -538,7 +517,7 @@ CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -595,7 +574,7 @@ void LAppModel::SetExpression(const csmChar* expressionID) if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppModel.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppModel.hpp index 24e969c..8ef42db 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppModel.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppModel.hpp @@ -67,9 +67,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -77,9 +78,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppPal.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppPal.cpp index ab9dc71..c60bf1d 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppPal.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppPal.cpp @@ -20,6 +20,7 @@ namespace { LARGE_INTEGER s_frequency; LARGE_INTEGER s_lastFrame; double s_deltaTime = 0.0; + const csmUint32 LogMessageLength = 256; } void LAppPal::StartTimer() @@ -29,12 +30,12 @@ void LAppPal::StartTimer() csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { - //filePath;// - const char* path = filePath.c_str(); + wchar_t wideStr[MAX_PATH]; + MultiByteToWideChar(CP_UTF8, 0U, filePath.c_str(), -1, wideStr, MAX_PATH); int size = 0; - struct stat statBuf; - if (stat(path, &statBuf) == 0) + struct _stat statBuf; + if (_wstat(wideStr, &statBuf) == 0) { size = statBuf.st_size; @@ -42,7 +43,7 @@ csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { if (DebugLogEnable) { - PrintLogLn("Stat succeeded but file size is zero. path:%s", path); + PrintLogLn("Stat succeeded but file size is zero. path:%s", filePath.c_str()); } return NULL; } @@ -51,27 +52,33 @@ csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { if (DebugLogEnable) { - PrintLogLn("Stat failed. errno:%d path:%s", errno, path); + PrintLogLn("Stat failed. errno:%d path:%s", errno, filePath.c_str()); } return NULL; } - std::fstream file; - file.open(path, std::ios::in | std::ios::binary); + std::wfstream file; + file.open(wideStr, std::ios::in | std::ios::binary); if (!file.is_open()) { if (DebugLogEnable) { - PrintLogLn("File open failed. path:%s", path); + PrintLogLn("File open failed. path:%s", filePath.c_str()); } return NULL; } - char* buf = new char[size]; - file.read(buf, size); - file.close(); + // ファイル名はワイド文字で探しているがファイルの中身はutf-8なので、1バイトずつ取得する。 *outSize = size; + csmChar* buf = new char[*outSize]; + std::wfilebuf* fileBuf = file.rdbuf(); + for (csmUint32 i = 0; i < *outSize; i++) + { + buf[i] = fileBuf->sbumpc(); + } + file.close(); + return reinterpret_cast(buf); } @@ -107,53 +114,46 @@ void LAppPal::UpdateTime() void LAppPal::PrintLog(const char* format, ...) { va_list args; - char buf[256]; + char multiByteBuf[LogMessageLength]; + wchar_t wideBuf[LogMessageLength]; va_start(args, format); - _vsnprintf_s(buf, sizeof(buf), format, args); - OutputDebugStringA((LPCSTR)buf); + _vsnprintf_s(multiByteBuf, sizeof(multiByteBuf), format, args); + ConvertMultiByteToWide(multiByteBuf, wideBuf, sizeof(wideBuf)); + OutputDebugStringW(wideBuf); va_end(args); } void LAppPal::PrintLogLn(const char* format, ...) { va_list args; - char buf[256]; + char multiByteBuf[LogMessageLength]; + wchar_t wideBuf[LogMessageLength]; va_start(args, format); - _vsnprintf_s(buf, sizeof(buf), format, args); - OutputDebugStringA((LPCSTR)buf); - OutputDebugStringA("\n"); // 改行を別途付与します + _vsnprintf_s(multiByteBuf, sizeof(multiByteBuf), format, args); + ConvertMultiByteToWide(multiByteBuf, wideBuf, sizeof(wideBuf)); + OutputDebugStringW(wideBuf); + OutputDebugStringW(L"\n"); // 改行を別途付与します va_end(args); } -void LAppPal::PrintLogW(const wchar_t* format, ...) +void LAppPal::PrintMessage(const csmChar* message) { - va_list args; - wchar_t buf[256]; - va_start(args, format); - _vsnwprintf_s(buf, sizeof(buf), format, args); - OutputDebugString((LPCSTR)buf); - va_end(args); + PrintLog("%s", message); } -void LAppPal::PrintLogLnW(const wchar_t* format, ...) +void LAppPal::PrintMessageLn(const csmChar* message) { - va_list args; - wchar_t buf[256]; - va_start(args, format); - _vsnwprintf_s(buf, sizeof(buf), format, args); - OutputDebugString((LPCSTR)buf); - OutputDebugString("\n"); // 改行を別途付与します - va_end(args); + PrintLogLn("%s", message); } -void LAppPal::PrintMessage(const csmChar* message) +bool LAppPal::ConvertMultiByteToWide(const csmChar* multiByte, wchar_t* wide, int wideSize) { - PrintLog("%s", message); + return MultiByteToWideChar(CP_UTF8, 0U, multiByte, -1, wide, wideSize) != 0; } -void LAppPal::PrintMessageLn(const csmChar* message) +bool LAppPal::ConvertWideToMultiByte(const wchar_t* wide, csmChar* multiByte, int multiByteSize) { - PrintLogLn("%s", message); + return WideCharToMultiByte(CP_UTF8, 0U, wide, -1, multiByte, multiByteSize, NULL, NULL) != 0; } void LAppPal::CoordinateFullScreenToWindow(float clientWidth, float clientHeight, float fullScreenX, float fullScreenY, float& retWindowX, float& retWindowY) diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppPal.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppPal.hpp index 9afa691..7e436b7 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppPal.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppPal.hpp @@ -85,28 +85,6 @@ class LAppPal */ static void PrintLogLn(const char*, ...); - /** - * @brief ログを出力する wchar版 - * - * ログを出力する - * - * @param[in] format 書式付文字列 - * @param[in] ... (可変長引数)文字列 - * - */ - static void PrintLogW(const wchar_t*, ...); - - /** - * @brief ログを出力し最後に改行する wchar版 - * - * ログを出力し最後に改行する - * - * @param[in] format 書式付文字列 - * @param[in] ... (可変長引数)文字列 - * - */ - static void PrintLogLnW(const wchar_t*, ...); - /** * @brief メッセージを出力する * @@ -127,6 +105,24 @@ class LAppPal */ static void PrintMessageLn(const Csm::csmChar* message); + /** + * @brief マルチバイト文字からワイド文字に変換する + * + * @param[in] multiByte 変換元 + * @param[in] wide 格納先 + * @param[in] wideSize 格納先の大きさ + */ + static bool ConvertMultiByteToWide(const Csm::csmChar* multiByte, wchar_t* wide, int wideSize); + + /** + * @brief ワイド文字からマルチバイト文字に変換する + * + * @param[in] wide 変換元 + * @param[in] multiByte 格納先 + * @param[in] multiByteSize 格納先の大きさ + */ + static bool ConvertWideToMultiByte(const wchar_t* wide, Csm::csmChar* multiByte, int multiByteSize); + /** * @brief 座標変換 * フルスクリーン LT(-bufferX, bufferY) RB(bufferX, -bufferY) → ウィンドウ・マウス LT(0, 0) RB(bufferX, bufferY) diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSprite.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSprite.cpp index 7ea9c1f..b83f65a 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSprite.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSprite.cpp @@ -16,15 +16,17 @@ using namespace LAppDefine; LAppSprite::LAppSprite() : _rect(), _vertexStore(NULL), - _indexStore(NULL) + _indexStore(NULL), + _shader(NULL) { _color = D3DXVECTOR4(1.0f, 1.0f, 1.0f, 1.0f); } -LAppSprite::LAppSprite(float x, float y, float width, float height, Csm::csmUint64 textureId) +LAppSprite::LAppSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, LAppSpriteShader* shader) : _rect(), _vertexStore(NULL), - _indexStore(NULL) + _indexStore(NULL), + _shader(shader) { _rect.left = (x - width * 0.5f); _rect.right = (x + width * 0.5f); @@ -71,9 +73,10 @@ LAppSprite::~LAppSprite() } _indexStore = NULL; _vertexStore = NULL; + _shader = NULL; } -void LAppSprite::RenderImmidiate(LPDIRECT3DDEVICE9 device, ID3DXEffect* shaderEffect, int maxWidth, int maxHeight, LPDIRECT3DTEXTURE9 texture) const +void LAppSprite::RenderImmidiate(LPDIRECT3DDEVICE9 device, int maxWidth, int maxHeight, LPDIRECT3DTEXTURE9 texture) const { if (!_vertexStore) { @@ -85,7 +88,7 @@ void LAppSprite::RenderImmidiate(LPDIRECT3DDEVICE9 device, ID3DXEffect* shaderEf return; // この際は描画できず } - if (shaderEffect == NULL) + if (device == NULL || _shader == NULL) { return; } @@ -97,13 +100,6 @@ void LAppSprite::RenderImmidiate(LPDIRECT3DDEVICE9 device, ID3DXEffect* shaderEf _vertexStore[3].x = (_rect.right - maxWidth * 0.5f) / (maxWidth * 0.5f); _vertexStore[3].y = (_rect.up - maxHeight * 0.5f) / (maxHeight * 0.5f); _vertexStore[3].u = 1.0f; _vertexStore[3].v = 1.0f; { - D3DXMATRIX proj( - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - ); - // レンダーステート device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); @@ -112,27 +108,14 @@ void LAppSprite::RenderImmidiate(LPDIRECT3DDEVICE9 device, ID3DXEffect* shaderEf device->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, false); device->SetRenderState(D3DRS_ALPHABLENDENABLE, true); - - UINT numPass = 0; - shaderEffect->SetTechnique("ShaderNames_Normal"); - - // numPassには指定のtechnique内に含まれるpassの数が返る - shaderEffect->Begin(&numPass, 0); - shaderEffect->BeginPass(0); - - shaderEffect->SetMatrix("projectMatrix", &proj); - - shaderEffect->SetVector("baseColor", &_color); - - shaderEffect->SetTexture("mainTexture", texture); - - shaderEffect->CommitChanges(); + // シェーダー準備 + _shader->SetShader(device, texture, _color); // 描画 device->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, VERTEX_NUM, 2, _indexStore, D3DFMT_INDEX16, _vertexStore, sizeof(SpriteVertex)); - shaderEffect->EndPass(); - shaderEffect->End(); + // シェーダー後処理 + _shader->UnsetShader(); } } diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSprite.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSprite.hpp index 63e3d40..58314fc 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSprite.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSprite.hpp @@ -12,6 +12,8 @@ #include #include +#include "LAppSpriteShader.hpp" + /** * @brief スプライトを実装するクラス。 * @@ -53,8 +55,9 @@ class LAppSprite * @param[in] width 横幅 * @param[in] height 高さ * @param[in] textureId テクスチャID + * @param[in] shader シェーダー操作クラス */ - LAppSprite(float x, float y, float width, float height, Csm::csmUint64 textureId); + LAppSprite(float x, float y, float width, float height, Csm::csmUint64 textureId, LAppSpriteShader* shader); /** * @brief デストラクタ @@ -70,12 +73,11 @@ class LAppSprite /** * @brief テクスチャを指定しての描画 * @param[in] device D3D9デバイス - * @param[in] shaderEffect シェーダーエフェクト * @param[in] width 幅 * @param[in] height 高さ * @param[in] texture 使用テクスチャ */ - void RenderImmidiate(LPDIRECT3DDEVICE9 device, ID3DXEffect* shaderEffect, int maxWidth, int maxHeight, LPDIRECT3DTEXTURE9 texture) const; + void RenderImmidiate(LPDIRECT3DDEVICE9 device, int maxWidth, int maxHeight, LPDIRECT3DTEXTURE9 texture) const; /** * @brief ヒットチェック @@ -109,4 +111,6 @@ class LAppSprite SpriteVertex* _vertexStore; ///< 頂点をストアしておく領域 Live2D::Cubism::Framework::csmUint16* _indexStore; ///< インデックスをストアしておく領域 D3DXVECTOR4 _color; ///< 描画色 + + LAppSpriteShader* _shader; ///< シェーダー }; diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSpriteShader.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSpriteShader.cpp new file mode 100644 index 0000000..80ec16a --- /dev/null +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSpriteShader.cpp @@ -0,0 +1,128 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpriteShader.hpp" + +#include +#include +#include "LAppDefine.hpp" +#include "LAppDelegate.hpp" +#include "LAppPal.hpp" + +LAppSpriteShader::LAppSpriteShader() + : _shaderEffect(nullptr) + , _vertexFormat(nullptr) +{ + CreateShader(); +} + +LAppSpriteShader::~LAppSpriteShader() +{ + ReleaseShader(); +} + +bool LAppSpriteShader::CreateShader() +{ + LPDIRECT3DDEVICE9 device = LAppDelegate::GetInstance()->GetD3dDevice(); + ReleaseShader(); + + // ファイル読み込み + const char* shaderCode; + Csm::csmSizeInt shaderSize; + { + // シェーダーのパスの作成 + Csm::csmString shaderFileName(LAppDefine::ShaderPath); + shaderFileName += LAppDefine::ShaderName; + + // ファイル読み込み + shaderCode = reinterpret_cast(LAppPal::LoadFileAsBytes(shaderFileName.GetRawString(), &shaderSize)); + } + + // シェーダー作成 + ID3DXBuffer* error = 0; + HRESULT result = S_OK; + do + { + // エフェクト作成 + if (FAILED(result = D3DXCreateEffect(device, shaderCode, shaderSize, 0, 0, 0, 0, &_shaderEffect, &error))) + { + LAppPal::PrintLog("Cannot load the shaders"); + break; + } + + // この描画で使用する頂点フォーマット + D3DVERTEXELEMENT9 elems[] = { + { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, + { 0, sizeof(float) * 2, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, + D3DDECL_END() + }; + if (FAILED(result = device->CreateVertexDeclaration(elems, &_vertexFormat))) + { + LAppPal::PrintLog("CreateVertexDeclaration failed"); + break; + } + } while(0); + + if (FAILED(result)) { + return false; + } + + return true; +} + +void LAppSpriteShader::ReleaseShader() +{ + if (_vertexFormat) + { + _vertexFormat->Release(); + _vertexFormat = nullptr; + } + + if (_shaderEffect) + { + _shaderEffect->Release(); + _shaderEffect = nullptr; + } +} + +void LAppSpriteShader::SetShader(LPDIRECT3DDEVICE9 device, LPDIRECT3DTEXTURE9 texture, D3DXVECTOR4 color) +{ + D3DXMATRIX proj( + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + ); + + // 頂点フォーマット + device->SetVertexDeclaration(_vertexFormat); + + _shaderEffect->SetTechnique("ShaderNames_Normal"); + + // numPassには指定のtechnique内に含まれるpassの数が返る + UINT numPass = 0; + _shaderEffect->Begin(&numPass, 0); + _shaderEffect->BeginPass(0); + + _shaderEffect->SetMatrix("projectMatrix", &proj); + + _shaderEffect->SetVector("baseColor", &color); + + _shaderEffect->SetTexture("mainTexture", texture); + + _shaderEffect->CommitChanges(); +} + +void LAppSpriteShader::UnsetShader() +{ + _shaderEffect->EndPass(); + + _shaderEffect->SetTexture("mainTexture", NULL); + _shaderEffect->CommitChanges(); + + _shaderEffect->End(); +} diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSpriteShader.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSpriteShader.hpp new file mode 100644 index 0000000..f305024 --- /dev/null +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppSpriteShader.hpp @@ -0,0 +1,56 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include "CubismFramework.hpp" + +/** +* @brief スプライト用のシェーダー設定を保持するクラス。 +*/ +class LAppSpriteShader +{ +public: + + /** + * @brief コンストラクタ + */ + LAppSpriteShader(); + + /** + * @brief デストラクタ + */ + ~LAppSpriteShader(); + + /** + * @brief シェーダーの作成を行う + */ + bool CreateShader(); + + /** + * @brief シェーダーの解放を行う + */ + void ReleaseShader(); + + /** + * @brief スプライトの描画直前に呼び出される + * シェーダーのセットを行う + */ + void SetShader(LPDIRECT3DDEVICE9 device, LPDIRECT3DTEXTURE9 texture, D3DXVECTOR4 color); + + /** + * @brief スプライトの描画後に呼び出される + * シェーダーの後処理を行う + */ + void UnsetShader(); + +private: + + ID3DXEffect* _shaderEffect; ///< スプライト描画用シェーダ + IDirect3DVertexDeclaration9* _vertexFormat; ///< スプライト描画用型宣言 +}; diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppTextureManager.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppTextureManager.cpp index eb09651..a628440 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppTextureManager.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppTextureManager.cpp @@ -29,6 +29,11 @@ LAppTextureManager::TextureInfo* LAppTextureManager::CreateTextureFromPngFile(st { LPDIRECT3DDEVICE9 device = LAppDelegate::GetD3dDevice(); + // wcharに変換 + const int WCHAR_LENGTH = 512; + wchar_t wchrStr[WCHAR_LENGTH] = L""; + LAppPal::ConvertMultiByteToWide(fileName.c_str(), wchrStr, sizeof(wchrStr)); + IDirect3DTexture9* texture = NULL; LAppTextureManager::TextureInfo* textureInfo = NULL; @@ -43,7 +48,7 @@ LAppTextureManager::TextureInfo* LAppTextureManager::CreateTextureFromPngFile(st // Lockする場合は立てる DWORD usage = isPreMult ? D3DUSAGE_DYNAMIC : 0; - if (SUCCEEDED(D3DXCreateTextureFromFileExA(device, fileName.c_str(), width, height, + if (SUCCEEDED(D3DXCreateTextureFromFileExW(device, wchrStr, width, height, mipLevel, // 「この値が 0 または D3DX_DEFAULT の場合は、完全なミップマップ チェーンが作成される。」 usage, D3DFMT_A8R8G8B8, diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppView.cpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppView.cpp index c8148b5..a7c5d2e 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppView.cpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppView.cpp @@ -8,6 +8,7 @@ #include "LAppView.hpp" #include #include +#include #include "LAppPal.hpp" #include "LAppDelegate.hpp" #include "LAppLive2DManager.hpp" @@ -25,7 +26,8 @@ LAppView::LAppView(): _gear(NULL), _power(NULL), _renderSprite(NULL), - _renderTarget(SelectTarget_None) + _renderTarget(SelectTarget_None), + _shader(NULL) { _clearColor[0] = 1.0f; _clearColor[1] = 1.0f; @@ -119,12 +121,6 @@ void LAppView::Render() return; } - ID3DXEffect* shaderEffect = LAppDelegate::GetInstance()->SetupShader(); - if (!shaderEffect) - { - return; - } - // スプライト描画 int width, height; LAppDelegate::GetInstance()->GetClientSize(width, height); @@ -134,17 +130,17 @@ void LAppView::Render() if (_back) { textureManager->GetTexture(_back->GetTextureId(), texture); - _back->RenderImmidiate(device, shaderEffect, width, height, texture); + _back->RenderImmidiate(device, width, height, texture); } if (_gear) { textureManager->GetTexture(_gear->GetTextureId(), texture); - _gear->RenderImmidiate(device, shaderEffect, width, height, texture); + _gear->RenderImmidiate(device, width, height, texture); } if (_power) { textureManager->GetTexture(_power->GetTextureId(), texture); - _power->RenderImmidiate(device, shaderEffect, width, height, texture); + _power->RenderImmidiate(device, width, height, texture); } } @@ -164,7 +160,7 @@ void LAppView::Render() if (model) { - _renderSprite->RenderImmidiate(device, shaderEffect, width, height, model->GetRenderBuffer().GetTexture()); + _renderSprite->RenderImmidiate(device, width, height, model->GetRenderBuffer().GetTexture()); } } } @@ -172,6 +168,9 @@ void LAppView::Render() void LAppView::InitializeSprite() { + // シェーダ作成 + _shader = new LAppSpriteShader(); + int width, height; LAppDelegate::GetInstance()->GetClientSize(width, height); @@ -186,7 +185,7 @@ void LAppView::InitializeSprite() float y = height * 0.5f; float fWidth = static_cast(backgroundTexture->width * 2.0f); float fHeight = static_cast(height * 0.95f); - _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id); + _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, _shader); imageName = GearImageName; LAppTextureManager::TextureInfo* gearTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName, false, @@ -196,7 +195,7 @@ void LAppView::InitializeSprite() y = static_cast(height - gearTexture->height * 0.5f); fWidth = static_cast(gearTexture->width); fHeight = static_cast(gearTexture->height); - _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id); + _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, _shader); imageName = PowerImageName; LAppTextureManager::TextureInfo* powerTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName, false, @@ -206,15 +205,12 @@ void LAppView::InitializeSprite() y = static_cast(powerTexture->height * 0.5f); fWidth = static_cast(powerTexture->width); fHeight = static_cast(powerTexture->height); - _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id); + _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, _shader); // 画面全体を覆うサイズ x = width * 0.5f; y = height * 0.5f; - _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0); - - // シェーダ作成 - LAppDelegate::GetInstance()->CreateShader(); + _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, _shader); } void LAppView::ReleaseSprite() @@ -228,13 +224,6 @@ void LAppView::ReleaseSprite() delete _renderSprite; _renderSprite = NULL; - if (_power) - { - textureManager->ReleaseTexture(_power->GetTextureId()); - } - delete _power; - _power = NULL; - if (_gear) { textureManager->ReleaseTexture(_gear->GetTextureId()); @@ -242,6 +231,13 @@ void LAppView::ReleaseSprite() delete _gear; _gear = NULL; + if (_power) + { + textureManager->ReleaseTexture(_power->GetTextureId()); + } + delete _power; + _power = NULL; + if (_back) { textureManager->ReleaseTexture(_back->GetTextureId()); @@ -250,7 +246,12 @@ void LAppView::ReleaseSprite() _back = NULL; // スプライト用のシェーダ・頂点宣言も開放 - LAppDelegate::GetInstance()->ReleaseShader(); + if (_shader) + { + _shader->ReleaseShader(); + } + delete _shader; + _shader = NULL; } void LAppView::OnDeviceLost() @@ -379,15 +380,13 @@ void LAppView::PostModelDraw(LAppModel &refModel) // LAppViewの持つフレームバッファを使うなら、スプライトへの描画はここ if (_renderTarget == SelectTarget_ViewFrameBuffer && _renderSprite) { - ID3DXEffect* shaderEffect = LAppDelegate::GetInstance()->SetupShader(); - // スプライト描画 int width, height; LAppDelegate::GetInstance()->GetClientSize(width, height); _renderSprite->SetColor(1.0f, 1.0f, 1.0f, GetSpriteAlpha(0)); _renderSprite->RenderImmidiate(LAppDelegate::GetInstance()->GetD3dDevice(), - shaderEffect, width, height, useTarget->GetTexture()); + width, height, useTarget->GetTexture()); } } } diff --git a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppView.hpp b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppView.hpp index 360d245..88b67b2 100644 --- a/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppView.hpp +++ b/Samples/D3D9/Demo/proj.d3d9.cmake/src/LAppView.hpp @@ -11,6 +11,7 @@ #include #include #include "CubismFramework.hpp" +#include "LAppSpriteShader.hpp" class TouchManager; class LAppSprite; @@ -186,4 +187,5 @@ class LAppView SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + LAppSpriteShader* _shader; ///< スプライト用のシェーダー準備クラス }; diff --git a/Samples/D3D9/Shaders/SpriteEffect.fx b/Samples/D3D9/Shaders/SpriteEffect.fx new file mode 100644 index 0000000..919e661 --- /dev/null +++ b/Samples/D3D9/Shaders/SpriteEffect.fx @@ -0,0 +1,51 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +float4x4 projectMatrix; +float4 baseColor; +texture mainTexture; + +// サンプリング +sampler mainSampler = sampler_state{ + texture = ; +}; + +// 頂点シェーダーの入力定義 +struct VS_IN { + float2 pos : POSITION; + float2 uv : TEXCOORD0; +}; + +// 頂点シェーダーの出力定義 +struct VS_OUT { + float4 Position : POSITION0; + float2 uv : TEXCOORD0; + float4 clipPosition : TEXCOORD1; +}; + +// 頂点シェーダー +VS_OUT VertNormal(VS_IN In) { + VS_OUT Out = (VS_OUT)0; + Out.Position = mul(float4(In.pos, 0.0f, 1.0f), projectMatrix); + Out.uv.x = In.uv.x; + Out.uv.y = 1.0 - +In.uv.y; + return Out; +} + +// ピクセルシェーダー +float4 PixelNormal(VS_OUT In) : COLOR0{ + float4 color = tex2D(mainSampler, In.uv) * baseColor; + return color; +} + +// テクニックとパス +technique ShaderNames_Normal { + pass p0{ + VertexShader = compile vs_2_0 VertNormal(); + PixelShader = compile ps_2_0 PixelNormal(); + } +} diff --git a/Samples/Metal/Demo/proj.ios.cmake/CMakeLists.txt b/Samples/Metal/Demo/proj.ios.cmake/CMakeLists.txt index dcb7c70..78d3b2c 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/CMakeLists.txt +++ b/Samples/Metal/Demo/proj.ios.cmake/CMakeLists.txt @@ -9,6 +9,7 @@ set(FRAMEWORK_PATH ${SDK_ROOT_PATH}/Framework) set(THIRD_PARTY_PATH ${SDK_ROOT_PATH}/Samples/Metal/thirdParty) set(STB_PATH ${THIRD_PARTY_PATH}/stb) set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) +set(SHADER_PATH ${SDK_ROOT_PATH}/Samples/Metal/Shaders) # Set project. project(${APP_NAME}) @@ -135,7 +136,7 @@ if(CSM_MAC_CATALYST) ) else() set_xcode_property(${APP_NAME} - PRODUCT_BUNDLE_IDENTIFIER "com.live2d.demo-4-r7" "All" + PRODUCT_BUNDLE_IDENTIFIER "com.live2d.demo-5-r.2" "All" ) endif() set_xcode_property(${APP_NAME} TARGETED_DEVICE_FAMILY "1,2" "All") diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/CMakeLists.txt b/Samples/Metal/Demo/proj.ios.cmake/src/CMakeLists.txt index c59c775..e787712 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/CMakeLists.txt +++ b/Samples/Metal/Demo/proj.ios.cmake/src/CMakeLists.txt @@ -25,11 +25,18 @@ target_sources(${APP_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/MetalUIView.m ${CMAKE_CURRENT_SOURCE_DIR}/MetalView.h ${CMAKE_CURRENT_SOURCE_DIR}/MetalView.m + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../Framework/src/Rendering/Metal/MetalShaders.metal ) +set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/Shaders PROPERTIES MACOSX_PACKAGE_LOCATION Shaders) + +set(RESOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../Framework/src/Rendering/Metal/MetalShaders.metal) + set_target_properties(${APP_NAME} PROPERTIES MACOSX_BUNDLE TRUE MACOSX_FRAMEWORK_IDENTIFIER org.cmake.ExecutableTarget - RESOURCE ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../Framework/src/Rendering/Metal/MetalShaders.metal + RESOURCE "${RESOURCE_FILES}" ) diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/Info.plist b/Samples/Metal/Demo/proj.ios.cmake/src/Info.plist index 1e49ff2..d5aa643 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/Info.plist +++ b/Samples/Metal/Demo/proj.ios.cmake/src/Info.plist @@ -35,12 +35,6 @@ UISupportedInterfaceOrientations UIInterfaceOrientationLandscapeLeft - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/LAppDefine.h b/Samples/Metal/Demo/proj.ios.cmake/src/LAppDefine.h index ceef801..c8c1fcc 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/LAppDefine.h +++ b/Samples/Metal/Demo/proj.ios.cmake/src/LAppDefine.h @@ -38,6 +38,9 @@ namespace LAppDefine { extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* ShaderName; ///< シェーダー本体 + // モデル定義-------------------------------------------- // 外部定義ファイル(json)と合わせる extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/LAppDefine.mm b/Samples/Metal/Demo/proj.ios.cmake/src/LAppDefine.mm index 5cb2a2a..ee190e4 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/LAppDefine.mm +++ b/Samples/Metal/Demo/proj.ios.cmake/src/LAppDefine.mm @@ -41,6 +41,11 @@ // 終了ボタン const csmChar* PowerImageName = "close.png"; + // シェーダー相対パス + const csmChar* ShaderPath = "Shaders/"; + // シェーダー本体 + const csmChar* ShaderName = "SpriteEffect.metal"; + // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる const csmChar* MotionGroupIdle = "Idle"; // アイドリング diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/LAppLive2DManager.mm b/Samples/Metal/Demo/proj.ios.cmake/src/LAppLive2DManager.mm index 656333a..b2f992c 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/LAppLive2DManager.mm +++ b/Samples/Metal/Demo/proj.ios.cmake/src/LAppLive2DManager.mm @@ -27,6 +27,11 @@ @implementation LAppLive2DManager static LAppLive2DManager* s_instance = nil; +void BeganMotion(Csm::ACubismMotion* self) +{ + LAppPal::PrintLogLn("Motion began: %x", self); +} + void FinishedMotion(Csm::ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -198,7 +203,7 @@ - (void)onTap:(Csm::csmFloat32)x floatY:(Csm::csmFloat32)y; { LAppPal::PrintLogLn("[APP]hit area: [%s]", LAppDefine::HitAreaNameBody); } - _models[i]->StartRandomMotion(LAppDefine::MotionGroupTapBody, LAppDefine::PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(LAppDefine::MotionGroupTapBody, LAppDefine::PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -207,8 +212,11 @@ - (void)onUpdate:(id )commandBuffer currentDrawable:(id)commandBuffer currentDrawable:(idSetMTLPixelFormat(MTLPixelFormatBGRA8Unorm); _renderBuffer->SetClearColor(0.0, 0.0, 0.0, 0.0); - _renderBuffer->CreateOffscreenSurface(width, height, nil); + _renderBuffer->CreateOffscreenSurface(static_cast(width), static_cast(height), nil); if (_renderTarget == SelectTarget_ViewFrameBuffer) { @@ -388,9 +396,9 @@ - (void)changeScene:(Csm::csmInt32)index; _models[1]->GetModelMatrix()->TranslateX(0.2f); #endif - float clearColorR = 1.0f; - float clearColorG = 1.0f; - float clearColorB = 1.0f; + float clearColorR = 0.0f; + float clearColorG = 0.0f; + float clearColorB = 0.0f; AppDelegate* delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate]; ViewController* view = [delegate viewController]; diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/LAppModel.h b/Samples/Metal/Demo/proj.ios.cmake/src/LAppModel.h index d698e90..89ba6e6 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/LAppModel.h +++ b/Samples/Metal/Demo/proj.ios.cmake/src/LAppModel.h @@ -65,9 +65,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -75,9 +76,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/LAppModel.mm b/Samples/Metal/Demo/proj.ios.cmake/src/LAppModel.mm index 702278a..20a1d6e 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/LAppModel.mm +++ b/Samples/Metal/Demo/proj.ios.cmake/src/LAppModel.mm @@ -300,21 +300,10 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -452,7 +441,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -482,21 +471,10 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, NULL, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -505,6 +483,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -523,7 +502,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -532,7 +511,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -588,7 +567,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/LAppSprite.mm b/Samples/Metal/Demo/proj.ios.cmake/src/LAppSprite.mm index 0684703..141220f 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/LAppSprite.mm +++ b/Samples/Metal/Demo/proj.ios.cmake/src/LAppSprite.mm @@ -7,6 +7,8 @@ #import "LAppSprite.h" #import +#import "LAppDefine.h" +#import "LAppPal.h" #import #import #import "Rendering/Metal/CubismRenderingInstanceSingleton_Metal.h" @@ -138,43 +140,6 @@ - (void)SetColor:(float)r g:(float)g b:(float)b a:(float)a _spriteColorA = a; } -- (NSString*)GetMetalShader { - NSString *string = - @"#include \n" - "using namespace metal;\n" - "\n" - "struct ColorInOut\n" - "{\n" - " float4 position [[ position ]];\n" - " float2 texCoords;\n" - "};\n" - "\n" - "struct BaseColor\n" - "{\n" - " float4 color;\n" - "};\n" - "\n" - "vertex ColorInOut vertexShader(constant float4 *positions [[ buffer(0) ]],\n" - " constant float2 *texCoords [[ buffer(1) ]],\n" - " uint vid [[ vertex_id ]])\n" - "{\n" - " ColorInOut out;\n" - " out.position = positions[vid];\n" - " out.texCoords = texCoords[vid];\n" - " return out;\n" - "}\n" - "\n" - "fragment float4 fragmentShader(ColorInOut in [[ stage_in ]],\n" - " texture2d texture [[ texture(0) ]],\n" - " constant BaseColor &uniform [[ buffer(2) ]])\n" - "{\n" - " constexpr sampler colorSampler;\n" - " float4 color = texture.sample(colorSampler, in.texCoords) * uniform.color;\n" - " return color;\n" - "}\n"; - return string; -} - - (void)SetMTLBuffer:(id )device MaxWidth:(float)maxWidth MaxHeight:(float)maxHeight { vector_float4 positionVertex[] = @@ -205,7 +170,14 @@ - (void)SetMTLFunction:(id )device { MTLCompileOptions* compileOptions = [MTLCompileOptions new]; compileOptions.languageVersion = MTLLanguageVersion2_1; - NSString* shader = [self GetMetalShader]; + + // シェーダをファイルから読みこみ + unsigned int size; + Csm::csmString shaderFilePath(LAppDefine::ShaderPath); + shaderFilePath += LAppDefine::ShaderName; + unsigned char* shaderRawString = LAppPal::LoadFileAsBytes(shaderFilePath.GetRawString(), &size); + NSString* shader = [NSString stringWithUTF8String:(char *)shaderRawString]; + NSError* compileError; id shaderLib = [device newLibraryWithSource:shader options:compileOptions error:&compileError]; if (!shaderLib) diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/LAppTextureManager.mm b/Samples/Metal/Demo/proj.ios.cmake/src/LAppTextureManager.mm index 5bda0d9..213949e 100644 --- a/Samples/Metal/Demo/proj.ios.cmake/src/LAppTextureManager.mm +++ b/Samples/Metal/Demo/proj.ios.cmake/src/LAppTextureManager.mm @@ -96,7 +96,6 @@ - (TextureInfo*) createTextureFromPngFile:(std::string)fileName int widthLevels = ceil(log2(width)); int heightLevels = ceil(log2(height)); int mipCount = (heightLevels > widthLevels) ? heightLevels : widthLevels; - textureDescriptor.mipmapLevelCount = mipCount; CubismRenderingInstanceSingleton_Metal *single = [CubismRenderingInstanceSingleton_Metal sharedManager]; diff --git a/Samples/Metal/Demo/proj.ios.cmake/src/Shaders/SpriteEffect.metal b/Samples/Metal/Demo/proj.ios.cmake/src/Shaders/SpriteEffect.metal new file mode 100644 index 0000000..30489f0 --- /dev/null +++ b/Samples/Metal/Demo/proj.ios.cmake/src/Shaders/SpriteEffect.metal @@ -0,0 +1,33 @@ +#include + +using namespace metal; + +struct ColorInOut +{ +float4 position [[ position ]]; +float2 texCoords; +}; + +struct BaseColor +{ + float4 color; +}; + +vertex ColorInOut vertexShader(constant float4 *positions [[ buffer(0) ]], + constant float2 *texCoords [[ buffer(1) ]], + uint vid [[ vertex_id ]]) +{ + ColorInOut out; + out.position = positions[vid]; + out.texCoords = texCoords[vid]; + return out; +} + +fragment float4 fragmentShader(ColorInOut in [[ stage_in ]], + texture2d texture [[ texture(0) ]], + constant BaseColor &uniform [[ buffer(2) ]]) +{ + constexpr sampler colorSampler; + float4 color = texture.sample(colorSampler, in.texCoords) * uniform.color; + return color; +} diff --git a/Samples/Metal/README.ja.md b/Samples/Metal/README.ja.md index 30fccce..911e04b 100644 --- a/Samples/Metal/README.ja.md +++ b/Samples/Metal/README.ja.md @@ -12,8 +12,8 @@ Metal で実装したアプリケーションのサンプル実装です。 | サードパーティ | バージョン | | --- | --- | -| [ios-cmake] | 4.4.1 | -| [stb_image.h] | 2.29 | +| [ios-cmake] | 4.5.0 | +| [stb_image.h] | 2.30 | その他の開発環境・動作確認環境はトップディレクトリにある [README.md](/README.ja.md) を参照してください。 diff --git a/Samples/Metal/README.md b/Samples/Metal/README.md index 76b394f..0b343dd 100644 --- a/Samples/Metal/README.md +++ b/Samples/Metal/README.md @@ -12,8 +12,8 @@ There are restrictions. Please check [NOTICE.md](/NOTICE.md) in the top director | Third Party | Version | | --- | --- | -| [ios-cmake] | 4.4.1 | -| [stb_image.h] | 2.29 | +| [ios-cmake] | 4.5.0 | +| [stb_image.h] | 2.30 | For other development environments and operation environments, see [README.md](/README.md) in the top directory. diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/build.gradle b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/build.gradle index 23752cd..0b3e87c 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/build.gradle +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/build.gradle @@ -19,6 +19,7 @@ android { abiFilters.addAll(PROP_APP_ABI.split(':').collect{ it as String }) } } + ndkVersion "26.3.11579264" } signingConfigs { debug { @@ -29,8 +30,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } buildTypes { release { @@ -46,6 +47,7 @@ android { } sourceSets.main { assets.srcDir "../../../../../Resources" + assets.srcDir "../../../../Shaders/StandardES" } } diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/AndroidManifest.xml b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/AndroidManifest.xml index 820452e..6a16cdb 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/AndroidManifest.xml +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/CMakeLists.txt b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/CMakeLists.txt index 727a91b..3b88c5c 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/CMakeLists.txt @@ -16,6 +16,8 @@ target_sources(${APP_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDefine.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDefine.cpp index ac352ea..1dba01d 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDefine.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDefine.cpp @@ -37,6 +37,13 @@ namespace LAppDefine { // 終了ボタン const csmChar* PowerImageName = "close.png"; + // シェーダー相対パス + const csmChar* ShaderPath = ""; + // 頂点シェーダー + const csmChar* VertShaderName = "VertSprite.vert"; + // フラグメントシェーダー + const csmChar* FragShaderName = "FragSprite.frag"; + // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる const csmChar* MotionGroupIdle = "Idle"; // アイドリング diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDefine.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDefine.hpp index c8b7eb6..6beb307 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDefine.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDefine.hpp @@ -36,6 +36,10 @@ namespace LAppDefine { extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* VertShaderName; ///< 頂点シェーダー + extern const csmChar* FragShaderName; ///< フラグメントシェーダー + // モデル定義-------------------------------------------- // 外部定義ファイル(json)と合わせる extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDelegate.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDelegate.cpp index 77327f0..78811d5 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDelegate.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDelegate.cpp @@ -13,8 +13,11 @@ #include "LAppDefine.hpp" #include "LAppLive2DManager.hpp" #include "LAppTextureManager.hpp" +#include "LAppModel.hpp" #include "JniBridgeC.hpp" +#include + using namespace Csm; using namespace std; using namespace LAppDefine; @@ -46,14 +49,11 @@ void LAppDelegate::ReleaseInstance() void LAppDelegate::OnStart() { - _textureManager = new LAppTextureManager(); - _view = new LAppView(); - LAppPal::UpdateTime(); + _isActive = true; } void LAppDelegate::OnPause() { - _SceneIndex = LAppLive2DManager::GetInstance()->GetSceneIndex(); } void LAppDelegate::OnStop() @@ -112,10 +112,36 @@ void LAppDelegate::OnSurfaceCreate() glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + if (_textureManager == nullptr) + { + _textureManager = new LAppTextureManager(); + } + else + { + // 無効になっているOpenGLリソースを破棄 + _textureManager->ReleaseInvalidTextures(); + } + if (_view != NULL) + { + delete _view; + } + _view = new LAppView(); + LAppPal::UpdateTime(); + //Initialize cubism - CubismFramework::Initialize(); + if (!CubismFramework::IsInitialized()) + { + CubismFramework::Initialize(); + } - _view->InitializeShader(); + // 無効になっているOpenGLリソースを破棄 + Live2D::Cubism::Framework::Rendering::CubismShader_OpenGLES2::GetInstance()->ReleaseInvalidShaderProgram(); + + LAppLive2DManager* live2DManager = LAppLive2DManager::GetInstance(); + for (Csm::csmUint32 i = 0; i < live2DManager->GetModelNum(); i++) + { + live2DManager->GetModel(i)->ReloadRenderer(); + } } void LAppDelegate::OnSurfaceChanged(float width, float height) @@ -124,17 +150,15 @@ void LAppDelegate::OnSurfaceChanged(float width, float height) _width = width; _height = height; - //AppViewの初期化 + // AppViewの初期化 _view->Initialize(); + // Spriteの初期化 _view->InitializeSprite(); +} - //load model - if (LAppLive2DManager::GetInstance()->GetSceneIndex() != _SceneIndex) - { - LAppLive2DManager::GetInstance()->ChangeScene(_SceneIndex); - } - - _isActive = true; +void LAppDelegate::SetSceneIndex(int index) +{ + _SceneIndex = index; } LAppDelegate::LAppDelegate(): @@ -192,46 +216,3 @@ void LAppDelegate::OnTouchMoved(double x, double y) _view->OnTouchesMoved(_mouseX, _mouseY); } } - -GLuint LAppDelegate::CreateShader() -{ - //バーテックスシェーダのコンパイル - GLuint vertexShaderId = glCreateShader(GL_VERTEX_SHADER); - const char* vertexShader = - "#version 100\n" - "attribute vec3 position;" - "attribute vec2 uv;" - "varying vec2 vuv;" - "void main(void){" - " gl_Position = vec4(position, 1.0);" - " vuv = uv;" - "}"; - glShaderSource(vertexShaderId, 1, &vertexShader, NULL); - glCompileShader(vertexShaderId); - - //フラグメントシェーダのコンパイル - GLuint fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER); - const char* fragmentShader = - "#version 100\n" - "precision mediump float;" - "varying vec2 vuv;" - "uniform sampler2D texture;" - "uniform vec4 baseColor;" - "void main(void){" - " gl_FragColor = texture2D(texture, vuv) * baseColor;" - "}"; - glShaderSource(fragmentShaderId, 1, &fragmentShader, NULL); - glCompileShader(fragmentShaderId); - - //プログラムオブジェクトの作成 - GLuint programId = glCreateProgram(); - glAttachShader(programId, vertexShaderId); - glAttachShader(programId, fragmentShaderId); - - // リンク - glLinkProgram(programId); - - glUseProgram(programId); - - return programId; -} diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDelegate.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDelegate.hpp index 5bd4aa4..5f3469e 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDelegate.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppDelegate.hpp @@ -96,11 +96,6 @@ class LAppDelegate */ void OnTouchMoved(double x, double y); - /** - * @brief シェーダーを登録する。 - */ - GLuint CreateShader(); - /** * @brief テクスチャマネージャーの取得 */ @@ -126,6 +121,16 @@ class LAppDelegate */ LAppView* GetView() { return _view; } + /** + * @brief シーンインデックスを設定する + */ + void SetSceneIndex(int index); + + /** + * @brief シーンインデックスを取得する + */ + int GetSceneIndex() { return _SceneIndex; }; + private: /** * @brief コンストラクタ @@ -137,11 +142,6 @@ class LAppDelegate */ ~LAppDelegate(); - /** - * @brief Cubism SDK の初期化 - */ - void InitializeCubism(); - LAppAllocator _cubismAllocator; ///< Cubism SDK Allocator Csm::CubismFramework::Option _cubismOption; ///< Cubism SDK Option LAppTextureManager* _textureManager; ///< テクスチャマネージャー diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppLive2DManager.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppLive2DManager.cpp index 429f4f1..cc6d3f1 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppLive2DManager.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppLive2DManager.cpp @@ -23,6 +23,11 @@ using namespace LAppDefine; namespace { LAppLive2DManager* s_instance = NULL; + void BeganMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion Began: %x", self); + } + void FinishedMotion(ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -57,12 +62,11 @@ void LAppLive2DManager::ReleaseInstance() LAppLive2DManager::LAppLive2DManager() : _viewMatrix(NULL) - , _sceneIndex(0) { _viewMatrix = new CubismMatrix44(); SetUpModel(); - ChangeScene(_sceneIndex); + ChangeScene(LAppDelegate::GetInstance()->GetSceneIndex()); } LAppLive2DManager::~LAppLive2DManager() @@ -146,7 +150,7 @@ void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) { LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); } - _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -198,16 +202,16 @@ void LAppLive2DManager::OnUpdate() const void LAppLive2DManager::NextScene() { - csmInt32 no = (_sceneIndex + 1) % _modelDir.GetSize(); + csmInt32 no = (LAppDelegate::GetInstance()->GetSceneIndex() + 1) % _modelDir.GetSize(); ChangeScene(no); } void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) { - _sceneIndex = index; + LAppDelegate::GetInstance()->SetSceneIndex(index); if (DebugLogEnable) { - LAppPal::PrintLogLn("[APP]model index: %d", _sceneIndex); + LAppPal::PrintLogLn("[APP]model index: %d", index); } // model3.jsonのパスを決定する. @@ -248,7 +252,7 @@ void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); // 別レンダリング先を選択した際の背景クリア色 - float clearColor[3] = { 1.0f, 1.0f, 1.0f }; + float clearColor[3] = { 0.0f, 0.0f, 0.0f }; LAppDelegate::GetInstance()->GetView()->SetRenderTargetClearColor(clearColor[0], clearColor[1], clearColor[2]); } } diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppLive2DManager.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppLive2DManager.hpp index b692144..58e3b0f 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppLive2DManager.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppLive2DManager.hpp @@ -91,12 +91,6 @@ class LAppLive2DManager */ void ChangeScene(Csm::csmInt32 index); - /** - * @brief シーンインデックスの取得 - * @return シーンインデックスを返す - */ - Csm::csmInt32 GetSceneIndex() { return _sceneIndex; } - /** * @brief モデル個数を得る * @return 所持モデル個数 @@ -121,7 +115,6 @@ class LAppLive2DManager Csm::CubismMatrix44* _viewMatrix; ///< モデル描画に用いるView行列 Csm::csmVector _models; ///< モデルインスタンスのコンテナ - Csm::csmInt32 _sceneIndex; ///< 表示するシーンのインデックス値 Csm::csmVector _modelDir; ///< モデルディレクトリ名のコンテナ }; diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppModel.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppModel.cpp index ab659ba..442bd6d 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppModel.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppModel.cpp @@ -276,21 +276,10 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -438,7 +427,7 @@ void LAppModel::Update() } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -468,21 +457,10 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -491,6 +469,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -509,7 +488,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -518,7 +497,7 @@ CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -574,7 +553,7 @@ void LAppModel::SetExpression(const csmChar* expressionID) if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppModel.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppModel.hpp index 036cf30..01809a5 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppModel.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppModel.hpp @@ -64,9 +64,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -74,9 +75,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppSpriteShader.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppSpriteShader.cpp new file mode 100644 index 0000000..d0ed5c4 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppSpriteShader.cpp @@ -0,0 +1,106 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpriteShader.hpp" +#include +#include "LAppDefine.hpp" +#include "LAppPal.hpp" + +LAppSpriteShader::LAppSpriteShader() +{ + _programId = CreateShader(); +} + +LAppSpriteShader::~LAppSpriteShader() +{ + glDeleteShader(_programId); +} + +GLuint LAppSpriteShader::GetShaderId() const +{ + return _programId; +} + +GLuint LAppSpriteShader::CreateShader() +{ + // シェーダーのパスの作成 + Csm::csmString vertShaderFile(LAppDefine::ShaderPath); + vertShaderFile += LAppDefine::VertShaderName; + Csm::csmString fragShaderFile(LAppDefine::ShaderPath); + fragShaderFile += LAppDefine::FragShaderName; + + // シェーダーのコンパイル + GLuint vertexShaderId = CompileShader(vertShaderFile, GL_VERTEX_SHADER); + GLuint fragmentShaderId = CompileShader(fragShaderFile, GL_FRAGMENT_SHADER); + + if (!vertexShaderId || !fragmentShaderId) + { + return 0; + } + + //プログラムオブジェクトの作成 + GLuint programId = glCreateProgram(); + glAttachShader(programId, vertexShaderId); + glAttachShader(programId, fragmentShaderId); + + // リンク + glLinkProgram(programId); + + glUseProgram(programId); + + // 不要になったシェーダーオブジェクトの削除 + glDeleteShader(vertexShaderId); + glDeleteShader(fragmentShaderId); + + return programId; +} + +bool LAppSpriteShader::CheckShader(GLuint shaderId) +{ + GLint status; + GLint logLength; + glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) + { + GLchar* log = reinterpret_cast(CSM_MALLOC(logLength)); + glGetShaderInfoLog(shaderId, logLength, &logLength, log); + CubismLogError("Shader compile log: %s", log); + CSM_FREE(log); + } + + glGetShaderiv(shaderId, GL_COMPILE_STATUS, &status); + if (status == GL_FALSE) + { + glDeleteShader(shaderId); + return false; + } + + return true; +} + +GLuint LAppSpriteShader::CompileShader(Csm::csmString filename, GLenum shaderType) +{ + // ファイル読み込み + Csm::csmSizeInt bufferSize = 0; + const char* shaderString = reinterpret_cast(LAppPal::LoadFileAsBytes(filename.GetRawString(), &bufferSize)); + const GLint glSize = (GLint)bufferSize; + + // コンパイル + GLuint shaderId = glCreateShader(shaderType); + glShaderSource(shaderId, 1, &shaderString, &glSize); + glCompileShader(shaderId); + + // 読み込んだシェーダー文字列の開放 + LAppPal::ReleaseBytes(reinterpret_cast(const_cast(shaderString))); + + if (!CheckShader(shaderId)) + { + return 0; + } + + return shaderId; +} diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppSpriteShader.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppSpriteShader.hpp new file mode 100644 index 0000000..8c229ef --- /dev/null +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppSpriteShader.hpp @@ -0,0 +1,57 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include "CubismFramework.hpp" + +/** +* @brief スプライト用のシェーダー設定を保持するクラス +*/ +class LAppSpriteShader +{ +public: + /** + * @brief コンストラクタ + */ + LAppSpriteShader(); + + /** + * @brief デストラクタ + */ + ~LAppSpriteShader(); + + /** + * @brief シェーダーIDを取得する + */ + GLuint GetShaderId() const; + +private: + /** + * @brief シェーダーを作成する。 + */ + GLuint CreateShader(); + + /** + * @brief CreateShader内部関数 エラーチェック + */ + bool CheckShader(GLuint shaderId); + + /** + * @brief シェーダーをコンパイルする + * コンパイルに失敗した場合には 0 が戻る。 + * + * @param[in] filename シェーダーファイル名 + * @param[in] shaderType 作成するシェーダーの種類 + */ + GLuint CompileShader(Csm::csmString filename, GLenum shaderType); + + GLuint _programId; ///< シェーダID +}; diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppTextureManager.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppTextureManager.cpp index edd758c..5a12855 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppTextureManager.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppTextureManager.cpp @@ -89,6 +89,17 @@ LAppTextureManager::TextureInfo* LAppTextureManager::CreateTextureFromPngFile(st } void LAppTextureManager::ReleaseTextures() +{ + for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) + { + glDeleteTextures(1, &(_textures[i]->id)); + delete _textures[i]; + } + + _textures.Clear(); +} + +void LAppTextureManager::ReleaseInvalidTextures() { for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) { @@ -106,6 +117,7 @@ void LAppTextureManager::ReleaseTexture(Csm::csmUint32 textureId) { continue; } + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; @@ -118,6 +130,7 @@ void LAppTextureManager::ReleaseTexture(std::string fileName) { if (_textures[i]->fileName == fileName) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppTextureManager.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppTextureManager.hpp index 1f86f05..38d1c5a 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppTextureManager.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppTextureManager.hpp @@ -79,6 +79,12 @@ class LAppTextureManager */ void ReleaseTextures(); + /** + * @brief 一部の環境でこのインスタンスが管理するリソースが破棄される場合があります。 + * このような場合に二重解放を避け無効になったリソースを破棄します。 + */ + void ReleaseInvalidTextures(); + /** * @brief 画像の解放 * diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppView.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppView.cpp index 9e8bcac..767c4f9 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppView.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppView.cpp @@ -15,6 +15,7 @@ #include "LAppDefine.hpp" #include "TouchManager.hpp" #include "LAppSprite.hpp" +#include "LAppSpriteShader.hpp" #include "LAppModel.hpp" #include @@ -26,11 +27,11 @@ using namespace std; using namespace LAppDefine; LAppView::LAppView(): - _programId(0), _back(NULL), _gear(NULL), _power(NULL), _changeModel(false), + _spriteShader(NULL), _renderSprite(NULL), _renderTarget(SelectTarget_None) { @@ -52,14 +53,38 @@ LAppView::LAppView(): LAppView::~LAppView() { _renderBuffer.DestroyOffscreenSurface(); - delete _renderSprite; - - delete _viewMatrix; - delete _deviceToScreen; - delete _touchManager; - delete _back; - delete _gear; - delete _power; + if (_renderSprite) + { + delete _renderSprite; + } + if (_spriteShader) + { + delete _spriteShader; + } + if (_viewMatrix) + { + delete _viewMatrix; + } + if (_deviceToScreen) + { + delete _deviceToScreen; + } + if (_touchManager) + { + delete _touchManager; + } + if (_back) + { + delete _back; + } + if (_gear) + { + delete _gear; + } + if (_power) + { + delete _power; + } } void LAppView::Initialize() @@ -101,15 +126,14 @@ void LAppView::Initialize() ViewLogicalMaxBottom, ViewLogicalMaxTop ); -} -void LAppView::InitializeShader() -{ - _programId = LAppDelegate::GetInstance()->CreateShader(); + _spriteShader = new LAppSpriteShader(); } void LAppView::InitializeSprite() { + GLuint programId = _spriteShader->GetShaderId(); + int width = LAppDelegate::GetInstance()->GetWindowWidth(); int height = LAppDelegate::GetInstance()->GetWindowHeight(); @@ -126,7 +150,7 @@ void LAppView::InitializeSprite() if(_back == NULL) { - _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, _programId); + _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, programId); } else { @@ -144,7 +168,7 @@ void LAppView::InitializeSprite() if(_gear == NULL) { - _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, _programId); + _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, programId); } else { @@ -161,7 +185,7 @@ void LAppView::InitializeSprite() if(_power == NULL) { - _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, _programId); + _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, programId); } else { @@ -174,7 +198,7 @@ void LAppView::InitializeSprite() if (_renderSprite == NULL) { - _renderSprite = new LAppSprite(x, y, width, height, 0, _programId); + _renderSprite = new LAppSprite(x, y, width, height, 0, programId); } else { diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppView.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppView.hpp index db0f8ab..e239e7f 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppView.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/cpp/LAppView.hpp @@ -16,6 +16,7 @@ class TouchManager; class LAppSprite; +class LAppSpriteShader; class LAppModel; /** @@ -55,11 +56,6 @@ class LAppView */ void Render(); - /** - * @brief シェーダーの初期化を行う。 - */ - void InitializeShader(); - /** * @brief 画像の初期化を行う。 */ @@ -150,7 +146,6 @@ class LAppView TouchManager* _touchManager; ///< タッチマネージャー Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix - GLuint _programId; ///< シェーダID LAppSprite* _back; ///< 背景画像 LAppSprite* _gear; ///< ギア画像 LAppSprite* _power; ///< 電源画像 @@ -161,4 +156,6 @@ class LAppView Csm::Rendering::CubismOffscreenSurface_OpenGLES2 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + LAppSpriteShader* _spriteShader; ///< シェーダー作成委譲クラス }; diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/java/com/live2d/demo/MainActivity.java b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/java/com/live2d/demo/MainActivity.java index 6b4210b..5aa12ba 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/java/com/live2d/demo/MainActivity.java +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/app/src/main/java/com/live2d/demo/MainActivity.java @@ -18,20 +18,29 @@ public class MainActivity extends Activity { @Override - public boolean onTouchEvent(MotionEvent event) { - float pointX = event.getX(); - float pointY = event.getY(); - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - JniBridgeJava.nativeOnTouchesBegan(pointX, pointY); - break; - case MotionEvent.ACTION_UP: - JniBridgeJava.nativeOnTouchesEnded(pointX, pointY); - break; - case MotionEvent.ACTION_MOVE: - JniBridgeJava.nativeOnTouchesMoved(pointX, pointY); - break; - } + public boolean onTouchEvent(final MotionEvent event) { + final float pointX = event.getX(); + final float pointY = event.getY(); + + // GLSurfaceViewのイベント処理キューにタッチイベントを追加する。 + glSurfaceView.queueEvent( + new Runnable() { + @Override + public void run() { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + JniBridgeJava.nativeOnTouchesBegan(pointX, pointY); + break; + case MotionEvent.ACTION_UP: + JniBridgeJava.nativeOnTouchesEnded(pointX, pointY); + break; + case MotionEvent.ACTION_MOVE: + JniBridgeJava.nativeOnTouchesMoved(pointX, pointY); + break; + } + } + } + ); return super.onTouchEvent(event); } diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/build.gradle b/Samples/OpenGL/Demo/proj.android.cmake/Full/build.gradle index eaafae8..7faf18c 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/build.gradle +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/build.gradle @@ -7,7 +7,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:8.1.1' + classpath 'com.android.tools.build:gradle:8.6.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/gradle.properties b/Samples/OpenGL/Demo/proj.android.cmake/Full/gradle.properties index 90aa531..11e7952 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/gradle.properties +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/gradle.properties @@ -19,17 +19,17 @@ android.useAndroidX=true android.enableJetifier=true # Android SDK version that will be used as the compile project -PROP_COMPILE_SDK_VERSION=34 +PROP_COMPILE_SDK_VERSION=35 # Android SDK version that will be used as the earliest version of android this application can run on PROP_MIN_SDK_VERSION=21 # Android SDK version that will be used as the latest version of android this application has been tested on -PROP_TARGET_SDK_VERSION=34 +PROP_TARGET_SDK_VERSION=35 # List of CPU Archtexture to build that application with -# Available architextures (armeabi-v7a | arm64-v8a | x86 | x86_64) +# Available architextures (arm64-v8a | x86 | x86_64) # To build for multiple architexture, use the `:` between them -# Example - PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86:x86_64 -PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86:x86_64 +# Example - PROP_APP_ABI=arm64-v8a:x86:x86_64 +PROP_APP_ABI=arm64-v8a:x86:x86_64 diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Full/gradle/wrapper/gradle-wrapper.properties b/Samples/OpenGL/Demo/proj.android.cmake/Full/gradle/wrapper/gradle-wrapper.properties index 316ef13..a986c5d 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Full/gradle/wrapper/gradle-wrapper.properties +++ b/Samples/OpenGL/Demo/proj.android.cmake/Full/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Jul 11 17:01:27 JST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/build.gradle b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/build.gradle index b5d2516..af10e79 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/build.gradle +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/build.gradle @@ -18,6 +18,7 @@ android { abiFilters.addAll(PROP_APP_ABI.split(':').collect{ it as String }) } } + ndkVersion "26.3.11579264" } signingConfigs { debug { @@ -28,8 +29,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } buildTypes { release { @@ -45,6 +46,7 @@ android { } sourceSets.main { assets.srcDir "../../../../../Resources" + assets.srcDir "../../../../Shaders/StandardES" } } diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/AndroidManifest.xml b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/AndroidManifest.xml index f80b766..9fc7ded 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/AndroidManifest.xml +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/CMakeLists.txt b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/CMakeLists.txt index 97df1e5..1c61689 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/CMakeLists.txt @@ -16,6 +16,8 @@ target_sources(${APP_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppMinimumView.cpp diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppDefine.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppDefine.cpp index 9fad5af..559a32c 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppDefine.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppDefine.cpp @@ -37,6 +37,13 @@ namespace LAppDefine { // 終了ボタン const csmChar* PowerImageName = "close.png"; + // シェーダー相対パス + const csmChar* ShaderPath = ""; + // 頂点シェーダー + const csmChar* VertShaderName = "VertSprite.vert"; + // フラグメントシェーダー + const csmChar* FragShaderName = "FragSprite.frag"; + // モデル定義------------------------------------------ // モデルを配置したディレクトリ名の配列 // ディレクトリ名とmodel3.jsonの名前を一致させておくこと diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppDefine.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppDefine.hpp index cfc214c..0605e5b 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppDefine.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppDefine.hpp @@ -36,6 +36,10 @@ namespace LAppDefine { extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* VertShaderName; ///< 頂点シェーダー + extern const csmChar* FragShaderName; ///< フラグメントシェーダー + // モデル定義-------------------------------------------- extern const csmChar* ModelDir[]; ///< モデルを配置したディレクトリ名の配列. ディレクトリ名とmodel3.jsonの名前を一致させておく. extern const csmInt32 ModelDirSize; ///< モデルディレクトリ配列のサイズ diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumDelegate.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumDelegate.cpp index 0e40270..d4b36c7 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumDelegate.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumDelegate.cpp @@ -114,8 +114,6 @@ void LAppMinimumDelegate::OnSurfaceCreate() //Initialize cubism CubismFramework::Initialize(); - - _view->InitializeShader(); } void LAppMinimumDelegate::OnSurfaceChanged(float width, float height) @@ -191,46 +189,3 @@ void LAppMinimumDelegate::OnTouchMoved(double x, double y) _view->OnTouchesMoved(_mouseX, _mouseY); } } - -GLuint LAppMinimumDelegate::CreateShader() -{ - //バーテックスシェーダのコンパイル - GLuint vertexShaderId = glCreateShader(GL_VERTEX_SHADER); - const char* vertexShader = - "#version 100\n" - "attribute vec3 position;" - "attribute vec2 uv;" - "varying vec2 vuv;" - "void main(void){" - " gl_Position = vec4(position, 1.0);" - " vuv = uv;" - "}"; - glShaderSource(vertexShaderId, 1, &vertexShader, nullptr); - glCompileShader(vertexShaderId); - - //フラグメントシェーダのコンパイル - GLuint fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER); - const char* fragmentShader = - "#version 100\n" - "precision mediump float;" - "varying vec2 vuv;" - "uniform sampler2D texture;" - "uniform vec4 baseColor;" - "void main(void){" - " gl_FragColor = texture2D(texture, vuv) * baseColor;" - "}"; - glShaderSource(fragmentShaderId, 1, &fragmentShader, nullptr); - glCompileShader(fragmentShaderId); - - //プログラムオブジェクトの作成 - GLuint programId = glCreateProgram(); - glAttachShader(programId, vertexShaderId); - glAttachShader(programId, fragmentShaderId); - - // リンク - glLinkProgram(programId); - - glUseProgram(programId); - - return programId; -} diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumDelegate.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumDelegate.hpp index 4d323b6..3ba0700 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumDelegate.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumDelegate.hpp @@ -96,11 +96,6 @@ class LAppMinimumDelegate */ void OnTouchMoved(double x, double y); - /** - * @brief シェーダーを登録する。 - */ - GLuint CreateShader(); - /** * @brief テクスチャマネージャーの取得 */ diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumModel.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumModel.cpp index 9c1a25f..78e3e33 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumModel.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumModel.cpp @@ -210,22 +210,10 @@ void LAppMinimumModel::PreloadMotionGroup(const csmChar* group) csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelJson, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } - if (_motions[name] != NULL) { ACubismMotion::Delete(_motions[name]); @@ -361,7 +349,7 @@ void LAppMinimumModel::Update() } -CubismMotionQueueEntryHandle LAppMinimumModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppMinimumModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority) { if (priority == PriorityForce) { @@ -391,30 +379,15 @@ CubismMotionQueueEntryHandle LAppMinimumModel::StartMotion(const csmChar* group, csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, nullptr, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, nullptr, NULL, NULL, _modelJson, group, no)); if (motion) { - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } autoDelete = true; // 終了時にメモリから削除 } DeleteBuffer(buffer, path.GetRawString()); } - else - { - motion->SetFinishedMotionHandler(onFinishedMotionHandler); - } //voice csmString voice = _modelJson->GetMotionSoundFileName(group, no); @@ -454,7 +427,7 @@ void LAppMinimumModel::SetExpression(const csmChar* expressionID) if (motion) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumModel.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumModel.hpp index 97211c3..fc85ff7 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumModel.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumModel.hpp @@ -76,10 +76,9 @@ class LAppMinimumModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 - * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumView.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumView.cpp index 6536920..25f1784 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumView.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumView.cpp @@ -15,6 +15,7 @@ #include "LAppMinimumLive2DManager.hpp" #include "TouchManager.hpp" #include "LAppSprite.hpp" +#include "LAppSpriteShader.hpp" #include "LAppMinimumModel.hpp" #include @@ -27,7 +28,6 @@ using namespace LAppDefine; using namespace Csm; LAppMinimumView::LAppMinimumView(): - _programId(0), _renderSprite(nullptr), _renderTarget(SelectTarget_None) { @@ -49,6 +49,7 @@ LAppMinimumView::LAppMinimumView(): LAppMinimumView::~LAppMinimumView() { _renderBuffer.DestroyOffscreenSurface(); + delete _spriteShader; delete _renderSprite; delete _viewMatrix; @@ -95,15 +96,14 @@ void LAppMinimumView::Initialize() ViewLogicalMaxBottom, ViewLogicalMaxTop ); -} -void LAppMinimumView::InitializeShader() -{ - _programId = LAppMinimumDelegate::GetInstance()->CreateShader(); + // シェーダー作成委譲クラス + _spriteShader = new LAppSpriteShader(); } void LAppMinimumView::InitializeSprite() { + GLuint programId = _spriteShader->GetShaderId(); int width = LAppMinimumDelegate::GetInstance()->GetWindowWidth(); int height = LAppMinimumDelegate::GetInstance()->GetWindowHeight(); @@ -113,7 +113,7 @@ void LAppMinimumView::InitializeSprite() if (!_renderSprite) { - _renderSprite = new LAppSprite(x, y, width, height, 0, _programId); + _renderSprite = new LAppSprite(x, y, width, height, 0, programId); } else { diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumView.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumView.hpp index d3d7d52..4c4e42b 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumView.hpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppMinimumView.hpp @@ -16,6 +16,7 @@ class TouchManager; class LAppSprite; +class LAppSpriteShader; class LAppMinimumModel; /** @@ -55,11 +56,6 @@ class LAppMinimumView */ void Render(); - /** - * @brief シェーダーの初期化を行う。 - */ - void InitializeShader(); - /** * @brief 画像の初期化を行う。 */ @@ -150,11 +146,12 @@ class LAppMinimumView TouchManager* _touchManager; ///< タッチマネージャー Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix - GLuint _programId; ///< シェーダID // レンダリング先を別ターゲットにする方式の場合に使用 LAppSprite* _renderSprite; ///< モードによっては_renderBufferのテクスチャを描画 Csm::Rendering::CubismOffscreenSurface_OpenGLES2 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + LAppSpriteShader* _spriteShader; ///< シェーダー作成委譲クラス }; diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppSpriteShader.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppSpriteShader.cpp new file mode 100644 index 0000000..3051523 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppSpriteShader.cpp @@ -0,0 +1,73 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpriteShader.hpp" + +#include "LAppDefine.hpp" +#include "LAppPal.hpp" + +LAppSpriteShader::LAppSpriteShader() +{ + _programId = CreateShader(); +} + +LAppSpriteShader::~LAppSpriteShader() +{ + glDeleteShader(_programId); +} + +GLuint LAppSpriteShader::GetShaderId() const +{ + return _programId; +} + +GLuint LAppSpriteShader::CreateShader() +{ + // シェーダーのパスの作成 + Csm::csmString vertShaderFile(LAppDefine::ShaderPath); + vertShaderFile += LAppDefine::VertShaderName; + Csm::csmString fragShaderFile(LAppDefine::ShaderPath); + fragShaderFile += LAppDefine::FragShaderName; + + // シェーダーのコンパイル + GLuint vertexShaderId = CompileShader(vertShaderFile, GL_VERTEX_SHADER); + GLuint fragmentShaderId = CompileShader(fragShaderFile, GL_FRAGMENT_SHADER); + + //プログラムオブジェクトの作成 + GLuint programId = glCreateProgram(); + glAttachShader(programId, vertexShaderId); + glAttachShader(programId, fragmentShaderId); + + // リンク + glLinkProgram(programId); + + glUseProgram(programId); + + // 不要になったシェーダーオブジェクトの削除 + glDeleteShader(vertexShaderId); + glDeleteShader(fragmentShaderId); + + return programId; +} + +GLuint LAppSpriteShader::CompileShader(Csm::csmString filename, GLenum shaderType) +{ + // ファイル読み込み + Csm::csmSizeInt bufferSize = 0; + const char* shaderString = reinterpret_cast(LAppPal::LoadFileAsBytes(filename.GetRawString(), &bufferSize)); + const GLint glSize = (GLint)bufferSize; + + // コンパイル + GLuint shaderId = glCreateShader(shaderType); + glShaderSource(shaderId, 1, &shaderString, &glSize); + glCompileShader(shaderId); + + // 読み込んだシェーダー文字列の開放 + LAppPal::ReleaseBytes(reinterpret_cast(const_cast(shaderString))); + + return shaderId; +} diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppSpriteShader.hpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppSpriteShader.hpp new file mode 100644 index 0000000..f62429a --- /dev/null +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppSpriteShader.hpp @@ -0,0 +1,52 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include "CubismFramework.hpp" + +/** +* @brief スプライト用のシェーダー設定を保持するクラス +*/ +class LAppSpriteShader +{ +public: + /** + * @brief コンストラクタ + */ + LAppSpriteShader(); + + /** + * @brief デストラクタ + */ + ~LAppSpriteShader(); + + /** + * @brief シェーダーIDを取得する + */ + GLuint GetShaderId() const; + +private: + /** + * @brief シェーダーを作成する。 + */ + GLuint CreateShader(); + + /** + * @brief シェーダーをコンパイルする + * コンパイルに失敗した場合には 0 が戻る。 + * + * @param[in] filename シェーダーファイル名 + * @param[in] shaderType 作成するシェーダーの種類 + */ + GLuint CompileShader(Csm::csmString filename, GLenum shaderType); + + GLuint _programId; ///< シェーダID +}; diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppTextureManager.cpp b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppTextureManager.cpp index edd758c..699f90b 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppTextureManager.cpp +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/cpp/LAppTextureManager.cpp @@ -92,6 +92,7 @@ void LAppTextureManager::ReleaseTextures() { for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; } @@ -106,6 +107,7 @@ void LAppTextureManager::ReleaseTexture(Csm::csmUint32 textureId) { continue; } + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; @@ -118,6 +120,7 @@ void LAppTextureManager::ReleaseTexture(std::string fileName) { if (_textures[i]->fileName == fileName) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/java/com/live2d/demo/MainActivity.java b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/java/com/live2d/demo/MainActivity.java index 6b4210b..5aa12ba 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/java/com/live2d/demo/MainActivity.java +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/app/src/main/java/com/live2d/demo/MainActivity.java @@ -18,20 +18,29 @@ public class MainActivity extends Activity { @Override - public boolean onTouchEvent(MotionEvent event) { - float pointX = event.getX(); - float pointY = event.getY(); - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - JniBridgeJava.nativeOnTouchesBegan(pointX, pointY); - break; - case MotionEvent.ACTION_UP: - JniBridgeJava.nativeOnTouchesEnded(pointX, pointY); - break; - case MotionEvent.ACTION_MOVE: - JniBridgeJava.nativeOnTouchesMoved(pointX, pointY); - break; - } + public boolean onTouchEvent(final MotionEvent event) { + final float pointX = event.getX(); + final float pointY = event.getY(); + + // GLSurfaceViewのイベント処理キューにタッチイベントを追加する。 + glSurfaceView.queueEvent( + new Runnable() { + @Override + public void run() { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + JniBridgeJava.nativeOnTouchesBegan(pointX, pointY); + break; + case MotionEvent.ACTION_UP: + JniBridgeJava.nativeOnTouchesEnded(pointX, pointY); + break; + case MotionEvent.ACTION_MOVE: + JniBridgeJava.nativeOnTouchesMoved(pointX, pointY); + break; + } + } + } + ); return super.onTouchEvent(event); } diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/build.gradle b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/build.gradle index 96e098e..b8dfd49 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/build.gradle +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:8.1.1' + classpath 'com.android.tools.build:gradle:8.6.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/gradle.properties b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/gradle.properties index 90aa531..11e7952 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/gradle.properties +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/gradle.properties @@ -19,17 +19,17 @@ android.useAndroidX=true android.enableJetifier=true # Android SDK version that will be used as the compile project -PROP_COMPILE_SDK_VERSION=34 +PROP_COMPILE_SDK_VERSION=35 # Android SDK version that will be used as the earliest version of android this application can run on PROP_MIN_SDK_VERSION=21 # Android SDK version that will be used as the latest version of android this application has been tested on -PROP_TARGET_SDK_VERSION=34 +PROP_TARGET_SDK_VERSION=35 # List of CPU Archtexture to build that application with -# Available architextures (armeabi-v7a | arm64-v8a | x86 | x86_64) +# Available architextures (arm64-v8a | x86 | x86_64) # To build for multiple architexture, use the `:` between them -# Example - PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86:x86_64 -PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86:x86_64 +# Example - PROP_APP_ABI=arm64-v8a:x86:x86_64 +PROP_APP_ABI=arm64-v8a:x86:x86_64 diff --git a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/gradle/wrapper/gradle-wrapper.properties b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/gradle/wrapper/gradle-wrapper.properties index ce869c6..e910cd6 100644 --- a/Samples/OpenGL/Demo/proj.android.cmake/Minimum/gradle/wrapper/gradle-wrapper.properties +++ b/Samples/OpenGL/Demo/proj.android.cmake/Minimum/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Sep 21 19:36:40 JST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/.gitignore b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/.gitignore new file mode 100644 index 0000000..0e158c3 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/.gitignore @@ -0,0 +1,11 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/app.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/app.json5 new file mode 100644 index 0000000..aa42ed1 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.live2d.test", + "vendor": "samples", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/resources/base/element/string.json b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/resources/base/element/string.json new file mode 100644 index 0000000..30e0a07 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "Full" + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/resources/base/media/app_icon.png b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cd45accb1dfd2fd0da16c732c72faa6e46b26521 GIT binary patch literal 2041 zcmaJ?c~nzZ9u6@;0AXaYAVN(;Kr(@>EJ+}skOWf=BA~*l4us@ELY9{%0m5QX6pnb} z(jZF|S&pLAS}3BZAfeQSvJ_h>F2Q1PYqi?o5`;m_yjZdG$1v}l_wK#F^L^iMz2}uD z#K$>1dON~kFlWvhW+Jp=tuN9J`ZlM-rl4h+ij|^D0y9;4JOuz-EdVnB6i3R-0ulk9 zApi4zAQA>!N9@-o026$1@L`d124`3G5<@_m`0f)Ug_Ie~;HT2q<_a=HH> zDwTdfD^-cW-|_xWVP$f@93UhDN-#&khZ>jZXLTi~$0`7x3REP6pk%&^2|`c>DutjN zMJD4Zs6Z}{FOpd;*mo2zm(GzXRXiCV;4m3zNCYnu3Fy=i5;2An&Lp!#LP;bRD~1&s z%VH6UY+}r6YDgG+p34OJIZ{BTn&%4s=CT&#TBkuOhdeU@g(w#guoa*b^)73=XyI65 z7Swys6)YS}?1EeZ6b!-I+yCnIya^g0>-NLsLWd8t56GZ_S3r|ZGbR+mV2ErEb9J)X zIF!njY-D-7{qtF2(?nlQ$0}!pzt=}hc*m%%)0Jb#N_K4@IC-`Pi5DahPZN7N9rH;ol;Gc*>-Go@gXKTM{eP)iJj6CYTIi}B#zLKZYD@_;m zrXmXXsFq@~ou-z!9bHoM8*(hwl>X(zm)TDcdkF4lZm$1jP*HbnD`o1$g}_R#+bu2D zr%7Y8KdsaC-V*aem5#@*M%r^GPgu%P2e-BnBClhP2yoGFe40>);=}>{NONtkXQ01p z)OX^t2Ojhddot9eg0WTIVSTNBa}7V-^_pO595w|Hx9q?k4dMp@$G7PK*TD=y;ck6J zdGRB!_RAI2nR3%tO1IkdWp*bw*?<=pM_LZb30?!oK)s;En( z!#nnd9=cXJ<}+e{XLdx(q3&ikJISe?eSHHohk+pz+$6Cv{ytvc{QXmMn2XQ9U8rvt zrJdAn(0gpSD@N=yTrI_2^P#*zQg7MTp1)k(lv(*(KtUR6@M|2WB>2wRwC-h=wk6XF zPtSes*_JwI+^d>xW489MJw5R6=t5?{R zc|E8i?RL@p9)A3ZJAQOg`}+F;<_vnWA!KxR#g%jZ@y_1Qu#Uw)kFPw_xmZ?a^e*1{ zM|ImtqA|(CaDQ@Fyvcof`MN66&VI6m6gAyAXx`%cDx6BI{Bj#}V*Rn1(b~;Am)D2u zX7(027IO?Z2VYK^1vXXpoZ@AtH~N?0rYWwtyA15`6vEf6fk&;o-L;7zFt`5nk*iOy z`<918zB+k;EytI$FAXug)jk*e@e};4e9g__w4A5ev!!)H$yC@{?vsRqJ##X1R%xPG z&_R3oDi$MtTkVqfPj)HEUDx_7wd!y{8#1%$U*Dd0sK@=#6+!XlsE-s^1f5E`R9Wo71^b~mbVdU;Fw0LG~mUQg;xsX4QYRo3B@rH_=ry>DE8ef!c2ta8UcI#26# zF|`*4wtMHe@%#eGZw`#Yj|QWuB`eRD)b~)r9mM95p_JVG%-IdcbIX5qG#GpGD+IrS zEqxb1Rg&Dadk5#7t4j68I1f!@A$efp1?I%&d*56)yl!tkz!14<$0Od_&6cGw$WW0r zjSlQA7l*6;vgfhv!cR|RmAD$+w6j`rVf=-?-D@q>kOseUVSb*~jbAS^*1h?ZL)n(9 zDa}`4etXO6`}9;{k5E^N{rcfnV_(LPwsDg``wtyS*V<19c3!PGJ3Kqy9ksvkwbJ%Z z*N(fT0{e*Wji-Ck5!3YE0j|PZ@&z`v=kitWL$bqSt!e4bH!+(|Q)CZ30^nVPfkx{s zX{6of`p=BiPb@u@IyL!tRk>?qgBqCmo-Zlt!636g?z`s~zdfwuB7DXZHvV`Usp+%Z zo*&;Biu@MHE&2j+?j^o`Cr12u<>vOe=a&8a2hlcmFjJiDR>XnD4c4DAhZWCkiAgW{ E51q9-lK=n! literal 0 HcmV?d00001 diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/build-profile.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/build-profile.json5 new file mode 100644 index 0000000..be8e5fb --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/build-profile.json5 @@ -0,0 +1,35 @@ +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.0(12)", + "runtimeOS": "HarmonyOS" + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/.gitignore b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/.gitignore new file mode 100644 index 0000000..36cebc0 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/build-profile.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/build-profile.json5 new file mode 100644 index 0000000..a1fc2d1 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/build-profile.json5 @@ -0,0 +1,19 @@ +{ + "apiType": 'stageMode', + "buildOption": { + "externalNativeOptions": { + "path": "./src/main/cpp/CMakeLists.txt", + "arguments": "", + "cppFlags": "", + } + }, + "targets": [ + { + "name": "default", + "runtimeOS": "HarmonyOS" + }, + { + "name": "ohosTest", + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/hvigorfile.ts b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/hvigorfile.ts new file mode 100644 index 0000000..c6edcd9 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/obfuscation-rules.txt b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/obfuscation-rules.txt new file mode 100644 index 0000000..5102112 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/obfuscation-rules.txt @@ -0,0 +1,18 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/oh-package-lock.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/oh-package-lock.json5 new file mode 100644 index 0000000..bae35e5 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/oh-package-lock.json5 @@ -0,0 +1,18 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "libDemo.so@src/main/cpp/types/libentry": "libDemo.so@src/main/cpp/types/libentry" + }, + "packages": { + "libDemo.so@src/main/cpp/types/libentry": { + "name": "libDemo.so", + "version": "1.0.0", + "resolved": "src/main/cpp/types/libentry", + "registryType": "local" + } + } +} \ No newline at end of file diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/oh-package.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/oh-package.json5 new file mode 100644 index 0000000..d54754f --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/oh-package.json5 @@ -0,0 +1,11 @@ +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + "libDemo.so": "file:./src/main/cpp/types/libentry" + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/CMakeLists.txt b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000..e0b9bb3 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,87 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.4.1) + +# Set app name. +set(APP_NAME Demo) +# Set directory paths. +set(SDK_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../../../..) +set(CORE_PATH ${SDK_ROOT_PATH}/Core) +set(FRAMEWORK_PATH ${SDK_ROOT_PATH}/Framework) +set(THIRD_PARTY_PATH ${SDK_ROOT_PATH}/Samples/OpenGL/thirdParty) +set(STB_PATH ${THIRD_PARTY_PATH}/stb) +set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) +set(SHADER_PATH ${SDK_ROOT_PATH}/Samples/OpenGL/Shaders/StandardES) +set(COPY_RES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../resources/rawfile) + +# Specify version of compiler. +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# The flag is enabled by default, so it needs to be disabled. +add_compile_options(-Wno-error=format-security) + +# Add Cubism Core. +# Import as static library. +add_library(Live2DCubismCore STATIC IMPORTED) +# Find library path. +set_target_properties(Live2DCubismCore + PROPERTIES + IMPORTED_LOCATION + ${CORE_PATH}/lib/harmonyos/${OHOS_ARCH}/libLive2DCubismCore.a + INTERFACE_INCLUDE_DIRECTORIES ${CORE_PATH}/include +) + +# Specify Cubism Framework rendering. +set(FRAMEWORK_SOURCE OpenGL) +# Add Cubism Native Framework. +add_subdirectory(${FRAMEWORK_PATH} ${CMAKE_CURRENT_BINARY_DIR}/Framework) +# Add rendering definition to framework. +target_compile_definitions(Framework PUBLIC CSM_TARGET_HARMONYOS_ES3) + +# Make library for android app. +add_library(${APP_NAME} SHARED) +# Add source files. +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src) +# Link libraries to app. +target_link_libraries(${APP_NAME} + Framework + Live2DCubismCore + EGL + GLESv3 + hilog_ndk.z + ace_ndk.z + ace_napi.z + uv + librawfile.z.so +) +# Specify include directories. +target_include_directories(${APP_NAME} PRIVATE ${STB_PATH}) + +# Copy resource directory to build directory. +add_custom_command( + TARGET ${APP_NAME} + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E + copy_directory ${RES_PATH} ${COPY_RES_PATH}/Resources + COMMAND + ${CMAKE_COMMAND} -E + copy_directory ${SHADER_PATH} ${COPY_RES_PATH}/Shader +) + +# +# * USE_RENDER_TARGET +# Renderer draws to target of LAppView. +# * USE_MODEL_RENDER_TARGET +# Renderer draws to target of each LAppModel. +# * default +# Renderer draws to default main framebuffer. +# +# INFO: USE_RENDER_TARGET has higher priority than USE_MODEL_RENDER_TARGET. +# +# target_compile_definitions(${APP_NAME} +# PRIVATE +# USE_RENDER_TARGET +# USE_MODEL_RENDER_TARGET +# ) diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/CMakeLists.txt b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/CMakeLists.txt new file mode 100644 index 0000000..e93af90 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/CMakeLists.txt @@ -0,0 +1,27 @@ +target_sources(${APP_NAME} + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/NapiBridgeC.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/NapiBridgeC.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppAllocator.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppAllocator.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDefine.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDefine.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDelegate.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDelegate.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppLive2DManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppLive2DManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppModel.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppModel.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/TouchManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/TouchManager.hpp +) diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppAllocator.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppAllocator.cpp new file mode 100644 index 0000000..005665b --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppAllocator.cpp @@ -0,0 +1,54 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppAllocator.hpp" + +using namespace Csm; + +void* LAppAllocator::Allocate(const csmSizeType size) +{ + return malloc(size); +} + +void LAppAllocator::Deallocate(void* memory) +{ + free(memory); +} + +void* LAppAllocator::AllocateAligned(const csmSizeType size, const csmUint32 alignment) +{ + size_t offset, shift, alignedAddress; + void* allocation; + void** preamble; + + offset = alignment - 1 + sizeof(void*); + + allocation = Allocate(size + static_cast(offset)); + + alignedAddress = reinterpret_cast(allocation) + sizeof(void*); + + shift = alignedAddress % alignment; + + if (shift) + { + alignedAddress += (alignment - shift); + } + + preamble = reinterpret_cast(alignedAddress); + preamble[-1] = allocation; + + return reinterpret_cast(alignedAddress); +} + +void LAppAllocator::DeallocateAligned(void* alignedMemory) +{ + void** preamble; + + preamble = static_cast(alignedMemory); + + Deallocate(preamble[-1]); +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppAllocator.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppAllocator.hpp new file mode 100644 index 0000000..baada55 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppAllocator.hpp @@ -0,0 +1,52 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include + +/** +* @brief メモリアロケーションを実装するクラス。 +* +* メモリ確保・解放処理のインターフェースの実装。 +* フレームワークから呼び出される。 +* +*/ +class LAppAllocator : public Csm::ICubismAllocator +{ + /** + * @brief メモリ領域を割り当てる。 + * + * @param[in] size 割り当てたいサイズ。 + * @return 指定したメモリ領域 + */ + void* Allocate(const Csm::csmSizeType size); + + /** + * @brief メモリ領域を解放する + * + * @param[in] memory 解放するメモリ。 + */ + void Deallocate(void* memory); + + /** + * @brief + * + * @param[in] size 割り当てたいサイズ。 + * @param[in] alignment 割り当てたいサイズ。 + * @return alignedAddress + */ + void* AllocateAligned(const Csm::csmSizeType size, const Csm::csmUint32 alignment); + + /** + * @brief + * + * @param[in] alignedMemory 解放するメモリ。 + */ + void DeallocateAligned(void* alignedMemory); +}; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDefine.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDefine.cpp new file mode 100644 index 0000000..172ac2f --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDefine.cpp @@ -0,0 +1,68 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppDefine.hpp" +#include + +namespace LAppDefine { + + using namespace Csm; + + // 画面 + const csmFloat32 ViewScale = 1.0f; + const csmFloat32 ViewMaxScale = 2.0f; + const csmFloat32 ViewMinScale = 0.8f; + + const csmFloat32 ViewLogicalLeft = -1.0f; + const csmFloat32 ViewLogicalRight = 1.0f; + const csmFloat32 ViewLogicalBottom = -1.0f; + const csmFloat32 ViewLogicalTop = 1.0f; + + const csmFloat32 ViewLogicalMaxLeft = -2.0f; + const csmFloat32 ViewLogicalMaxRight = 2.0f; + const csmFloat32 ViewLogicalMaxBottom = -2.0f; + const csmFloat32 ViewLogicalMaxTop = 2.0f; + + // 相対パス + const csmChar* ResourcesPath = "Resources/"; + + // モデルの後ろにある背景の画像ファイル + const csmChar* BackImageName = "back_class_normal.png"; + // 歯車 + const csmChar* GearImageName = "icon_gear.png"; + // 終了ボタン + const csmChar* PowerImageName = "close.png"; + + // シェーダー相対パス + const csmChar* ShaderPath = "Shader/"; + // 頂点シェーダー + const csmChar* VertShaderName = "VertSprite.vert"; + // フラグメントシェーダー + const csmChar* FragShaderName = "FragSprite.frag"; + + // モデル定義------------------------------------------ + // 外部定義ファイル(json)と合わせる + const csmChar* MotionGroupIdle = "Idle"; // アイドリング + const csmChar* MotionGroupTapBody = "TapBody"; // 体をタップしたとき + + // 外部定義ファイル(json)と合わせる + const csmChar* HitAreaNameHead = "Head"; + const csmChar* HitAreaNameBody = "Body"; + + // モーションの優先度定数 + const csmInt32 PriorityNone = 0; + const csmInt32 PriorityIdle = 1; + const csmInt32 PriorityNormal = 2; + const csmInt32 PriorityForce = 3; + + // デバッグ用ログの表示オプション + const csmBool DebugLogEnable = true; + const csmBool DebugTouchLogEnable = false; + + // Frameworkから出力するログのレベル設定 + const CubismFramework::Option::LogLevel CubismLoggingLevel = CubismFramework::Option::LogLevel_Verbose; +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDefine.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDefine.hpp new file mode 100644 index 0000000..fc97dfe --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDefine.hpp @@ -0,0 +1,64 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include + +/** +* @brief Sample Appで使用する定数 +* +*/ +namespace LAppDefine { + + using namespace Csm; + + extern const csmFloat32 ViewScale; ///< 拡大縮小率 + extern const csmFloat32 ViewMaxScale; ///< 拡大縮小率の最大値 + extern const csmFloat32 ViewMinScale; ///< 拡大縮小率の最小値 + + extern const csmFloat32 ViewLogicalLeft; ///< 論理的なビュー座標系の左端の値 + extern const csmFloat32 ViewLogicalRight; ///< 論理的なビュー座標系の右端の値 + extern const csmFloat32 ViewLogicalBottom; ///< 論理的なビュー座標系の下端の値 + extern const csmFloat32 ViewLogicalTop; ///< 論理的なビュー座標系の上端の値 + + extern const csmFloat32 ViewLogicalMaxLeft; ///< 論理的なビュー座標系の左端の最大値 + extern const csmFloat32 ViewLogicalMaxRight; ///< 論理的なビュー座標系の右端の最大値 + extern const csmFloat32 ViewLogicalMaxBottom; ///< 論理的なビュー座標系の下端の最大値 + extern const csmFloat32 ViewLogicalMaxTop; ///< 論理的なビュー座標系の上端の最大値 + + extern const csmChar* ResourcesPath; ///< 素材パス + extern const csmChar* BackImageName; ///< 背景画像ファイル + extern const csmChar* GearImageName; ///< 歯車画像ファイル + extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* VertShaderName; ///< 頂点シェーダー + extern const csmChar* FragShaderName; ///< フラグメントシェーダー + + // モデル定義-------------------------------------------- + // 外部定義ファイル(json)と合わせる + extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト + extern const csmChar* MotionGroupTapBody; ///< 体をタップした時に再生するモーションのリスト + + // 外部定義ファイル(json)と合わせる + extern const csmChar* HitAreaNameHead; ///< 当たり判定の[Head]タグ + extern const csmChar* HitAreaNameBody; ///< 当たり判定の[Body]タグ + + // モーションの優先度定数 + extern const csmInt32 PriorityNone; ///< モーションの優先度定数: 0 + extern const csmInt32 PriorityIdle; ///< モーションの優先度定数: 1 + extern const csmInt32 PriorityNormal; ///< モーションの優先度定数: 2 + extern const csmInt32 PriorityForce; ///< モーションの優先度定数: 3 + + // デバッグ用ログの表示 + extern const csmBool DebugLogEnable; ///< デバッグ用ログ表示の有効・無効 + extern const csmBool DebugTouchLogEnable; ///< タッチ処理のデバッグ用ログ表示の有効・無効 + + // Frameworkから出力するログのレベル設定 + extern const CubismFramework::Option::LogLevel CubismLoggingLevel; +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDelegate.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDelegate.cpp new file mode 100644 index 0000000..9563450 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDelegate.cpp @@ -0,0 +1,244 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppDelegate.hpp" +#include +#include "LAppView.hpp" +#include "LAppPal.hpp" +#include "LAppDefine.hpp" +#include "LAppLive2DManager.hpp" +#include "LAppTextureManager.hpp" +#include "NapiBridgeC.hpp" + +using namespace Csm; +using namespace std; +using namespace LAppDefine; + +namespace { + LAppDelegate* s_instance = NULL; +} + +LAppDelegate* LAppDelegate::GetInstance() +{ + if (s_instance == NULL) + { + s_instance = new LAppDelegate(); + } + + return s_instance; +} + +void LAppDelegate::ReleaseInstance() +{ + if (s_instance != NULL) + { + delete s_instance; + } + + s_instance = NULL; +} + + +void LAppDelegate::Run() +{ + // 時間更新 + LAppPal::UpdateTime(); + + // 画面の初期化 + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glClearDepthf(1.0f); + + //描画更新 + if (_view != NULL) + { + _view->Render(); + } + eglSwapBuffers(_eglDisplay, _eglSurface); + + if(!_isActive) + { + NapiBridgeC::MoveTaskToBack(); + _isActive = true; + } +} + +void LAppDelegate::InitializeEgl() +{ + csmInt32 configAttribs[] = + { + EGL_SURFACE_TYPE, + EGL_WINDOW_BIT, + EGL_RED_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_BLUE_SIZE, 8, + EGL_ALPHA_SIZE, 8, + EGL_RENDERABLE_TYPE, + EGL_OPENGL_ES2_BIT, + EGL_NONE + }; + EGLint winAttribs[] = + { + EGL_GL_COLORSPACE_KHR, + EGL_GL_COLORSPACE_SRGB_KHR, + EGL_NONE + }; + EGLint contextAttribs[] = + { + EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_NONE + }; + csmInt32 configsNum; + + if (!_eglWindow) + { + LAppPal::PrintLogLn("Failed because `window` is null."); + return; + } + _eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); + if (!eglInitialize(_eglDisplay, nullptr, nullptr)) + { + LAppPal::PrintLogLn("Failed to initialize `_eglDisplay`."); + _eglDisplay = EGL_NO_DISPLAY; + return; + } + + if (!eglChooseConfig(_eglDisplay, configAttribs, &_eglConfig, 1, &configsNum)) + { + LAppPal::PrintLogLn("`eglChooseConfig` error."); + return; + } + + _eglSurface = eglCreateWindowSurface(_eglDisplay, _eglConfig, _eglWindow, winAttribs); + if (!_eglSurface) + { + LAppPal::PrintLogLn("`_eglSurface` is null."); + return; + } + + _eglContext = eglCreateContext(_eglDisplay, _eglConfig, _eglSharedContext, contextAttribs); + if (!eglMakeCurrent(_eglDisplay, _eglSurface, _eglSurface, _eglContext)) + { + LAppPal::PrintLogLn("`eglMakeCurrent` error = %d", eglGetError()); + return; + } + + LAppPal::PrintLogLn("Successful initialization of EGL."); +} + +void LAppDelegate::ReleaseEgl() +{ + if (!eglDestroySurface(_eglDisplay, _eglSurface)) + { + LAppPal::PrintLogLn("`eglDestroySurface` failed."); + } + + if (!eglDestroyContext(_eglDisplay, _eglContext)) + { + LAppPal::PrintLogLn("`eglDestroyContext` failed."); + } + + if (!eglTerminate(_eglDisplay)) + { + LAppPal::PrintLogLn("`eglTerminate` failed."); + } + + _eglSurface = nullptr; + _eglContext = EGL_NO_CONTEXT; + _eglDisplay = EGL_NO_DISPLAY; + + LAppPal::PrintLogLn("Successful delete of EGL."); +} + +void LAppDelegate::InitializeDisplay() +{ + _textureManager = new LAppTextureManager(); + _view = new LAppView(); + LAppPal::UpdateTime(); + + //テクスチャサンプリング設定 + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + + //透過設定 + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + //Initialize cubism + CubismFramework::Initialize(); +} + +void LAppDelegate::ChangeDisplay(float width, float height) +{ + glViewport(0, 0, width, height); + _width = width; + _height = height; + + //AppViewの初期化 + _view->Initialize(); + _view->InitializeSprite(); +} + +LAppDelegate::LAppDelegate(): + _cubismOption(), + _captured(false), + _mouseX(0.0f), + _mouseY(0.0f), + _isActive(true), + _textureManager(NULL), + _view(NULL), + _eglDisplay(EGL_NO_DISPLAY), + _eglConfig(nullptr), + _eglSurface(nullptr), + _eglContext(EGL_NO_CONTEXT), + _eglSharedContext(EGL_NO_CONTEXT) +{ + // Setup Cubism + _cubismOption.LogFunction = LAppPal::PrintMessageLn; + _cubismOption.LoggingLevel = LAppDefine::CubismLoggingLevel; + CubismFramework::CleanUp(); + CubismFramework::StartUp(&_cubismAllocator, &_cubismOption); +} + +LAppDelegate::~LAppDelegate() +{ +} + +void LAppDelegate::OnTouchBegan(double x, double y) +{ + _mouseX = static_cast(x); + _mouseY = static_cast(y); + + if (_view != NULL) + { + _captured = true; + _view->OnTouchesBegan(_mouseX, _mouseY); + } +} + +void LAppDelegate::OnTouchEnded(double x, double y) +{ + _mouseX = static_cast(x); + _mouseY = static_cast(y); + + if (_view != NULL) + { + _captured = false; + _view->OnTouchesEnded(_mouseX, _mouseY); + } +} + +void LAppDelegate::OnTouchMoved(double x, double y) +{ + _mouseX = static_cast(x); + _mouseY = static_cast(y); + + if (_captured && _view != NULL) + { + _view->OnTouchesMoved(_mouseX, _mouseY); + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDelegate.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDelegate.hpp new file mode 100644 index 0000000..25a4279 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppDelegate.hpp @@ -0,0 +1,158 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include "LAppAllocator.hpp" + +class LAppView; +class LAppTextureManager; + +/** +* @brief アプリケーションクラス。 +* Cubism SDK の管理を行う。 +*/ +class LAppDelegate +{ +public: + /** + * @brief クラスのインスタンス(シングルトン)を返す。
+ * インスタンスが生成されていない場合は内部でインスタンを生成する。 + * + * @return クラスのインスタンス + */ + static LAppDelegate* GetInstance(); + + /** + * @brief クラスのインスタンス(シングルトン)を解放する。 + * + */ + static void ReleaseInstance(); + + /** + * @brief 実行処理。 + */ + void Run(); + + /** + * @brief EGLの設定 + * + */ + void InitializeEgl(); + + /** + * @brief EGLの破棄 + * + */ + void ReleaseEgl(); + + /** + * @brief OnSurfaceCreateのコールバック関数。 + * + */ + void InitializeDisplay(); + + /** + * @brief OnSurfaceChangedのコールバック関数。 + * + * @param width + * @param height + */ + void ChangeDisplay(float width, float height); + + /** + * @brief Touch開始。 + * + * @param[in] x x座標 + * @param[in] y x座標 + */ + void OnTouchBegan(double x, double y); + + /** + * @brief Touch終了。 + * + * @param[in] x x座標 + * @param[in] y x座標 + */ + void OnTouchEnded(double x, double y); + + /** + * @brief Touch移動。 + * + * @param[in] x x座標 + * @param[in] y x座標 + */ + void OnTouchMoved(double x, double y); + + /** + * @brief テクスチャマネージャーの取得 + */ + LAppTextureManager* GetTextureManager() { return _textureManager; } + + /** + * @brief ウインドウ幅の取得 + */ + int GetWindowWidth() { return _width; } + + /** + * @brief ウインドウ高さの取得 + */ + int GetWindowHeight() { return _height; } + + /** + * @brief windowの設定 + * + * @param window + */ + void SetWindow(void *window) { _eglWindow = reinterpret_cast(window); } + + /** + * @brief ウインドウの取得 + */ + const void* GetWindow() { return reinterpret_cast(_eglWindow); }; + + /** + * @brief アプリケーションを非アクティブにする。 + */ + void DeActivateApp() { _isActive = false; } + + /** + * @brief View情報を取得する。 + */ + LAppView* GetView() { return _view; } + +private: + /** + * @brief コンストラクタ + */ + LAppDelegate(); + + /** + * @brief デストラクタ + */ + ~LAppDelegate(); + + LAppAllocator _cubismAllocator; ///< Cubism SDK Allocator + Csm::CubismFramework::Option _cubismOption; ///< Cubism SDK Option + LAppTextureManager* _textureManager; ///< テクスチャマネージャー + LAppView* _view; ///< View情報 + int _width; ///< Windowの幅 + int _height; ///< windowの高さ + bool _captured; ///< クリックしているか + bool _isActive; ///< アプリがアクティブ状態なのか + float _mouseY; ///< マウスY座標 + float _mouseX; ///< マウスX座標 + EGLNativeWindowType _eglWindow; + EGLDisplay _eglDisplay; + EGLConfig _eglConfig; + EGLSurface _eglSurface; + EGLContext _eglContext; + EGLContext _eglSharedContext; +}; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppLive2DManager.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppLive2DManager.cpp new file mode 100644 index 0000000..c368647 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppLive2DManager.cpp @@ -0,0 +1,272 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppLive2DManager.hpp" +#include +#include +#include +#include "LAppPal.hpp" +#include "LAppDefine.hpp" +#include "LAppDelegate.hpp" +#include "LAppModel.hpp" +#include "LAppView.hpp" +#include "NapiBridgeC.hpp" + +using namespace Csm; +using namespace LAppDefine; + +namespace { + LAppLive2DManager* s_instance = NULL; + + void BeganMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion Began: %x", self); + } + + void FinishedMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion Finished: %x", self); + } + + int CompareCsmString(const void* a, const void* b) + { + return strcmp(reinterpret_cast(a)->GetRawString(), + reinterpret_cast(b)->GetRawString()); + } +} + +LAppLive2DManager* LAppLive2DManager::GetInstance() +{ + if (s_instance == NULL) + { + s_instance = new LAppLive2DManager(); + } + + return s_instance; +} + +void LAppLive2DManager::ReleaseInstance() +{ + if (s_instance != NULL) + { + delete s_instance; + } + + s_instance = NULL; +} + +LAppLive2DManager::LAppLive2DManager() + : _viewMatrix(NULL) + , _sceneIndex(0) +{ + _viewMatrix = new CubismMatrix44(); + SetUpModel(); + + ChangeScene(_sceneIndex); +} + +LAppLive2DManager::~LAppLive2DManager() +{ + ReleaseAllModel(); + delete _viewMatrix; +} + +void LAppLive2DManager::ReleaseAllModel() +{ + for (csmUint32 i = 0; i < _models.GetSize(); i++) + { + delete _models[i]; + } + + _models.Clear(); +} + +void LAppLive2DManager::SetUpModel() +{ + const char MODEL3_JSON[] = u8".model3.json"; + _modelDir.Clear(); + csmVector root = NapiBridgeC::GetAssetList(ResourcesPath); + for (size_t i = 0; i < root.GetSize(); i++) + { + csmString target(root[i]); + target.Append(MODEL3_JSON, sizeof(MODEL3_JSON) - 1); + csmString modelPath = csmString(ResourcesPath) + root[i]; + csmVector sub = NapiBridgeC::GetAssetList(modelPath.GetRawString()); + for (size_t j = 0; j < sub.GetSize(); j++) + { + if (target == sub[j]) + { + _modelDir.PushBack(root[i]); + break; + } + } + } + qsort(_modelDir.GetPtr(), _modelDir.GetSize(), sizeof(csmString), CompareCsmString); +} + +LAppModel* LAppLive2DManager::GetModel(csmUint32 no) const +{ + if (no < _models.GetSize()) + { + return _models[no]; + } + + return NULL; +} + +void LAppLive2DManager::OnDrag(csmFloat32 x, csmFloat32 y) const +{ + for (csmUint32 i = 0; i < _models.GetSize(); i++) + { + LAppModel* model = GetModel(i); + + model->SetDragging(x, y); + } +} + +void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) +{ + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]tap point: {x:%.2f y:%.2f}", x, y); + } + + for (csmUint32 i = 0; i < _models.GetSize(); i++) + { + if (_models[i]->HitTest(HitAreaNameHead, x, y)) + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameHead); + } + _models[i]->SetRandomExpression(); + } + else if (_models[i]->HitTest(HitAreaNameBody, x, y)) + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); + } + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); + } + } +} + +void LAppLive2DManager::OnUpdate() const +{ + int width = LAppDelegate::GetInstance()->GetWindowWidth(); + int height = LAppDelegate::GetInstance()->GetWindowHeight(); + + csmUint32 modelCount = _models.GetSize(); + for (csmUint32 i = 0; i < modelCount; ++i) + { + CubismMatrix44 projection; + LAppModel* model = GetModel(i); + + if (model->GetModel() == NULL) + { + LAppPal::PrintLogLn("Failed to model->GetModel()."); + continue; + } + + if (model->GetModel()->GetCanvasWidth() > 1.0f && width < height) + { + // 横に長いモデルを縦長ウィンドウに表示する際モデルの横サイズでscaleを算出する + model->GetModelMatrix()->SetWidth(2.0f); + projection.Scale(1.0f, static_cast(width) / static_cast(height)); + } + else + { + projection.Scale(static_cast(height) / static_cast(width), 1.0f); + } + + // 必要があればここで乗算 + if (_viewMatrix != NULL) + { + projection.MultiplyByMatrix(_viewMatrix); + } + + // モデル1体描画前コール + LAppDelegate::GetInstance()->GetView()->PreModelDraw(*model); + + model->Update(); + model->Draw(projection);///< 参照渡しなのでprojectionは変質する + + // モデル1体描画後コール + LAppDelegate::GetInstance()->GetView()->PostModelDraw(*model); + } +} + +void LAppLive2DManager::NextScene() +{ + csmInt32 no = (_sceneIndex + 1) % _modelDir.GetSize(); + ChangeScene(no); +} + +void LAppLive2DManager::ChangeScene(csmInt32 index) +{ + _sceneIndex = index; + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]model index: %d", _sceneIndex); + } + + // model3.jsonのパスを決定する. + // ディレクトリ名とmodel3.jsonの名前を一致していることが条件 + csmString modelPath(ResourcesPath); + modelPath += _modelDir[index] + "/"; + csmString modelJsonName(_modelDir[index]); + modelJsonName += ".model3.json"; + + ReleaseAllModel(); + _models.PushBack(new LAppModel()); + _models[0]->LoadAssets(modelPath.GetRawString(), modelJsonName.GetRawString()); + + /* + * モデル半透明表示を行うサンプルを提示する。 + * ここでUSE_RENDER_TARGET、USE_MODEL_RENDER_TARGETが定義されている場合 + * 別のレンダリングターゲットにモデルを描画し、描画結果をテクスチャとして別のスプライトに張り付ける。 + */ + { +#if defined(USE_RENDER_TARGET) + // LAppViewの持つターゲットに描画を行う場合、こちらを選択 + LAppView::SelectTarget useRenderTarget = LAppView::SelectTarget_ViewFrameBuffer; +#elif defined(USE_MODEL_RENDER_TARGET) + // 各LAppModelの持つターゲットに描画を行う場合、こちらを選択 + LAppView::SelectTarget useRenderTarget = LAppView::SelectTarget_ModelFrameBuffer; +#else + // デフォルトのメインフレームバッファへレンダリングする(通常) + LAppView::SelectTarget useRenderTarget = LAppView::SelectTarget_None; +#endif + +#if defined(USE_RENDER_TARGET) || defined(USE_MODEL_RENDER_TARGET) + // モデル個別にαを付けるサンプルとして、もう1体モデルを作成し、少し位置をずらす + _models.PushBack(new LAppModel()); + _models[1]->LoadAssets(modelPath.GetRawString(), modelJsonName.GetRawString()); + _models[1]->GetModelMatrix()->TranslateX(0.2f); +#endif + + LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); + + // 別レンダリング先を選択した際の背景クリア色 + float clearColor[3] = { 0.0f, 0.0f, 0.0f }; + LAppDelegate::GetInstance()->GetView()->SetRenderTargetClearColor(clearColor[0], clearColor[1], clearColor[2]); + } +} + +csmUint32 LAppLive2DManager::GetModelNum() const +{ + return _models.GetSize(); +} + +void LAppLive2DManager::SetViewMatrix(CubismMatrix44* m) +{ + for (int i = 0; i < 16; i++) { + _viewMatrix->GetArray()[i] = m->GetArray()[i]; + } +} + diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppLive2DManager.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppLive2DManager.hpp new file mode 100644 index 0000000..b692144 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppLive2DManager.hpp @@ -0,0 +1,127 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include + +class LAppModel; + +/** +* @brief サンプルアプリケーションにおいてCubismModelを管理するクラス
+* モデル生成と破棄、タップイベントの処理、モデル切り替えを行う。 +* +*/ +class LAppLive2DManager +{ + +public: + /** + * @brief クラスのインスタンス(シングルトン)を返す。
+ * インスタンスが生成されていない場合は内部でインスタンを生成する。 + * + * @return クラスのインスタンス + */ + static LAppLive2DManager* GetInstance(); + + /** + * @brief クラスのインスタンス(シングルトン)を解放する。 + * + */ + static void ReleaseInstance(); + + /** + * @brief Resources フォルダにあるモデルフォルダ名をセットする + * + */ + void SetUpModel(); + + /** + * @brief 現在のシーンで保持しているモデルを返す + * + * @param[in] no モデルリストのインデックス値 + * @return モデルのインスタンスを返す。インデックス値が範囲外の場合はNULLを返す。 + */ + LAppModel* GetModel(Csm::csmUint32 no) const; + + /** + * @brief 現在のシーンで保持しているすべてのモデルを解放する + * + */ + void ReleaseAllModel(); + + /** + * @brief 画面をドラッグしたときの処理 + * + * @param[in] x 画面のX座標 + * @param[in] y 画面のY座標 + */ + void OnDrag(Csm::csmFloat32 x, Csm::csmFloat32 y) const; + + /** + * @brief 画面をタップしたときの処理 + * + * @param[in] x 画面のX座標 + * @param[in] y 画面のY座標 + */ + void OnTap(Csm::csmFloat32 x, Csm::csmFloat32 y); + + /** + * @brief 画面を更新するときの処理 + * モデルの更新処理および描画処理を行う + */ + void OnUpdate() const; + + /** + * @brief 次のシーンに切り替える
+ * サンプルアプリケーションではモデルセットの切り替えを行う。 + */ + void NextScene(); + + /** + * @brief シーンを切り替える
+ * サンプルアプリケーションではモデルセットの切り替えを行う。 + */ + void ChangeScene(Csm::csmInt32 index); + + /** + * @brief シーンインデックスの取得 + * @return シーンインデックスを返す + */ + Csm::csmInt32 GetSceneIndex() { return _sceneIndex; } + + /** + * @brief モデル個数を得る + * @return 所持モデル個数 + */ + Csm::csmUint32 GetModelNum() const; + + /** + * @brief viewMatrixをセットする + */ + void SetViewMatrix(Live2D::Cubism::Framework::CubismMatrix44* m); + +private: + /** + * @brief コンストラクタ + */ + LAppLive2DManager(); + + /** + * @brief デストラクタ + */ + virtual ~LAppLive2DManager(); + + Csm::CubismMatrix44* _viewMatrix; ///< モデル描画に用いるView行列 + Csm::csmVector _models; ///< モデルインスタンスのコンテナ + Csm::csmInt32 _sceneIndex; ///< 表示するシーンのインデックス値 + + Csm::csmVector _modelDir; ///< モデルディレクトリ名のコンテナ +}; diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppModel.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppModel.cpp similarity index 54% rename from Samples/Cocos2d-x/Demo/Classes/LAppModel.cpp rename to Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppModel.cpp index 73c8992..442bd6d 100644 --- a/Samples/Cocos2d-x/Demo/Classes/LAppModel.cpp +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppModel.cpp @@ -1,72 +1,55 @@ -/** +/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. */ -//Cubism Framework -#include "LAppDefine.hpp" #include "LAppModel.hpp" -#include "LAppPal.hpp" +#include +#include #include #include #include #include -#include +#include #include #include -#include "Motion/CubismMotionQueueEntry.hpp" -#include "SampleScene.h" - -//cocos2d -#include "base/CCDirector.h" -#include "renderer/CCTexture2D.h" -#include "renderer/CCTextureCache.h" - -using namespace std; -using namespace Csm; -using namespace Csm::Constant; -using namespace Csm::DefaultParameterId; -using namespace LAppDefine; -using namespace cocos2d::backend; - -#if USE_AUDIO_ENGINE -#include "audio/include/AudioEngine.h" -using namespace cocos2d::experimental; -#elif USE_SIMPLE_AUDIO_ENGINE -#include "audio/include/SimpleAudioEngine.h" -using namespace CocosDenshion; -#endif +#include +#include "LAppDefine.hpp" +#include "LAppPal.hpp" +#include "LAppTextureManager.hpp" +#include "LAppDelegate.hpp" -USING_NS_CC; +using namespace Live2D::Cubism::Framework; +using namespace Live2D::Cubism::Framework::DefaultParameterId; +using namespace LAppDefine; namespace { -csmByte* CreateBuffer(const csmChar* path, csmSizeInt* size) -{ - if (DebugLogEnable)LAppPal::PrintLogLn("[APP]create buffer: %s ", path); - return LAppPal::LoadFileAsBytes(path, size); -} + csmByte* CreateBuffer(const csmChar* path, csmSizeInt* size) + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]create buffer: %s ", path); + } + return LAppPal::LoadFileAsBytes(path, size); + } -void DeleteBuffer(csmByte* buffer, const csmChar* path = "") -{ - if (DebugLogEnable) LAppPal::PrintLogLn("[APP]delete buffer: %s", path); - LAppPal::ReleaseBytes(buffer); -} + void DeleteBuffer(csmByte* buffer, const csmChar* path = "") + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]delete buffer: %s", path); + } + LAppPal::ReleaseBytes(buffer); + } } - LAppModel::LAppModel() : CubismUserModel() , _modelSetting(NULL) , _userTimeSeconds(0.0f) - , _renderSprite(NULL) { - if (MocConsistencyValidationEnable) - { - _mocConsistency = true; - } - if (DebugLogEnable) { _debugMode = true; @@ -78,29 +61,11 @@ LAppModel::LAppModel() _idParamBodyAngleX = CubismFramework::GetIdManager()->GetId(ParamBodyAngleX); _idParamEyeBallX = CubismFramework::GetIdManager()->GetId(ParamEyeBallX); _idParamEyeBallY = CubismFramework::GetIdManager()->GetId(ParamEyeBallY); - - _clearColor[0] = 1.0f; - _clearColor[1] = 1.0f; - _clearColor[2] = 1.0f; - _clearColor[3] = 0.0f; - - _renderBuffer = new Csm::Rendering::CubismOffscreenSurface_Cocos2dx; - - _groupCommand.init(0.0); } LAppModel::~LAppModel() { - if (_debugMode)LAppPal::PrintLogLn("[APP]delete model: %s", _modelSetting->GetModelFileName()); - - if (_renderSprite) - { - // Cocos本体が消滅した後ではこの呼び出しが出来ないことに注意 - _renderSprite->removeFromParentAndCleanup(true); - _renderSprite = NULL; - } - _renderBuffer->DestroyOffscreenSurface(); - delete _renderBuffer; + _renderBuffer.DestroyOffscreenSurface(); ReleaseMotions(); ReleaseExpressions(); @@ -110,21 +75,17 @@ LAppModel::~LAppModel() const csmChar* group = _modelSetting->GetMotionGroupName(i); ReleaseMotionGroup(group); } - CSM_DELETE(_modelSetting); - - //cocos2d - for (csmInt32 i = 0; i < _loadedTextures.GetSize(); i++) - { - Director::getInstance()->getTextureCache()->removeTexture(_loadedTextures[i]); - } - _loadedTextures.Clear(); + delete _modelSetting; } void LAppModel::LoadAssets(const csmChar* dir, const csmChar* fileName) { _modelHomeDir = dir; - if (_debugMode)LAppPal::PrintLogLn("[APP]load model setting: %s", fileName); + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]load model setting: %s", fileName); + } csmSizeInt size; const csmString path = csmString(dir) + fileName; @@ -137,8 +98,8 @@ void LAppModel::LoadAssets(const csmChar* dir, const csmChar* fileName) if (_model == NULL) { - LAppPal::PrintLogLn("Failed to LoadAssets()."); - return; + LAppPal::PrintLogLn("Failed to LoadAssets()."); + return; } CreateRenderer(); @@ -163,12 +124,14 @@ void LAppModel::SetupModel(ICubismModelSetting* setting) csmString path = _modelSetting->GetModelFileName(); path = _modelHomeDir + path; - if (_debugMode)LAppPal::PrintLogLn("[APP]create model: %s", setting->GetModelFileName()); + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]create model: %s", setting->GetModelFileName()); + } buffer = CreateBuffer(path.GetRawString(), &size); - LoadModel(buffer, size, _mocConsistency); + LoadModel(buffer, size); DeleteBuffer(buffer, path.GetRawString()); - } //Expression @@ -232,11 +195,11 @@ void LAppModel::SetupModel(ICubismModelSetting* setting) csmVector breathParameters; - breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleX, 0.0f, 15.0f, 6.5345f, 0.5f)); - breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleY, 0.0f, 8.0f, 3.5345f, 0.5f)); - breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleZ, 0.0f, 10.0f, 5.5345f, 0.5f)); - breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamBodyAngleX, 0.0f, 4.0f, 15.5345f, 0.5f)); - breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId(ParamBreath), 0.5f, 0.5f, 3.2345f, 0.5f)); + breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleX, 0.0f, 15.0f, 6.5345f, 0.5f)); + breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleY, 0.0f, 8.0f, 3.5345f, 0.5f)); + breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleZ, 0.0f, 10.0f, 5.5345f, 0.5f)); + breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamBodyAngleX, 0.0f, 4.0f, 15.5345f, 0.5f)); + breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId(ParamBreath), 0.5f, 0.5f, 3.2345f, 0.5f)); _breath->SetParameters(breathParameters); } @@ -247,7 +210,7 @@ void LAppModel::SetupModel(ICubismModelSetting* setting) csmString path = _modelSetting->GetUserDataFile(); path = _modelHomeDir + path; buffer = CreateBuffer(path.GetRawString(), &size); - LoadUserData(buffer,size); + LoadUserData(buffer, size); DeleteBuffer(buffer, path.GetRawString()); } @@ -271,8 +234,8 @@ void LAppModel::SetupModel(ICubismModelSetting* setting) if (_modelSetting == NULL || _modelMatrix == NULL) { - LAppPal::PrintLogLn("Failed to SetupModel()."); - return; + LAppPal::PrintLogLn("Failed to SetupModel()."); + return; } //Layout @@ -305,26 +268,18 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) csmString path = _modelSetting->GetMotionFileName(group, i); path = _modelHomeDir + path; - if (_debugMode)LAppPal::PrintLogLn("[APP]load motion: %s => [%s_%d] ", path.GetRawString(), group, i); + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]load motion: %s => [%s_%d] ", path.GetRawString(), group, i); + } csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -335,19 +290,6 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) } DeleteBuffer(buffer, path.GetRawString()); - - csmString voice = _modelSetting->GetMotionSoundFileName(group, i); - if (strcmp(voice.GetRawString(), "") != 0) - { - csmString path = voice; - path = _modelHomeDir + path; - -#if USE_AUDIO_ENGINE - AudioEngine::preload(path.GetRawString()); -#elif USE_SIMPLE_AUDIO_ENGINE - SimpleAudioEngine::getInstance()->preloadEffect(path.GetRawString()); -#endif - } } } @@ -361,12 +303,6 @@ void LAppModel::ReleaseMotionGroup(const csmChar* group) const { csmString path = voice; path = _modelHomeDir + path; - -#if USE_AUDIO_ENGINE - AudioEngine::uncache(path.GetRawString()); -#elif USE_SIMPLE_AUDIO_ENGINE - SimpleAudioEngine::getInstance()->unloadEffect(path.GetRawString()); -#endif } } } @@ -473,7 +409,7 @@ void LAppModel::Update() // リップシンクの設定 if (_lipSync) { - csmFloat32 value = 0; // リアルタイムでリップシンクを行う場合、システムから音量を取得して0~1の範囲で値を入力します。 + csmFloat32 value = 0; // リアルタイムでリップシンクを行う場合、システムから音量を取得して0〜1の範囲で値を入力します。 for (csmUint32 i = 0; i < _lipSyncIds.GetSize(); ++i) { @@ -491,7 +427,7 @@ void LAppModel::Update() } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -499,7 +435,10 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else if (!_motionManager->ReserveMotion(priority)) { - if (_debugMode) LAppPal::PrintLogLn("[APP]can't start motion."); + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]can't start motion."); + } return InvalidMotionQueueEntryHandleValue; } @@ -518,21 +457,10 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -541,6 +469,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -550,18 +479,16 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt { csmString path = voice; path = _modelHomeDir + path; -#if USE_AUDIO_ENGINE - AudioEngine::play2d(path.GetRawString()); -#elif USE_SIMPLE_AUDIO_ENGINE - SimpleAudioEngine::getInstance()->playEffect(path.GetRawString()); -#endif } - if (_debugMode)LAppPal::PrintLogLn("[APP]start motion: [%s_%d]", group, no); + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]start motion: [%s_%d]", group, no); + } return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -570,47 +497,40 @@ CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() { - if (_model == NULL)return; + if (_model == NULL) + { + return; + } - GetRenderer()->DrawModel(); + GetRenderer()->DrawModel(); } -void LAppModel::Draw(Csm::Rendering::CubismCommandBuffer_Cocos2dx* commandBuffer, CubismMatrix44& matrix) +void LAppModel::Draw(CubismMatrix44& matrix) { - if (_model == NULL)return; - - Csm::Rendering::CubismRenderer_Cocos2dx::StartFrame(commandBuffer); - - //commandBuffer->PushCommandGroup(); - - if (_renderBuffer->IsValid()) + if (_model == NULL) { - _renderBuffer->BeginDraw(commandBuffer, NULL); - _renderBuffer->Clear(commandBuffer, _clearColor[0], _clearColor[1], _clearColor[2], _clearColor[3]); + return; } matrix.MultiplyByMatrix(_modelMatrix); - GetRenderer()->SetMvpMatrix(&matrix); + GetRenderer()->SetMvpMatrix(&matrix); DoDraw(); - - if (_renderBuffer->IsValid()) - { - _renderBuffer->EndDraw(commandBuffer); - } - - //commandBuffer->PopCommandGroup(); } csmBool LAppModel::HitTest(const csmChar* hitAreaName, csmFloat32 x, csmFloat32 y) { - if (_opacity < 1)return false; // 透明時は当たり判定なし。 + // 透明時は当たり判定なし。 + if (_opacity < 1) + { + return false; + } const csmInt32 count = _modelSetting->GetHitAreasCount(); for (csmInt32 i = 0; i < count; i++) { @@ -626,10 +546,14 @@ csmBool LAppModel::HitTest(const csmChar* hitAreaName, csmFloat32 x, csmFloat32 void LAppModel::SetExpression(const csmChar* expressionID) { ACubismMotion* motion = _expressions[expressionID]; - if (_debugMode) LAppPal::PrintLogLn("[APP]expression: [%s]", expressionID); + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]expression: [%s]", expressionID); + } + if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { @@ -639,7 +563,10 @@ void LAppModel::SetExpression(const csmChar* expressionID) void LAppModel::SetRandomExpression() { - if (_expressions.GetSize() == 0) return; + if (_expressions.GetSize() == 0) + { + return; + } csmInt32 no = rand() % _expressions.GetSize(); csmMap::const_iterator map_ite; @@ -656,7 +583,7 @@ void LAppModel::SetRandomExpression() } } -void LAppModel::ReloadRnederer() +void LAppModel::ReloadRenderer() { DeleteRenderer(); @@ -667,38 +594,30 @@ void LAppModel::ReloadRnederer() void LAppModel::SetupTextures() { - _loadedTextures.Clear(); for (csmInt32 modelTextureNumber = 0; modelTextureNumber < _modelSetting->GetTextureCount(); modelTextureNumber++) { // テクスチャ名が空文字だった場合はロード・バインド処理をスキップ - if (strcmp(_modelSetting->GetTextureFileName(modelTextureNumber), "") == 0) continue; + if (strcmp(_modelSetting->GetTextureFileName(modelTextureNumber), "") == 0) + { + continue; + } + //OpenGLのテクスチャユニットにテクスチャをロードする csmString texturePath = _modelSetting->GetTextureFileName(modelTextureNumber); texturePath = _modelHomeDir + texturePath; - // Cocos2d-x - // テクスチャをファイルからロードする. ロードできなければnullptrが返る - Texture2D* texture = Director::getInstance()->getTextureCache()->addImage(std::string(texturePath.GetRawString())); - - // テクスチャが読めていなければバインド処理をスキップ - if(!texture) continue; - - const SamplerDescriptor texParams = { - SamplerFilter::LINEAR_MIPMAP_LINEAR, - SamplerFilter::LINEAR, - SamplerAddressMode::CLAMP_TO_EDGE, - SamplerAddressMode::CLAMP_TO_EDGE - }; - texture->setTexParameters(texParams); - texture->generateMipmap(); - _loadedTextures.PushBack(texture); + LAppTextureManager::TextureInfo* texture = LAppDelegate::GetInstance()->GetTextureManager()->CreateTextureFromPngFile(texturePath.GetRawString()); + const csmInt32 glTextueNumber = texture->id; - //Cocos2d - GetRenderer()->BindTexture(modelTextureNumber, texture); + //OpenGL + GetRenderer()->BindTexture(modelTextureNumber, glTextueNumber); } - GetRenderer()->IsPremultipliedAlpha(true); - +#ifdef PREMULTIPLIED_ALPHA_ENABLE + GetRenderer()->IsPremultipliedAlpha(true); +#else + GetRenderer()->IsPremultipliedAlpha(false); +#endif } void LAppModel::MotionEventFired(const csmString& eventValue) @@ -706,161 +625,7 @@ void LAppModel::MotionEventFired(const csmString& eventValue) CubismLogInfo("%s is fired on LAppModel!!", eventValue.GetRawString()); } -const csmVector& LAppModel::GetHitAreas(const Csm::CubismMatrix44& vpMatrix, const CubismVector2& windowSize) -{ - _hitArea.Clear(); - - for (csmInt32 i = 0; i < _modelSetting->GetHitAreasCount(); ++i) - { - _hitArea.PushBack(GetDrawableArea(GetModel()->GetDrawableIndex(_modelSetting->GetHitAreaId(i)),vpMatrix, windowSize)); - } - return _hitArea; -} - -const csmVector& LAppModel::GetUserDataAreas(const CubismMatrix44& vpMatrix, const CubismVector2& windowSize) -{ - _userArea.Clear(); - - if ( _modelUserData == NULL) - { - return _userArea; - } - - const csmVector& ans = _modelUserData->GetArtMeshUserDatas(); - - for ( csmUint32 i = 0; i < ans.GetSize(); ++i) - { - _userArea.PushBack(GetDrawableArea(GetModel()->GetDrawableIndex(ans[i]->TargetId), vpMatrix, windowSize)); - } - - return _userArea; -} - -csmRectF LAppModel::GetDrawableArea(csmInt32 drawableIndex, const CubismMatrix44& vpMatrix, const CubismVector2& windowSize) const -{ - CubismMatrix44 currentMatrix(vpMatrix); //Matrixをコピーしないと変質が次回に影響する - currentMatrix.MultiplyByMatrix(_modelMatrix); - - const csmInt32 count = _model->GetDrawableVertexCount(drawableIndex); - const csmFloat32* vertices = _model->GetDrawableVertices(drawableIndex); - - csmFloat32 left = vertices[0]; - csmFloat32 right = vertices[0]; - csmFloat32 top = vertices[1]; - csmFloat32 bottom = vertices[1]; - - for (csmInt32 j = 1; j < count; ++j) - { - CubismVector2 pos; - - pos.X = vertices[Constant::VertexOffset + j * Constant::VertexStep]; - pos.Y = vertices[Constant::VertexOffset + j * Constant::VertexStep + 1]; - - if (pos.X < left) - { - left = pos.X; // Min x - } - - if (pos.X > right) - { - right = pos.X; // Max x - } - - if (pos.Y < top) - { - top = pos.Y; // Min y - } - - if (pos.Y > bottom) - { - bottom = pos.Y; // Max y - } - } - - csmFloat32 convertLeft = left * currentMatrix.GetArray()[0] + top * currentMatrix.GetArray()[1]; - convertLeft = convertLeft * windowSize.X / 2 + windowSize.X / 2; - csmFloat32 convertTop = left * currentMatrix.GetArray()[4] + top * currentMatrix.GetArray()[5]; - convertTop = convertTop * windowSize.Y / 2 + windowSize.Y / 2; - csmFloat32 convertRight = right * currentMatrix.GetArray()[0] + bottom * currentMatrix.GetArray()[1]; - convertRight = convertRight * windowSize.X / 2 + windowSize.X / 2; - csmFloat32 convertBottom = right * currentMatrix.GetArray()[4] + bottom * currentMatrix.GetArray()[5]; - convertBottom = convertBottom * windowSize.Y / 2 + windowSize.Y / 2; - - return csmRectF(convertLeft, convertTop, (convertRight - convertLeft), (convertBottom - convertTop)); -} - -void LAppModel::MakeRenderingTarget() +Csm::Rendering::CubismOffscreenSurface_OpenGLES2& LAppModel::GetRenderBuffer() { - // RenderTexture::createは描画タイミングで呼ぶとAssert扱いになるので注意すること - if (!_renderSprite && !_renderBuffer->IsValid()) - { - int frameW = Director::getInstance()->getOpenGLView()->getFrameSize().width, frameH = Director::getInstance()->getOpenGLView()->getFrameSize().height; - -#if (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) - // Retina対策でこっちからとる - GLViewImpl *glimpl = (GLViewImpl *)Director::getInstance()->getOpenGLView(); - glfwGetFramebufferSize(glimpl->getWindow(), &frameW, &frameH); -#endif - - Size visibleSize = Director::getInstance()->getVisibleSize(); - Point origin = Director::getInstance()->getVisibleOrigin(); - - _renderSprite = RenderTexture::create(frameW, frameH, cocos2d::backend::PixelFormat::RGBA8888); - _renderSprite->setPosition(Point(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y)); - _renderSprite->getSprite()->getTexture()->setAntiAliasTexParameters(); - _renderSprite->getSprite()->setBlendFunc(BlendFunc::ALPHA_NON_PREMULTIPLIED); - _renderSprite->getSprite()->setOpacityModifyRGB(false); - // サンプルシーンへ登録 - SampleScene::getInstance()->addChild(_renderSprite); - _renderSprite->setVisible(true); - - // _renderSpriteのテクスチャを作成する - _renderSprite->getSprite()->getTexture()->setTexParameters( - cocos2d::Texture2D::TexParams( - cocos2d::backend::SamplerFilter::LINEAR, // MagFilter - cocos2d::backend::SamplerFilter::LINEAR, // MinFilter - cocos2d::backend::SamplerAddressMode::CLAMP_TO_EDGE, // AddressingMode S - cocos2d::backend::SamplerAddressMode::CLAMP_TO_EDGE // AddressingMode T - ) - ); - - // レンダリングバッファの描画先をそのテクスチャにする - _renderBuffer->CreateOffscreenSurface(frameW, frameH, _renderSprite); - } -} - -void LAppModel::SetSpriteColor(float r, float g, float b, float a) -{ - if (_renderSprite != NULL) - { - _renderSprite->getSprite()->setColor(Color3B(static_cast(255.0f * r), static_cast(255.0f * g), static_cast(255.0f * b))); - _renderSprite->getSprite()->setOpacity(static_cast(255.0f * a)); - } -} - -csmBool LAppModel::HasMocConsistencyFromFile(const csmChar* mocFileName) -{ - CSM_ASSERT(strcmp(mocFileName, "")); - - csmByte* buffer; - csmSizeInt size; - - csmString path = mocFileName; - path = _modelHomeDir + path; - - buffer = CreateBuffer(path.GetRawString(), &size); - - csmBool consistency = CubismMoc::HasMocConsistencyFromUnrevivedMoc(buffer, size); - if (!consistency) - { - CubismLogInfo("Inconsistent MOC3."); - } - else - { - CubismLogInfo("Consistent MOC3."); - } - - DeleteBuffer(buffer); - - return consistency; + return _renderBuffer; } diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppModel.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppModel.hpp similarity index 65% rename from Samples/Cocos2d-x/Demo/Classes/LAppModel.hpp rename to Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppModel.hpp index 46d3234..abda11c 100644 --- a/Samples/Cocos2d-x/Demo/Classes/LAppModel.hpp +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppModel.hpp @@ -1,4 +1,4 @@ -/** +/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license @@ -7,14 +7,11 @@ #pragma once -#include "2d/CCRenderTexture.h" #include #include #include #include -#include -#include "LAppDefine.hpp" -#include "AppDelegate.h" +#include /** * @brief ユーザーが実際に使用するモデルの実装クラス
@@ -39,13 +36,13 @@ class LAppModel : public Csm::CubismUserModel * @brief model3.jsonが置かれたディレクトリとファイルパスからモデルを生成する * */ - void LoadAssets(const Csm::csmChar dir[], const Csm::csmChar fileName[]); + void LoadAssets(const Csm::csmChar* dir, const Csm::csmChar* fileName); /** * @brief レンダラを再構築する * */ - void ReloadRnederer(); + void ReloadRenderer(); /** * @brief モデルの更新処理。モデルのパラメータから描画状態を決定する。 @@ -58,7 +55,7 @@ class LAppModel : public Csm::CubismUserModel * * @param[in] matrix View-Projection行列 */ - void Draw(Csm::Rendering::CubismCommandBuffer_Cocos2dx* commandBuffer, Csm::CubismMatrix44& matrix); + void Draw(Csm::CubismMatrix44& matrix); /** * @brief 引数で指定したモーションの再生を開始する。 @@ -67,9 +64,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -77,9 +75,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする @@ -110,32 +109,10 @@ class LAppModel : public Csm::CubismUserModel */ virtual Csm::csmBool HitTest(const Csm::csmChar* hitAreaName, Csm::csmFloat32 x, Csm::csmFloat32 y); - Csm::csmRectF GetDrawableArea(Csm::csmInt32 drawableIndex, const Csm::CubismMatrix44& vpMatrix, const Csm::CubismVector2& windowSize) const; - const Csm::csmVector& GetHitAreas(const Csm::CubismMatrix44& vpMatrix, const Csm::CubismVector2& windowSize); - const Csm::csmVector& GetUserDataAreas(const Csm::CubismMatrix44& vpMatrix, const Csm::CubismVector2& windowSize); - - /** - * @brief 別ターゲットに描画する際に使用するバッファ・スプライトを作成し、 - * スプライトをSampleSceneへ登録する - */ - void MakeRenderingTarget(); - /** - * @brief 別ターゲットに描画する際のスプライト色設定 - * @param[in] r 赤(0.0~1.0) - * @param[in] g 緑(0.0~1.0) - * @param[in] b 青(0.0~1.0) - * @param[in] a α(0.0~1.0) + * @brief 別ターゲットに描画する際に使用するバッファの取得 */ - void SetSpriteColor(float r, float g, float b, float a); - - /** - * @brief .moc3ファイルの整合性をチェックする - * - * @param[in] mocName MOC3ファイル名 - * @return MOC3に整合性があれば'true'、そうでなければ'false'。 - */ - Csm::csmBool HasMocConsistencyFromFile(const Csm::csmChar* mocFileName); + Csm::Rendering::CubismOffscreenSurface_OpenGLES2& GetRenderBuffer(); protected: /** @@ -190,29 +167,21 @@ class LAppModel : public Csm::CubismUserModel */ void ReleaseExpressions(); - Csm::ICubismModelSetting* _modelSetting; ///< モデルセッティング情報 - Csm::csmString _modelHomeDir; ///< モデルセッティングが置かれたディレクトリ - Csm::csmFloat32 _userTimeSeconds; ///< デルタ時間の積算値[秒] - + Csm::ICubismModelSetting* _modelSetting; ///< モデルセッティング情報 + Csm::csmString _modelHomeDir; ///< モデルセッティングが置かれたディレクトリ + Csm::csmFloat32 _userTimeSeconds; ///< デルタ時間の積算値[秒] Csm::csmVector _eyeBlinkIds; ///< モデルに設定されたまばたき機能用パラメータID - Csm::csmVector _lipSyncIds; ///< モデルに設定されたリップシンク機能用パラメータID - - Csm::csmMap _motions; ///< 読み込まれているモーションのリスト - Csm::csmMap _expressions; ///< 読み込まれている表情のリスト - - Csm::csmVector_hitArea; - Csm::csmVector_userArea; - - const Csm::CubismId* _idParamAngleX; ///< パラメータID: ParamAngleX - const Csm::CubismId* _idParamAngleY; ///< パラメータID: ParamAngleX - const Csm::CubismId* _idParamAngleZ; ///< パラメータID: ParamAngleX - const Csm::CubismId* _idParamBodyAngleX; ///< パラメータID: ParamBodyAngleX - const Csm::CubismId* _idParamEyeBallX; ///< パラメータID: ParamEyeBallX - const Csm::CubismId* _idParamEyeBallY; ///< パラメータID: ParamEyeBallXY - - Csm::Rendering::CubismOffscreenSurface_Cocos2dx* _renderBuffer; ///< モードによってはCubismOffscreenSurfaceのテクスチャを描画 - cocos2d::RenderTexture* _renderSprite; ///< _renderBufferを描画するスプライト - float _clearColor[4]; ///< _renderBufferをクリアする際の色 - Csm::csmVector _loadedTextures; - cocos2d::GroupCommand _groupCommand; + Csm::csmVector _lipSyncIds; ///< モデルに設定されたリップシンク機能用パラメータID + Csm::csmMap _motions; ///< 読み込まれているモーションのリスト + Csm::csmMap _expressions; ///< 読み込まれている表情のリスト + Csm::csmVector _hitArea; + Csm::csmVector _userArea; + const Csm::CubismId* _idParamAngleX; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamAngleY; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamAngleZ; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamBodyAngleX; ///< パラメータID: ParamBodyAngleX + const Csm::CubismId* _idParamEyeBallX; ///< パラメータID: ParamEyeBallX + const Csm::CubismId* _idParamEyeBallY; ///< パラメータID: ParamEyeBallXY + + Csm::Rendering::CubismOffscreenSurface_OpenGLES2 _renderBuffer; ///< フレームバッファ以外の描画先 }; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppPal.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppPal.cpp new file mode 100644 index 0000000..0aca521 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppPal.cpp @@ -0,0 +1,79 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppPal.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "LAppDefine.hpp" +#include "NapiBridgeC.hpp" + +using std::endl; +using namespace Csm; +using namespace std; +using namespace LAppDefine; + +double LAppPal::s_currentFrame = 0.0; +double LAppPal::s_lastFrame = 0.0; +double LAppPal::s_deltaTime = 0.0; + +csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) +{ + //filePath;// + const char* path = filePath.c_str(); + + // file buffer + char* buf = NapiBridgeC::LoadFile(path, outSize); + + return reinterpret_cast(buf); +} + +void LAppPal::ReleaseBytes(csmByte* byteData) +{ + delete[] byteData; +} + +csmFloat32 LAppPal::GetDeltaTime() +{ + return static_cast(s_deltaTime); +} + +void LAppPal::UpdateTime() +{ + s_currentFrame = GetSystemTime(); + s_deltaTime = s_currentFrame - s_lastFrame; + s_lastFrame = s_currentFrame; +} + +void LAppPal::PrintLogLn(const csmChar* format, ...) +{ + va_list args; + csmChar buf[256]; + va_start(args, format); + vsnprintf(buf, sizeof(buf), format, args); + // 標準出力でレンダリング + OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, "[live2dDemo]", buf); + va_end(args); +} + +void LAppPal::PrintMessageLn(const csmChar* message) +{ + PrintLogLn("%s", message); +} + +double LAppPal::GetSystemTime() +{ + struct timespec res; + clock_gettime(CLOCK_MONOTONIC, &res); + return (res.tv_sec + res.tv_nsec * 1e-9); +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppPal.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppPal.hpp new file mode 100644 index 0000000..451d21e --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppPal.hpp @@ -0,0 +1,88 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include + +/** +* @brief プラットフォーム依存機能を抽象化する Cubism Platform Abstraction Layer. +* +* ファイル読み込みや時刻取得等のプラットフォームに依存する関数をまとめる +* +*/ +class LAppPal +{ +public: + /** + * @brief ファイルをバイトデータとして読み込む + * + * ファイルをバイトデータとして読み込む + * + * @param[in] filePath 読み込み対象ファイルのパス + * @param[out] outSize ファイルサイズ + * @return バイトデータ + */ + static Csm::csmByte* LoadFileAsBytes(const std::string filePath, Csm::csmSizeInt* outSize); + + + /** + * @brief バイトデータを解放する + * + * バイトデータを解放する + * + * @param[in] byteData 解放したいバイトデータ + */ + static void ReleaseBytes(Csm::csmByte* byteData); + + /** + * @biref デルタ時間(前回フレームとの差分)を取得する + * + * @return デルタ時間[ms] + * + */ + static Csm::csmFloat32 GetDeltaTime(); + + /** + * @biref デルタ時間の更新 + * + */ + static void UpdateTime(); + + /** + * @brief ログを出力し最後に改行する + * + * ログを出力し最後に改行する + * + * @param[in] format 書式付文字列 + * @param[in] ... (可変長引数)文字列 + * + */ + static void PrintLogLn(const Csm::csmChar* format, ...); + + /** + * @brief メッセージを出力し最後に改行する + * + * メッセージを出力し最後に改行する + * + * @param[in] message 文字列 + * + */ + static void PrintMessageLn(const Csm::csmChar* message); + +private: + /** + * @brief システムタイムの取得 + */ + static double GetSystemTime(); + + static double s_currentFrame; + static double s_lastFrame; + static double s_deltaTime; +}; + diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSprite.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSprite.cpp new file mode 100644 index 0000000..868e70f --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSprite.cpp @@ -0,0 +1,130 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSprite.hpp" + +LAppSprite::LAppSprite(float x, float y, float width, float height, GLuint textureId, GLuint programId) + : _rect() +{ + _rect.left = (x - width * 0.5f); + _rect.right = (x + width * 0.5f); + _rect.up = (y + height * 0.5f); + _rect.down = (y - height * 0.5f); + _textureId = textureId; + + // 何番目のattribute変数か + _positionLocation = glGetAttribLocation(programId, "position"); + _uvLocation = glGetAttribLocation(programId, "uv"); + _textureLocation = glGetUniformLocation(programId, "texture"); + _colorLocation = glGetUniformLocation(programId, "baseColor"); + + _spriteColor[0] = 1.0f; + _spriteColor[1] = 1.0f; + _spriteColor[2] = 1.0f; + _spriteColor[3] = 1.0f; +} + +LAppSprite::~LAppSprite() +{ +} + +void LAppSprite::ReSize(float x, float y, float width, float height) +{ + _rect.left = (x - width * 0.5f); + _rect.right = (x + width * 0.5f); + _rect.up = (y + height * 0.5f); + _rect.down = (y - height * 0.5f); +} + +void LAppSprite::Render() const +{ + const GLfloat uvVertex[] = + { + 1.0f, 0.0f, + 0.0f, 0.0f, + 0.0f, 1.0f, + 1.0f, 1.0f, + }; + + + // attribute属性を有効にする + glEnableVertexAttribArray(_positionLocation); + glEnableVertexAttribArray(_uvLocation); + + // uniform属性の登録 + glUniform1i(_textureLocation, 0); + + // 頂点データ + float positionVertex[] = + { + (_rect.right - _maxWidth * 0.5f) / (_maxWidth * 0.5f), (_rect.up - _maxHeight * 0.5f) / (_maxHeight * 0.5f), + (_rect.left - _maxWidth * 0.5f) / (_maxWidth * 0.5f), (_rect.up - _maxHeight * 0.5f) / (_maxHeight * 0.5f), + (_rect.left - _maxWidth * 0.5f) / (_maxWidth * 0.5f), (_rect.down - _maxHeight * 0.5f) / (_maxHeight * 0.5f), + (_rect.right - _maxWidth * 0.5f) / (_maxWidth * 0.5f), (_rect.down - _maxHeight * 0.5f) / (_maxHeight * 0.5f) + }; + + // attribute属性を登録 + glVertexAttribPointer(_positionLocation, 2, GL_FLOAT, false, 0, positionVertex); + glVertexAttribPointer(_uvLocation, 2, GL_FLOAT, false, 0, uvVertex); + + glUniform4f(_colorLocation, _spriteColor[0], _spriteColor[1], _spriteColor[2], _spriteColor[3]); + + // モデルの描画 + glBindTexture(GL_TEXTURE_2D, _textureId); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); +} + +void LAppSprite::RenderImmidiate(GLuint textureId, const GLfloat uvVertex[8]) const +{ + // attribute属性を有効にする + glEnableVertexAttribArray(_positionLocation); + glEnableVertexAttribArray(_uvLocation); + + // uniform属性の登録 + glUniform1i(_textureLocation, 0); + + // 頂点データ + float positionVertex[] = + { + (_rect.right - _maxWidth * 0.5f) / (_maxWidth * 0.5f), (_rect.up - _maxHeight * 0.5f) / (_maxHeight * 0.5f), + (_rect.left - _maxWidth * 0.5f) / (_maxWidth * 0.5f), (_rect.up - _maxHeight * 0.5f) / (_maxHeight * 0.5f), + (_rect.left - _maxWidth * 0.5f) / (_maxWidth * 0.5f), (_rect.down - _maxHeight * 0.5f) / (_maxHeight * 0.5f), + (_rect.right - _maxWidth * 0.5f) / (_maxWidth * 0.5f), (_rect.down - _maxHeight * 0.5f) / (_maxHeight * 0.5f) + }; + + // attribute属性を登録 + glVertexAttribPointer(_positionLocation, 2, GL_FLOAT, false, 0, positionVertex); + glVertexAttribPointer(_uvLocation, 2, GL_FLOAT, false, 0, uvVertex); + + glUniform4f(_colorLocation, _spriteColor[0], _spriteColor[1], _spriteColor[2], _spriteColor[3]); + + // モデルの描画 + glBindTexture(GL_TEXTURE_2D, textureId); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); +} + +bool LAppSprite::IsHit(float pointX, float pointY) const +{ + //Y座標は変換する必要あり + float y = _maxHeight - pointY; + + return (pointX >= _rect.left && pointX <= _rect.right && y <= _rect.up && y >= _rect.down); +} + +void LAppSprite::SetColor(float r, float g, float b, float a) +{ + _spriteColor[0] = r; + _spriteColor[1] = g; + _spriteColor[2] = b; + _spriteColor[3] = a; +} + +void LAppSprite::SetWindowSize(int width, int height) +{ + _maxWidth = width; + _maxHeight = height; +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSprite.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSprite.hpp new file mode 100644 index 0000000..d061815 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSprite.hpp @@ -0,0 +1,116 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include + +/** +* @brief スプライトを実装するクラス。 +* +* テクスチャID、Rectの管理。 +* +*/ +class LAppSprite +{ +public: + /** + * @brief Rect 構造体。 + */ + struct Rect + { + public: + float left; ///< 左辺 + float right; ///< 右辺 + float up; ///< 上辺 + float down; ///< 下辺 + }; + + /** + * @brief コンストラクタ + * + * @param[in] x x座標 + * @param[in] y y座標 + * @param[in] width 横幅 + * @param[in] height 高さ + * @param[in] textureId テクスチャID + * @param[in] programId シェーダID + */ + LAppSprite(float x, float y, float width, float height, GLuint textureId, GLuint programId); + + /** + * @brief デストラクタ + */ + ~LAppSprite(); + + /** + * @brief スプライトサイズ変更 + * + * @param[in] x x座標 + * @param[in] y y座標 + * @param[in] width 横幅 + * @param[in] height 高さ + */ + void ReSize(float x, float y, float width, float height); + + /** + * @brief Getter テクスチャID + * @return テクスチャIDを返す + */ + GLuint GetTextureId() { return _textureId; } + + /** + * @brief 描画する + * + */ + void Render() const; + + /** + * @brief テクスチャIDを指定して描画する + * + */ + void RenderImmidiate(GLuint textureId, const GLfloat uvVertex[8]) const; + + /** + * @brief コンストラクタ + * + * @param[in] pointX x座標 + * @param[in] pointY y座標 + */ + bool IsHit(float pointX, float pointY) const; + + /** + * @brief 色設定 + * + * @param[in] r (0.0~1.0) + * @param[in] g (0.0~1.0) + * @param[in] b (0.0~1.0) + * @param[in] a (0.0~1.0) + */ + void SetColor(float r, float g, float b, float a); + + /** + * @brief ウインドウサイズ設定 + * + * @param[in] width 横幅 + * @param[in] height 高さ + */ + void SetWindowSize(int width, int height); + +private: + GLuint _textureId; ///< テクスチャID + Rect _rect; ///< 矩形 + int _positionLocation; ///< 位置アトリビュート + int _uvLocation; ///< UVアトリビュート + int _textureLocation; ///< テクスチャアトリビュート + int _colorLocation; ///< カラーアトリビュート + + float _spriteColor[4]; ///< 表示カラー + int _maxWidth; ///< ウインドウ幅 + int _maxHeight; ///< ウインドウ高さ +}; + diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSpriteShader.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSpriteShader.cpp new file mode 100644 index 0000000..d0ed5c4 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSpriteShader.cpp @@ -0,0 +1,106 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpriteShader.hpp" +#include +#include "LAppDefine.hpp" +#include "LAppPal.hpp" + +LAppSpriteShader::LAppSpriteShader() +{ + _programId = CreateShader(); +} + +LAppSpriteShader::~LAppSpriteShader() +{ + glDeleteShader(_programId); +} + +GLuint LAppSpriteShader::GetShaderId() const +{ + return _programId; +} + +GLuint LAppSpriteShader::CreateShader() +{ + // シェーダーのパスの作成 + Csm::csmString vertShaderFile(LAppDefine::ShaderPath); + vertShaderFile += LAppDefine::VertShaderName; + Csm::csmString fragShaderFile(LAppDefine::ShaderPath); + fragShaderFile += LAppDefine::FragShaderName; + + // シェーダーのコンパイル + GLuint vertexShaderId = CompileShader(vertShaderFile, GL_VERTEX_SHADER); + GLuint fragmentShaderId = CompileShader(fragShaderFile, GL_FRAGMENT_SHADER); + + if (!vertexShaderId || !fragmentShaderId) + { + return 0; + } + + //プログラムオブジェクトの作成 + GLuint programId = glCreateProgram(); + glAttachShader(programId, vertexShaderId); + glAttachShader(programId, fragmentShaderId); + + // リンク + glLinkProgram(programId); + + glUseProgram(programId); + + // 不要になったシェーダーオブジェクトの削除 + glDeleteShader(vertexShaderId); + glDeleteShader(fragmentShaderId); + + return programId; +} + +bool LAppSpriteShader::CheckShader(GLuint shaderId) +{ + GLint status; + GLint logLength; + glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) + { + GLchar* log = reinterpret_cast(CSM_MALLOC(logLength)); + glGetShaderInfoLog(shaderId, logLength, &logLength, log); + CubismLogError("Shader compile log: %s", log); + CSM_FREE(log); + } + + glGetShaderiv(shaderId, GL_COMPILE_STATUS, &status); + if (status == GL_FALSE) + { + glDeleteShader(shaderId); + return false; + } + + return true; +} + +GLuint LAppSpriteShader::CompileShader(Csm::csmString filename, GLenum shaderType) +{ + // ファイル読み込み + Csm::csmSizeInt bufferSize = 0; + const char* shaderString = reinterpret_cast(LAppPal::LoadFileAsBytes(filename.GetRawString(), &bufferSize)); + const GLint glSize = (GLint)bufferSize; + + // コンパイル + GLuint shaderId = glCreateShader(shaderType); + glShaderSource(shaderId, 1, &shaderString, &glSize); + glCompileShader(shaderId); + + // 読み込んだシェーダー文字列の開放 + LAppPal::ReleaseBytes(reinterpret_cast(const_cast(shaderString))); + + if (!CheckShader(shaderId)) + { + return 0; + } + + return shaderId; +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSpriteShader.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSpriteShader.hpp new file mode 100644 index 0000000..71438c9 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppSpriteShader.hpp @@ -0,0 +1,55 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include + +/** +* @brief スプライト用のシェーダー設定を保持するクラス +*/ +class LAppSpriteShader +{ +public: + /** + * @brief コンストラクタ + */ + LAppSpriteShader(); + + /** + * @brief デストラクタ + */ + ~LAppSpriteShader(); + + /** + * @brief シェーダーIDを取得する + */ + GLuint GetShaderId() const; + +private: + /** + * @brief シェーダーを作成する。 + */ + GLuint CreateShader(); + + /** + * @brief CreateShader内部関数 エラーチェック + */ + bool CheckShader(GLuint shaderId); + + /** + * @brief シェーダーをコンパイルする + * コンパイルに失敗した場合には 0 が戻る。 + * + * @param[in] filename シェーダーファイル名 + * @param[in] shaderType 作成するシェーダーの種類 + */ + GLuint CompileShader(Csm::csmString filename, GLenum shaderType); + + GLuint _programId; ///< シェーダID +}; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppTextureManager.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppTextureManager.cpp new file mode 100644 index 0000000..699f90b --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppTextureManager.cpp @@ -0,0 +1,129 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppTextureManager.hpp" +#include +#define STBI_NO_STDIO +#define STBI_ONLY_PNG +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" +#include "LAppPal.hpp" + +LAppTextureManager::LAppTextureManager() +{ +} + +LAppTextureManager::~LAppTextureManager() +{ + ReleaseTextures(); +} + +LAppTextureManager::TextureInfo* LAppTextureManager::CreateTextureFromPngFile(std::string fileName) +{ + //search loaded texture already. + for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) + { + if (_textures[i]->fileName == fileName) + { + return _textures[i]; + } + } + + GLuint textureId; + int width, height, channels; + unsigned int size; + unsigned char* png; + unsigned char* address; + + address = LAppPal::LoadFileAsBytes(fileName, &size); + + // png情報を取得する + png = stbi_load_from_memory( + address, + static_cast(size), + &width, + &height, + &channels, + STBI_rgb_alpha); + { +#ifdef PREMULTIPLIED_ALPHA_ENABLE + unsigned int* fourBytes = reinterpret_cast(png); + for (int i = 0; i < width * height; i++) + { + unsigned char* p = png + i * 4; + fourBytes[i] = Premultiply(p[0], p[1], p[2], p[3]); + } +#endif + } + + // OpenGL用のテクスチャを生成する + glGenTextures(1, &textureId); + glBindTexture(GL_TEXTURE_2D, textureId); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, png); + glGenerateMipmap(GL_TEXTURE_2D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glBindTexture(GL_TEXTURE_2D, 0); + + // 解放処理 + stbi_image_free(png); + LAppPal::ReleaseBytes(address); + + LAppTextureManager::TextureInfo* textureInfo = new LAppTextureManager::TextureInfo(); + if (textureInfo != NULL) + { + textureInfo->fileName = fileName; + textureInfo->width = width; + textureInfo->height = height; + textureInfo->id = textureId; + + _textures.PushBack(textureInfo); + } + + return textureInfo; + +} + +void LAppTextureManager::ReleaseTextures() +{ + for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) + { + glDeleteTextures(1, &(_textures[i]->id)); + delete _textures[i]; + } + + _textures.Clear(); +} + +void LAppTextureManager::ReleaseTexture(Csm::csmUint32 textureId) +{ + for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) + { + if (_textures[i]->id != textureId) + { + continue; + } + glDeleteTextures(1, &(_textures[i]->id)); + delete _textures[i]; + _textures.Remove(i); + break; + } +} + +void LAppTextureManager::ReleaseTexture(std::string fileName) +{ + for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) + { + if (_textures[i]->fileName == fileName) + { + glDeleteTextures(1, &(_textures[i]->id)); + delete _textures[i]; + _textures.Remove(i); + break; + } + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppTextureManager.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppTextureManager.hpp new file mode 100644 index 0000000..310ddf9 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppTextureManager.hpp @@ -0,0 +1,99 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include + +/** +* @brief テクスチャ管理クラス +* +* 画像読み込み、管理を行うクラス。 +*/ +class LAppTextureManager +{ +public: + + /** + * @brief 画像情報構造体 + */ + struct TextureInfo + { + GLuint id; ///< テクスチャID + int width; ///< 横幅 + int height; ///< 高さ + std::string fileName; ///< ファイル名 + }; + + /** + * @brief コンストラクタ + */ + LAppTextureManager(); + + /** + * @brief デストラクタ + * + */ + ~LAppTextureManager(); + + + /** + * @brief プリマルチプライ処理 + * + * @param[in] red 画像のRed値 + * @param[in] green 画像のGreen値 + * @param[in] blue 画像のBlue値 + * @param[in] alpha 画像のAlpha値 + * + * @return プリマルチプライ処理後のカラー値 + */ + inline unsigned int Premultiply(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) + { + return static_cast(\ + (red * (alpha + 1) >> 8) | \ + ((green * (alpha + 1) >> 8) << 8) | \ + ((blue * (alpha + 1) >> 8) << 16) | \ + (((alpha)) << 24) \ + ); + } + + /** + * @brief 画像読み込み + * + * @param[in] fileName 読み込む画像ファイルパス名 + * @return 画像情報。読み込み失敗時はNULLを返す + */ + TextureInfo* CreateTextureFromPngFile(std::string fileName); + + /** + * @brief 画像の解放 + * + * 配列に存在する画像全てを解放する + */ + void ReleaseTextures(); + + /** + * @brief 画像の解放 + * + * 指定したテクスチャIDの画像を解放する + * @param[in] textureId 解放するテクスチャID + **/ + void ReleaseTexture(Csm::csmUint32 textureId); + + /** + * @brief 画像の解放 + * + * 指定した名前の画像を解放する + * @param[in] fileName 解放する画像ファイルパス名 + **/ + void ReleaseTexture(std::string fileName); + +private: + Csm::csmVector _textures; +}; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppView.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppView.cpp new file mode 100644 index 0000000..e4c5ba2 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppView.cpp @@ -0,0 +1,391 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppView.hpp" +#include +#include +#include "LAppPal.hpp" +#include "LAppDelegate.hpp" +#include "LAppLive2DManager.hpp" +#include "LAppTextureManager.hpp" +#include "LAppDefine.hpp" +#include "TouchManager.hpp" +#include "LAppSprite.hpp" +#include "LAppSpriteShader.hpp" +#include "LAppModel.hpp" + +#include +#include + +using namespace std; +using namespace LAppDefine; + +LAppView::LAppView(): + _back(NULL), + _gear(NULL), + _power(NULL), + _changeModel(false), + _renderSprite(NULL), + _renderTarget(SelectTarget_None) +{ + _clearColor[0] = 1.0f; + _clearColor[1] = 1.0f; + _clearColor[2] = 1.0f; + _clearColor[3] = 0.0f; + + // タッチ関係のイベント管理 + _touchManager = new TouchManager(); + + // デバイス座標からスクリーン座標に変換するための + _deviceToScreen = new CubismMatrix44(); + + // 画面の表示の拡大縮小や移動の変換を行う行列 + _viewMatrix = new CubismViewMatrix(); +} + +LAppView::~LAppView() +{ + _renderBuffer.DestroyOffscreenSurface(); + delete _renderSprite; + + delete _spriteShader; + delete _viewMatrix; + delete _deviceToScreen; + delete _touchManager; + delete _back; + delete _gear; + delete _power; +} + +void LAppView::Initialize() +{ + int width = LAppDelegate::GetInstance()->GetWindowWidth(); + int height = LAppDelegate::GetInstance()->GetWindowHeight(); + + // 縦サイズを基準とする + float ratio = static_cast(width) / static_cast(height); + float left = -ratio; + float right = ratio; + float bottom = ViewLogicalLeft; + float top = ViewLogicalRight; + + _viewMatrix->SetScreenRect(left, right, bottom, top); // デバイスに対応する画面の範囲。 Xの左端, Xの右端, Yの下端, Yの上端 + _viewMatrix->Scale(ViewScale, ViewScale); + + _deviceToScreen->LoadIdentity(); + if (width > height) + { + float screenW = fabsf(right - left); + _deviceToScreen->ScaleRelative(screenW / width, -screenW / width); + } + else + { + float screenH = fabsf(top - bottom); + _deviceToScreen->ScaleRelative(screenH / height, -screenH / height); + } + _deviceToScreen->TranslateRelative(-width * 0.5f, -height * 0.5f); + + // 表示範囲の設定 + _viewMatrix->SetMaxScale(ViewMaxScale); // 限界拡大率 + _viewMatrix->SetMinScale(ViewMinScale); // 限界縮小率 + + // 表示できる最大範囲 + _viewMatrix->SetMaxScreenRect( + ViewLogicalMaxLeft, + ViewLogicalMaxRight, + ViewLogicalMaxBottom, + ViewLogicalMaxTop + ); + + _spriteShader = new LAppSpriteShader(); +} + +void LAppView::InitializeSprite() +{ + GLuint programId = _spriteShader->GetShaderId(); + + int width = LAppDelegate::GetInstance()->GetWindowWidth(); + int height = LAppDelegate::GetInstance()->GetWindowHeight(); + + LAppTextureManager* textureManager = LAppDelegate::GetInstance()->GetTextureManager(); + const string resourcesPath = ResourcesPath; + + string imageName = BackImageName; + LAppTextureManager::TextureInfo* backgroundTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); + + float x = width * 0.5f; + float y = height * 0.5f; + float fWidth = (backgroundTexture->width * 2.0f); + float fHeight = (height * 0.95f); + + if(_back == NULL) + { + _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, programId); + } + else + { + _back->ReSize(x, y, fWidth, fHeight); + } + + + imageName = GearImageName; + LAppTextureManager::TextureInfo* gearTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); + + x = (width - gearTexture->width * 0.5f - 96.f); + y = (height - gearTexture->height * 0.5f); + fWidth = static_cast(gearTexture->width); + fHeight = static_cast(gearTexture->height); + + if(_gear == NULL) + { + _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, programId); + } + else + { + _gear->ReSize(x, y, fWidth, fHeight); + } + + imageName = PowerImageName; + LAppTextureManager::TextureInfo* powerTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); + + x = (width - powerTexture->width * 0.5f - 96.f); + y = (powerTexture->height * 0.5f); + fWidth = static_cast(powerTexture->width); + fHeight = static_cast(powerTexture->height); + + if(_power == NULL) + { + _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, programId); + } + else + { + _power->ReSize(x, y, fWidth, fHeight); + } + + // 画面全体を覆うサイズ + x = width * 0.5f; + y = height * 0.5f; + + if (_renderSprite == NULL) + { + _renderSprite = new LAppSprite(x, y, width, height, 0, programId); + } + else + { + _renderSprite->ReSize(x, y, width, height); + } +} + +void LAppView::Render() +{ + // 画面サイズを取得する + int maxWidth = LAppDelegate::GetInstance()->GetWindowWidth(); + int maxHeight = LAppDelegate::GetInstance()->GetWindowHeight(); + _back->SetWindowSize(maxWidth, maxHeight); + _gear->SetWindowSize(maxWidth, maxHeight); + _power->SetWindowSize(maxWidth, maxHeight); + + _back->Render(); + _gear->Render(); + _power->Render(); + + if(_changeModel) + { + _changeModel = false; + LAppLive2DManager::GetInstance()->NextScene(); + } + + LAppLive2DManager* Live2DManager = LAppLive2DManager::GetInstance(); + + //Live2DManager->SetViewMatrix(_viewMatrix); + + // Cubism更新・描画 + Live2DManager->OnUpdate(); + + // 各モデルが持つ描画ターゲットをテクスチャとする場合 + if (_renderTarget == SelectTarget_ModelFrameBuffer && _renderSprite) + { + const GLfloat uvVertex[] = + { + 1.0f, 1.0f, + 0.0f, 1.0f, + 0.0f, 0.0f, + 1.0f, 0.0f, + }; + + for (csmUint32 i = 0; i < Live2DManager->GetModelNum(); i++) + { + LAppModel* model = Live2DManager->GetModel(i); + float alpha = i < 1 ? 1.0f : model->GetOpacity(); // 片方のみ不透明度を取得できるようにする + _renderSprite->SetColor(1.0f, 1.0f, 1.0f, alpha); + + if (model) + { + _renderSprite->SetWindowSize(maxWidth, maxHeight); + _renderSprite->RenderImmidiate(model->GetRenderBuffer().GetColorBuffer(), uvVertex); + } + } + } +} + +void LAppView::OnTouchesBegan(float pointX, float pointY) const +{ + _touchManager->TouchesBegan(pointX, pointY); +} + +void LAppView::OnTouchesMoved(float pointX, float pointY) const +{ + float viewX = this->TransformViewX(_touchManager->GetX()); + float viewY = this->TransformViewY(_touchManager->GetY()); + + _touchManager->TouchesMoved(pointX, pointY); + + LAppLive2DManager::GetInstance()->OnDrag(viewX, viewY); +} + +void LAppView::OnTouchesEnded(float pointX, float pointY) +{ + // タッチ終了 + LAppLive2DManager* live2DManager = LAppLive2DManager::GetInstance(); + live2DManager->OnDrag(0.0f, 0.0f); + { + + // シングルタップ + float x = _deviceToScreen->TransformX(_touchManager->GetX()); // 論理座標変換した座標を取得。 + float y = _deviceToScreen->TransformY(_touchManager->GetY()); // 論理座標変換した座標を取得。 + if (DebugTouchLogEnable) + { + LAppPal::PrintLogLn("[APP]touchesEnded x:%.2f y:%.2f", x, y); + } + live2DManager->OnTap(x, y); + + // 歯車にタップしたか + if (_gear->IsHit(pointX, pointY)) + { + _changeModel = true; + } + + // 電源ボタンにタップしたか + if (_power->IsHit(pointX, pointY)) + { + LAppDelegate::GetInstance()->DeActivateApp(); + } + } +} + +float LAppView::TransformViewX(float deviceX) const +{ + float screenX = _deviceToScreen->TransformX(deviceX); // 論理座標変換した座標を取得。 + return _viewMatrix->InvertTransformX(screenX); // 拡大、縮小、移動後の値。 +} + +float LAppView::TransformViewY(float deviceY) const +{ + float screenY = _deviceToScreen->TransformY(deviceY); // 論理座標変換した座標を取得。 + return _viewMatrix->InvertTransformY(screenY); // 拡大、縮小、移動後の値。 +} + +float LAppView::TransformScreenX(float deviceX) const +{ + return _deviceToScreen->TransformX(deviceX); +} + +float LAppView::TransformScreenY(float deviceY) const +{ + return _deviceToScreen->TransformY(deviceY); +} + +void LAppView::PreModelDraw(LAppModel &refModel) +{ + // 別のレンダリングターゲットへ向けて描画する場合の使用するフレームバッファ + Csm::Rendering::CubismOffscreenSurface_OpenGLES2* useTarget = NULL; + + if (_renderTarget != SelectTarget_None) + {// 別のレンダリングターゲットへ向けて描画する場合 + + // 使用するターゲット + useTarget = (_renderTarget == SelectTarget_ViewFrameBuffer) ? &_renderBuffer : &refModel.GetRenderBuffer(); + + if (!useTarget->IsValid()) + {// 描画ターゲット内部未作成の場合はここで作成 + int width = LAppDelegate::GetInstance()->GetWindowWidth(); + int height = LAppDelegate::GetInstance()->GetWindowHeight(); + + // モデル描画キャンバス + useTarget->CreateOffscreenSurface(static_cast(width), static_cast(height)); + } + + // レンダリング開始 + useTarget->BeginDraw(); + useTarget->Clear(_clearColor[0], _clearColor[1], _clearColor[2], _clearColor[3]); // 背景クリアカラー + } +} + +void LAppView::PostModelDraw(LAppModel &refModel) +{ + // 別のレンダリングターゲットへ向けて描画する場合の使用するフレームバッファ + Csm::Rendering::CubismOffscreenSurface_OpenGLES2* useTarget = NULL; + + if (_renderTarget != SelectTarget_None) + {// 別のレンダリングターゲットへ向けて描画する場合 + + // 使用するターゲット + useTarget = (_renderTarget == SelectTarget_ViewFrameBuffer) ? &_renderBuffer : &refModel.GetRenderBuffer(); + + // レンダリング終了 + useTarget->EndDraw(); + + // LAppViewの持つフレームバッファを使うなら、スプライトへの描画はここ + if (_renderTarget == SelectTarget_ViewFrameBuffer && _renderSprite) + { + const GLfloat uvVertex[] = + { + 1.0f, 1.0f, + 0.0f, 1.0f, + 0.0f, 0.0f, + 1.0f, 0.0f, + }; + + _renderSprite->SetColor(1.0f, 1.0f, 1.0f, GetSpriteAlpha(0)); + + // 画面サイズを取得する + int maxWidth = LAppDelegate::GetInstance()->GetWindowWidth(); + int maxHeight = LAppDelegate::GetInstance()->GetWindowHeight(); + _renderSprite->SetWindowSize(maxWidth, maxHeight); + + _renderSprite->RenderImmidiate(useTarget->GetColorBuffer(), uvVertex); + } + } +} + +void LAppView::SwitchRenderingTarget(SelectTarget targetType) +{ + _renderTarget = targetType; +} + +void LAppView::SetRenderTargetClearColor(float r, float g, float b) +{ + _clearColor[0] = r; + _clearColor[1] = g; + _clearColor[2] = b; +} + +float LAppView::GetSpriteAlpha(int assign) const +{ + // assignの数値に応じて適当に決定 + float alpha = 0.25f + static_cast(assign) * 0.5f; // サンプルとしてαに適当な差をつける + if (alpha > 1.0f) + { + alpha = 1.0f; + } + if (alpha < 0.1f) + { + alpha = 0.1f; + } + + return alpha; +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppView.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppView.hpp new file mode 100644 index 0000000..94247d2 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppView.hpp @@ -0,0 +1,159 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include "CubismFramework.hpp" +#include + +class TouchManager; +class LAppSprite; +class LAppSpriteShader; +class LAppModel; + +/** +* @brief 描画クラス +*/ +class LAppView +{ +public: + + /** + * @brief LAppModelのレンダリング先 + */ + enum SelectTarget + { + SelectTarget_None, ///< デフォルトのフレームバッファにレンダリング + SelectTarget_ModelFrameBuffer, ///< LAppModelが各自持つフレームバッファにレンダリング + SelectTarget_ViewFrameBuffer, ///< LAppViewの持つフレームバッファにレンダリング + }; + + /** + * @brief コンストラクタ + */ + LAppView(); + + /** + * @brief デストラクタ + */ + ~LAppView(); + + /** + * @brief 初期化する。 + */ + void Initialize(); + + /** + * @brief 描画する。 + */ + void Render(); + + /** + * @brief 画像の初期化を行う。 + */ + void InitializeSprite(); + + /** + * @brief タッチされたときに呼ばれる。 + * + * @param[in] pointX スクリーンX座標 + * @param[in] pointY スクリーンY座標 + */ + void OnTouchesBegan(float pointX, float pointY) const; + + /** + * @brief タッチしているときにポインタが動いたら呼ばれる。 + * + * @param[in] pointX スクリーンX座標 + * @param[in] pointY スクリーンY座標 + */ + void OnTouchesMoved(float pointX, float pointY) const; + + /** + * @brief タッチが終了したら呼ばれる。 + * + * @param[in] pointX スクリーンX座標 + * @param[in] pointY スクリーンY座標 + */ + void OnTouchesEnded(float pointX, float pointY); + + /** + * @brief X座標をView座標に変換する。 + * + * @param[in] deviceX デバイスX座標 + */ + float TransformViewX(float deviceX) const; + + /** + * @brief Y座標をView座標に変換する。 + * + * @param[in] deviceY デバイスY座標 + */ + float TransformViewY(float deviceY) const; + + /** + * @brief X座標をScreen座標に変換する。 + * + * @param[in] deviceX デバイスX座標 + */ + float TransformScreenX(float deviceX) const; + + /** + * @brief Y座標をScreen座標に変換する。 + * + * @param[in] deviceY デバイスY座標 + */ + float TransformScreenY(float deviceY) const; + + /** + * @brief モデル1体を描画する直前にコールされる + */ + void PreModelDraw(LAppModel &refModel); + + /** + * @brief モデル1体を描画した直後にコールされる + */ + void PostModelDraw(LAppModel &refModel); + + /** + * @brief 別レンダリングターゲットにモデルを描画するサンプルで + * 描画時のαを決定する + */ + float GetSpriteAlpha(int assign) const; + + /** + * @brief レンダリング先を切り替える + */ + void SwitchRenderingTarget(SelectTarget targetType); + + /** + * @brief レンダリング先をデフォルト以外に切り替えた際の背景クリア色設定 + * @param[in] r 赤(0.0~1.0) + * @param[in] g 緑(0.0~1.0) + * @param[in] b 青(0.0~1.0) + */ + void SetRenderTargetClearColor(float r, float g, float b); + +private: + TouchManager* _touchManager; ///< タッチマネージャー + Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 + Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix + LAppSprite* _back; ///< 背景画像 + LAppSprite* _gear; ///< ギア画像 + LAppSprite* _power; ///< 電源画像 + bool _changeModel; ///< モデル切り替えフラグ + + // レンダリング先を別ターゲットにする方式の場合に使用 + LAppSprite* _renderSprite; ///< モードによっては_renderBufferのテクスチャを描画 + Csm::Rendering::CubismOffscreenSurface_OpenGLES2 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング + SelectTarget _renderTarget; ///< レンダリング先の選択肢 + float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + LAppSpriteShader* _spriteShader; ///< シェーダー作成委譲クラス +}; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppWavFileHandler.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppWavFileHandler.cpp new file mode 100644 index 0000000..6958448 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppWavFileHandler.cpp @@ -0,0 +1,352 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppWavFileHandler.hpp" +#include +#include +#include "LAppPal.hpp" + +LAppWavFileHandler::LAppWavFileHandler() + : _rawData(NULL) + , _pcmData(NULL) + , _userTimeSeconds(0.0f) + , _lastRms(0.0f) + , _sampleOffset(0) +{ +} + +LAppWavFileHandler::~LAppWavFileHandler() +{ + if (_rawData != NULL) + { + CSM_FREE(_rawData); + } + + if (_pcmData != NULL) + { + ReleasePcmData(); + } +} + +Csm::csmBool LAppWavFileHandler::Update(Csm::csmFloat32 deltaTimeSeconds) +{ + Csm::csmUint32 goalOffset; + Csm::csmFloat32 rms; + + // データロード前/ファイル末尾に達した場合は更新しない + if ((_pcmData == NULL) + || (_sampleOffset >= _wavFileInfo._samplesPerChannel)) + { + _lastRms = 0.0f; + return false; + } + + // 経過時間後の状態を保持 + _userTimeSeconds += deltaTimeSeconds; + goalOffset = static_cast(_userTimeSeconds * _wavFileInfo._samplingRate); + if (goalOffset > _wavFileInfo._samplesPerChannel) + { + goalOffset = _wavFileInfo._samplesPerChannel; + } + + // RMS計測 + rms = 0.0f; + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + for (Csm::csmUint32 sampleCount = _sampleOffset; sampleCount < goalOffset; sampleCount++) + { + Csm::csmFloat32 pcm = _pcmData[channelCount][sampleCount]; + rms += pcm * pcm; + } + } + rms = sqrt(rms / (_wavFileInfo._numberOfChannels * (goalOffset - _sampleOffset))); + + _lastRms = rms; + _sampleOffset = goalOffset; + return true; +} + +void LAppWavFileHandler::Start(const Csm::csmString& filePath) +{ + // WAVファイルのロード + if (!LoadWavFile(filePath)) + { + return; + } + + // サンプル参照位置を初期化 + _sampleOffset = 0; + _userTimeSeconds = 0.0f; + + // RMS値をリセット + _lastRms = 0.0f; +} + +Csm::csmFloat32 LAppWavFileHandler::GetRms() const +{ + return _lastRms; +} + +const LAppWavFileHandler::WavFileInfo& LAppWavFileHandler::GetWavFileInfo() const +{ + return _wavFileInfo; +} + +const Csm::csmByte* LAppWavFileHandler::GetRawData() const +{ + return _rawData; +} + +Csm::csmUint64 LAppWavFileHandler::GetRawDataSize() const +{ + return _rawDataSize; +} + +Csm::csmVector LAppWavFileHandler::GetPcmData() const +{ + Csm::csmVector buffer; + + for (Csm::csmUint32 sampleCount = 0; sampleCount < _wavFileInfo._samplesPerChannel; sampleCount++) + { + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + buffer.PushBack(_pcmData[channelCount][sampleCount]); + } + } + + return buffer; +} + +void LAppWavFileHandler::GetPcmDataChannel(Csm::csmFloat32* dst, Csm::csmUint32 useChannel) const +{ + for (Csm::csmUint32 sampleCount = 0; sampleCount < _wavFileInfo._samplesPerChannel; sampleCount++) + { + dst[sampleCount] = _pcmData[useChannel][sampleCount]; + } +} + +Csm::csmFloat32 LAppWavFileHandler::NormalizePcmSample(Csm::csmUint32 bitsPerSample, Csm::csmByte* data, Csm::csmUint32 dataSize) +{ + Csm::csmInt32 pcm32; + + // 32ビット幅に拡張してから-1~1の範囲に丸める + switch (bitsPerSample) + { + case 8: + if (1 <= dataSize) + { + const Csm::csmUint8 ret = data[0]; + pcm32 = static_cast(ret) - 128; + pcm32 <<= 24; + } + else + { + pcm32 = 0; + } + break; + case 16: + if (2 <= dataSize) + { + const Csm::csmUint16 ret = (data[1] << 8) | data[0]; + pcm32 = ret << 16; + } + else + { + pcm32 = 0; + } + break; + case 24: + if (3 <= dataSize) + { + const Csm::csmUint32 ret = (data[2] << 16) | (data[1] << 8) | data[0]; + pcm32 = ret << 8; + } + else + { + pcm32 = 0; + } + break; + case 32: + if (4 <= dataSize) + { + const Csm::csmUint32 ret = (data[3] << 24) | (data[2] << 16) | (data[1] << 8) | data[0]; + pcm32 = ret << 0; + } + else + { + pcm32 = 0; + } + break; + default: + // 対応していないビット幅 + pcm32 = 0; + break; + } + + return static_cast(pcm32) / INT32_MAX; +} + +Csm::csmBool LAppWavFileHandler::LoadWavFile(const Csm::csmString& filePath) +{ + Csm::csmBool ret; + + // 既にwavファイルロード済みならば領域開放 + if (_rawData != NULL) + { + CSM_FREE(_rawData); + _rawDataSize = 0; + } + if (_pcmData != NULL) + { + ReleasePcmData(); + } + + // ファイルロード + _byteReader._fileByte = LAppPal::LoadFileAsBytes(filePath.GetRawString(), &(_byteReader._fileSize)); + _byteReader._readOffset = 0; + + // ファイルロードに失敗しているか、先頭のシグネチャ"RIFF"を入れるサイズもない場合は失敗 + if ((_byteReader._fileByte == NULL) || (_byteReader._fileSize < 4)) + { + return false; + } + + // ファイル名 + _wavFileInfo._fileName = filePath; + + do { + // シグネチャ "RIFF" + if (!_byteReader.GetCheckSignature("RIFF")) + { + ret = false; + break; + } + // ファイルサイズ-8(読み飛ばし) + _byteReader.Get32LittleEndian(); + // シグネチャ "WAVE" + if (!_byteReader.GetCheckSignature("WAVE")) + { + ret = false; + break; + } + // シグネチャ "fmt " + if (!_byteReader.GetCheckSignature("fmt ")) + { + ret = false; + break; + } + // fmtチャンクサイズ + const Csm::csmUint32 fmtChunkSize = _byteReader.Get32LittleEndian(); + // フォーマットIDは1(リニアPCM)以外受け付けない + if (_byteReader.Get16LittleEndian() != 1) + { + ret = false; + break; + } + // チャンネル数 + _wavFileInfo._numberOfChannels = _byteReader.Get16LittleEndian(); + // サンプリングレート + _wavFileInfo._samplingRate = _byteReader.Get32LittleEndian(); + // 平均データ速度 + _wavFileInfo._avgBytesPerSec = _byteReader.Get32LittleEndian(); + // ブロックサイズ + _wavFileInfo._blockAlign = _byteReader.Get16LittleEndian(); + // 量子化ビット数 + _wavFileInfo._bitsPerSample = _byteReader.Get16LittleEndian(); + // fmtチャンクの拡張部分の読み飛ばし + if (fmtChunkSize > 16) + { + _byteReader._readOffset += (fmtChunkSize - 16); + } + // "data"チャンクが出現するまで読み飛ばし + while (!(_byteReader.GetCheckSignature("data")) + && (_byteReader._readOffset < _byteReader._fileSize)) + { + _byteReader._readOffset += _byteReader.Get32LittleEndian(); + } + // ファイル内に"data"チャンクが出現しなかった + if (_byteReader._readOffset >= _byteReader._fileSize) + { + ret = false; + break; + } + // サンプル数 + { + const Csm::csmUint32 dataChunkSize = _byteReader.Get32LittleEndian(); + _wavFileInfo._samplesPerChannel = (dataChunkSize * 8) / (_wavFileInfo._bitsPerSample * _wavFileInfo._numberOfChannels); + } + // 領域確保 + _rawDataSize = static_cast(_wavFileInfo._blockAlign) * static_cast(_wavFileInfo._samplesPerChannel); + _rawData = static_cast(CSM_MALLOC(sizeof(Csm::csmByte) * _rawDataSize)); + _pcmData = static_cast(CSM_MALLOC(sizeof(Csm::csmFloat32*) * _wavFileInfo._numberOfChannels)); + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + _pcmData[channelCount] = static_cast(CSM_MALLOC(sizeof(Csm::csmFloat32) * _wavFileInfo._samplesPerChannel)); + } + // 波形データ取得 + Csm::csmUint64 rawPos = 0; + for (Csm::csmUint32 sampleCount = 0; sampleCount < _wavFileInfo._samplesPerChannel; sampleCount++) + { + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + // 正規化前 + for (Csm::csmUint32 byteCount = 0; byteCount < _wavFileInfo._bitsPerSample / 8; byteCount++) + { + _rawData[rawPos++] = _byteReader._fileByte[_byteReader._readOffset + byteCount]; + } + // 正規化後 + _pcmData[channelCount][sampleCount] = GetPcmSample(); + } + } + + ret = true; + + } while (false); + + // ファイル開放 + LAppPal::ReleaseBytes(_byteReader._fileByte); + _byteReader._fileByte = NULL; + _byteReader._fileSize = 0; + + return ret; +} + +Csm::csmFloat32 LAppWavFileHandler::GetPcmSample() +{ + Csm::csmInt32 pcm32; + + // 32ビット幅に拡張してから-1~1の範囲に丸める + switch (_wavFileInfo._bitsPerSample) + { + case 8: + pcm32 = static_cast(_byteReader.Get8()) - 128; + pcm32 <<= 24; + break; + case 16: + pcm32 = _byteReader.Get16LittleEndian() << 16; + break; + case 24: + pcm32 = _byteReader.Get24LittleEndian() << 8; + break; + default: + // 対応していないビット幅 + pcm32 = 0; + break; + } + + return static_cast(pcm32) / INT32_MAX; +} + +void LAppWavFileHandler::ReleasePcmData() +{ + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + CSM_FREE(_pcmData[channelCount]); + } + CSM_FREE(_pcmData); + _pcmData = NULL; +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppWavFileHandler.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppWavFileHandler.hpp new file mode 100644 index 0000000..bd8e54c --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/LAppWavFileHandler.hpp @@ -0,0 +1,234 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include + + /** + * @brief wavファイルハンドラ + * @attention 16bit wav ファイル読み込みのみ実装済み + */ +class LAppWavFileHandler +{ +public: + /** + * @brief 読み込んだwavfileの情報 + */ + struct WavFileInfo + { + /** + * @brief コンストラクタ + */ + WavFileInfo() : _fileName(""), _numberOfChannels(0), + _bitsPerSample(0), _samplingRate(0), _samplesPerChannel(0), + _avgBytesPerSec(0), _blockAlign(0) + { } + + Csm::csmString _fileName; ///< ファイル名 + Csm::csmUint32 _numberOfChannels; ///< チャンネル数 + Csm::csmUint32 _bitsPerSample; ///< サンプルあたりビット数 + Csm::csmUint32 _samplingRate; ///< サンプリングレート + Csm::csmUint32 _samplesPerChannel; ///< 1チャンネルあたり総サンプル数 + Csm::csmUint32 _avgBytesPerSec; ///< 平均データ速度 + Csm::csmUint32 _blockAlign; ///< ブロックサイズ + } _wavFileInfo; + + /** + * @brief コンストラクタ + */ + LAppWavFileHandler(); + + /** + * @brief デストラクタ + */ + ~LAppWavFileHandler(); + + /** + * @brief wavファイルハンドラの内部状態更新 + * + * @param[in] deltaTimeSeconds デルタ時間[秒] + * @retval true 更新されている + * @retval false 更新されていない + */ + Csm::csmBool Update(Csm::csmFloat32 deltaTimeSeconds); + + /** + * @brief 引数で指定したwavファイルの読み込みを開始する + * + * @param[in] filePath wavファイルのパス + */ + void Start(const Csm::csmString& filePath); + + /** + * @brief 現在のRMS値取得 + * + * @retval csmFloat32 RMS値 + */ + Csm::csmFloat32 GetRms() const; + + /** + * @brief ファイル情報を取得 + * + * @retval ファイル情報 + */ + const WavFileInfo& GetWavFileInfo() const; + + /** + * @brief 正規化前のデータを取得 + * + * @retval 正規化前のデータ + */ + const Csm::csmByte* GetRawData() const; + + /** + * @brief 正規化前のデータの大きさを取得 + * + * @retval 正規化前のデータの大きさ + */ + Csm::csmUint64 GetRawDataSize() const; + + /** + * @brief 正規化データを取得する + * + * @retval 正規化データ + */ + Csm::csmVector GetPcmData() const; + + /** + * @brief 引数で指定したチャンネルの正規化データを取得する + * + * @param[in] dst 格納先 + * @param[in] useChannel 使用するチャンネル + */ + void GetPcmDataChannel(Csm::csmFloat32* dst, Csm::csmUint32 useChannel) const; + + /** + * @brief -1~1の範囲の1サンプル取得 + * + * @param[in] bitsPerSample ビット深度 + * @param[in] data 正規化したいデータ + * @param[in] dataSize 正規化したいデータの大きさ + * + * @retval csmFloat32 正規化されたサンプル + */ + static Csm::csmFloat32 NormalizePcmSample(Csm::csmUint32 bitsPerSample, Csm::csmByte* data, Csm::csmUint32 dataSize); + +private: + /** + * @brief wavファイルのロード + * + * @param[in] filePath wavファイルのパス + * @retval true 読み込み成功 + * @retval false 読み込み失敗 + */ + Csm::csmBool LoadWavFile(const Csm::csmString& filePath); + + /** + * @brief PCMデータの解放 + */ + void ReleasePcmData(); + + /** + * @brief -1~1の範囲の1サンプル取得 + * @retval csmFloat32 正規化されたサンプル + */ + Csm::csmFloat32 GetPcmSample(); + + /** + * @brief バイトリーダ + */ + struct ByteReader { + /** + * @brief コンストラクタ + */ + ByteReader() : _fileByte(NULL), _fileSize(0), _readOffset(0) + { } + + /** + * @brief 8ビット読み込み + * @return Csm::csmUint8 読み取った8ビット値 + */ + Csm::csmUint8 Get8() + { + const Csm::csmUint8 ret = _fileByte[_readOffset]; + _readOffset++; + return ret; + } + + /** + * @brief 16ビット読み込み(リトルエンディアン) + * @return Csm::csmUint16 読み取った16ビット値 + */ + Csm::csmUint16 Get16LittleEndian() + { + const Csm::csmUint16 ret = (_fileByte[_readOffset + 1] << 8) | _fileByte[_readOffset]; + _readOffset += 2; + return ret; + } + + /** + * @brief 24ビット読み込み(リトルエンディアン) + * @return Csm::csmUint32 読み取った24ビット値(下位24ビットに設定) + */ + Csm::csmUint32 Get24LittleEndian() + { + const Csm::csmUint32 ret = + (_fileByte[_readOffset + 2] << 16) | (_fileByte[_readOffset + 1] << 8) + | _fileByte[_readOffset]; + _readOffset += 3; + return ret; + } + + /** + * @brief 32ビット読み込み(リトルエンディアン) + * @return Csm::csmUint32 読み取った32ビット値 + */ + Csm::csmUint32 Get32LittleEndian() + { + const Csm::csmUint32 ret = + (_fileByte[_readOffset + 3] << 24) | (_fileByte[_readOffset + 2] << 16) + | (_fileByte[_readOffset + 1] << 8) | _fileByte[_readOffset]; + _readOffset += 4; + return ret; + } + + /** + * @brief シグネチャの取得と参照文字列との一致チェック + * @param[in] reference 検査対象のシグネチャ文字列 + * @retval true 一致している + * @retval false 一致していない + */ + Csm::csmBool GetCheckSignature(const Csm::csmString& reference) + { + Csm::csmChar getSignature[4] = { 0, 0, 0, 0 }; + const Csm::csmChar* referenceString = reference.GetRawString(); + if (reference.GetLength() != 4) + { + return false; + } + for (Csm::csmUint32 signatureOffset = 0; signatureOffset < 4; signatureOffset++) + { + getSignature[signatureOffset] = static_cast(Get8()); + } + return (getSignature[0] == referenceString[0]) && (getSignature[1] == referenceString[1]) + && (getSignature[2] == referenceString[2]) && (getSignature[3] == referenceString[3]); + } + + Csm::csmByte* _fileByte; ///< ロードしたファイルのバイト列 + Csm::csmSizeInt _fileSize; ///< ファイルサイズ + Csm::csmUint32 _readOffset; ///< ファイル参照位置 + } _byteReader; + + Csm::csmByte* _rawData; ///< 正規化される前のバイト列 + Csm::csmUint64 _rawDataSize; ///< 正規化される前のバイト列の大きさ + Csm::csmFloat32** _pcmData; ///< -1から1の範囲で表現された音声データ配列 + Csm::csmUint32 _sampleOffset; ///< サンプル参照位置 + Csm::csmFloat32 _lastRms; ///< 最後に計測したRMS値 + Csm::csmFloat32 _userTimeSeconds; ///< デルタ時間の積算値[秒] + }; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/NapiBridgeC.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/NapiBridgeC.cpp new file mode 100644 index 0000000..558ba13 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/NapiBridgeC.cpp @@ -0,0 +1,355 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "NapiBridgeC.hpp" +#include +#include +#include +#include +#include +#include +#include "rawfile/raw_file_manager.h" +#include "rawfile/raw_file.h" +#include "rawfile/raw_dir.h" +#include "LAppDelegate.hpp" +#include "LAppPal.hpp" + +using namespace Csm; + +static csmString g_Id; +static NativeResourceManager *g_NativeResourceManager = nullptr; +static OH_NativeXComponent *g_NativeXComponent; +static OH_NativeXComponent_Callback g_Callback; +static napi_threadsafe_function g_MoveTaskToBack; +static std::atomic g_IsSurfaceChanged; +static std::atomic g_TouchEvent; +static std::atomic g_IsTouchEvent; +static std::atomic g_IsLoop; + +static csmBool CheckComponent(OH_NativeXComponent *component) +{ + int32_t ret; + char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {}; + uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1; + ret = OH_NativeXComponent_GetXComponentId(component, idStr, &idSize); + if (ret != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) + { + return false; + } + + return g_Id == idStr; +} + +static napi_value ConvertBooleanToNapiValue(napi_env env, bool result) +{ + napi_value state; + napi_status status = napi_get_boolean(env, result, &state); + if (status != napi_ok) + { + LAppPal::PrintLogLn("Convert boolean error."); + return nullptr; + } + + return state; +} + +csmVector NapiBridgeC::GetAssetList(const csmString &path) +{ + csmVector assetList; + RawDir *rawDir; + int count; + + if (g_NativeResourceManager) + { + rawDir = OH_ResourceManager_OpenRawDir(g_NativeResourceManager, path.GetRawString()); + count = OH_ResourceManager_GetRawFileCount(rawDir); + for (int i = 0; i < count; i++) + { + assetList.PushBack(OH_ResourceManager_GetRawFileName(rawDir, i)); + } + OH_ResourceManager_CloseRawDir(rawDir); + } + + return assetList; +} + +char *NapiBridgeC::LoadFile(const char *filePath, unsigned int *outSize) +{ + RawFile *rawFile; + long length; + char *buffer = nullptr; + + if (g_NativeResourceManager) + { + rawFile = OH_ResourceManager_OpenRawFile(g_NativeResourceManager, filePath); + if (!rawFile) + { + LAppPal::PrintLogLn("LoadFile failed."); + return nullptr; + } + length = OH_ResourceManager_GetRawFileSize(rawFile); + buffer = new char[length]; + *outSize = static_cast(OH_ResourceManager_ReadRawFile(rawFile, buffer, length)); + + OH_ResourceManager_CloseRawFile(rawFile); + } + + return buffer; +} + +void NapiBridgeC::MoveTaskToBack() +{ + napi_call_threadsafe_function(g_MoveTaskToBack, nullptr, napi_tsfn_blocking); +} + +static void CallMoveTaskToBack(napi_env env, napi_value jsFunc, void* context, void* data) +{ + napi_value undefined; + napi_get_undefined(env, &undefined); + napi_call_function(env, undefined, jsFunc, 0, nullptr, nullptr); +} + +static void AsyncLoop(napi_env env, void* data) +{ + uint64_t width; + uint64_t height; + OH_NativeXComponent_TouchEvent touchEvent; + int32_t ret; + + LAppPal::PrintLogLn("Start SubThread."); + + LAppDelegate::GetInstance()->InitializeEgl(); + LAppDelegate::GetInstance()->InitializeDisplay(); + + while (g_IsLoop) + { + if (g_IsSurfaceChanged) + { + ret = OH_NativeXComponent_GetXComponentSize(g_NativeXComponent, LAppDelegate::GetInstance()->GetWindow(), &width, &height); + if (ret == OH_NATIVEXCOMPONENT_RESULT_SUCCESS) + { + LAppDelegate::GetInstance()->ChangeDisplay(width, height); + } + g_IsSurfaceChanged = false; + } + if (g_IsTouchEvent) + { + touchEvent = g_TouchEvent; + switch (touchEvent.type) + { + case OH_NATIVEXCOMPONENT_DOWN: + LAppDelegate::GetInstance()->OnTouchBegan(touchEvent.x, touchEvent.y); + break; + case OH_NATIVEXCOMPONENT_UP: + LAppDelegate::GetInstance()->OnTouchEnded(touchEvent.x, touchEvent.y); + break; + case OH_NATIVEXCOMPONENT_MOVE: + LAppDelegate::GetInstance()->OnTouchMoved(touchEvent.x, touchEvent.y); + break; + } + g_IsTouchEvent = false; + } + + LAppDelegate::GetInstance()->Run(); + } + LAppDelegate::GetInstance()->ReleaseEgl(); + LAppDelegate::GetInstance()->ReleaseInstance(); +} + +static void AsyncCallback(napi_env env, napi_status status, void* data) +{ + LAppPal::PrintLogLn("Call AsyncCallback."); + + napi_delete_async_work(env, *reinterpret_cast(data)); + CSM_FREE(data); +} + +static napi_value InitializeMainLoop(napi_env env, napi_callback_info info) +{ + size_t argc = 2; + napi_value argv[2]; + napi_value workName; + napi_async_work* asyncWork; + napi_status status; + + LAppPal::PrintLogLn("Start InitSurface."); + + napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); + g_NativeResourceManager = OH_ResourceManager_InitNativeResourceManager(env, argv[0]); + + // create moveTaskToBack function + status = napi_create_threadsafe_function(env, argv[1], nullptr, workName, 0, 1, nullptr, nullptr, nullptr, CallMoveTaskToBack, &g_MoveTaskToBack); + if (status != napi_ok) + { + LAppPal::PrintLogLn("Failed to create moveTaskToBack function."); + return ConvertBooleanToNapiValue(env, false); + } + + // create async + g_IsSurfaceChanged = true; + g_IsTouchEvent = false; + g_IsLoop = true; + status = napi_create_string_utf8(env, "live2dDemoLoop", NAPI_AUTO_LENGTH, &workName); + if (status != napi_ok) + { + LAppPal::PrintLogLn("Failed to obtain the name of the async process."); + return ConvertBooleanToNapiValue(env, false); + } + asyncWork = reinterpret_cast(CSM_MALLOC(sizeof(napi_async_work))); + if (!asyncWork) + { + LAppPal::PrintLogLn("Memory allocation failed."); + return ConvertBooleanToNapiValue(env, false); + } + status = napi_create_async_work(env, NULL, workName, AsyncLoop, AsyncCallback, asyncWork, asyncWork); + if (status != napi_ok) + { + LAppPal::PrintLogLn("Failed to create async process."); + return ConvertBooleanToNapiValue(env, false); + } + status = napi_queue_async_work(env, *asyncWork); + if (status != napi_ok) + { + LAppPal::PrintLogLn("Failed to queue async process."); + return ConvertBooleanToNapiValue(env, false); + } + + return ConvertBooleanToNapiValue(env, true); +} + +static void OnSurfaceCreated(OH_NativeXComponent *component, void *window) +{ + LAppPal::PrintLogLn("Start OnSurfaceCreated."); + + if (!CheckComponent(component)) + { + LAppPal::PrintLogLn("OnSurfaceCreated failed."); + return; + } + + LAppDelegate::GetInstance()->SetWindow(window); +} + +static void OnSurfaceChanged(OH_NativeXComponent *component, void *window) +{ + LAppPal::PrintLogLn("Start OnSurfaceChanged."); + + if (!CheckComponent(component)) + { + LAppPal::PrintLogLn("OnSurfaceChanged failed."); + return; + } + + g_IsSurfaceChanged = true; +} + +static void OnSurfaceDestroyed(OH_NativeXComponent *component, void *window) +{ + LAppPal::PrintLogLn("Start OnSurfaceDestroyed."); + + g_IsLoop = false; + + if (g_NativeResourceManager) + { + OH_ResourceManager_ReleaseNativeResourceManager(g_NativeResourceManager); + g_NativeResourceManager = nullptr; + } + + napi_release_threadsafe_function(g_MoveTaskToBack, napi_tsfn_release); +} + +static void DispatchTouchEvent(OH_NativeXComponent *component, void *window) +{ + LAppPal::PrintLogLn("Start DispatchTouchEvent."); + + OH_NativeXComponent_TouchEvent touchEvent; + int32_t ret; + + ret = OH_NativeXComponent_GetTouchEvent(component, window, &touchEvent); + if (ret != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) + { + LAppPal::PrintLogLn("DispatchTouchEvent failed."); + return; + } + g_TouchEvent = touchEvent; + g_IsTouchEvent = true; +} + +static bool Export(napi_env env, napi_value exports) +{ + napi_status status; + napi_value exportInstance = nullptr; + OH_NativeXComponent *nativeXComponent = nullptr; + int32_t ret; + char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {}; + uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1; + + status = napi_get_named_property(env, exports, OH_NATIVE_XCOMPONENT_OBJ, &exportInstance); + if (status != napi_ok) + { + return false; + } + + status = napi_unwrap(env, exportInstance, reinterpret_cast(&nativeXComponent)); + if (status != napi_ok) + { + return false; + } + + ret = OH_NativeXComponent_GetXComponentId(nativeXComponent, idStr, &idSize); + if (ret != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) + { + return false; + } + + g_Id = idStr; + g_NativeXComponent = nativeXComponent; + + g_Callback.OnSurfaceCreated = OnSurfaceCreated; + g_Callback.OnSurfaceChanged = OnSurfaceChanged; + g_Callback.OnSurfaceDestroyed = OnSurfaceDestroyed; + g_Callback.DispatchTouchEvent = DispatchTouchEvent; + OH_NativeXComponent_RegisterCallback(g_NativeXComponent, &g_Callback); + + return true; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + LAppPal::PrintLogLn("Start Init."); + + napi_property_descriptor desc[] = + { + { "initializeMainLoop", nullptr, InitializeMainLoop, nullptr, nullptr, nullptr, napi_default, nullptr } + }; + napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); + + if (!Export(env, exports)) + { + LAppPal::PrintLogLn("Init failed."); + } + + return exports; +} +EXTERN_C_END + +static napi_module demoModule = +{ + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, + .nm_modname = "Demo", + .nm_priv = ((void *)0), + .reserved = {0}, +}; + +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) +{ + napi_module_register(&demoModule); +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/NapiBridgeC.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/NapiBridgeC.hpp new file mode 100644 index 0000000..156d58f --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/NapiBridgeC.hpp @@ -0,0 +1,33 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once +#include +#include + +/** +* @brief Napi Bridge Class +*/ +class NapiBridgeC +{ +public: + /** + * @brief Assets 取得 + */ + static Csm::csmVector GetAssetList(const Csm::csmString& path); + + /** + * @brief ファイル読み込み + */ + static char* LoadFile(const char* filePath, unsigned int* outSize); + + /** + * @brief アプリをバックグラウンドに移動 + */ + static void MoveTaskToBack(); + +}; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/TouchManager.cpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/TouchManager.cpp new file mode 100644 index 0000000..60003c3 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/TouchManager.cpp @@ -0,0 +1,97 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "TouchManager.hpp" +#include + +TouchManager::TouchManager() + : _startY(0.0f) + , _startX(0.0f) + , _lastX(0.0f) + , _lastY(0.0f) + , _lastX1(0.0f) + , _lastY1(0.0f) + , _lastX2(0.0f) + , _lastY2(0.0f) + , _lastTouchDistance(0.0f) + , _deltaX(0.0f) + , _deltaY(0.0f) + , _scale(1.0f) + , _touchSingle(false) + , _flipAvailable(false) +{ } + +void TouchManager::TouchesBegan(float deviceX, float deviceY) +{ + _lastX = deviceX; + _lastY = deviceY; + _startX = deviceX; + _startY = deviceY; + _lastTouchDistance = -1.0f; + _flipAvailable = true; + _touchSingle = true; +} + +void TouchManager::TouchesMoved(float deviceX, float deviceY) +{ + _lastX = deviceX; + _lastY = deviceY; + _lastTouchDistance = -1.0f; + _touchSingle = true; +} + +void TouchManager::TouchesMoved(float deviceX1, float deviceY1, float deviceX2, float deviceY2) +{ + float distance = CalculateDistance(deviceX1, deviceY1, deviceX2, deviceY2); + float centerX = (deviceX1 + deviceX2) * 0.5f; + float centerY = (deviceY1 + deviceY2) * 0.5f; + + if (_lastTouchDistance > 0.0f) + { + _scale = powf(distance / _lastTouchDistance, 0.75f); + _deltaX = CalculateMovingAmount(deviceX1 - _lastX1, deviceX2 - _lastX2); + _deltaY = CalculateMovingAmount(deviceY1 - _lastY1, deviceY2 - _lastY2); + } + else + { + _scale = 1.0f; + _deltaX = 0.0f; + _deltaY = 0.0f; + } + + _lastX = centerX; + _lastY = centerY; + _lastX1 = deviceX1; + _lastY1 = deviceY1; + _lastX2 = deviceX2; + _lastY2 = deviceY2; + _lastTouchDistance = distance; + _touchSingle = false; +} + +float TouchManager::GetFlickDistance() const +{ + return CalculateDistance(_startX, _startY, _lastX, _lastY); +} + +float TouchManager::CalculateDistance(float x1, float y1, float x2, float y2) const +{ + return sqrtf((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); +} + +float TouchManager::CalculateMovingAmount(float v1, float v2) +{ + if ((v1 > 0.0f) != (v2 > 0.0f)) + { + return 0.0f; + } + + float sign = v1 > 0.0f ? 1.0f : -1.0f; + float absoluteValue1 = fabsf(v1); + float absoluteValue2 = fabsf(v2); + return sign * ((absoluteValue1 < absoluteValue2) ? absoluteValue1 : absoluteValue2); +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/TouchManager.hpp b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/TouchManager.hpp new file mode 100644 index 0000000..3ec0d57 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/src/TouchManager.hpp @@ -0,0 +1,109 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +/** +* @brief タッチマネジャー +*/ +class TouchManager +{ +public: + /** + * @brief コンストラクタ + */ + TouchManager(); + + float GetCenterX() const { return _lastX; } + float GetCenterY() const { return _lastY; } + float GetDeltaX() const { return _deltaX; } + float GetDeltaY() const{ return _deltaY; } + float GetStartX() const{ return _startX; } + float GetStartY() const{ return _startY; } + float GetScale() const { return _scale; } + float GetX() const{ return _lastX; } + float GetY() const{ return _lastY; } + float GetX1() const{ return _lastX1; } + float GetY1() const{ return _lastY1; } + float GetX2() const{ return _lastX2; } + float GetY2() const{ return _lastY2; } + bool IsSingleTouch() const { return _touchSingle; } + bool IsFlickAvailable() const { return _flipAvailable; } + void DisableFlick() { _flipAvailable = false; } + + /* + * @brief タッチ開始時イベント + * + * @param[in] deviceY タッチした画面のyの値 + * @param[in] deviceX タッチした画面のxの値 + */ + void TouchesBegan(float deviceX, float deviceY); + + /* + * @brief ドラッグ時のイベント + * + * @param[in] deviceX タッチした画面のyの値 + * @param[in] deviceY タッチした画面のxの値 + */ + void TouchesMoved(float deviceX, float deviceY); + + /* + * @brief ドラッグ時のイベント + * + * @param[in] deviceX1 1つめのタッチした画面のxの値 + * @param[in] deviceY1 1つめのタッチした画面のyの値 + * @param[in] deviceX2 2つめのタッチした画面のxの値 + * @param[in] deviceY2 2つめのタッチした画面のyの値 + */ + void TouchesMoved(float deviceX1, float deviceY1, float deviceX2, float deviceY2); + + /* + * @brief フリックの距離測定 + * + * @return フリック距離 + */ + float GetFlickDistance() const; + +private: + /* + * @brief 点1から点2への距離を求める + * + * @param[in] x1 1つめのタッチした画面のxの値 + * @param[in] y1 1つめのタッチした画面のyの値 + * @param[in] x2 2つめのタッチした画面のxの値 + * @param[in] y2 2つめのタッチした画面のyの値 + * @return 2点の距離 + */ + float CalculateDistance(float x1, float y1, float x2, float y2) const; + + /* + * 二つの値から、移動量を求める。 + * 違う方向の場合は移動量0。同じ方向の場合は、絶対値が小さい方の値を参照する + * + * @param[in] v1 1つめの移動量 + * @param[in] v2 2つめの移動量 + * + * @return 小さい方の移動量 + */ + float CalculateMovingAmount(float v1, float v2); + + float _startY; // タッチを開始した時のxの値 + float _startX; // タッチを開始した時のyの値 + float _lastX; // シングルタッチ時のxの値 + float _lastY; // シングルタッチ時のyの値 + float _lastX1; // ダブルタッチ時の一つ目のxの値 + float _lastY1; // ダブルタッチ時の一つ目のyの値 + float _lastX2; // ダブルタッチ時の二つ目のxの値 + float _lastY2; // ダブルタッチ時の二つ目のyの値 + float _lastTouchDistance; // 2本以上でタッチしたときの指の距離 + float _deltaX; // 前回の値から今回の値へのxの移動距離。 + float _deltaY; // 前回の値から今回の値へのyの移動距離。 + float _scale; // このフレームで掛け合わせる拡大率。拡大操作中以外は1。 + bool _touchSingle; // シングルタッチ時はtrue + bool _flipAvailable; // フリップが有効かどうか + +}; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/types/libentry/Demo.d.ts b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/types/libentry/Demo.d.ts new file mode 100644 index 0000000..7b83004 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/types/libentry/Demo.d.ts @@ -0,0 +1,11 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +import resourceManager from '@ohos.resourceManager'; + +type moveTaskToBack = () => void; +export const initializeMainLoop: (resourceManager: resourceManager.ResourceManager, callback: moveTaskToBack) => boolean; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/types/libentry/oh-package.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 0000000..ee80ae3 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/cpp/types/libentry/oh-package.json5 @@ -0,0 +1,6 @@ +{ + "name": "libDemo.so", + "types": "./Demo.d.ts", + "version": "1.0.0", + "description": "Please describe the basic information." +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/ets/entryability/EntryAbility.ets b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000..c035ea4 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,52 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import hilog from '@ohos.hilog'; +import UIAbility from '@ohos.app.ability.UIAbility'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import { WindowManager } from '@kit.SpeechKit'; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, '[live2dDemo]', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, '[live2dDemo]', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, '[live2dDemo]', '%{public}s', 'Ability onWindowStageCreate'); + + WindowManager.setWindowStage(windowStage); + windowStage.loadContent('pages/Index', (err, data) => { + if (err.code) { + hilog.error(0x0000, '[live2dDemo]', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, '[live2dDemo]', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, '[live2dDemo]', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, '[live2dDemo]', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, '[live2dDemo]', '%{public}s', 'Ability onBackground'); + } +}; diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/ets/pages/Index.ets b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000..181952c --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,36 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +import hilog from '@ohos.hilog'; +import { WindowManager } from '@kit.SpeechKit'; +import live2dDemo from 'libDemo.so'; + +function moveTaskToBack(): void { + WindowManager.getWindowStage().getMainWindowSync().minimize(); +} + +@Entry +@Component +struct Index { + private xComponentId = 'Demo'; + + build() { + Stack() { + XComponent({ id: this.xComponentId, type: XComponentType.SURFACE, libraryname: 'Demo' }) + .onLoad(() => { + hilog.info(0x0000, '[live2dDemo]', 'onLoad'); + live2dDemo.initializeMainLoop(getContext().resourceManager, moveTaskToBack); + }) + .key('Demo') + .onDestroy(() => { + hilog.info(0x0000, '[live2dDemo]', 'onDestroy'); + }) + .width('100%') + .height('100%') + } + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/module.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/module.json5 new file mode 100644 index 0000000..ab62bce --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/module.json5 @@ -0,0 +1,39 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "orientation": "auto_rotation_landscape", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/element/color.json b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000..162a7b6 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/element/string.json b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000..caf640f --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "Demo" + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/media/icon.png b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cd45accb1dfd2fd0da16c732c72faa6e46b26521 GIT binary patch literal 2041 zcmaJ?c~nzZ9u6@;0AXaYAVN(;Kr(@>EJ+}skOWf=BA~*l4us@ELY9{%0m5QX6pnb} z(jZF|S&pLAS}3BZAfeQSvJ_h>F2Q1PYqi?o5`;m_yjZdG$1v}l_wK#F^L^iMz2}uD z#K$>1dON~kFlWvhW+Jp=tuN9J`ZlM-rl4h+ij|^D0y9;4JOuz-EdVnB6i3R-0ulk9 zApi4zAQA>!N9@-o026$1@L`d124`3G5<@_m`0f)Ug_Ie~;HT2q<_a=HH> zDwTdfD^-cW-|_xWVP$f@93UhDN-#&khZ>jZXLTi~$0`7x3REP6pk%&^2|`c>DutjN zMJD4Zs6Z}{FOpd;*mo2zm(GzXRXiCV;4m3zNCYnu3Fy=i5;2An&Lp!#LP;bRD~1&s z%VH6UY+}r6YDgG+p34OJIZ{BTn&%4s=CT&#TBkuOhdeU@g(w#guoa*b^)73=XyI65 z7Swys6)YS}?1EeZ6b!-I+yCnIya^g0>-NLsLWd8t56GZ_S3r|ZGbR+mV2ErEb9J)X zIF!njY-D-7{qtF2(?nlQ$0}!pzt=}hc*m%%)0Jb#N_K4@IC-`Pi5DahPZN7N9rH;ol;Gc*>-Go@gXKTM{eP)iJj6CYTIi}B#zLKZYD@_;m zrXmXXsFq@~ou-z!9bHoM8*(hwl>X(zm)TDcdkF4lZm$1jP*HbnD`o1$g}_R#+bu2D zr%7Y8KdsaC-V*aem5#@*M%r^GPgu%P2e-BnBClhP2yoGFe40>);=}>{NONtkXQ01p z)OX^t2Ojhddot9eg0WTIVSTNBa}7V-^_pO595w|Hx9q?k4dMp@$G7PK*TD=y;ck6J zdGRB!_RAI2nR3%tO1IkdWp*bw*?<=pM_LZb30?!oK)s;En( z!#nnd9=cXJ<}+e{XLdx(q3&ikJISe?eSHHohk+pz+$6Cv{ytvc{QXmMn2XQ9U8rvt zrJdAn(0gpSD@N=yTrI_2^P#*zQg7MTp1)k(lv(*(KtUR6@M|2WB>2wRwC-h=wk6XF zPtSes*_JwI+^d>xW489MJw5R6=t5?{R zc|E8i?RL@p9)A3ZJAQOg`}+F;<_vnWA!KxR#g%jZ@y_1Qu#Uw)kFPw_xmZ?a^e*1{ zM|ImtqA|(CaDQ@Fyvcof`MN66&VI6m6gAyAXx`%cDx6BI{Bj#}V*Rn1(b~;Am)D2u zX7(027IO?Z2VYK^1vXXpoZ@AtH~N?0rYWwtyA15`6vEf6fk&;o-L;7zFt`5nk*iOy z`<918zB+k;EytI$FAXug)jk*e@e};4e9g__w4A5ev!!)H$yC@{?vsRqJ##X1R%xPG z&_R3oDi$MtTkVqfPj)HEUDx_7wd!y{8#1%$U*Dd0sK@=#6+!XlsE-s^1f5E`R9Wo71^b~mbVdU;Fw0LG~mUQg;xsX4QYRo3B@rH_=ry>DE8ef!c2ta8UcI#26# zF|`*4wtMHe@%#eGZw`#Yj|QWuB`eRD)b~)r9mM95p_JVG%-IdcbIX5qG#GpGD+IrS zEqxb1Rg&Dadk5#7t4j68I1f!@A$efp1?I%&d*56)yl!tkz!14<$0Od_&6cGw$WW0r zjSlQA7l*6;vgfhv!cR|RmAD$+w6j`rVf=-?-D@q>kOseUVSb*~jbAS^*1h?ZL)n(9 zDa}`4etXO6`}9;{k5E^N{rcfnV_(LPwsDg``wtyS*V<19c3!PGJ3Kqy9ksvkwbJ%Z z*N(fT0{e*Wji-Ck5!3YE0j|PZ@&z`v=kitWL$bqSt!e4bH!+(|Q)CZ30^nVPfkx{s zX{6of`p=BiPb@u@IyL!tRk>?qgBqCmo-Zlt!636g?z`s~zdfwuB7DXZHvV`Usp+%Z zo*&;Biu@MHE&2j+?j^o`Cr12u<>vOe=a&8a2hlcmFjJiDR>XnD4c4DAhZWCkiAgW{ E51q9-lK=n! literal 0 HcmV?d00001 diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/media/startIcon.png b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..366f76459ffd4494ec40d0ddd5c59385b9c5da11 GIT binary patch literal 4351 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 literal 0 HcmV?d00001 diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/profile/main_pages.json b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000..1898d94 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/en_US/element/string.json b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/en_US/element/string.json new file mode 100644 index 0000000..caf640f --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/en_US/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "Demo" + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/zh_CN/element/string.json b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/zh_CN/element/string.json new file mode 100644 index 0000000..c30b672 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "模块描述" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "Demo" + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/test/Ability.test.ets b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000..1e8ea5e --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,35 @@ +import hilog from '@ohos.hilog'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/test/List.test.ets b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000..e03f925 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,5 @@ +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testability/TestAbility.ets b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testability/TestAbility.ets new file mode 100644 index 0000000..02322ae --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testability/TestAbility.ets @@ -0,0 +1,50 @@ +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; +import hilog from '@ohos.hilog'; +import { Hypium } from '@ohos/hypium'; +import testsuite from '../test/List.test'; +import window from '@ohos.window'; +import Want from '@ohos.app.ability.Want'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; + +export default class TestAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onCreate'); + hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); + hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:' + JSON.stringify(launchParam) ?? ''); + let abilityDelegator: AbilityDelegatorRegistry.AbilityDelegator; + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); + let abilityDelegatorArguments: AbilityDelegatorRegistry.AbilityDelegatorArgs; + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments(); + hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite); + } + + onDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage) { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageCreate'); + windowStage.loadContent('testability/pages/Index', (err, data) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', + JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageDestroy'); + } + + onForeground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onForeground'); + } + + onBackground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onBackground'); + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testability/pages/Index.ets b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testability/pages/Index.ets new file mode 100644 index 0000000..09efea4 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testability/pages/Index.ets @@ -0,0 +1,17 @@ +@Entry +@Component +struct Index { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets new file mode 100644 index 0000000..c5bbc0b --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ets @@ -0,0 +1,47 @@ +import hilog from '@ohos.hilog'; +import TestRunner from '@ohos.application.testRunner'; +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; +import Want from '@ohos.app.ability.Want'; + +let abilityDelegator: AbilityDelegatorRegistry.AbilityDelegator | undefined = undefined +let abilityDelegatorArguments: AbilityDelegatorRegistry.AbilityDelegatorArgs | undefined = undefined + +async function onAbilityCreateCallback() { + hilog.info(0x0000, 'testTag', '%{public}s', 'onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err : Error) { + hilog.info(0x0000, 'testTag', 'addAbilityMonitorCallback : %{public}s', JSON.stringify(err) ?? ''); +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner OnPrepare '); + } + + async onRun() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun run'); + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + const bundleName = abilityDelegatorArguments.bundleName; + const testAbilityName = 'TestAbility'; + let lMonitor: AbilityDelegatorRegistry.AbilityMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + const want: Want = { + bundleName: bundleName, + abilityName: testAbilityName + }; + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); + abilityDelegator.startAbility(want, (err, data) => { + hilog.info(0x0000, 'testTag', 'startAbility : err : %{public}s', JSON.stringify(err) ?? ''); + hilog.info(0x0000, 'testTag', 'startAbility : data : %{public}s',JSON.stringify(data) ?? ''); + }) + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun end'); + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/module.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000..d0dc5d5 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/module.json5 @@ -0,0 +1,38 @@ +{ + "module": { + "name": "entry_test", + "type": "feature", + "description": "$string:module_test_desc", + "mainElement": "TestAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:test_pages", + "abilities": [ + { + "name": "TestAbility", + "srcEntry": "./ets/testability/TestAbility.ets", + "description": "$string:TestAbility_desc", + "icon": "$media:icon", + "label": "$string:TestAbility_label", + "exported": true, + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + } + ] + } + ] + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/element/color.json b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/element/color.json new file mode 100644 index 0000000..162a7b6 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/element/string.json b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/element/string.json new file mode 100644 index 0000000..406cd12 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_test_desc", + "value": "test ability description" + }, + { + "name": "TestAbility_desc", + "value": "the test ability" + }, + { + "name": "TestAbility_label", + "value": "test label" + } + ] +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/media/icon.png b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/entry/src/ohosTest/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/hvigor/hvigor-config.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/hvigor/hvigor-config.json5 new file mode 100644 index 0000000..941ccf5 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/hvigor/hvigor-config.json5 @@ -0,0 +1,5 @@ +{ + "modelVersion": "5.0.0", + "dependencies": { + } +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/hvigorfile.ts b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/hvigorfile.ts new file mode 100644 index 0000000..f3cb9f1 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/oh-package-lock.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/oh-package-lock.json5 new file mode 100644 index 0000000..ea0c500 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/oh-package-lock.json5 @@ -0,0 +1,20 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hypium@1.0.11": "@ohos/hypium@1.0.11" + }, + "packages": { + "@ohos/hypium@1.0.11": { + "name": "@ohos/hypium", + "version": "1.0.11", + "integrity": "sha512-KawcLnv43C3QIYv1UbDnKCFX3MohtDxGuFvzlUxT/qf2DBilR56Ws6zrj90LdH6PjloJQwOPESuBQIHBACAK7w==", + "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.11.tgz", + "shasum": "fa799d273fa7d921701578c5e7084849354a4af0", + "registryType": "ohpm" + } + } +} \ No newline at end of file diff --git a/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/oh-package.json5 b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/oh-package.json5 new file mode 100644 index 0000000..fa97301 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.harmonyos.cmake/Full/oh-package.json5 @@ -0,0 +1,14 @@ +{ + "modelVersion": "5.0.0", + "name": "full", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.11" + } +} diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/CMakeLists.txt b/Samples/OpenGL/Demo/proj.ios.cmake/CMakeLists.txt index 4f0782a..ee71b46 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.ios.cmake/CMakeLists.txt @@ -107,7 +107,7 @@ set_xcode_property(${APP_NAME} set_xcode_property(${APP_NAME} DEVELOPMENT_TEAM "" "All") set_xcode_property(${APP_NAME} CODE_SIGN_IDENTITY "iPhone Developer" "All") set_xcode_property(${APP_NAME} - PRODUCT_BUNDLE_IDENTIFIER "com.live2d.demo-4-r7" "All" + PRODUCT_BUNDLE_IDENTIFIER "com.live2d.demo-5-r.2" "All" ) set_xcode_property(${APP_NAME} TARGETED_DEVICE_FAMILY "1,2" "All") if(PLATFORM STREQUAL "OS64") diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/Info.plist b/Samples/OpenGL/Demo/proj.ios.cmake/src/Info.plist index f9ef5b7..534b663 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/Info.plist +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/Info.plist @@ -31,12 +31,6 @@ UISupportedInterfaceOrientations UIInterfaceOrientationLandscapeLeft - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppLive2DManager.mm b/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppLive2DManager.mm index a1be10d..d7c3318 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppLive2DManager.mm +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppLive2DManager.mm @@ -25,6 +25,11 @@ @implementation LAppLive2DManager static LAppLive2DManager* s_instance = nil; +void BeganMotion(Csm::ACubismMotion* self) +{ + LAppPal::PrintLogLn("Motion began: %x", self); +} + void FinishedMotion(Csm::ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -166,7 +171,7 @@ - (void)onTap:(Csm::csmFloat32)x floatY:(Csm::csmFloat32)y; { LAppPal::PrintLogLn("[APP]hit area: [%s]", LAppDefine::HitAreaNameBody); } - _models[i]->StartRandomMotion(LAppDefine::MotionGroupTapBody, LAppDefine::PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(LAppDefine::MotionGroupTapBody, LAppDefine::PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -271,9 +276,9 @@ - (void)changeScene:(Csm::csmInt32)index; _models[1]->GetModelMatrix()->TranslateX(0.2f); #endif - float clearColorR = 1.0f; - float clearColorG = 1.0f; - float clearColorB = 1.0f; + float clearColorR = 0.0f; + float clearColorG = 0.0f; + float clearColorB = 0.0f; AppDelegate* delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate]; ViewController* view = [delegate viewController]; diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppModel.h b/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppModel.h index 780d625..7ddec7d 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppModel.h +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppModel.h @@ -65,9 +65,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -75,9 +76,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppModel.mm b/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppModel.mm index 14d3317..4b27cac 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppModel.mm +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppModel.mm @@ -276,21 +276,10 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -428,7 +417,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -458,21 +447,10 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -481,6 +459,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -499,7 +478,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -508,7 +487,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -564,7 +543,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppTextureManager.mm b/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppTextureManager.mm index a0d344c..18fa131 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppTextureManager.mm +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/LAppTextureManager.mm @@ -118,6 +118,7 @@ - (void)releaseTextures { for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; } @@ -132,6 +133,7 @@ - (void)releaseTextureWithId:(Csm::csmUint32)textureId { continue; } + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; @@ -144,6 +146,7 @@ - (void)releaseTextureByName:(std::string)fileName; { if (_textures[i]->fileName == fileName) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/ViewController.mm b/Samples/OpenGL/Demo/proj.ios.cmake/src/ViewController.mm index 9d9e477..f12f6cc 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/ViewController.mm +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/ViewController.mm @@ -355,15 +355,7 @@ - (void)PreModelDraw:(LAppModel&)refModel int height = screenRect.size.height; // モデル描画キャンバス - // PadとPhoneで縦横を変えている - if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) - { - useTarget->CreateOffscreenSurface(height, width); - } - else - { - useTarget->CreateOffscreenSurface(width, height); - } + useTarget->CreateOffscreenSurface(height, width); } // レンダリング開始 diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppModel.h b/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppModel.h index e9b3544..8d3b449 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppModel.h +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppModel.h @@ -9,6 +9,7 @@ #define MinLAppModel_h #import +#import #import #import #import @@ -65,10 +66,9 @@ class MinLAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 - * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppModel.mm b/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppModel.mm index 15b6169..d8e3dc2 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppModel.mm +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppModel.mm @@ -202,22 +202,10 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } - if (_motions[name] != NULL) { ACubismMotion::Delete(_motions[name]); @@ -339,7 +327,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") } -CubismMotionQueueEntryHandle MinLAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle MinLAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority) { if (priority == PriorityForce) { @@ -369,30 +357,15 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, NULL, NULL, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } autoDelete = true; // 終了時にメモリから削除 } DeleteBuffer(buffer, path.GetRawString()); } - else - { - motion->SetFinishedMotionHandler(onFinishedMotionHandler); - } if (_debugMode) { @@ -424,7 +397,7 @@ void DeleteBuffer(csmByte* buffer, const csmChar* path = "") if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppTextureManager.mm b/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppTextureManager.mm index c420b6f..17fa9fe 100644 --- a/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppTextureManager.mm +++ b/Samples/OpenGL/Demo/proj.ios.cmake/src/minimum/MinLAppTextureManager.mm @@ -118,6 +118,7 @@ - (void)releaseTextures { for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; } @@ -132,6 +133,7 @@ - (void)releaseTextureWithId:(Csm::csmUint32)textureId { continue; } + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; @@ -144,6 +146,7 @@ - (void)releaseTextureByName:(std::string)fileName; { if (_textures[i]->fileName == fileName) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/CMakeLists.txt b/Samples/OpenGL/Demo/proj.linux.cmake/CMakeLists.txt index eb5cfb1..75b6a5f 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.linux.cmake/CMakeLists.txt @@ -11,6 +11,7 @@ set(STB_PATH ${THIRD_PARTY_PATH}/stb) set(GLEW_PATH ${THIRD_PARTY_PATH}/glew) set(GLFW_PATH ${THIRD_PARTY_PATH}/glfw) set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) +set(SAMPLE_SHADER_PATH ${SDK_ROOT_PATH}/Samples/OpenGL/Shaders/Standard) # Set project. project(${APP_NAME}) @@ -68,6 +69,7 @@ find_package(OpenGL REQUIRED) add_executable(${APP_NAME}) # Add source files. add_subdirectory(src) + # Link libraries to app. target_link_libraries(${APP_NAME} Framework @@ -81,9 +83,8 @@ target_include_directories(${APP_NAME} PRIVATE ${STB_PATH}) add_custom_command( TARGET ${APP_NAME} POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E - copy_directory ${RES_PATH} $/Resources + COMMAND ${CMAKE_COMMAND} -E copy_directory ${RES_PATH} $/Resources + COMMAND ${CMAKE_COMMAND} -E copy_directory ${SAMPLE_SHADER_PATH} $/SampleShaders ) # You can change target that renderer draws by enabling following definition. diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/CMakeLists.txt b/Samples/OpenGL/Demo/proj.linux.cmake/src/CMakeLists.txt index cc79f71..7d572b8 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/CMakeLists.txt @@ -38,6 +38,8 @@ else () ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/CubismUserModelExtend.cpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/CubismUserModelExtend.cpp index 862b7da..3e75327 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/CubismUserModelExtend.cpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/CubismUserModelExtend.cpp @@ -211,24 +211,10 @@ void CubismUserModelExtend::PreloadMotionGroup(const csmChar* group) csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // モーションデータの読み込み - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelJson, group, i)); if (tmpMotion) { - // フェードインの時間を取得 - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - // フェードアウトの時間を取得 - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } - if (_motions[name]) { // インスタンスを破棄 @@ -268,10 +254,9 @@ void CubismUserModelExtend::ReleaseModelSetting() * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 -* @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ -Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority) { // モーション数が取得出来なかった、もしくは0の時 if (!(_modelJson->GetMotionCount(group))) @@ -307,33 +292,16 @@ Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm:: csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // 一番先頭のモーションを読み込む - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, NULL, NULL, _modelJson, group, no)); if (motion) { - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } - // 終了時にメモリから削除 autoDelete = true; } DeleteBuffer(buffer, path.GetRawString()); } - else - { - // モーションの再生終了コールバックを登録 - motion->SetFinishedMotionHandler(onFinishedMotionHandler); - } // 優先度を設定してモーションを始める return _motionManager->StartMotionPriority(motion, autoDelete, priority); diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/CubismUserModelExtend.hpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/CubismUserModelExtend.hpp index d0b486d..c7f9aea 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/CubismUserModelExtend.hpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/CubismUserModelExtend.hpp @@ -59,10 +59,9 @@ class CubismUserModelExtend : * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 - * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority); /** * @brief 解放 diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDefine.cpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDefine.cpp index 20008c4..d7226d2 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDefine.cpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDefine.cpp @@ -37,6 +37,13 @@ namespace LAppDefine { // 終了ボタン const csmChar* PowerImageName = "close.png"; + // シェーダー相対パス + const csmChar* ShaderPath = "SampleShaders/"; + // 頂点シェーダー + const csmChar* VertShaderName = "VertSprite.vert"; + // フラグメントシェーダー + const csmChar* FragShaderName = "FragSprite.frag"; + // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる const csmChar* MotionGroupIdle = "Idle"; // アイドリング diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDefine.hpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDefine.hpp index 8641224..c4e76bc 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDefine.hpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDefine.hpp @@ -36,6 +36,10 @@ namespace LAppDefine { extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* VertShaderName; ///< 頂点シェーダー + extern const csmChar* FragShaderName; ///< フラグメントシェーダー + // モデル定義-------------------------------------------- // 外部定義ファイル(json)と合わせる extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDelegate.cpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDelegate.cpp index 1f8bd85..6298e6f 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDelegate.cpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDelegate.cpp @@ -107,9 +107,6 @@ bool LAppDelegate::Initialize() _windowHeight = height; glViewport(0, 0, _windowWidth, _windowHeight); - //AppViewの初期化 - _view->Initialize(); - // Cubism3の初期化 InitializeCubism(); @@ -118,7 +115,8 @@ bool LAppDelegate::Initialize() //load model LAppLive2DManager::GetInstance(); - //load sprite + //AppViewの初期化 + _view->Initialize(); _view->InitializeSprite(); return GL_TRUE; @@ -260,48 +258,6 @@ void LAppDelegate::OnMouseCallBack(GLFWwindow* window, double x, double y) _view->OnTouchesMoved(_mouseX, _mouseY); } -GLuint LAppDelegate::CreateShader() -{ - //バーテックスシェーダのコンパイル - GLuint vertexShaderId = glCreateShader(GL_VERTEX_SHADER); - const char* vertexShader = - "#version 120\n" - "attribute vec3 position;" - "attribute vec2 uv;" - "varying vec2 vuv;" - "void main(void){" - " gl_Position = vec4(position, 1.0);" - " vuv = uv;" - "}"; - glShaderSource(vertexShaderId, 1, &vertexShader, NULL); - glCompileShader(vertexShaderId); - - //フラグメントシェーダのコンパイル - GLuint fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER); - const char* fragmentShader = - "#version 120\n" - "varying vec2 vuv;" - "uniform sampler2D texture;" - "uniform vec4 baseColor;" - "void main(void){" - " gl_FragColor = texture2D(texture, vuv) * baseColor;" - "}"; - glShaderSource(fragmentShaderId, 1, &fragmentShader, NULL); - glCompileShader(fragmentShaderId); - - //プログラムオブジェクトの作成 - GLuint programId = glCreateProgram(); - glAttachShader(programId, vertexShaderId); - glAttachShader(programId, fragmentShaderId); - - // リンク - glLinkProgram(programId); - - glUseProgram(programId); - - return programId; -} - void LAppDelegate::SetExecuteAbsolutePath() { char path[1024]; diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDelegate.hpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDelegate.hpp index cac0f99..deb338b 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDelegate.hpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppDelegate.hpp @@ -71,11 +71,6 @@ class LAppDelegate */ void OnMouseCallBack(GLFWwindow* window, double x, double y); - /** - * @brief シェーダーを登録する。 - */ - GLuint CreateShader(); - /** * @brief Window情報を取得する。 */ diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppLive2DManager.cpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppLive2DManager.cpp index b9c5c73..959ec4c 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppLive2DManager.cpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppLive2DManager.cpp @@ -29,6 +29,11 @@ using namespace LAppDefine; namespace { LAppLive2DManager* s_instance = NULL; + void BeganMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion began: %x", self); + } + void FinishedMotion(ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -184,7 +189,7 @@ void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) { LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); } - _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -288,7 +293,7 @@ void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) _models[1]->GetModelMatrix()->TranslateX(0.2f); #endif - float clearColor[3] = { 1.0f, 1.0f, 1.0f }; + float clearColor[3] = { 0.0f, 0.0f, 0.0f }; LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppModel.cpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppModel.cpp index 739d1a8..cf965d7 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppModel.cpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppModel.cpp @@ -276,21 +276,10 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -443,7 +432,7 @@ void LAppModel::Update() } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -473,21 +462,10 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -496,6 +474,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -515,7 +494,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -524,7 +503,7 @@ CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -580,7 +559,7 @@ void LAppModel::SetExpression(const csmChar* expressionID) if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppModel.hpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppModel.hpp index 46f7227..3142d52 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppModel.hpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppModel.hpp @@ -66,9 +66,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -76,9 +77,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppSpriteShader.cpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppSpriteShader.cpp new file mode 100644 index 0000000..3f200cd --- /dev/null +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppSpriteShader.cpp @@ -0,0 +1,107 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpriteShader.hpp" + +#include "LAppDefine.hpp" +#include "LAppLive2DManager.hpp" +#include "LAppPal.hpp" + +LAppSpriteShader::LAppSpriteShader() +{ + _programId = CreateShader(); +} + +LAppSpriteShader::~LAppSpriteShader() +{ + glDeleteShader(_programId); +} + +GLuint LAppSpriteShader::GetShaderId() const +{ + return _programId; +} + +GLuint LAppSpriteShader::CreateShader() +{ + // シェーダーのパスの作成 + Csm::csmString vertShaderFile(LAppDefine::ShaderPath); + vertShaderFile += LAppDefine::VertShaderName; + Csm::csmString fragShaderFile(LAppDefine::ShaderPath); + fragShaderFile += LAppDefine::FragShaderName; + + // シェーダーのコンパイル + GLuint vertexShaderId = CompileShader(vertShaderFile, GL_VERTEX_SHADER); + GLuint fragmentShaderId = CompileShader(fragShaderFile, GL_FRAGMENT_SHADER); + + if (!vertexShaderId || !fragmentShaderId) + { + return 0; + } + + //プログラムオブジェクトの作成 + GLuint programId = glCreateProgram(); + glAttachShader(programId, vertexShaderId); + glAttachShader(programId, fragmentShaderId); + + // リンク + glLinkProgram(programId); + + glUseProgram(programId); + + // 不要になったシェーダーオブジェクトの削除 + glDeleteShader(vertexShaderId); + glDeleteShader(fragmentShaderId); + + return programId; +} + +bool LAppSpriteShader::CheckShader(GLuint shaderId) +{ + GLint status; + GLint logLength; + glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) + { + GLchar* log = reinterpret_cast(CSM_MALLOC(logLength)); + glGetShaderInfoLog(shaderId, logLength, &logLength, log); + CubismLogError("Shader compile log: %s", log); + CSM_FREE(log); + } + + glGetShaderiv(shaderId, GL_COMPILE_STATUS, &status); + if (status == GL_FALSE) + { + glDeleteShader(shaderId); + return false; + } + + return true; +} + +GLuint LAppSpriteShader::CompileShader(Csm::csmString filename, GLenum shaderType) +{ + // ファイル読み込み + Csm::csmSizeInt bufferSize = 0; + const char* shaderString = reinterpret_cast(LAppPal::LoadFileAsBytes(filename.GetRawString(), &bufferSize)); + const GLint glSize = (GLint)bufferSize; + + // コンパイル + GLuint shaderId = glCreateShader(shaderType); + glShaderSource(shaderId, 1, &shaderString, &glSize); + glCompileShader(shaderId); + + // 読み込んだシェーダー文字列の開放 + LAppPal::ReleaseBytes(reinterpret_cast(const_cast(shaderString))); + + if (!CheckShader(shaderId)) + { + return 0; + } + + return shaderId; +} diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppSpriteShader.hpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppSpriteShader.hpp new file mode 100644 index 0000000..93e6d05 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppSpriteShader.hpp @@ -0,0 +1,57 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include "CubismFramework.hpp" + +/** +* @brief スプライト用のシェーダー設定を保持するクラス +*/ +class LAppSpriteShader +{ +public: + /** + * @brief コンストラクタ + */ + LAppSpriteShader(); + + /** + * @brief デストラクタ + */ + ~LAppSpriteShader(); + + /** + * @brief シェーダーIDを取得する + */ + GLuint GetShaderId() const; + +private: + /** + * @brief シェーダーを作成する。 + */ + GLuint CreateShader(); + + /** + * @brief CreateShader内部関数 エラーチェック + */ + bool CheckShader(GLuint shaderId); + + /** + * @brief シェーダーをコンパイルする + * コンパイルに失敗した場合には 0 が戻る。 + * + * @param[in] filename シェーダーファイル名 + * @param[in] shaderType 作成するシェーダーの種類 + */ + GLuint CompileShader(Csm::csmString filename, GLenum shaderType); + + GLuint _programId; ///< シェーダID +}; diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppTextureManager.cpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppTextureManager.cpp index 99678f4..8d95eac 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppTextureManager.cpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppTextureManager.cpp @@ -100,6 +100,7 @@ void LAppTextureManager::ReleaseTextures() { for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; } @@ -114,6 +115,7 @@ void LAppTextureManager::ReleaseTexture(Csm::csmUint32 textureId) { continue; } + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; @@ -126,6 +128,7 @@ void LAppTextureManager::ReleaseTexture(std::string fileName) { if (_textures[i]->fileName == fileName) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppView.cpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppView.cpp index 48e727d..23e49b1 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppView.cpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppView.cpp @@ -15,6 +15,7 @@ #include "LAppDefine.hpp" #include "TouchManager.hpp" #include "LAppSprite.hpp" +#include "LAppSpriteShader.hpp" #include "LAppModel.hpp" #include @@ -24,7 +25,6 @@ using namespace std; using namespace LAppDefine; LAppView::LAppView(): - _programId(0), _back(NULL), _gear(NULL), _power(NULL), @@ -48,6 +48,7 @@ LAppView::LAppView(): LAppView::~LAppView() { _renderBuffer.DestroyOffscreenSurface(); + delete _spriteShader; delete _renderSprite; delete _viewMatrix; @@ -102,6 +103,9 @@ void LAppView::Initialize() ViewLogicalMaxBottom, ViewLogicalMaxTop ); + + // シェーダー作成 + _spriteShader = new LAppSpriteShader(); } void LAppView::Render() @@ -145,7 +149,7 @@ void LAppView::Render() void LAppView::InitializeSprite() { - _programId = LAppDelegate::GetInstance()->CreateShader(); + GLuint programId = _spriteShader->GetShaderId(); int width, height; glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); @@ -160,7 +164,7 @@ void LAppView::InitializeSprite() float y = height * 0.5f; float fWidth = static_cast(backgroundTexture->width * 2.0f); float fHeight = static_cast(height) * 0.95f; - _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, _programId); + _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, programId); imageName = GearImageName; LAppTextureManager::TextureInfo* gearTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); @@ -169,7 +173,7 @@ void LAppView::InitializeSprite() y = static_cast(height - gearTexture->height * 0.5f); fWidth = static_cast(gearTexture->width); fHeight = static_cast(gearTexture->height); - _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, _programId); + _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, programId); imageName = PowerImageName; LAppTextureManager::TextureInfo* powerTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); @@ -178,12 +182,12 @@ void LAppView::InitializeSprite() y = static_cast(powerTexture->height * 0.5f); fWidth = static_cast(powerTexture->width); fHeight = static_cast(powerTexture->height); - _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, _programId); + _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, programId); // 画面全体を覆うサイズ x = width * 0.5f; y = height * 0.5f; - _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, _programId); + _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, programId); } diff --git a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppView.hpp b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppView.hpp index c8cc61a..f27760e 100644 --- a/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppView.hpp +++ b/Samples/OpenGL/Demo/proj.linux.cmake/src/LAppView.hpp @@ -16,6 +16,7 @@ class TouchManager; class LAppSprite; +class LAppSpriteShader; class LAppModel; /** @@ -150,7 +151,6 @@ class LAppView TouchManager* _touchManager; ///< タッチマネージャー Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix - GLuint _programId; ///< シェーダID LAppSprite* _back; ///< 背景画像 LAppSprite* _gear; ///< ギア画像 LAppSprite* _power; ///< 電源画像 @@ -160,4 +160,6 @@ class LAppView Csm::Rendering::CubismOffscreenSurface_OpenGLES2 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + LAppSpriteShader* _spriteShader; ///< シェーダー作成委譲クラス }; diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/CMakeLists.txt b/Samples/OpenGL/Demo/proj.mac.cmake/CMakeLists.txt index dadeff8..2abc374 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.mac.cmake/CMakeLists.txt @@ -11,6 +11,7 @@ set(STB_PATH ${THIRD_PARTY_PATH}/stb) set(GLEW_PATH ${THIRD_PARTY_PATH}/glew) set(GLFW_PATH ${THIRD_PARTY_PATH}/glfw) set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) +set(SAMPLE_SHADER_PATH ${SDK_ROOT_PATH}/Samples/OpenGL/Shaders/Standard) # Set project. project(${APP_NAME}) @@ -70,6 +71,7 @@ find_package(OpenGL REQUIRED) add_executable(${APP_NAME}) # Add source files. add_subdirectory(src) + # Link libraries to app. target_link_libraries(${APP_NAME} Framework @@ -86,6 +88,9 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E copy_directory ${RES_PATH} $/Resources + COMMAND + ${CMAKE_COMMAND} -E + copy_directory ${SAMPLE_SHADER_PATH} $/SampleShaders ) # You can change target that renderer draws by enabling following definition. diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/CMakeLists.txt b/Samples/OpenGL/Demo/proj.mac.cmake/src/CMakeLists.txt index cc79f71..7d572b8 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/CMakeLists.txt @@ -38,6 +38,8 @@ else () ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/CubismUserModelExtend.cpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/CubismUserModelExtend.cpp index 5e7bc5c..8edc3c7 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/CubismUserModelExtend.cpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/CubismUserModelExtend.cpp @@ -211,21 +211,7 @@ void CubismUserModelExtend::PreloadMotionGroup(const csmChar* group) csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // モーションデータの読み込み - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); - - // フェードインの時間を取得 - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - // フェードアウトの時間を取得 - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelJson, group, i)); if (_motions[name]) { @@ -265,10 +251,9 @@ void CubismUserModelExtend::ReleaseModelSetting() * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 -* @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ -Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority) { // モーション数が取得出来なかった、もしくは0の時 if (!(_modelJson->GetMotionCount(group))) @@ -304,30 +289,13 @@ Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm:: csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // 一番先頭のモーションを読み込む - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); - - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } + motion = static_cast(LoadMotion(buffer, size, NULL, NULL, NULL, _modelJson, group, no)); // 終了時にメモリから削除 autoDelete = true; DeleteBuffer(buffer, path.GetRawString()); } - else - { - // モーションの再生終了コールバックを登録 - motion->SetFinishedMotionHandler(onFinishedMotionHandler); - } // 優先度を設定してモーションを始める return _motionManager->StartMotionPriority(motion, autoDelete, priority); diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/CubismUserModelExtend.hpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/CubismUserModelExtend.hpp index d0b486d..c7f9aea 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/CubismUserModelExtend.hpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/CubismUserModelExtend.hpp @@ -59,10 +59,9 @@ class CubismUserModelExtend : * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 - * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority); /** * @brief 解放 diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDefine.cpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDefine.cpp index 20008c4..d7226d2 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDefine.cpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDefine.cpp @@ -37,6 +37,13 @@ namespace LAppDefine { // 終了ボタン const csmChar* PowerImageName = "close.png"; + // シェーダー相対パス + const csmChar* ShaderPath = "SampleShaders/"; + // 頂点シェーダー + const csmChar* VertShaderName = "VertSprite.vert"; + // フラグメントシェーダー + const csmChar* FragShaderName = "FragSprite.frag"; + // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる const csmChar* MotionGroupIdle = "Idle"; // アイドリング diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDefine.hpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDefine.hpp index 8641224..c4e76bc 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDefine.hpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDefine.hpp @@ -36,6 +36,10 @@ namespace LAppDefine { extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* VertShaderName; ///< 頂点シェーダー + extern const csmChar* FragShaderName; ///< フラグメントシェーダー + // モデル定義-------------------------------------------- // 外部定義ファイル(json)と合わせる extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDelegate.cpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDelegate.cpp index 4a14a25..f5bd8c9 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDelegate.cpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDelegate.cpp @@ -106,9 +106,6 @@ bool LAppDelegate::Initialize() _windowWidth = width; _windowHeight = height; - //AppViewの初期化 - _view->Initialize(); - // Cubism SDK の初期化 InitializeCubism(); @@ -117,7 +114,8 @@ bool LAppDelegate::Initialize() //load model LAppLive2DManager::GetInstance(); - //load sprite + //AppViewの初期化 + _view->Initialize(); _view->InitializeSprite(); return GL_TRUE; @@ -258,48 +256,6 @@ void LAppDelegate::OnMouseCallBack(GLFWwindow* window, double x, double y) _view->OnTouchesMoved(_mouseX, _mouseY); } -GLuint LAppDelegate::CreateShader() -{ - //バーテックスシェーダのコンパイル - GLuint vertexShaderId = glCreateShader(GL_VERTEX_SHADER); - const char* vertexShader = - "#version 120\n" - "attribute vec3 position;" - "attribute vec2 uv;" - "varying vec2 vuv;" - "void main(void){" - " gl_Position = vec4(position, 1.0);" - " vuv = uv;" - "}"; - glShaderSource(vertexShaderId, 1, &vertexShader, NULL); - glCompileShader(vertexShaderId); - - //フラグメントシェーダのコンパイル - GLuint fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER); - const char* fragmentShader = - "#version 120\n" - "varying vec2 vuv;" - "uniform sampler2D texture;" - "uniform vec4 baseColor;" - "void main(void){" - " gl_FragColor = texture2D(texture, vuv) * baseColor;" - "}"; - glShaderSource(fragmentShaderId, 1, &fragmentShader, NULL); - glCompileShader(fragmentShaderId); - - //プログラムオブジェクトの作成 - GLuint programId = glCreateProgram(); - glAttachShader(programId, vertexShaderId); - glAttachShader(programId, fragmentShaderId); - - // リンク - glLinkProgram(programId); - - glUseProgram(programId); - - return programId; -} - void LAppDelegate::SetExecuteAbsolutePath() { char path[1024]; diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDelegate.hpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDelegate.hpp index 9b94810..a7327b2 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDelegate.hpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppDelegate.hpp @@ -71,11 +71,6 @@ class LAppDelegate */ void OnMouseCallBack(GLFWwindow* window, double x, double y); - /** - * @brief シェーダーを登録する。 - */ - GLuint CreateShader(); - /** * @brief Window情報を取得する。 */ diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppLive2DManager.cpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppLive2DManager.cpp index b4527f0..a93996a 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppLive2DManager.cpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppLive2DManager.cpp @@ -30,6 +30,11 @@ using namespace LAppDefine; namespace { LAppLive2DManager* s_instance = NULL; + void BeganMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion began: %x", self); + } + void FinishedMotion(ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -186,7 +191,7 @@ void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) { LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); } - _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -288,7 +293,7 @@ void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) _models[1]->GetModelMatrix()->TranslateX(0.2f); #endif - float clearColor[3] = { 1.0f, 1.0f, 1.0f }; + float clearColor[3] = { 0.0f, 0.0f, 0.0f }; LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppModel.cpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppModel.cpp index 739d1a8..cf965d7 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppModel.cpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppModel.cpp @@ -276,21 +276,10 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -443,7 +432,7 @@ void LAppModel::Update() } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -473,21 +462,10 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -496,6 +474,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -515,7 +494,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -524,7 +503,7 @@ CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -580,7 +559,7 @@ void LAppModel::SetExpression(const csmChar* expressionID) if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppModel.hpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppModel.hpp index 46f7227..3142d52 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppModel.hpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppModel.hpp @@ -66,9 +66,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -76,9 +77,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppSpriteShader.cpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppSpriteShader.cpp new file mode 100644 index 0000000..a7ae720 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppSpriteShader.cpp @@ -0,0 +1,110 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpriteShader.hpp" +#include +#include "LAppDefine.hpp" +#include "LAppPal.hpp" + +using namespace LAppDefine; + +LAppSpriteShader::LAppSpriteShader(csmString executeAbsolutePath) +{ + _programId = CreateShader(executeAbsolutePath); +} + +LAppSpriteShader::~LAppSpriteShader() +{ + glDeleteShader(_programId); +} + +GLuint LAppSpriteShader::GetShaderId() const +{ + return _programId; +} + +GLuint LAppSpriteShader::CreateShader(csmString executeAbsolutePath) +{ + // シェーダーのパスの作成 + Csm::csmString vertShaderFileName(executeAbsolutePath); + vertShaderFileName += ShaderPath; + vertShaderFileName += VertShaderName; + Csm::csmString fragShaderFileName(executeAbsolutePath); + fragShaderFileName += ShaderPath; + fragShaderFileName += FragShaderName; + + // 各シェーダーのコンパイル + GLuint vertexShaderId = CompileShader(vertShaderFileName, GL_VERTEX_SHADER); + GLuint fragmentShaderId = CompileShader(fragShaderFileName, GL_FRAGMENT_SHADER); + + if (!vertexShaderId || !fragmentShaderId) + { + return 0; + } + + //プログラムオブジェクトの作成 + GLuint programId = glCreateProgram(); + glAttachShader(programId, vertexShaderId); + glAttachShader(programId, fragmentShaderId); + + // リンク + glLinkProgram(programId); + + glUseProgram(programId); + + // 不要になったシェーダーオブジェクトの削除 + glDeleteShader(vertexShaderId); + glDeleteShader(fragmentShaderId); + + return programId; +} + +bool LAppSpriteShader::CheckShader(GLuint shaderId) +{ + GLint status; + GLint logLength; + glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) + { + GLchar* log = reinterpret_cast(CSM_MALLOC(logLength)); + glGetShaderInfoLog(shaderId, logLength, &logLength, log); + CubismLogError("Shader compile log: %s", log); + CSM_FREE(log); + } + + glGetShaderiv(shaderId, GL_COMPILE_STATUS, &status); + if (status == GL_FALSE) + { + glDeleteShader(shaderId); + return false; + } + + return true; +} + +GLuint LAppSpriteShader::CompileShader(Csm::csmString filename, GLenum shaderType) +{ + // ファイル読み込み + Csm::csmSizeInt bufferSize = 0; + const char* shaderString = reinterpret_cast(LAppPal::LoadFileAsBytes(filename.GetRawString(), &bufferSize)); + const GLint glSize = (GLint)bufferSize; + + // コンパイル + GLuint shaderId = glCreateShader(shaderType); + glShaderSource(shaderId, 1, &shaderString, &glSize); + glCompileShader(shaderId); + + // 読み込んだシェーダー文字列の開放 + LAppPal::ReleaseBytes(reinterpret_cast(const_cast(shaderString))); + + if (!CheckShader(shaderId)) + { + return 0; + } + + return shaderId; +} diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppSpriteShader.hpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppSpriteShader.hpp new file mode 100644 index 0000000..99cd936 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppSpriteShader.hpp @@ -0,0 +1,61 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include "CubismFramework.hpp" + +/** +* @brief スプライト用のシェーダー設定を保持するクラス +*/ +class LAppSpriteShader +{ +public: + /** + * @brief コンストラクタ + * + * @param[in] executeAbsolutePath 絶対パス + */ + LAppSpriteShader(Csm::csmString executeAbsolutePath); + + /** + * @brief デストラクタ + */ + ~LAppSpriteShader(); + + /** + * @brief シェーダーIDを取得する + */ + GLuint GetShaderId() const; + +private: + /** + * @brief シェーダーを作成する。 + * + * @param[in] executeAbsolutePath 絶対パス + */ + GLuint CreateShader(Csm::csmString executeAbsolutePath); + + /** + * @brief CreateShader内部関数 エラーチェック + */ + bool CheckShader(GLuint shaderId); + + /** + * @brief シェーダーをコンパイルする + * コンパイルに失敗した場合は 0 が戻る。 + * + * @param[in] filename シェーダーファイル名 + * @param[in] shaderType 作成するシェーダーの種類 + */ + GLuint CompileShader(Csm::csmString filename, GLenum shaderType); + + GLuint _programId; ///< シェーダID +}; diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppTextureManager.cpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppTextureManager.cpp index 99678f4..8d95eac 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppTextureManager.cpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppTextureManager.cpp @@ -100,6 +100,7 @@ void LAppTextureManager::ReleaseTextures() { for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; } @@ -114,6 +115,7 @@ void LAppTextureManager::ReleaseTexture(Csm::csmUint32 textureId) { continue; } + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; @@ -126,6 +128,7 @@ void LAppTextureManager::ReleaseTexture(std::string fileName) { if (_textures[i]->fileName == fileName) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppView.cpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppView.cpp index 6c48cf0..c49af1c 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppView.cpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppView.cpp @@ -15,6 +15,7 @@ #include "LAppDefine.hpp" #include "TouchManager.hpp" #include "LAppSprite.hpp" +#include "LAppSpriteShader.hpp" #include "LAppModel.hpp" #include @@ -24,7 +25,6 @@ using namespace std; using namespace LAppDefine; LAppView::LAppView(): - _programId(0), _back(NULL), _gear(NULL), _power(NULL), @@ -48,6 +48,7 @@ LAppView::LAppView(): LAppView::~LAppView() { _renderBuffer.DestroyOffscreenSurface(); + delete _spriteShader; delete _renderSprite; delete _viewMatrix; @@ -102,6 +103,9 @@ void LAppView::Initialize() ViewLogicalMaxBottom, ViewLogicalMaxTop ); + + // シェーダー作成 + _spriteShader = new LAppSpriteShader(LAppDelegate::GetInstance()->GetExecuteAbsolutePath().c_str()); } void LAppView::Render() @@ -153,7 +157,7 @@ void LAppView::Render() void LAppView::InitializeSprite() { - _programId = LAppDelegate::GetInstance()->CreateShader(); + GLuint programId = _spriteShader->GetShaderId(); int width, height; glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); @@ -168,7 +172,7 @@ void LAppView::InitializeSprite() float y = height * 0.5f; float fWidth = static_cast(backgroundTexture->width * 2.0f); float fHeight = static_cast(height) * 0.95f; - _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, _programId); + _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, programId); imageName = GearImageName; LAppTextureManager::TextureInfo* gearTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); @@ -177,7 +181,7 @@ void LAppView::InitializeSprite() y = static_cast(height - gearTexture->height * 0.5f); fWidth = static_cast(gearTexture->width); fHeight = static_cast(gearTexture->height); - _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, _programId); + _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, programId); imageName = PowerImageName; LAppTextureManager::TextureInfo* powerTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); @@ -186,12 +190,12 @@ void LAppView::InitializeSprite() y = static_cast(powerTexture->height * 0.5f); fWidth = static_cast(powerTexture->width); fHeight = static_cast(powerTexture->height); - _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, _programId); + _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, programId); // 画面全体を覆うサイズ x = width * 0.5f; y = height * 0.5f; - _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, _programId); + _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, programId); } diff --git a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppView.hpp b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppView.hpp index c8cc61a..888ef85 100644 --- a/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppView.hpp +++ b/Samples/OpenGL/Demo/proj.mac.cmake/src/LAppView.hpp @@ -16,6 +16,7 @@ class TouchManager; class LAppSprite; +class LAppSpriteShader; class LAppModel; /** @@ -150,7 +151,6 @@ class LAppView TouchManager* _touchManager; ///< タッチマネージャー Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix - GLuint _programId; ///< シェーダID LAppSprite* _back; ///< 背景画像 LAppSprite* _gear; ///< ギア画像 LAppSprite* _power; ///< 電源画像 @@ -160,4 +160,6 @@ class LAppView Csm::Rendering::CubismOffscreenSurface_OpenGLES2 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + LAppSpriteShader* _spriteShader; ///< シェーダー作成委譲クラス }; diff --git a/Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt b/Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt index 6893835..8c0b94c 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.win.cmake/CMakeLists.txt @@ -17,6 +17,7 @@ set(STB_PATH ${THIRD_PARTY_PATH}/stb) set(GLEW_PATH ${THIRD_PARTY_PATH}/glew) set(GLFW_PATH ${THIRD_PARTY_PATH}/glfw) set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) +set(SAMPLE_SHADER_PATH ${SDK_ROOT_PATH}/Samples/OpenGL/Shaders/Standard) # Set project. project(${APP_NAME}) @@ -54,10 +55,7 @@ else() message(FATAL_ERROR "[${APP_NAME}] Invalid linker flag ${CMAKE_EXE_LINKER_FLAGS}.") endif() # Detect compiler. -if(MSVC_VERSION MATCHES 1800) - # Visual Studio 2013 - set(COMPILER 120) -elseif(MSVC_VERSION MATCHES 1900) +if(MSVC_VERSION MATCHES 1900) # Visual Studio 2015 set(COMPILER 140) elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) @@ -117,6 +115,7 @@ find_package(OpenGL REQUIRED) add_executable(${APP_NAME}) # Add source files. add_subdirectory(src) + # Link libraries to app. target_link_libraries(${APP_NAME} Framework @@ -135,9 +134,8 @@ target_compile_options(${APP_NAME} PRIVATE /MP) add_custom_command( TARGET ${APP_NAME} POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E - copy_directory ${RES_PATH} $/Resources + COMMAND ${CMAKE_COMMAND} -E copy_directory ${RES_PATH} $/Resources + COMMAND ${CMAKE_COMMAND} -E copy_directory ${SAMPLE_SHADER_PATH} $/SampleShaders ) # Set project properties. diff --git a/Samples/OpenGL/Demo/proj.win.cmake/scripts/nmake_msvc2013.bat b/Samples/OpenGL/Demo/proj.win.cmake/scripts/nmake_msvc2013.bat deleted file mode 100644 index 50de20f..0000000 --- a/Samples/OpenGL/Demo/proj.win.cmake/scripts/nmake_msvc2013.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2013 -set MSVC_NUMBER=12 -set VCVARSALL=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat -set GENERATOR=nmake - -call "%SCRIPT_PATH%_msvc_common.bat" -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/OpenGL/Demo/proj.win.cmake/scripts/proj_msvc2013.bat b/Samples/OpenGL/Demo/proj.win.cmake/scripts/proj_msvc2013.bat deleted file mode 100644 index d11674f..0000000 --- a/Samples/OpenGL/Demo/proj.win.cmake/scripts/proj_msvc2013.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off - -setlocal - -set SCRIPT_PATH=%~dp0 -set MSVC_VERSION=2013 -set MSVC_NUMBER=12 -set VCVARSALL=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat -set GENERATOR=proj - -call "%SCRIPT_PATH%_msvc_common.bat" -if %errorlevel% neq 0 pause & exit /b %errorlevel% - -pause & exit /b 0 diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/CMakeLists.txt b/Samples/OpenGL/Demo/proj.win.cmake/src/CMakeLists.txt index cc79f71..7d572b8 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/CMakeLists.txt +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/CMakeLists.txt @@ -38,6 +38,8 @@ else () ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpriteShader.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/CubismUserModelExtend.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/CubismUserModelExtend.cpp index a74b3ac..02d994c 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/CubismUserModelExtend.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/CubismUserModelExtend.cpp @@ -194,24 +194,10 @@ void CubismUserModelExtend::PreloadMotionGroup(const csmChar* group) csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // モーションデータの読み込み - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelJson, group, i)); if (tmpMotion) { - // フェードインの時間を取得 - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - // フェードアウトの時間を取得 - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } - if (_motions[name]) { // インスタンスを破棄 @@ -251,10 +237,9 @@ void CubismUserModelExtend::ReleaseModelSetting() * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 -* @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ -Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority) { // モーション数が取得出来なかった、もしくは0の時 if (!(_modelJson->GetMotionCount(group))) @@ -290,33 +275,16 @@ Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm:: csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); // 一番先頭のモーションを読み込む - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, NULL, NULL, _modelJson, group, no)); if (motion) { - csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } - // 終了時にメモリから削除 autoDelete = true; } DeleteBuffer(buffer, path.GetRawString()); } - else - { - // モーションの再生終了コールバックを登録 - motion->SetFinishedMotionHandler(onFinishedMotionHandler); - } // 優先度を設定してモーションを始める return _motionManager->StartMotionPriority(motion, autoDelete, priority); diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/CubismUserModelExtend.hpp b/Samples/OpenGL/Demo/proj.win.cmake/src/CubismUserModelExtend.hpp index f256943..533313f 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/CubismUserModelExtend.hpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/CubismUserModelExtend.hpp @@ -74,10 +74,9 @@ class CubismUserModelExtend : * @param[in] group モーショングループ名 * @param[in] no グループ内の番号 * @param[in] priority 優先度 - * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority); /** * @brief 解放 diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDefine.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDefine.cpp index 2ca324c..b20f54d 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDefine.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDefine.cpp @@ -37,6 +37,13 @@ namespace LAppDefine { // 終了ボタン const csmChar* PowerImageName = "close.png"; + // シェーダー相対パス + const csmChar* ShaderPath = "SampleShaders/"; + // 頂点シェーダー + const csmChar* VertShaderName = "VertSprite.vert"; + // フラグメントシェーダー + const csmChar* FragShaderName = "FragSprite.frag"; + // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる const csmChar* MotionGroupIdle = "Idle"; // アイドリング diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDefine.hpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDefine.hpp index 4a6a063..f79deab 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDefine.hpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDefine.hpp @@ -35,6 +35,10 @@ namespace LAppDefine { extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル + extern const csmChar* ShaderPath; ///< シェーダーパス + extern const csmChar* VertShaderName; ///< 頂点シェーダー + extern const csmChar* FragShaderName; ///< フラグメントシェーダー + // モデル定義-------------------------------------------- // 外部定義ファイル(json)と合わせる extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDelegate.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDelegate.cpp index 65595ad..f16efbd 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDelegate.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDelegate.cpp @@ -103,12 +103,12 @@ bool LAppDelegate::Initialize() _windowWidth = width; _windowHeight = height; - //AppViewの初期化 - _view->Initialize(); - // Cubism SDK の初期化 InitializeCubism(); + //AppViewの初期化 + _view->Initialize(); + return GL_TRUE; } @@ -209,8 +209,6 @@ void LAppDelegate::InitializeCubism() CubismMatrix44 projection; LAppPal::UpdateTime(); - - _view->InitializeSprite(); } void LAppDelegate::OnMouseCallBack(GLFWwindow* window, int button, int action, int modify) @@ -255,76 +253,3 @@ void LAppDelegate::OnMouseCallBack(GLFWwindow* window, double x, double y) _view->OnTouchesMoved(_mouseX, _mouseY); } - -GLuint LAppDelegate::CreateShader() -{ - //バーテックスシェーダのコンパイル - GLuint vertexShaderId = glCreateShader(GL_VERTEX_SHADER); - const char* vertexShader = - "#version 120\n" - "attribute vec3 position;" - "attribute vec2 uv;" - "varying vec2 vuv;" - "void main(void){" - " gl_Position = vec4(position, 1.0);" - " vuv = uv;" - "}"; - glShaderSource(vertexShaderId, 1, &vertexShader, NULL); - glCompileShader(vertexShaderId); - if(!CheckShader(vertexShaderId)) - { - return 0; - } - - //フラグメントシェーダのコンパイル - GLuint fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER); - const char* fragmentShader = - "#version 120\n" - "varying vec2 vuv;" - "uniform sampler2D texture;" - "uniform vec4 baseColor;" - "void main(void){" - " gl_FragColor = texture2D(texture, vuv) * baseColor;" - "}"; - glShaderSource(fragmentShaderId, 1, &fragmentShader, NULL); - glCompileShader(fragmentShaderId); - if (!CheckShader(fragmentShaderId)) - { - return 0; - } - - //プログラムオブジェクトの作成 - GLuint programId = glCreateProgram(); - glAttachShader(programId, vertexShaderId); - glAttachShader(programId, fragmentShaderId); - - // リンク - glLinkProgram(programId); - - glUseProgram(programId); - - return programId; -} - -bool LAppDelegate::CheckShader(GLuint shaderId) -{ - GLint status; - GLint logLength; - glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &logLength); - if (logLength > 0) - { - GLchar* log = reinterpret_cast(CSM_MALLOC(logLength)); - glGetShaderInfoLog(shaderId, logLength, &logLength, log); - CubismLogError("Shader compile log: %s", log); - CSM_FREE(log); - } - - glGetShaderiv(shaderId, GL_COMPILE_STATUS, &status); - if (status == GL_FALSE) - { - glDeleteShader(shaderId); - return false; - } - - return true; -} diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDelegate.hpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDelegate.hpp index ad74ab8..7738c59 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDelegate.hpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppDelegate.hpp @@ -69,11 +69,6 @@ class LAppDelegate */ void OnMouseCallBack(GLFWwindow* window, double x, double y); - /** - * @brief シェーダーを登録する。 - */ - GLuint CreateShader(); - /** * @brief Window情報を取得する。 */ @@ -112,11 +107,6 @@ class LAppDelegate */ void InitializeCubism(); - /** - * @brief CreateShader内部関数 エラーチェック - */ - bool CheckShader(GLuint shaderId); - LAppAllocator _cubismAllocator; ///< Cubism SDK Allocator Csm::CubismFramework::Option _cubismOption; ///< Cubism SDK Option GLFWwindow* _window; ///< OpenGL ウィンドウ diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppLive2DManager.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppLive2DManager.cpp index f03ce03..a85a22c 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppLive2DManager.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppLive2DManager.cpp @@ -6,6 +6,7 @@ */ #include "LAppLive2DManager.hpp" +#include #include #include #include @@ -25,6 +26,11 @@ using namespace std; namespace { LAppLive2DManager* s_instance = NULL; + void BeganMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion Began: %x", self); + } + void FinishedMotion(ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -87,30 +93,43 @@ void LAppLive2DManager::SetUpModel() { // ResourcesPathの中にあるフォルダ名を全てクロールし、モデルが存在するフォルダを定義する。 // フォルダはあるが同名の.model3.jsonが見つからなかった場合はリストに含めない。 + // 一部文字が受け取れないためワイド文字で受け取ってUTF8に変換し格納する。 + csmString crawlPath(ResourcesPath); crawlPath += "*.*"; - struct _finddata_t fdata; - intptr_t fh = _findfirst(crawlPath.GetRawString(), &fdata); - if (fh == -1) return; + wchar_t wideStr[MAX_PATH]; + csmChar name[MAX_PATH]; + LAppPal::ConvertMultiByteToWide(crawlPath.GetRawString(), wideStr, MAX_PATH); + + struct _wfinddata_t fdata; + intptr_t fh = _wfindfirst(wideStr, &fdata); + if (fh == -1) + { + return; + } _modelDir.Clear(); - while (_findnext(fh, &fdata) == 0) + while (_wfindnext(fh, &fdata) == 0) { - if ((fdata.attrib & _A_SUBDIR) && strcmp(fdata.name, "..") != 0) + if ((fdata.attrib & _A_SUBDIR) && wcscmp(fdata.name, L"..") != 0) { + LAppPal::ConvertWideToMultiByte(fdata.name, name, MAX_PATH); + // フォルダと同名の.model3.jsonがあるか探索する csmString model3jsonPath(ResourcesPath); - model3jsonPath += fdata.name; + model3jsonPath += name; model3jsonPath.Append(1, '/'); - model3jsonPath += fdata.name; + model3jsonPath += name; model3jsonPath += ".model3.json"; - struct _finddata_t fdata2; - if (_findfirst(model3jsonPath.GetRawString(), &fdata2) != -1) + LAppPal::ConvertMultiByteToWide(model3jsonPath.GetRawString(), wideStr, MAX_PATH); + + struct _wfinddata_t fdata2; + if (_wfindfirst(wideStr, &fdata2) != -1) { - _modelDir.PushBack(csmString(fdata.name)); + _modelDir.PushBack(csmString(name)); } } } @@ -170,7 +189,7 @@ void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) { LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); } - _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -276,7 +295,7 @@ void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); // 別レンダリング先を選択した際の背景クリア色 - float clearColor[3] = { 1.0f, 1.0f, 1.0f }; + float clearColor[3] = { 0.0f, 0.0f, 0.0f }; LAppDelegate::GetInstance()->GetView()->SetRenderTargetClearColor(clearColor[0], clearColor[1], clearColor[2]); } } diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppModel.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppModel.cpp index 68dafd0..d62b119 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppModel.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppModel.cpp @@ -280,21 +280,10 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -447,7 +436,7 @@ void LAppModel::Update() } -CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -477,21 +466,10 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); if (motion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -500,6 +478,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -519,7 +498,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt return _motionManager->StartMotionPriority(motion, autoDelete, priority); } -CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -528,7 +507,7 @@ CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -584,7 +563,7 @@ void LAppModel::SetExpression(const csmChar* expressionID) if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppModel.hpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppModel.hpp index 9c8a70b..555797d 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppModel.hpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppModel.hpp @@ -66,9 +66,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -76,9 +77,10 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ - Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppPal.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppPal.cpp index 8e0f7cc..263309c 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppPal.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppPal.cpp @@ -6,6 +6,7 @@ */ #include "LAppPal.hpp" +#include #include #include #include @@ -27,12 +28,12 @@ double LAppPal::s_deltaTime = 0.0; csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { - //filePath;// - const char* path = filePath.c_str(); + wchar_t wideStr[MAX_PATH]; + MultiByteToWideChar(CP_UTF8, 0U, filePath.c_str(), -1, wideStr, MAX_PATH); int size = 0; - struct stat statBuf; - if (stat(path, &statBuf) == 0) + struct _stat statBuf; + if (_wstat(wideStr, &statBuf) == 0) { size = statBuf.st_size; @@ -40,7 +41,7 @@ csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { if (DebugLogEnable) { - PrintLogLn("Stat succeeded but file size is zero. path:%s", path); + PrintLogLn("Stat succeeded but file size is zero. path:%s", filePath.c_str()); } return NULL; } @@ -49,27 +50,33 @@ csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { if (DebugLogEnable) { - PrintLogLn("Stat failed. errno:%d path:%s", errno, path); + PrintLogLn("Stat failed. errno:%d path:%s", errno, filePath.c_str()); } return NULL; } - std::fstream file; - file.open(path, std::ios::in | std::ios::binary); + std::wfstream file; + file.open(wideStr, std::ios::in | std::ios::binary); if (!file.is_open()) { if (DebugLogEnable) { - PrintLogLn("File open failed. path:%s", path); + PrintLogLn("File open failed. path:%s", filePath.c_str()); } return NULL; } - char* buf = new char[size]; - file.read(buf, size); - file.close(); + // ファイル名はワイド文字で探しているがファイルの中身はutf-8なので、1バイトずつ取得する。 *outSize = size; + csmChar* buf = new char[*outSize]; + std::wfilebuf* fileBuf = file.rdbuf(); + for (csmUint32 i = 0; i < *outSize; i++) + { + buf[i] = fileBuf->sbumpc(); + } + file.close(); + return reinterpret_cast(buf); } @@ -129,3 +136,13 @@ void LAppPal::PrintMessageLn(const csmChar* message) { PrintLogLn("%s", message); } + +bool LAppPal::ConvertMultiByteToWide(const csmChar* multiByte, wchar_t* wide, int wideSize) +{ + return MultiByteToWideChar(CP_UTF8, 0U, multiByte, -1, wide, wideSize) != 0; +} + +bool LAppPal::ConvertWideToMultiByte(const wchar_t* wide, csmChar* multiByte, int multiByteSize) +{ + return WideCharToMultiByte(CP_UTF8, 0U, wide, -1, multiByte, multiByteSize, NULL, NULL) != 0; +} diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppPal.hpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppPal.hpp index ac36579..f23c871 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppPal.hpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppPal.hpp @@ -92,6 +92,24 @@ class LAppPal */ static void PrintMessageLn(const Csm::csmChar* message); + /** + * @brief マルチバイト文字からワイド文字に変換する + * + * @param[in] multiByte 変換元 + * @param[in] wide 格納先 + * @param[in] wideSize 格納先の大きさ + */ + static bool ConvertMultiByteToWide(const Csm::csmChar* multiByte, wchar_t* wide, int wideSize); + + /** + * @brief ワイド文字からマルチバイト文字に変換する + * + * @param[in] wide 変換元 + * @param[in] multiByte 格納先 + * @param[in] multiByteSize 格納先の大きさ + */ + static bool ConvertWideToMultiByte(const wchar_t* wide, Csm::csmChar* multiByte, int multiByteSize); + private: static double s_currentFrame; static double s_lastFrame; diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppSpriteShader.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppSpriteShader.cpp new file mode 100644 index 0000000..5a22571 --- /dev/null +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppSpriteShader.cpp @@ -0,0 +1,108 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpriteShader.hpp" +#include +#include "LAppDefine.hpp" +#include "LAppPal.hpp" + +using namespace LAppDefine; + +LAppSpriteShader::LAppSpriteShader() +{ + _programId = CreateShader(); +} + +LAppSpriteShader::~LAppSpriteShader() +{ + glDeleteShader(_programId); +} + +GLuint LAppSpriteShader::GetShaderId() const +{ + return _programId; +} + +GLuint LAppSpriteShader::CreateShader() +{ + // シェーダーのパスの作成 + Csm::csmString vertShaderFile(ShaderPath); + vertShaderFile += VertShaderName; + Csm::csmString fragShaderFile(ShaderPath); + fragShaderFile += FragShaderName; + + // シェーダーのコンパイル + GLuint vertexShaderId = CompileShader(vertShaderFile, GL_VERTEX_SHADER); + GLuint fragmentShaderId = CompileShader(fragShaderFile, GL_FRAGMENT_SHADER); + + if (!vertexShaderId || !fragmentShaderId) + { + return 0; + } + + //プログラムオブジェクトの作成 + GLuint programId = glCreateProgram(); + glAttachShader(programId, vertexShaderId); + glAttachShader(programId, fragmentShaderId); + + // リンク + glLinkProgram(programId); + + glUseProgram(programId); + + // 不要になったシェーダーオブジェクトの削除 + glDeleteShader(vertexShaderId); + glDeleteShader(fragmentShaderId); + + return programId; +} + +bool LAppSpriteShader::CheckShader(GLuint shaderId) +{ + GLint status; + GLint logLength; + glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) + { + GLchar* log = reinterpret_cast(CSM_MALLOC(logLength)); + glGetShaderInfoLog(shaderId, logLength, &logLength, log); + CubismLogError("Shader compile log: %s", log); + CSM_FREE(log); + } + + glGetShaderiv(shaderId, GL_COMPILE_STATUS, &status); + if (status == GL_FALSE) + { + glDeleteShader(shaderId); + return false; + } + + return true; +} + +GLuint LAppSpriteShader::CompileShader(Csm::csmString filename, GLenum shaderType) +{ + // ファイル読み込み + Csm::csmSizeInt bufferSize = 0; + const char* shaderString = reinterpret_cast(LAppPal::LoadFileAsBytes(filename.GetRawString(), &bufferSize)); + const GLint glSize = (GLint)bufferSize; + + // コンパイル + GLuint shaderId = glCreateShader(shaderType); + glShaderSource(shaderId, 1, &shaderString, &glSize); + glCompileShader(shaderId); + + // 読み込んだシェーダー文字列の開放 + LAppPal::ReleaseBytes(reinterpret_cast(const_cast(shaderString))); + + if (!CheckShader(shaderId)) + { + return 0; + } + + return shaderId; +} diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppSpriteShader.hpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppSpriteShader.hpp new file mode 100644 index 0000000..cff144b --- /dev/null +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppSpriteShader.hpp @@ -0,0 +1,57 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include "CubismFramework.hpp" + +/** +* @brief スプライト用のシェーダー設定を保持するクラス +*/ +class LAppSpriteShader +{ +public: + /** + * @brief コンストラクタ + */ + LAppSpriteShader(); + + /** + * @brief デストラクタ + */ + ~LAppSpriteShader(); + + /** + * @brief シェーダーIDを取得する + */ + GLuint GetShaderId() const; + +private: + /** + * @brief シェーダーオブジェクトを作成する。 + */ + GLuint CreateShader(); + + /** + * @brief CreateShader内部関数 エラーチェック + */ + bool CheckShader(GLuint shaderId); + + /** + * @brief シェーダーをコンパイルする。 + * コンパイルに失敗した場合には 0 が戻る。 + * + * @param[in] filename シェーダーファイル名 + * @param[in] shaderType 作成するシェーダーの種類 + */ + GLuint CompileShader(Csm::csmString filename, GLenum shaderType); + + GLuint _programId; ///< シェーダID +}; diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppTextureManager.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppTextureManager.cpp index b3af708..b7eee2e 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppTextureManager.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppTextureManager.cpp @@ -93,6 +93,7 @@ void LAppTextureManager::ReleaseTextures() { for (Csm::csmUint32 i = 0; i < _textures.GetSize(); i++) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; } @@ -107,6 +108,7 @@ void LAppTextureManager::ReleaseTexture(Csm::csmUint32 textureId) { continue; } + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; @@ -119,6 +121,7 @@ void LAppTextureManager::ReleaseTexture(std::string fileName) { if (_textures[i]->fileName == fileName) { + glDeleteTextures(1, &(_textures[i]->id)); delete _textures[i]; _textures.Remove(i); break; diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppView.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppView.cpp index 12cc753..7bac540 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppView.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppView.cpp @@ -15,13 +15,13 @@ #include "LAppDefine.hpp" #include "TouchManager.hpp" #include "LAppSprite.hpp" +#include "LAppSpriteShader.hpp" #include "LAppModel.hpp" using namespace std; using namespace LAppDefine; LAppView::LAppView(): - _programId(0), _back(NULL), _gear(NULL), _power(NULL), @@ -46,6 +46,7 @@ LAppView::LAppView(): LAppView::~LAppView() { _renderBuffer.DestroyOffscreenSurface(); + delete _spriteShader; delete _renderSprite; delete _viewMatrix; delete _deviceToScreen; @@ -99,6 +100,11 @@ void LAppView::Initialize() ViewLogicalMaxBottom, ViewLogicalMaxTop ); + + // シェーダー作成 + _spriteShader = new LAppSpriteShader(); + + InitializeSprite(); } void LAppView::Render() @@ -149,7 +155,7 @@ void LAppView::Render() void LAppView::InitializeSprite() { - _programId = LAppDelegate::GetInstance()->CreateShader(); + GLuint programId = _spriteShader->GetShaderId(); int width, height; glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); @@ -164,7 +170,7 @@ void LAppView::InitializeSprite() float y = height * 0.5f; float fWidth = static_cast(backgroundTexture->width * 2.0f); float fHeight = static_cast(height * 0.95f); - _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, _programId); + _back = new LAppSprite(x, y, fWidth, fHeight, backgroundTexture->id, programId); imageName = GearImageName; LAppTextureManager::TextureInfo* gearTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); @@ -173,7 +179,7 @@ void LAppView::InitializeSprite() y = static_cast(height - gearTexture->height * 0.5f); fWidth = static_cast(gearTexture->width); fHeight = static_cast(gearTexture->height); - _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, _programId); + _gear = new LAppSprite(x, y, fWidth, fHeight, gearTexture->id, programId); imageName = PowerImageName; LAppTextureManager::TextureInfo* powerTexture = textureManager->CreateTextureFromPngFile(resourcesPath + imageName); @@ -182,12 +188,12 @@ void LAppView::InitializeSprite() y = static_cast(powerTexture->height * 0.5f); fWidth = static_cast(powerTexture->width); fHeight = static_cast(powerTexture->height); - _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, _programId); + _power = new LAppSprite(x, y, fWidth, fHeight, powerTexture->id, programId); // 画面全体を覆うサイズ x = width * 0.5f; y = height * 0.5f; - _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, _programId); + _renderSprite = new LAppSprite(x, y, static_cast(width), static_cast(height), 0, programId); } void LAppView::OnTouchesBegan(float px, float py) const diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppView.hpp b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppView.hpp index 3d8751d..59077bb 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/LAppView.hpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/LAppView.hpp @@ -17,6 +17,7 @@ class TouchManager; class LAppSprite; class LAppModel; +class LAppSpriteShader; /** * @brief 描画クラス @@ -150,7 +151,6 @@ class LAppView TouchManager* _touchManager; ///< タッチマネージャー Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix - GLuint _programId; ///< シェーダID LAppSprite* _back; ///< 背景画像 LAppSprite* _gear; ///< ギア画像 LAppSprite* _power; ///< 電源画像 @@ -160,4 +160,6 @@ class LAppView Csm::Rendering::CubismOffscreenSurface_OpenGLES2 _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング SelectTarget _renderTarget; ///< レンダリング先の選択肢 float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + + LAppSpriteShader* _spriteShader; ///< シェーダー作成委譲クラス }; diff --git a/Samples/OpenGL/Demo/proj.win.cmake/src/main.cpp b/Samples/OpenGL/Demo/proj.win.cmake/src/main.cpp index 07b6e81..e0729bd 100644 --- a/Samples/OpenGL/Demo/proj.win.cmake/src/main.cpp +++ b/Samples/OpenGL/Demo/proj.win.cmake/src/main.cpp @@ -6,17 +6,25 @@ */ #include "LAppDelegate.hpp" +#include int main() { + // Setting the console character encoding to UTF-8 + UINT preConsoleOutputCP = GetConsoleOutputCP(); + SetConsoleOutputCP(65001); + // create the application instance if (LAppDelegate::GetInstance()->Initialize() == GL_FALSE) { + SetConsoleOutputCP(preConsoleOutputCP); return 1; } LAppDelegate::GetInstance()->Run(); + SetConsoleOutputCP(preConsoleOutputCP); + return 0; } diff --git a/Samples/OpenGL/README.ja.md b/Samples/OpenGL/README.ja.md index ff97206..07d68dd 100644 --- a/Samples/OpenGL/README.ja.md +++ b/Samples/OpenGL/README.ja.md @@ -13,8 +13,8 @@ OpenGL で実装したアプリケーションのサンプル実装です。 | --- | --- | | [GLEW] | 2.2.0 | | [GLFW] | 3.4 | -| [ios-cmake] | 4.4.1 | -| [stb_image.h] | 2.29 | +| [ios-cmake] | 4.5.0 | +| [stb_image.h] | 2.30 | その他の開発環境・動作確認環境はトップディレクトリにある [README.md](/README.ja.md) を参照してください。 @@ -27,6 +27,8 @@ OpenGL で実装したアプリケーションのサンプル実装です。 │ ├─ proj.android.cmake │ │ ├─Full # Full Demo Android Studio project │ │ └─Minimum # Minimum Demo Android Studio project +│ ├─ proj.harmonyos.cmake +│ │ └─Full # Full Demo DevEco Studio project │ ├─ proj.ios.cmake # CMake project for iOS │ ├─ proj.linux.cmake # CMake project for Linux │ ├─ proj.mac.cmake # CMake project for macOS @@ -64,6 +66,10 @@ NOTE: 事前に下記の SDK のダウンロードが必要です * NDK * CMake +### proj.harmonyos.cmake + +このディレクトリにはフルバージョンの DevEco Studio プロジェクトが含まれます。 + ### proj.ios.cmake iOS 用の CMake プロジェクトです。 @@ -146,14 +152,12 @@ Windows 用の CMake プロジェクトです。 | プラットフォーム | スクリプト名 | | --- | --- | | Linux *1 / macOS | `setup_glew_glfw` | -| Windows *2 | `setup_glew_glfw.bat` | +| Windows | `setup_glew_glfw.bat` | スクリプト内の `GLEW_VERSION` 及び `GLFW_VERSION` を変更することで、ダウンロードするバージョンを変更できます。 *1 Linuxでは GLFW が依存するライブラリのインストールが必要になる場合がございますので、公式ページを参考に依存関係にあるライブラリをすべてインストールしてください。 [GLFW.org Dependencies for X11 on Unix-like systems](https://www.glfw.org/docs/latest/compile_guide.html#compile_deps_x11) -*2 `Visual Studio 2013` をご利用の際、追加対応が必要となる場合がございます。 -詳しくは [NOTICE.md](/NOTICE.ja.md) をご確認ください。 ## ios-cmake のセットアップ diff --git a/Samples/OpenGL/README.md b/Samples/OpenGL/README.md index f820e95..c879b5b 100644 --- a/Samples/OpenGL/README.md +++ b/Samples/OpenGL/README.md @@ -13,8 +13,8 @@ This is a sample implementation of an application implemented with OpenGL. | --- | --- | | [GLEW] | 2.2.0 | | [GLFW] | 3.4 | -| [ios-cmake] | 4.4.1 | -| [stb_image.h] | 2.29 | +| [ios-cmake] | 4.5.0 | +| [stb_image.h] | 2.30 | For other development environments and operation environments, see [README.md](/README.md) in the top directory. @@ -27,6 +27,8 @@ For other development environments and operation environments, see [README.md](/ │ ├─ proj.android.cmake │ │ ├─Full # Full Demo Android Studio project │ │ └─Minimum # Minimum Demo Android Studio project +│ ├─ proj.harmonyos.cmake +│ │ └─Full # Full Demo DevEco Studio project │ ├─ proj.ios.cmake # CMake project for iOS │ ├─ proj.linux.cmake # CMake project for Linux │ ├─ proj.mac.cmake # CMake project for macOS @@ -64,6 +66,10 @@ NOTE: You need to download the following SDKs in advance. * NDK * CMake +### proj.harmonyos.cmake + +This directory contains one DevEco Studio projects: the full version. + ### proj.ios.cmake CMake project for iOS. @@ -146,14 +152,12 @@ Download GLEW and GLFW by running the script in the `script` directory. | Platform | Script name | | --- | --- | | Linux *1 / macOS | `setup_glew_glfw` | -| Windows *2 | `setup_glew_glfw.bat` | +| Windows | `setup_glew_glfw.bat` | You can change the version to download by changing `GLEW_VERSION` and `GLFW_VERSION` in the script. *1 On Linux, it may be necessary to install libraries on which GLFW depends. Please refer to the official page to install all libraries on which GLFW depends. [GLFW.org Dependencies for X11 on Unix-like systems](https://www.glfw.org/docs/latest/compile_guide.html#compile_deps_x11) -*2 Additional support may be required when using `Visual Studio 2013`. -See [NOTICE.md](/NOTICE.md) for details. ## ios-cmake setup diff --git a/Samples/OpenGL/Shaders/Standard/FragSprite.frag b/Samples/OpenGL/Shaders/Standard/FragSprite.frag new file mode 100644 index 0000000..fdf6f44 --- /dev/null +++ b/Samples/OpenGL/Shaders/Standard/FragSprite.frag @@ -0,0 +1,17 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#version 120 + +varying vec2 vuv; +uniform sampler2D texture; +uniform vec4 baseColor; + +void main(void) +{ + gl_FragColor = texture2D(texture, vuv) * baseColor; +} diff --git a/Samples/OpenGL/Shaders/Standard/VertSprite.vert b/Samples/OpenGL/Shaders/Standard/VertSprite.vert new file mode 100644 index 0000000..9793598 --- /dev/null +++ b/Samples/OpenGL/Shaders/Standard/VertSprite.vert @@ -0,0 +1,18 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#version 120 + +attribute vec3 position; +attribute vec2 uv; +varying vec2 vuv; + +void main(void) +{ + gl_Position = vec4(position, 1.0); + vuv = uv; +} diff --git a/Samples/OpenGL/Shaders/StandardES/FragSprite.frag b/Samples/OpenGL/Shaders/StandardES/FragSprite.frag new file mode 100644 index 0000000..fb3cb0e --- /dev/null +++ b/Samples/OpenGL/Shaders/StandardES/FragSprite.frag @@ -0,0 +1,19 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#version 100 + +precision mediump float; + +varying vec2 vuv; +uniform sampler2D texture; +uniform vec4 baseColor; + +void main(void) +{ + gl_FragColor = texture2D(texture, vuv) * baseColor; +} diff --git a/Samples/OpenGL/Shaders/StandardES/VertSprite.vert b/Samples/OpenGL/Shaders/StandardES/VertSprite.vert new file mode 100644 index 0000000..0ae4e4a --- /dev/null +++ b/Samples/OpenGL/Shaders/StandardES/VertSprite.vert @@ -0,0 +1,18 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#version 100 + +attribute vec3 position; +attribute vec2 uv; +varying vec2 vuv; + +void main(void) +{ + gl_Position = vec4(position, 1.0); + vuv = uv; +} diff --git a/Samples/OpenGL/thirdParty/scripts/setup_glew_glfw_vs2013.bat b/Samples/OpenGL/thirdParty/scripts/setup_glew_glfw_vs2013.bat deleted file mode 100644 index 9dc9711..0000000 --- a/Samples/OpenGL/thirdParty/scripts/setup_glew_glfw_vs2013.bat +++ /dev/null @@ -1,45 +0,0 @@ -@echo off - -set GLEW_VERSION=2.1.0 -set GLFW_VERSION=3.4 - -set SCRIPT_PATH=%~dp0 - -cd %SCRIPT_PATH%/.. - -:::::::::::::::: -:: Setup GLEW :: -:::::::::::::::: - -:: Download and extract the archive. -echo - Setup GLEW %GLEW_VERSION% -echo Downloading... -curl -fsSL -o glew.zip ^ - "https://github.com/nigels-com/glew/releases/download/glew-%GLEW_VERSION%/glew-%GLEW_VERSION%.zip" -if %errorlevel% neq 0 pause & exit /b %errorlevel% -echo Extracting... -powershell "$progressPreference = 'silentlyContinue'; expand-archive -force glew.zip ." -if %errorlevel% neq 0 pause & exit /b %errorlevel% -ren glew-%GLEW_VERSION% glew -del glew.zip - -:::::::::::::::: -:: Setup GLFW :: -:::::::::::::::: - -echo. - -:: Download and extract the archive. -echo - Setup GLFW %GLFW_VERSION% -echo Downloading... -curl -fsSL -o glfw.zip ^ - https://github.com/glfw/glfw/releases/download/%GLFW_VERSION%/glfw-%GLFW_VERSION%.zip -if %errorlevel% neq 0 pause & exit /b %errorlevel% -echo Extracting... -powershell "$progressPreference = 'silentlyContinue'; expand-archive -force glfw.zip ." -if %errorlevel% neq 0 pause & exit /b %errorlevel% -ren glfw-%GLFW_VERSION% glfw -del glfw.zip - -echo. -pause diff --git a/Samples/OpenGL/thirdParty/scripts/setup_ios_cmake b/Samples/OpenGL/thirdParty/scripts/setup_ios_cmake index 5031592..8439963 100644 --- a/Samples/OpenGL/thirdParty/scripts/setup_ios_cmake +++ b/Samples/OpenGL/thirdParty/scripts/setup_ios_cmake @@ -2,7 +2,7 @@ set -ue -IOS_CMAKE_VERSION=4.4.1 +IOS_CMAKE_VERSION=4.5.0 SCRIPT_PATH=$(cd $(dirname $0) && pwd) diff --git a/Samples/OpenGL/thirdParty/stb/README.md b/Samples/OpenGL/thirdParty/stb/README.md index f228dac..6a8a487 100644 --- a/Samples/OpenGL/thirdParty/stb/README.md +++ b/Samples/OpenGL/thirdParty/stb/README.md @@ -5,16 +5,18 @@ stb single-file public domain (or MIT licensed) libraries for C/C++ +# This project discusses security-relevant bugs in public in Github Issues and Pull Requests, and it may take significant time for security fixes to be implemented or merged. If this poses an unreasonable risk to your project, do not use stb libraries. + Noteworthy: * image loader: [stb_image.h](stb_image.h) * image writer: [stb_image_write.h](stb_image_write.h) -* image resizer: [stb_image_resize.h](stb_image_resize.h) +* image resizer: [stb_image_resize2.h](stb_image_resize2.h) * font text rasterizer: [stb_truetype.h](stb_truetype.h) * typesafe containers: [stb_ds.h](stb_ds.h) -Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen, stb_image_resize -by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts. +Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen, original stb_image_resize +by Jorge L. "VinoBS" Rodriguez, and stb_image_resize2 and stb_sprintf by Jeff Roberts. @@ -22,10 +24,10 @@ library | lastest version | category | LoC | description --------------------- | ---- | -------- | --- | -------------------------------- **[stb_vorbis.c](stb_vorbis.c)** | 1.22 | audio | 5584 | decode ogg vorbis files from file/memory to float/16-bit signed output **[stb_hexwave.h](stb_hexwave.h)** | 0.5 | audio | 680 | audio waveform synthesizer -**[stb_image.h](stb_image.h)** | 2.28 | graphics | 7987 | image loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC -**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5077 | parse, decode, and rasterize characters from truetype fonts +**[stb_image.h](stb_image.h)** | 2.30 | graphics | 7988 | image loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC +**[stb_truetype.h](stb_truetype.h)** | 1.26 | graphics | 5079 | parse, decode, and rasterize characters from truetype fonts **[stb_image_write.h](stb_image_write.h)** | 1.16 | graphics | 1724 | image writing to disk: PNG, TGA, BMP -**[stb_image_resize.h](stb_image_resize.h)** | 0.97 | graphics | 2634 | resize images larger/smaller with good quality +**[stb_image_resize2.h](stb_image_resize2.h)** | 2.12 | graphics | 10601 | resize images larger/smaller with good quality **[stb_rect_pack.h](stb_rect_pack.h)** | 1.01 | graphics | 623 | simple 2D rectangle packer with decent quality **[stb_perlin.h](stb_perlin.h)** | 0.5 | graphics | 428 | perlin's revised simplex noise w/ different seeds **[stb_ds.h](stb_ds.h)** | 0.67 | utility | 1895 | typesafe dynamic array and hash tables for C, will compile in C++ @@ -36,14 +38,14 @@ library | lastest version | category | LoC | description **[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D graphics | 305 | quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc **[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.42 | game dev | 4187 | embeddable tilemap editor **[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 | game dev | 1221 | herringbone Wang tile map generator -**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 940 | simplify writing parsers for C-like languages +**[stb_c_lexer.h](stb_c_lexer.h)** | 0.12 | parsing | 941 | simplify writing parsers for C-like languages **[stb_divide.h](stb_divide.h)** | 0.94 | math | 433 | more useful 32-bit modulus e.g. "euclidean divide" **[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049 | incrementally compute reachability on grids **[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty malloc/free leak-checking **[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive #include support, particularly for GLSL Total libraries: 21 -Total lines of C code: 43117 +Total lines of C code: 51088 FAQ diff --git a/Samples/OpenGL/thirdParty/stb/stb_image.h b/Samples/OpenGL/thirdParty/stb/stb_image.h index 5e807a0..9eedabe 100644 --- a/Samples/OpenGL/thirdParty/stb/stb_image.h +++ b/Samples/OpenGL/thirdParty/stb/stb_image.h @@ -1,4 +1,4 @@ -/* stb_image - v2.28 - public domain image loader - http://nothings.org/stb +/* stb_image - v2.30 - public domain image loader - http://nothings.org/stb no warranty implied; use at your own risk Do this: @@ -48,6 +48,8 @@ LICENSE RECENT REVISION HISTORY: + 2.30 (2024-05-31) avoid erroneous gcc warning + 2.29 (2023-05-xx) optimizations 2.28 (2023-01-29) many error fixes, security errors, just tons of stuff 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug fixes 2.26 (2020-07-13) many minor fixes @@ -1072,8 +1074,8 @@ static int stbi__addints_valid(int a, int b) return a <= INT_MAX - b; } -// returns 1 if the product of two signed shorts is valid, 0 on overflow. -static int stbi__mul2shorts_valid(short a, short b) +// returns 1 if the product of two ints fits in a signed short, 0 on overflow. +static int stbi__mul2shorts_valid(int a, int b) { if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid @@ -3384,13 +3386,13 @@ static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) return 1; } -static int stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) +static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) { // some JPEGs have junk at end, skip over it but if we find what looks // like a valid marker, resume there while (!stbi__at_eof(j->s)) { - int x = stbi__get8(j->s); - while (x == 255) { // might be a marker + stbi_uc x = stbi__get8(j->s); + while (x == 0xff) { // might be a marker if (stbi__at_eof(j->s)) return STBI__MARKER_none; x = stbi__get8(j->s); if (x != 0x00 && x != 0xff) { @@ -4176,6 +4178,7 @@ typedef struct { stbi_uc *zbuffer, *zbuffer_end; int num_bits; + int hit_zeof_once; stbi__uint32 code_buffer; char *zout; @@ -4242,9 +4245,20 @@ stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) int b,s; if (a->num_bits < 16) { if (stbi__zeof(a)) { - return -1; /* report error for unexpected end of data. */ + if (!a->hit_zeof_once) { + // This is the first time we hit eof, insert 16 extra padding btis + // to allow us to keep going; if we actually consume any of them + // though, that is invalid data. This is caught later. + a->hit_zeof_once = 1; + a->num_bits += 16; // add 16 implicit zero bits + } else { + // We already inserted our extra 16 padding bits and are again + // out, this stream is actually prematurely terminated. + return -1; + } + } else { + stbi__fill_bits(a); } - stbi__fill_bits(a); } b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; if (b) { @@ -4309,6 +4323,13 @@ static int stbi__parse_huffman_block(stbi__zbuf *a) int len,dist; if (z == 256) { a->zout = zout; + if (a->hit_zeof_once && a->num_bits < 16) { + // The first time we hit zeof, we inserted 16 extra zero bits into our bit + // buffer so the decoder can just do its speculative decoding. But if we + // actually consumed any of those bits (which is the case when num_bits < 16), + // the stream actually read past the end so it is malformed. + return stbi__err("unexpected end","Corrupt PNG"); + } return 1; } if (z >= 286) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data @@ -4320,7 +4341,7 @@ static int stbi__parse_huffman_block(stbi__zbuf *a) dist = stbi__zdist_base[z]; if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); - if (zout + len > a->zout_end) { + if (len > a->zout_end - zout) { if (!stbi__zexpand(a, zout, len)) return 0; zout = a->zout; } @@ -4464,6 +4485,7 @@ static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) if (!stbi__parse_zlib_header(a)) return 0; a->num_bits = 0; a->code_buffer = 0; + a->hit_zeof_once = 0; do { final = stbi__zreceive(a,1); type = stbi__zreceive(a,2); @@ -4619,9 +4641,8 @@ enum { STBI__F_up=2, STBI__F_avg=3, STBI__F_paeth=4, - // synthetic filters used for first scanline to avoid needing a dummy row of 0s - STBI__F_avg_first, - STBI__F_paeth_first + // synthetic filter used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first }; static stbi_uc first_row_filter[5] = @@ -4630,29 +4651,56 @@ static stbi_uc first_row_filter[5] = STBI__F_sub, STBI__F_none, STBI__F_avg_first, - STBI__F_paeth_first + STBI__F_sub // Paeth with b=c=0 turns out to be equivalent to sub }; static int stbi__paeth(int a, int b, int c) { - int p = a + b - c; - int pa = abs(p-a); - int pb = abs(p-b); - int pc = abs(p-c); - if (pa <= pb && pa <= pc) return a; - if (pb <= pc) return b; - return c; + // This formulation looks very different from the reference in the PNG spec, but is + // actually equivalent and has favorable data dependencies and admits straightforward + // generation of branch-free code, which helps performance significantly. + int thresh = c*3 - (a + b); + int lo = a < b ? a : b; + int hi = a < b ? b : a; + int t0 = (hi <= thresh) ? lo : c; + int t1 = (thresh <= lo) ? hi : t0; + return t1; } static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; +// adds an extra all-255 alpha channel +// dest == src is legal +// img_n must be 1 or 3 +static void stbi__create_png_alpha_expand8(stbi_uc *dest, stbi_uc *src, stbi__uint32 x, int img_n) +{ + int i; + // must process data backwards since we allow dest==src + if (img_n == 1) { + for (i=x-1; i >= 0; --i) { + dest[i*2+1] = 255; + dest[i*2+0] = src[i]; + } + } else { + STBI_ASSERT(img_n == 3); + for (i=x-1; i >= 0; --i) { + dest[i*4+3] = 255; + dest[i*4+2] = src[i*3+2]; + dest[i*4+1] = src[i*3+1]; + dest[i*4+0] = src[i*3+0]; + } + } +} + // create the png data from post-deflated data static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) { - int bytes = (depth == 16? 2 : 1); + int bytes = (depth == 16 ? 2 : 1); stbi__context *s = a->s; stbi__uint32 i,j,stride = x*out_n*bytes; stbi__uint32 img_len, img_width_bytes; + stbi_uc *filter_buf; + int all_ok = 1; int k; int img_n = s->img_n; // copy it into a local for later @@ -4664,8 +4712,11 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into if (!a->out) return stbi__err("outofmem", "Out of memory"); + // note: error exits here don't need to clean up a->out individually, + // stbi__do_png always does on error. if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); img_width_bytes = (((img_n * x * depth) + 7) >> 3); + if (!stbi__mad2sizes_valid(img_width_bytes, y, img_width_bytes)) return stbi__err("too large", "Corrupt PNG"); img_len = (img_width_bytes + 1) * y; // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, @@ -4673,189 +4724,137 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r // so just check for raw_len < img_len always. if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); + // Allocate two scan lines worth of filter workspace buffer. + filter_buf = (stbi_uc *) stbi__malloc_mad2(img_width_bytes, 2, 0); + if (!filter_buf) return stbi__err("outofmem", "Out of memory"); + + // Filtering for low-bit-depth images + if (depth < 8) { + filter_bytes = 1; + width = img_width_bytes; + } + for (j=0; j < y; ++j) { - stbi_uc *cur = a->out + stride*j; - stbi_uc *prior; + // cur/prior filter buffers alternate + stbi_uc *cur = filter_buf + (j & 1)*img_width_bytes; + stbi_uc *prior = filter_buf + (~j & 1)*img_width_bytes; + stbi_uc *dest = a->out + stride*j; + int nk = width * filter_bytes; int filter = *raw++; - if (filter > 4) - return stbi__err("invalid filter","Corrupt PNG"); - - if (depth < 8) { - if (img_width_bytes > x) return stbi__err("invalid width","Corrupt PNG"); - cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place - filter_bytes = 1; - width = img_width_bytes; + // check filter type + if (filter > 4) { + all_ok = stbi__err("invalid filter","Corrupt PNG"); + break; } - prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above // if first row, use special filter that doesn't sample previous row if (j == 0) filter = first_row_filter[filter]; - // handle first byte explicitly - for (k=0; k < filter_bytes; ++k) { - switch (filter) { - case STBI__F_none : cur[k] = raw[k]; break; - case STBI__F_sub : cur[k] = raw[k]; break; - case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; - case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; - case STBI__F_avg_first : cur[k] = raw[k]; break; - case STBI__F_paeth_first: cur[k] = raw[k]; break; - } - } - - if (depth == 8) { - if (img_n != out_n) - cur[img_n] = 255; // first pixel - raw += img_n; - cur += out_n; - prior += out_n; - } else if (depth == 16) { - if (img_n != out_n) { - cur[filter_bytes] = 255; // first pixel top byte - cur[filter_bytes+1] = 255; // first pixel bottom byte - } - raw += filter_bytes; - cur += output_bytes; - prior += output_bytes; - } else { - raw += 1; - cur += 1; - prior += 1; + // perform actual filtering + switch (filter) { + case STBI__F_none: + memcpy(cur, raw, nk); + break; + case STBI__F_sub: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); + break; + case STBI__F_up: + for (k = 0; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + break; + case STBI__F_avg: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); + break; + case STBI__F_paeth: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); // prior[k] == stbi__paeth(0,prior[k],0) + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes], prior[k], prior[k-filter_bytes])); + break; + case STBI__F_avg_first: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); + break; } - // this is a little gross, so that we don't switch per-pixel or per-component - if (depth < 8 || img_n == out_n) { - int nk = (width - 1)*filter_bytes; - #define STBI__CASE(f) \ - case f: \ - for (k=0; k < nk; ++k) - switch (filter) { - // "none" filter turns into a memcpy here; make that explicit. - case STBI__F_none: memcpy(cur, raw, nk); break; - STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; - STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; - STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; - STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; - STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; - STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; - } - #undef STBI__CASE - raw += nk; - } else { - STBI_ASSERT(img_n+1 == out_n); - #define STBI__CASE(f) \ - case f: \ - for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ - for (k=0; k < filter_bytes; ++k) - switch (filter) { - STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break; - STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; - STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; - STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; - STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; - STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; - STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; - } - #undef STBI__CASE - - // the loop above sets the high byte of the pixels' alpha, but for - // 16 bit png files we also need the low byte set. we'll do that here. - if (depth == 16) { - cur = a->out + stride*j; // start at the beginning of the row again - for (i=0; i < x; ++i,cur+=output_bytes) { - cur[filter_bytes+1] = 255; - } - } - } - } + raw += nk; - // we make a separate pass to expand bits to pixels; for performance, - // this could run two scanlines behind the above code, so it won't - // intefere with filtering but will still be in the cache. - if (depth < 8) { - for (j=0; j < y; ++j) { - stbi_uc *cur = a->out + stride*j; - stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; - // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit - // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop + // expand decoded bits in cur to dest, also adding an extra alpha channel if desired + if (depth < 8) { stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + stbi_uc *in = cur; + stbi_uc *out = dest; + stbi_uc inb = 0; + stbi__uint32 nsmp = x*img_n; - // note that the final byte might overshoot and write more data than desired. - // we can allocate enough data that this never writes out of memory, but it - // could also overwrite the next scanline. can it overwrite non-empty data - // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. - // so we need to explicitly clamp the final ones - + // expand bits to bytes first if (depth == 4) { - for (k=x*img_n; k >= 2; k-=2, ++in) { - *cur++ = scale * ((*in >> 4) ); - *cur++ = scale * ((*in ) & 0x0f); + for (i=0; i < nsmp; ++i) { + if ((i & 1) == 0) inb = *in++; + *out++ = scale * (inb >> 4); + inb <<= 4; } - if (k > 0) *cur++ = scale * ((*in >> 4) ); } else if (depth == 2) { - for (k=x*img_n; k >= 4; k-=4, ++in) { - *cur++ = scale * ((*in >> 6) ); - *cur++ = scale * ((*in >> 4) & 0x03); - *cur++ = scale * ((*in >> 2) & 0x03); - *cur++ = scale * ((*in ) & 0x03); + for (i=0; i < nsmp; ++i) { + if ((i & 3) == 0) inb = *in++; + *out++ = scale * (inb >> 6); + inb <<= 2; } - if (k > 0) *cur++ = scale * ((*in >> 6) ); - if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); - if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); - } else if (depth == 1) { - for (k=x*img_n; k >= 8; k-=8, ++in) { - *cur++ = scale * ((*in >> 7) ); - *cur++ = scale * ((*in >> 6) & 0x01); - *cur++ = scale * ((*in >> 5) & 0x01); - *cur++ = scale * ((*in >> 4) & 0x01); - *cur++ = scale * ((*in >> 3) & 0x01); - *cur++ = scale * ((*in >> 2) & 0x01); - *cur++ = scale * ((*in >> 1) & 0x01); - *cur++ = scale * ((*in ) & 0x01); + } else { + STBI_ASSERT(depth == 1); + for (i=0; i < nsmp; ++i) { + if ((i & 7) == 0) inb = *in++; + *out++ = scale * (inb >> 7); + inb <<= 1; } - if (k > 0) *cur++ = scale * ((*in >> 7) ); - if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); - if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); - if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); - if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); - if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); - if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); } - if (img_n != out_n) { - int q; - // insert alpha = 255 - cur = a->out + stride*j; + + // insert alpha=255 values if desired + if (img_n != out_n) + stbi__create_png_alpha_expand8(dest, dest, x, img_n); + } else if (depth == 8) { + if (img_n == out_n) + memcpy(dest, cur, x*img_n); + else + stbi__create_png_alpha_expand8(dest, cur, x, img_n); + } else if (depth == 16) { + // convert the image data from big-endian to platform-native + stbi__uint16 *dest16 = (stbi__uint16*)dest; + stbi__uint32 nsmp = x*img_n; + + if (img_n == out_n) { + for (i = 0; i < nsmp; ++i, ++dest16, cur += 2) + *dest16 = (cur[0] << 8) | cur[1]; + } else { + STBI_ASSERT(img_n+1 == out_n); if (img_n == 1) { - for (q=x-1; q >= 0; --q) { - cur[q*2+1] = 255; - cur[q*2+0] = cur[q]; + for (i = 0; i < x; ++i, dest16 += 2, cur += 2) { + dest16[0] = (cur[0] << 8) | cur[1]; + dest16[1] = 0xffff; } } else { STBI_ASSERT(img_n == 3); - for (q=x-1; q >= 0; --q) { - cur[q*4+3] = 255; - cur[q*4+2] = cur[q*3+2]; - cur[q*4+1] = cur[q*3+1]; - cur[q*4+0] = cur[q*3+0]; + for (i = 0; i < x; ++i, dest16 += 4, cur += 6) { + dest16[0] = (cur[0] << 8) | cur[1]; + dest16[1] = (cur[2] << 8) | cur[3]; + dest16[2] = (cur[4] << 8) | cur[5]; + dest16[3] = 0xffff; } } } } - } else if (depth == 16) { - // force the image data from big-endian to platform-native. - // this is done in a separate pass due to the decoding relying - // on the data being untouched, but could probably be done - // per-line during decode if care is taken. - stbi_uc *cur = a->out; - stbi__uint16 *cur16 = (stbi__uint16*)cur; - - for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { - *cur16 = (cur[0] << 8) | cur[1]; - } } + STBI_FREE(filter_buf); + if (!all_ok) return 0; + return 1; } @@ -5161,9 +5160,11 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. if (scan == STBI__SCAN_header) { ++s->img_n; return 1; } if (z->depth == 16) { - for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is + for (k = 0; k < s->img_n && k < 3; ++k) // extra loop test to suppress false GCC warning + tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is } else { - for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + for (k = 0; k < s->img_n && k < 3; ++k) + tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger } } break; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/CMakeLists.txt b/Samples/Vulkan/Demo/proj.linux.cmake/CMakeLists.txt new file mode 100644 index 0000000..370015c --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/CMakeLists.txt @@ -0,0 +1,119 @@ +cmake_minimum_required(VERSION 3.16) + +# Set app name. +set(APP_NAME Demo) +# Set directory paths. +set(SDK_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../..) +set(CORE_PATH ${SDK_ROOT_PATH}/Core) +set(FRAMEWORK_PATH ${SDK_ROOT_PATH}/Framework) +set(THIRD_PARTY_PATH ${SDK_ROOT_PATH}/Samples/Vulkan/thirdParty) +set(STB_PATH ${THIRD_PARTY_PATH}/stb) +set(GLFW_PATH ${THIRD_PARTY_PATH}/glfw) +set(RES_PATH ${SDK_ROOT_PATH}/Samples/Resources) +set(SAMPLE_SHADER_PATH ${SDK_ROOT_PATH}/Samples/Vulkan/Shaders) +set(FRAMEWORK_SHADER_PATH ${FRAMEWORK_PATH}/src/Rendering/Vulkan/Shaders) + +# Set project. +project(${APP_NAME}) + +# Define output directory. +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin/${APP_NAME}) +# Set configuration (Release and Debug only). +set(CMAKE_CONFIGURATION_TYPES Debug Release + CACHE STRING "Configurations" FORCE +) +# Suppress generation of ZERO_CHECK project. +set(CMAKE_SUPPRESS_REGENERATION ON) + +# Surpress GLFW process. +set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) +set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) +set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) +set(GLFW_INSTALL OFF CACHE BOOL "" FORCE) +set(BUILD_UTILS OFF CACHE BOOL "" FORCE) + +# Specify version of compiler. +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Add Cubism Core. +# Import as static library. +add_library(Live2DCubismCore STATIC IMPORTED) +# Find library path. +set_target_properties(Live2DCubismCore + PROPERTIES + IMPORTED_LOCATION ${CORE_PATH}/lib/linux/x86_64/libLive2DCubismCore.a + INTERFACE_INCLUDE_DIRECTORIES ${CORE_PATH}/include +) + +# Add GLFW. +add_subdirectory(${GLFW_PATH} ${CMAKE_CURRENT_BINARY_DIR}/glfw) + +# Specify Cubism Framework rendering. +set(FRAMEWORK_SOURCE Vulkan) +# Add Cubism Native Framework. +add_subdirectory(${FRAMEWORK_PATH} ${CMAKE_CURRENT_BINARY_DIR}/Framework) +# Link libraries to framework. +target_link_libraries(Framework Live2DCubismCore) + +# Find vulkan libraries. +find_package(Vulkan REQUIRED) + +# Make executable app. +add_executable(${APP_NAME}) +# Add source files. +add_subdirectory(src) +# Add shader files. +add_subdirectory(${SAMPLE_SHADER_PATH} ${CMAKE_CURRENT_BINARY_DIR}/SampleShaders) +add_subdirectory(${FRAMEWORK_SHADER_PATH} ${CMAKE_CURRENT_BINARY_DIR}/FrameworkShaders) +add_dependencies(Framework SampleShaders) +add_dependencies(Framework FrameworkShaders) + +# Link libraries to app. +target_link_libraries(${APP_NAME} + Framework + glfw + ${Vulkan_LIBRARIES} +) +# Specify include directories. +target_include_directories(${APP_NAME} PRIVATE ${STB_PATH}) +target_include_directories(${APP_NAME} PRIVATE ${Vulkan_INCLUDE_DIRS}) + +# Link libraries to framework. +target_include_directories(Framework PUBLIC ${Vulkan_INCLUDE_DIRS}) +# Link libraries to framework. +target_link_libraries(Framework Live2DCubismCore ${Vulkan_LIBRARIES}) + +# Copy resource directory to build directory. +add_custom_command( + TARGET ${APP_NAME} + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E + copy_directory ${RES_PATH} $/Resources + COMMAND + ${CMAKE_COMMAND} -E + copy_directory ${CMAKE_CURRENT_BINARY_DIR}/SampleShaders/compiledShaders $/SampleShaders + COMMAND + ${CMAKE_COMMAND} -E + copy_directory ${CMAKE_CURRENT_BINARY_DIR}/FrameworkShaders/compiledShaders $/FrameworkShaders + +) + +# You can change target that renderer draws by enabling following definition. +# +# * USE_RENDER_TARGET +# Renderer draws to target of LAppView. +# * USE_MODEL_RENDER_TARGET +# Renderer draws to target of each LAppModel. +# * default +# Renderer draws to default main framebuffer. +# +# INFO: USE_RENDER_TARGET has higher priority than USE_MODEL_RENDER_TARGET. +# +# target_compile_definitions(${APP_NAME} +# PRIVATE +# USE_RENDER_TARGET +# USE_MODEL_RENDER_TARGET +# ) diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/scripts/make_gcc b/Samples/Vulkan/Demo/proj.linux.cmake/scripts/make_gcc new file mode 100644 index 0000000..4441a91 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/scripts/make_gcc @@ -0,0 +1,46 @@ +#!/usr/bin/env sh + +set -ue + +SCRIPT_PATH=$(cd $(dirname $0) && pwd) +CMAKE_PATH=$SCRIPT_PATH/.. +BUILD_PATH=$SCRIPT_PATH/../build/make_gcc +MINIMUM_DEMO="OFF" +DATA="" + +if [ "$#" -ne 0 ]; then + DATA="$1" +fi + +while : +do + + if [ -z "$DATA" ]; then + echo "Choose which format you would like to create the demo." + echo "Full version : 1" + echo "Minimum version : 2" + read -p "Your Choice : " DATA + fi + + case "$DATA" in + "1" ) + echo "Making Full Demo" + MINIMUM_DEMO="OFF" + break ;; + "2" ) + echo "Making Minimum Demo" + MINIMUM_DEMO="ON" + break ;; + * ) + echo "You need to enter a valid number." + DATA="" ;; + esac +done + +# Run CMake. +cmake -S "$CMAKE_PATH" \ + -B "$BUILD_PATH" \ + -D CMAKE_BUILD_TYPE=Release \ + -D CSM_MINIMUM_DEMO=$MINIMUM_DEMO \ + -D GLFW_BUILD_WAYLAND=OFF +cd "$BUILD_PATH" && make diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/CMakeLists.txt b/Samples/Vulkan/Demo/proj.linux.cmake/src/CMakeLists.txt new file mode 100644 index 0000000..393f6c0 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/CMakeLists.txt @@ -0,0 +1,57 @@ +if (CSM_MINIMUM_DEMO) + target_sources(${APP_NAME} + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/LAppAllocator.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppAllocator.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDefine.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDefine.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/mainMinimum.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/TouchManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/TouchManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/CubismUserModelExtend.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/CubismUserModelExtend.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/CubismSampleViewMatrix.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/CubismSampleViewMatrix.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/VulkanManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/VulkanManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/MouseActionManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/MouseActionManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/SwapchainManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/SwapchainManager.hpp + ) +else () + target_sources(${APP_NAME} + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/LAppAllocator.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppAllocator.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDefine.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDefine.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDelegate.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppDelegate.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppWavFileHandler.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppWavFileHandler.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppLive2DManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppLive2DManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppModel.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppModel.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/TouchManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/TouchManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/VulkanManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/VulkanManager.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/SwapchainManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/SwapchainManager.hpp + ) +endif () diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismSampleViewMatrix.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismSampleViewMatrix.cpp new file mode 100644 index 0000000..4b51b64 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismSampleViewMatrix.cpp @@ -0,0 +1,69 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include + +#include "CubismSampleViewMatrix.hpp" +#include "LAppDefine.hpp" + +#include + +CubismSampleViewMatrix::CubismSampleViewMatrix(Csm::CubismMatrix44*& deviceToScreen, int windowWidth, int windowHeight) + : CubismViewMatrix() +{ + if (windowWidth == 0 || windowHeight == 0) + { + return; + } + + // 縦サイズを基準とする + float ratio = static_cast(windowWidth) / static_cast(windowHeight); + float left = -ratio; + float right = ratio; + float bottom = LAppDefine::ViewLogicalLeft; + float top = LAppDefine::ViewLogicalRight; + + // デバイスに対応する画面の範囲を設定 + SetScreenRect(left, right, bottom, top); + + if (windowWidth > windowHeight) + { + float screenW = fabsf(right - left); + // 行列の拡大率を相対的に設定 + deviceToScreen->ScaleRelative(screenW / windowWidth, -screenW / windowWidth); + } + else + { + float screenH = fabsf(top - bottom); + // 行列の拡大率を相対的に設定 + deviceToScreen->ScaleRelative(screenH / windowHeight, -screenH / windowHeight); + } + + // 行列の位置を起点に移動を行う + deviceToScreen->TranslateRelative(-windowWidth * 0.5f, -windowHeight * 0.5f); + + // 拡大率を設定 + Scale(LAppDefine::ViewScale, LAppDefine::ViewScale); + + // 最大拡大率を設定 + SetMaxScale(LAppDefine::ViewMaxScale); + + // 最小拡大率を設定 + SetMinScale(LAppDefine::ViewMinScale); + + // デバイスに対応する論理座標上の移動可能範囲を設定 + SetMaxScreenRect( + LAppDefine::ViewLogicalMaxLeft, + LAppDefine::ViewLogicalMaxRight, + LAppDefine::ViewLogicalMaxBottom, + LAppDefine::ViewLogicalMaxTop + ); +} + +CubismSampleViewMatrix::~CubismSampleViewMatrix() +{ +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismSampleViewMatrix.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismSampleViewMatrix.hpp new file mode 100644 index 0000000..c55cd04 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismSampleViewMatrix.hpp @@ -0,0 +1,27 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include + +/** +* @brief CubismViewMatrixを継承したクラス +* +* ビュー行列を Cubism で扱いやすいように機能を加えてラップしたもの。 +* +*/ +class CubismSampleViewMatrix : + public Csm::CubismViewMatrix +{ +public: + CubismSampleViewMatrix(Csm::CubismMatrix44*& deviceToScreen, int windowWidth, int windowHeight); ///< コンストラクタ + + ~CubismSampleViewMatrix(); ///< デストラクタ +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismUserModelExtend.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismUserModelExtend.cpp new file mode 100644 index 0000000..d806253 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismUserModelExtend.cpp @@ -0,0 +1,496 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "LAppPal.hpp" +#include "LAppDefine.hpp" +#include "MouseActionManager.hpp" +#include "VulkanManager.hpp" + +#include "CubismUserModelExtend.hpp" + +using namespace Live2D::Cubism::Framework; +using namespace DefaultParameterId; +using namespace LAppDefine; + +namespace { + /** + * @bref バッファの作成 + * + * ファイルをバイトデータとして読み込む + */ + csmByte* CreateBuffer(const csmChar* path, csmSizeInt* size) + { + return LAppPal::LoadFileAsBytes(path, size); + } + + /** + * @bref バッファの消去 + * + * バイトデータの解放 + */ + void DeleteBuffer(csmByte* buffer, const csmChar* path = "") + { + LAppPal::ReleaseBytes(buffer); + } +} + +CubismUserModelExtend::CubismUserModelExtend(const std::string modelDirectoryName, const std::string _currentModelDirectory) + : CubismUserModel() + , _modelJson(NULL) + , _userTimeSeconds(0.0f) + , _modelDirName(modelDirectoryName) + , _currentModelDirectory(_currentModelDirectory) + , _textureManager(new LAppTextureManager()) +{ + // パラメータIDの取得 + _idParamAngleX = CubismFramework::GetIdManager()->GetId(ParamAngleX); + _idParamAngleY = CubismFramework::GetIdManager()->GetId(ParamAngleY); + _idParamAngleZ = CubismFramework::GetIdManager()->GetId(ParamAngleZ); + _idParamBodyAngleX = CubismFramework::GetIdManager()->GetId(ParamBodyAngleX); + _idParamEyeBallX = CubismFramework::GetIdManager()->GetId(ParamEyeBallX); + _idParamEyeBallY = CubismFramework::GetIdManager()->GetId(ParamEyeBallY); +} + +CubismUserModelExtend::~CubismUserModelExtend() +{ + // モデルの設定データの解放 + ReleaseModelSetting(); + + // テクスチャマネージャーの解放 + delete _textureManager; +} + +void CubismUserModelExtend::LoadAssets(const Csm::csmChar* fileName) +{ + csmSizeInt size; + const csmString path = csmString(_currentModelDirectory.c_str()) + fileName; + + csmByte* buffer = CreateBuffer(path.GetRawString(), &size); + _modelJson = new CubismModelSettingJson(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + + // モデルの生成 + SetupModel(); +} + +void CubismUserModelExtend::SetupModel() +{ + _updating = true; + _initialized = false; + + csmByte* buffer; + csmSizeInt size; + + //Cubism Model + if (strcmp(_modelJson->GetModelFileName(), "")) + { + csmString path = _modelJson->GetModelFileName(); + path = csmString(_currentModelDirectory.c_str()) + path; + + buffer = CreateBuffer(path.GetRawString(), &size); + LoadModel(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + } + + // 表情データの読み込み + if (_modelJson->GetExpressionCount() > 0) + { + const csmInt32 count = _modelJson->GetExpressionCount(); + for (csmInt32 i = 0; i < count; i++) + { + csmString name = _modelJson->GetExpressionName(i); + csmString path = _modelJson->GetExpressionFileName(i); + path = csmString(_currentModelDirectory.c_str()) + path; + + buffer = CreateBuffer(path.GetRawString(), &size); + ACubismMotion* motion = LoadExpression(buffer, size, name.GetRawString()); + + if (motion) + { + if (_expressions[name]) + { + ACubismMotion::Delete(_expressions[name]); + _expressions[name] = nullptr; + } + _expressions[name] = motion; + } + + DeleteBuffer(buffer, path.GetRawString()); + } + } + + //ポーズデータの読み込み + if (strcmp(_modelJson->GetPoseFileName(), "")) + { + csmString path = _modelJson->GetPoseFileName(); + path = csmString(_currentModelDirectory.c_str()) + path; + + buffer = CreateBuffer(path.GetRawString(), &size); + LoadPose(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + } + + // 物理演算データの読み込み + if (strcmp(_modelJson->GetPhysicsFileName(), "")) + { + csmString path = _modelJson->GetPhysicsFileName(); + path = csmString(_currentModelDirectory.c_str()) + path; + + buffer = CreateBuffer(path.GetRawString(), &size); + LoadPhysics(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + } + + // モデルに付属するユーザーデータの読み込み + if (strcmp(_modelJson->GetUserDataFile(), "")) + { + csmString path = _modelJson->GetUserDataFile(); + path = csmString(_currentModelDirectory.c_str()) + path; + buffer = CreateBuffer(path.GetRawString(), &size); + LoadUserData(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + } + + // Layout + csmMap layout; + _modelJson->GetLayoutMap(layout); + // レイアウト情報から位置を設定 + _modelMatrix->SetupFromLayout(layout); + + // パラメータを保存 + _model->SaveParameters(); + + // モーションデータの読み込み + for (csmInt32 i = 0; i < _modelJson->GetMotionGroupCount(); i++) + { + const csmChar* group = _modelJson->GetMotionGroupName(i); + // モーションデータをグループ名から一括でロードする + PreloadMotionGroup(group); + } + + _motionManager->StopAllMotions(); + + // レンダラの作成 + CreateRenderer(); + + // テクスチャのセットアップ + SetupTextures(); + + _updating = false; + _initialized = true; +} + +void CubismUserModelExtend::PreloadMotionGroup(const csmChar* group) +{ + // グループに登録されているモーション数を取得 + const csmInt32 count = _modelJson->GetMotionCount(group); + + for (csmInt32 i = 0; i < count; i++) + { + //ex) idle_0 + // モーションのファイル名とパスの取得 + csmString name = Utils::CubismString::GetFormatedString("%s_%d", group, i); + csmString path = _modelJson->GetMotionFileName(group, i); + path = csmString(_currentModelDirectory.c_str()) + path; + + csmByte* buffer; + csmSizeInt size; + buffer = CreateBuffer(path.GetRawString(), &size); + // モーションデータの読み込み + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + + if (tmpMotion) + { + // フェードインの時間を取得 + csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, i); + if (fadeTime >= 0.0f) + { + tmpMotion->SetFadeInTime(fadeTime); + } + + // フェードアウトの時間を取得 + fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, i); + if (fadeTime >= 0.0f) + { + tmpMotion->SetFadeOutTime(fadeTime); + } + + if (_motions[name]) + { + // インスタンスを破棄 + ACubismMotion::Delete(_motions[name]); + } + _motions[name] = tmpMotion; + } + + DeleteBuffer(buffer, path.GetRawString()); + } +} + +void CubismUserModelExtend::ReleaseModelSetting() +{ + // モーションの解放 + for (Csm::csmMap::const_iterator iter = _motions.Begin(); iter != _motions.End(); ++iter) + { + Csm::ACubismMotion::Delete(iter->Second); + } + + _motions.Clear(); + + // すべての表情データを解放する + for (Csm::csmMap::const_iterator iter = _expressions.Begin(); iter != _expressions.End(); ++iter) + { + Csm::ACubismMotion::Delete(iter->Second); + } + + _expressions.Clear(); + + delete(_modelJson); +} + +/** +* @brief 引数で指定したモーションの再生を開始する。 +* +* @param[in] group モーショングループ名 +* @param[in] no グループ内の番号 +* @param[in] priority 優先度 +* @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 +* @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 +*/ +Csm::CubismMotionQueueEntryHandle CubismUserModelExtend::StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) +{ + // モーション数が取得出来なかった、もしくは0の時 + if (!(_modelJson->GetMotionCount(group))) + { + return Csm::InvalidMotionQueueEntryHandleValue; + } + + if (priority == LAppDefine::PriorityForce) + { + // 予約中のモーションの優先度を設定する + _motionManager->SetReservePriority(priority); + } + else if (!_motionManager->ReserveMotion(priority)) + { + return Csm::InvalidMotionQueueEntryHandleValue; + } + + // 指定された.motion3.jsonのファイル名を取得 + const Csm::csmString fileName = _modelJson->GetMotionFileName(group, no); + + //ex) idle_0 + // モーションのデータを生成 + csmString name = Utils::CubismString::GetFormatedString("%s_%d", group, no); + CubismMotion* motion = static_cast(_motions[name.GetRawString()]); + csmBool autoDelete = false; + + if (!motion) + { + csmString path = fileName; + path = csmString(_currentModelDirectory.c_str()) + path; + + csmByte* buffer; + csmSizeInt size; + buffer = CreateBuffer(path.GetRawString(), &size); + // 一番先頭のモーションを読み込む + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + + if (motion) + { + csmFloat32 fadeTime = _modelJson->GetMotionFadeInTimeValue(group, no); + if (fadeTime >= 0.0f) + { + motion->SetFadeInTime(fadeTime); + } + + fadeTime = _modelJson->GetMotionFadeOutTimeValue(group, no); + if (fadeTime >= 0.0f) + { + motion->SetFadeOutTime(fadeTime); + } + + // 終了時にメモリから削除 + autoDelete = true; + } + + DeleteBuffer(buffer, path.GetRawString()); + } + else + { + // モーションの再生終了コールバックを登録 + motion->SetFinishedMotionHandler(onFinishedMotionHandler); + } + + // 優先度を設定してモーションを始める + return _motionManager->StartMotionPriority(motion, autoDelete, priority); +} + +void CubismUserModelExtend::ModelParamUpdate() +{ + // 前のフレームとの差分を取得 + const Csm::csmFloat32 deltaTimeSeconds = LAppPal::GetDeltaTime(); + _userTimeSeconds += deltaTimeSeconds; + + // ドラッグ情報を更新 + _dragManager->Update(deltaTimeSeconds); + _dragX = _dragManager->GetX(); + _dragY = _dragManager->GetY(); + + // モーションによるパラメータ更新の有無 + Csm::csmBool motionUpdated = false; + + //----------------------------------------------------------------- + // 前回セーブされた状態をロード + _model->LoadParameters(); + + if (_motionManager->IsFinished()) + { + // モーションの再生がない場合、始めに登録されているモーションを再生する + StartMotion(LAppDefine::MotionGroupIdle, 0, LAppDefine::PriorityIdle); + } + else + { + // モーションを更新し、パラメータを反映 + motionUpdated = _motionManager->UpdateMotion(_model, deltaTimeSeconds); + } + + // 状態を保存 + _model->SaveParameters(); + //----------------------------------------------------------------- + + if (_expressionManager) + { + // 表情でパラメータ更新(相対変化) + _expressionManager->UpdateMotion(_model, deltaTimeSeconds); + } + + //ドラッグによる変化 + /** + *ドラッグによる顔の向きの調整 + * -30から30の値を加える + */ + _model->AddParameterValue(_idParamAngleX, _dragX * 30.0f); + _model->AddParameterValue(_idParamAngleY, _dragY * 30.0f); + _model->AddParameterValue(_idParamAngleZ, _dragX * _dragY * -30.0f); + + //ドラッグによる体の向きの調整 + _model->AddParameterValue(_idParamBodyAngleX, _dragX * 10.0f); // -10から10の値を加える + + //ドラッグによる目の向きの調整 + _model->AddParameterValue(_idParamEyeBallX, _dragX); // -1から1の値を加える + _model->AddParameterValue(_idParamEyeBallY, _dragY); + + // 物理演算の設定 + if (_physics) + { + _physics->Evaluate(_model, deltaTimeSeconds); + } + + // ポーズの設定 + if (_pose) + { + _pose->UpdateParameters(_model, deltaTimeSeconds); + } + + // モデルのパラメータ情報を更新 + _model->Update(); +} + +void CubismUserModelExtend::Draw(Csm::CubismMatrix44& matrix) +{ + if (!_model) + { + return; + } + + // 現在の行列に行列を乗算 + matrix.MultiplyByMatrix(_modelMatrix); + + // 行列をモデルビュープロジェクション行列を設定 + GetRenderer()->SetMvpMatrix(&matrix); + + // モデルの描画を命令・実行する + GetRenderer()->DrawModel(); +} + +void CubismUserModelExtend::SetupTextures() +{ + for (csmInt32 modelTextureNumber = 0; modelTextureNumber < _modelJson->GetTextureCount(); modelTextureNumber++) + { + // テクスチャ名が空文字だった場合はロード・バインド処理をスキップ + if (!strcmp(_modelJson->GetTextureFileName(modelTextureNumber), "")) + { + continue; + } + + // OpenGLのテクスチャユニットにテクスチャをロードする + csmString texturePath = _modelJson->GetTextureFileName(modelTextureNumber); + texturePath = csmString(_currentModelDirectory.c_str()) + texturePath; + + LAppTextureManager::TextureInfo* texture = _textureManager->CreateTextureFromPngFile( + texturePath.GetRawString(), VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TILING_OPTIMAL, + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + + if (texture) + { + const csmUint32 textureManageId = texture->Id; + CubismImageVulkan image; + if (_textureManager->GetTexture(textureManageId, image)) + { + GetRenderer()->BindTexture(image); + } + } + } + + // 乗算済みアルファ値の有効化・無効化を設定 + GetRenderer()->IsPremultipliedAlpha(false); +} + +void CubismUserModelExtend::ModelOnUpdate(GLFWwindow* window) +{ + int width, height; + // ウィンドウサイズを取得 + glfwGetWindowSize(window, &width, &height); + + Csm::CubismMatrix44 projection; + // 念のため単位行列に初期化 + projection.LoadIdentity(); + + if (_model->GetCanvasWidth() > 1.0f && width < height) + { + // 横に長いモデルを縦長ウィンドウに表示する際モデルの横サイズでscaleを算出する + GetModelMatrix()->SetWidth(2.0f); + projection.Scale(1.0f, static_cast(width) / static_cast(height)); + } + else + { + projection.Scale(static_cast(height) / static_cast(width), 1.0f); + } + + // 必要があればここで乗算 + if (MouseActionManager::GetInstance()->GetViewMatrix() != NULL) + { + projection.MultiplyByMatrix(MouseActionManager::GetInstance()->GetViewMatrix()); + } + + // モデルのパラメータを更新 + ModelParamUpdate(); + + // モデルの描画を更新 + Draw(projection); ///< 参照渡しなのでprojectionは変質する +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismUserModelExtend.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismUserModelExtend.hpp new file mode 100644 index 0000000..d0b486d --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/CubismUserModelExtend.hpp @@ -0,0 +1,120 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include + +#include +#include +#include + +#include "LAppTextureManager.hpp" + + /** + * @brief CubismUserModelを継承するサンプルクラス + * + * CubismUserModelを継承するサンプルクラス + * このクラスを拡張し、独自の処理を実装する。 + * + */ +class CubismUserModelExtend : + public Csm::CubismUserModel +{ +public: + CubismUserModelExtend(const std::string modelDirectoryName, const std::string _currentModelDirectory); ///< コンストラクタ + ~CubismUserModelExtend(); ///< デストラクタ + + /** + * @brief model3.jsonが置かれたディレクトリとファイルパスからモデルを生成する + * + */ + void LoadAssets(const Csm::csmChar* fileName); + + /** + * @brief モデルの更新 + * + * モデルの状態や描画を更新する + */ + void ModelOnUpdate(GLFWwindow* window); + +private: + /** + * @brief model3.jsonからモデルを生成する + * + * model3.jsonの記述に従ってモデル生成、モーション、物理演算などのコンポーネント生成を行う + * + * @param[in] setting ICubismModelSettingのインスタンス + * + */ + void SetupModel(); + + /** + * @brief 引数で指定したモーションの再生を開始する + * + * @param[in] group モーショングループ名 + * @param[in] no グループ内の番号 + * @param[in] priority 優先度 + * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 + */ + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL); + + /** + * @brief 解放 + * + * モデルの設定データの解放の処理を行う + */ + void ReleaseModelSetting(); + + /** + * @brief モデルを描画する処理。モデルを描画する空間のView-Projection行列を渡す + * + * @param[in] matrix View-Projection行列 + */ + void Draw(Csm::CubismMatrix44& matrix); + + /** + * @brief モデルのパラメータ情報の更新 + * + * モデルのパラメータの情報を更新する + */ + void ModelParamUpdate(); + + /** + * @brief OpenGLのテクスチャユニットにテクスチャをロードする + * + */ + void SetupTextures(); + + /** + * @brief モーションデータをグループ名から一括でロードする。 + * + * モーションデータの名前は内部でModelSettingから取得する。 + * + * @param[in] group モーションデータのグループ名 + */ + void PreloadMotionGroup(const Csm::csmChar * group); + + std::string _modelDirName; ///< モデルセッティングが置かれたディレクトリの名称 + std::string _currentModelDirectory; ///< モデルセッティングが置かれたディレクトリ + + Csm::csmFloat32 _userTimeSeconds; ///< デルタ時間の積算値[秒] + Csm::CubismModelSettingJson* _modelJson; ///< モデルセッティング情報 + Csm::csmVector _eyeBlinkIds; ///< モデルに設定されたまばたき機能用パラメータID + Csm::csmMap _motions; ///< 読み込まれているモーションのリスト + Csm::csmMap _expressions; ///< 読み込まれている表情のリスト + + LAppTextureManager* _textureManager; ///< テクスチャマネージャー + + const Csm::CubismId* _idParamAngleX; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamAngleY; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamAngleZ; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamBodyAngleX; ///< パラメータID: ParamBodyAngleX + const Csm::CubismId* _idParamEyeBallX; ///< パラメータID: ParamEyeBallX + const Csm::CubismId* _idParamEyeBallY; ///< パラメータID: ParamEyeBallXY +}; diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppAllocator.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppAllocator.cpp similarity index 64% rename from Samples/Cocos2d-x/Demo/Classes/LAppAllocator.cpp rename to Samples/Vulkan/Demo/proj.linux.cmake/src/LAppAllocator.cpp index c36f278..9353bef 100644 --- a/Samples/Cocos2d-x/Demo/Classes/LAppAllocator.cpp +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppAllocator.cpp @@ -1,4 +1,4 @@ -/** +/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license @@ -6,30 +6,30 @@ */ #include "LAppAllocator.hpp" -#include using namespace Csm; -void * LAppAllocator::Allocate(const csmSizeType size) +void* LAppAllocator::Allocate(const csmSizeType size) { return malloc(size); } void LAppAllocator::Deallocate(void* memory) { - if (memory) { free(memory); } + free(memory); } -void * LAppAllocator::AllocateAligned(const csmSizeType size, const csmUint32 alignment) +void* LAppAllocator::AllocateAligned(const csmSizeType size, const csmUint32 alignment) { size_t offset, shift, alignedAddress; - void *allocation, **preamble; + void* allocation; + void** preamble; offset = alignment - 1 + sizeof(void*); allocation = Allocate(size + static_cast(offset)); - alignedAddress = (size_t)allocation + sizeof(void*); + alignedAddress = reinterpret_cast(allocation) + sizeof(void*); shift = alignedAddress % alignment; @@ -38,17 +38,17 @@ void * LAppAllocator::AllocateAligned(const csmSizeType size, const csmUint32 al alignedAddress += (alignment - shift); } - preamble = (void**)alignedAddress; + preamble = reinterpret_cast(alignedAddress); preamble[-1] = allocation; - return (void*)alignedAddress; + return reinterpret_cast(alignedAddress); } void LAppAllocator::DeallocateAligned(void* alignedMemory) { void** preamble; - preamble = (void**)alignedMemory; + preamble = static_cast(alignedMemory); Deallocate(preamble[-1]); } diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppAllocator.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppAllocator.hpp new file mode 100644 index 0000000..baada55 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppAllocator.hpp @@ -0,0 +1,52 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include + +/** +* @brief メモリアロケーションを実装するクラス。 +* +* メモリ確保・解放処理のインターフェースの実装。 +* フレームワークから呼び出される。 +* +*/ +class LAppAllocator : public Csm::ICubismAllocator +{ + /** + * @brief メモリ領域を割り当てる。 + * + * @param[in] size 割り当てたいサイズ。 + * @return 指定したメモリ領域 + */ + void* Allocate(const Csm::csmSizeType size); + + /** + * @brief メモリ領域を解放する + * + * @param[in] memory 解放するメモリ。 + */ + void Deallocate(void* memory); + + /** + * @brief + * + * @param[in] size 割り当てたいサイズ。 + * @param[in] alignment 割り当てたいサイズ。 + * @return alignedAddress + */ + void* AllocateAligned(const Csm::csmSizeType size, const Csm::csmUint32 alignment); + + /** + * @brief + * + * @param[in] alignedMemory 解放するメモリ。 + */ + void DeallocateAligned(void* alignedMemory); +}; diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppDefine.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDefine.cpp similarity index 88% rename from Samples/Cocos2d-x/Demo/Classes/LAppDefine.cpp rename to Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDefine.cpp index 07e23eb..20008c4 100644 --- a/Samples/Cocos2d-x/Demo/Classes/LAppDefine.cpp +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDefine.cpp @@ -1,12 +1,12 @@ -/** +/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. */ -#include #include "LAppDefine.hpp" +#include namespace LAppDefine { @@ -20,15 +20,22 @@ namespace LAppDefine { const csmFloat32 ViewLogicalLeft = -1.0f; const csmFloat32 ViewLogicalRight = 1.0f; const csmFloat32 ViewLogicalBottom = -1.0f; - const csmFloat32 ViewLogicalTop = -1.0f; + const csmFloat32 ViewLogicalTop = 1.0f; const csmFloat32 ViewLogicalMaxLeft = -2.0f; const csmFloat32 ViewLogicalMaxRight = 2.0f; const csmFloat32 ViewLogicalMaxBottom = -2.0f; const csmFloat32 ViewLogicalMaxTop = 2.0f; + // 相対パス + const csmChar* ResourcesPath = "Resources/"; + // モデルの後ろにある背景の画像ファイル const csmChar* BackImageName = "back_class_normal.png"; + // 歯車 + const csmChar* GearImageName = "icon_gear.png"; + // 終了ボタン + const csmChar* PowerImageName = "close.png"; // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる @@ -45,13 +52,9 @@ namespace LAppDefine { const csmInt32 PriorityNormal = 2; const csmInt32 PriorityForce = 3; - // MOC3の整合性検証オプション - const csmBool MocConsistencyValidationEnable = true; - // デバッグ用ログの表示オプション const csmBool DebugLogEnable = true; const csmBool DebugTouchLogEnable = false; - const csmBool DebugDrawRectEnable = false; // Frameworkから出力するログのレベル設定 const CubismFramework::Option::LogLevel CubismLoggingLevel = CubismFramework::Option::LogLevel_Verbose; diff --git a/Samples/Cocos2d-x/Demo/Classes/LAppDefine.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDefine.hpp similarity index 67% rename from Samples/Cocos2d-x/Demo/Classes/LAppDefine.hpp rename to Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDefine.hpp index 79b0d79..8641224 100644 --- a/Samples/Cocos2d-x/Demo/Classes/LAppDefine.hpp +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDefine.hpp @@ -1,4 +1,4 @@ -/** +/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license @@ -10,9 +10,9 @@ #include /** - * @brief Sample Appで使用する定数 - * - */ +* @brief Sample Appで使用する定数 +* +*/ namespace LAppDefine { using namespace Csm; @@ -31,29 +31,29 @@ namespace LAppDefine { extern const csmFloat32 ViewLogicalMaxBottom; ///< 論理的なビュー座標系の下端の最大値 extern const csmFloat32 ViewLogicalMaxTop; ///< 論理的なビュー座標系の上端の最大値 - extern const csmChar* BackImageName; ///< 背景画像ファイル + extern const csmChar* ResourcesPath; ///< 素材パス + extern const csmChar* BackImageName; ///< 背景画像ファイル + extern const csmChar* GearImageName; ///< 歯車画像ファイル + extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル // モデル定義-------------------------------------------- - // 外部定義ファイル(json)と合わせる - extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト - extern const csmChar* MotionGroupTapBody; ///< 体をタップした時に再生するモーションのリスト + // 外部定義ファイル(json)と合わせる + extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト + extern const csmChar* MotionGroupTapBody; ///< 体をタップした時に再生するモーションのリスト - // 外部定義ファイル(json)と合わせる - extern const csmChar* HitAreaNameHead; ///< 当たり判定の[Head]タグ - extern const csmChar* HitAreaNameBody; ///< 当たり判定の[Body]タグ + // 外部定義ファイル(json)と合わせる + extern const csmChar* HitAreaNameHead; ///< 当たり判定の[Head]タグ + extern const csmChar* HitAreaNameBody; ///< 当たり判定の[Body]タグ - // モーションの優先度定数 + // モーションの優先度定数 extern const csmInt32 PriorityNone; ///< モーションの優先度定数: 0 extern const csmInt32 PriorityIdle; ///< モーションの優先度定数: 1 extern const csmInt32 PriorityNormal; ///< モーションの優先度定数: 2 extern const csmInt32 PriorityForce; ///< モーションの優先度定数: 3 - extern const csmBool MocConsistencyValidationEnable; ///< MOC3の整合性検証機能の有効・無効 - - // デバッグ用ログの表示 + // デバッグ用ログの表示 extern const csmBool DebugLogEnable; ///< デバッグ用ログ表示の有効・無効 extern const csmBool DebugTouchLogEnable; ///< タッチ処理のデバッグ用ログ表示の有効・無効 - extern const csmBool DebugDrawRectEnable; // Frameworkから出力するログのレベル設定 extern const CubismFramework::Option::LogLevel CubismLoggingLevel; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDelegate.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDelegate.cpp new file mode 100644 index 0000000..50ff246 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDelegate.cpp @@ -0,0 +1,295 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppDelegate.hpp" +#include +#include +#include +#include +#include "LAppView.hpp" +#include "LAppPal.hpp" +#include "LAppDefine.hpp" +#include "LAppLive2DManager.hpp" +#include "LAppTextureManager.hpp" +#include + +using namespace Csm; +using namespace std; +using namespace LAppDefine; + +namespace { + LAppDelegate* s_instance = NULL; +} + +LAppDelegate* LAppDelegate::GetInstance() +{ + if (s_instance == NULL) + { + s_instance = new LAppDelegate(); + } + + return s_instance; +} + +void LAppDelegate::ReleaseInstance() +{ + if (s_instance != NULL) + { + delete s_instance; + } + + s_instance = NULL; +} + +bool LAppDelegate::Initialize() +{ + if (DebugLogEnable) + { + LAppPal::PrintLogLn("START"); + } + + // GLFWの初期化 + if (glfwInit() == GL_FALSE) + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("Can't initilize GLFW"); + } + return GL_FALSE; + } + // Windowの生成_ + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + _window = glfwCreateWindow(RenderTargetWidth, RenderTargetHeight, "SAMPLE", NULL, NULL); + + if (_window == NULL) + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("Can't create GLFW window."); + } + glfwTerminate(); + return GL_FALSE; + } + + glfwSetWindowUserPointer(_window, VulkanManager::GetInstance()); + + // Windowのコンテキストをカレントに設定 + glfwMakeContextCurrent(_window); + glfwSwapInterval(1); + + //コールバック関数の登録 + glfwSetMouseButtonCallback(_window, EventHandler::OnMouseCallBack); + glfwSetCursorPosCallback(_window, EventHandler::OnMouseCallBack); + glfwSetFramebufferSizeCallback(_window, EventHandler::FrameBufferResizeCallback); + + // ウィンドウサイズ記憶 + int width, height; + glfwGetWindowSize(_window, &width, &height); + _windowWidth = width; + _windowHeight = height; + + //setup cubism + _cubismOption.LogFunction = LAppPal::PrintMessage; + _cubismOption.LoggingLevel = LAppDefine::CubismLoggingLevel; + Csm::CubismFramework::StartUp(&_cubismAllocator, &_cubismOption); + + // CubismSDKの初期化 + InitializeCubism(); + + // vulkanデバイスの作成 + VulkanManager::GetInstance()->Initialize(_window); + SwapchainManager* swapchainManager = VulkanManager::GetInstance()->GetSwapchainManager(); + // レンダラにvulkanManagerの変数を渡す + Live2D::Cubism::Framework::Rendering::CubismRenderer_Vulkan::InitializeConstantSettings( + VulkanManager::GetInstance()->GetDevice(), VulkanManager::GetInstance()->GetPhysicalDevice(), + VulkanManager::GetInstance()->GetCommandPool(), VulkanManager::GetInstance()->GetGraphicQueue(), + swapchainManager->GetImageCount(), swapchainManager->GetExtent(), + VulkanManager::GetInstance()->GetSwapchainImageView(), swapchainManager->GetSwapchainImageFormat(), + VulkanManager::GetInstance()->GetDepthFormat() + ); + + //AppViewの初期化 + _view->Initialize(); + + SetExecuteAbsolutePath(); + + //load model + LAppLive2DManager::GetInstance(); + + //load sprite + _view->InitializeSprite(); + + return GL_TRUE; +} + +void LAppDelegate::Release() +{ + delete _textureManager; + delete _view; + + // リソースを解放 + LAppLive2DManager::ReleaseInstance(); + + //Cubism3の解放 + CubismFramework::Dispose(); + + VulkanManager::GetInstance()->Destroy(); + + // Windowの削除 + glfwDestroyWindow(_window); + glfwTerminate(); +} + +bool LAppDelegate::RecreateSwapchain() +{ + int width = 0, height = 0; + if (VulkanManager::GetInstance()->GetIsWindowSizeChanged()) + { + glfwGetFramebufferSize(_window, &width, &height); + while (width == 0 || height == 0) + { + glfwGetFramebufferSize(_window, &width, &height); + glfwWaitEvents(); + } + + VulkanManager::GetInstance()->RecreateSwapchain(); + Live2D::Cubism::Framework::Rendering::CubismRenderer_Vulkan::SetRenderTarget( + VulkanManager::GetInstance()->GetSwapchainImage(), + VulkanManager::GetInstance()->GetSwapchainImageView(), + VulkanManager::GetInstance()->GetSwapchainManager()->GetSwapchainImageFormat(), + VulkanManager::GetInstance()->GetSwapchainManager()->GetExtent() + ); + + // AppViewの初期化 + _view->Initialize(); + // スプライトサイズを再設定 + _view->ResizeSprite(width, height); + // オフスクリーンを再作成する + _view->DestroyOffscreenSurface(); + // サイズを保存しておく + _windowWidth = width; + _windowHeight = height; + VulkanManager::GetInstance()->SetIsWindowSizeChanged(false); + return true; + } + return false; +} + +void LAppDelegate::Run() +{ + //メインループ + while (glfwWindowShouldClose(_window) == GL_FALSE && !_isEnd) + { + // Poll for and process events + glfwPollEvents(); + + // 時間更新 + LAppPal::UpdateTime(); + VulkanManager::GetInstance()->UpdateDrawFrame(); + + if (RecreateSwapchain()) + { + continue; + } + + //描画更新 + _view->Render(); + + VulkanManager::GetInstance()->PostDraw(); + RecreateSwapchain(); + } + + Release(); + + LAppDelegate::ReleaseInstance(); +} + +LAppDelegate::LAppDelegate(): + _cubismOption(), + _window(NULL), + _captured(false), + _mouseX(0.0f), + _mouseY(0.0f), + _isEnd(false), + _windowWidth(0), + _windowHeight(0) +{ + _executeAbsolutePath = ""; + _view = new LAppView(); + _textureManager = new LAppTextureManager(); +} + +LAppDelegate::~LAppDelegate() +{} + +void LAppDelegate::InitializeCubism() +{ + //Initialize cubism + CubismFramework::Initialize(); + + //default proj + CubismMatrix44 projection; + + LAppPal::UpdateTime(); +} + +void LAppDelegate::OnMouseCallBack(GLFWwindow* window, int button, int action, int modify) +{ + if (_view == NULL) + { + return; + } + if (GLFW_MOUSE_BUTTON_LEFT != button) + { + return; + } + + if (GLFW_PRESS == action) + { + _captured = true; + _view->OnTouchesBegan(_mouseX, _mouseY); + } + else if (GLFW_RELEASE == action) + { + if (_captured) + { + _captured = false; + _view->OnTouchesEnded(_mouseX, _mouseY); + } + } +} + +void LAppDelegate::OnMouseCallBack(GLFWwindow* window, double x, double y) +{ + _mouseX = static_cast(x); + _mouseY = static_cast(y); + + if (!_captured) + { + return; + } + if (_view == NULL) + { + return; + } + + _view->OnTouchesMoved(_mouseX, _mouseY); +} + +void LAppDelegate::SetExecuteAbsolutePath() +{ + char path[1024]; + ssize_t len = readlink("/proc/self/exe", path, 1024 - 1); + + if (len != -1) + { + path[len] = '\0'; + } + + this->_executeAbsolutePath = dirname(path); + this->_executeAbsolutePath += "/"; +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDelegate.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDelegate.hpp new file mode 100644 index 0000000..871f107 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppDelegate.hpp @@ -0,0 +1,168 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include "Type/csmVector.hpp" +#include "LAppAllocator.hpp" +#include "VulkanManager.hpp" + +class LAppView; +class LAppTextureManager; + +/** +* @brief アプリケーションクラス。 +* Cubism SDK の管理を行う。 +*/ +class LAppDelegate +{ +public: + /** + * @brief クラスのインスタンス(シングルトン)を返す。
+ * インスタンスが生成されていない場合は内部でインスタンを生成する。 + * + * @return クラスのインスタンス + */ + static LAppDelegate* GetInstance(); + + /** + * @brief クラスのインスタンス(シングルトン)を解放する。 + * + */ + static void ReleaseInstance(); + + /** + * @brief APPに必要なものを初期化する。 + */ + bool Initialize(); + + /** + * @brief 解放する。 + */ + void Release(); + + /** + * @brief スワップチェーンの再作成を行う。 + */ + bool RecreateSwapchain(); + + /** + * @brief 実行処理。 + */ + void Run(); + + /** + * @brief Vulkan用 glfwSetMouseButtonCallback用関数。 + * + * @param[in] window コールバックを呼んだWindow情報 + * @param[in] button ボタン種類 + * @param[in] action 実行結果 + * @param[in] modify + */ + void OnMouseCallBack(GLFWwindow* window, int button, int action, int modify); + + /** + * @brief Vulkan用 glfwSetCursorPosCallback用関数。 + * + * @param[in] window コールバックを呼んだWindow情報 + * @param[in] x x座標 + * @param[in] y x座標 + */ + void OnMouseCallBack(GLFWwindow* window, double x, double y); + + /** + * @brief Window情報を取得する。 + */ + GLFWwindow* GetWindow() { return _window; } + + /** + * @brief View情報を取得する。 + */ + LAppView* GetView() { return _view; } + + /** + * @brief アプリケーションを終了するかどうか。 + */ + bool GetIsEnd() { return _isEnd; } + + /** + * @brief アプリケーションを終了する。 + */ + void AppEnd() { _isEnd = true; } + + /** + * @brief アプリケーションの実行パスを設定する。 + */ + void SetExecuteAbsolutePath(); + + /** + * @brief アプリケーションの実行パスを取得する。 + */ + std::string GetExecuteAbsolutePath() { return _executeAbsolutePath;} + + /** + * @brief テクスチャマネージャーを取得する。 + */ + LAppTextureManager* GetTextureManager() { return _textureManager; } + +private: + /** + * @brief コンストラクタ + */ + LAppDelegate(); + + /** + * @brief デストラクタ + */ + ~LAppDelegate(); + + /** + * @brief Cubism SDKの初期化 + */ + void InitializeCubism(); + + LAppAllocator _cubismAllocator; ///< Cubism SDK Allocator + Csm::CubismFramework::Option _cubismOption; ///< Cubism SDK Option + GLFWwindow* _window; ///< ウィンドウ + LAppView* _view; ///< View情報 + bool _captured; ///< クリックしているか + float _mouseX; ///< マウスX座標 + float _mouseY; ///< マウスY座標 + bool _isEnd; ///< APP終了しているか + LAppTextureManager* _textureManager; ///< テクスチャマネージャー + std::string _executeAbsolutePath; ///< アプリケーションの実行パス + + int _windowWidth; ///< Initialize関数で設定したウィンドウ幅 + int _windowHeight; ///< Initialize関数で設定したウィンドウ高さ +}; + +class EventHandler +{ +public: + /** + * @brief glfwSetMouseButtonCallback用コールバック関数。 + */ + static void OnMouseCallBack(GLFWwindow* window, int button, int action, int modify) + { + LAppDelegate::GetInstance()->OnMouseCallBack(window, button, action, modify); + } + + /** + * @brief glfwSetCursorPosCallback用コールバック関数。 + */ + static void OnMouseCallBack(GLFWwindow* window, double x, double y) + { + LAppDelegate::GetInstance()->OnMouseCallBack(window, x, y); + } + + static void FrameBufferResizeCallback(GLFWwindow* window, int width, int height) + { + VulkanManager* app = reinterpret_cast(glfwGetWindowUserPointer(window)); + app->SetFrameBufferResized(true); + } +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppLive2DManager.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppLive2DManager.cpp new file mode 100644 index 0000000..ec3c1e2 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppLive2DManager.cpp @@ -0,0 +1,319 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppLive2DManager.hpp" +#include +#include +#include +#include +#include +#include +#include +#include "LAppPal.hpp" +#include "LAppDefine.hpp" +#include "LAppDelegate.hpp" +#include "LAppModel.hpp" +#include "LAppView.hpp" + +using namespace Csm; +using namespace LAppDefine; + +namespace { + LAppLive2DManager* s_instance = NULL; + + void BeganMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion Began: %x", self); + } + + void FinishedMotion(ACubismMotion* self) + { + LAppPal::PrintLogLn("Motion Finished: %x", self); + } + + int CompareCsmString(const void* a, const void* b) + { + return strcmp(reinterpret_cast(a)->GetRawString(), + reinterpret_cast(b)->GetRawString()); + } +} + +LAppLive2DManager* LAppLive2DManager::GetInstance() +{ + if (s_instance == NULL) + { + s_instance = new LAppLive2DManager(); + } + + return s_instance; +} + +void LAppLive2DManager::ReleaseInstance() +{ + if (s_instance != NULL) + { + delete s_instance; + } + + s_instance = NULL; +} + +LAppLive2DManager::LAppLive2DManager() + : _viewMatrix(NULL) + , _sceneIndex(0) +{ + _viewMatrix = new CubismMatrix44(); + SetUpModel(); + + ChangeScene(_sceneIndex); +} + +LAppLive2DManager::~LAppLive2DManager() +{ + ReleaseAllModel(); + delete _viewMatrix; +} + +void LAppLive2DManager::ReleaseAllModel() +{ + for (csmUint32 i = 0; i < _models.GetSize(); i++) + { + delete _models[i]; + } + + _models.Clear(); +} + +void LAppLive2DManager::SetUpModel() +{ + // ResourcesPathの中にあるフォルダ名を全てクロールし、モデルが存在するフォルダを定義する。 + // フォルダはあるが同名の.model3.jsonが見つからなかった場合はリストに含めない。 + struct dirent *dirent; + csmString crawlPath(LAppDelegate::GetInstance()->GetExecuteAbsolutePath().c_str()); + crawlPath += ResourcesPath; + + DIR *pDir = opendir(crawlPath.GetRawString()); + if (pDir == NULL) + { + return; + } + + _modelDir.Clear(); + + while ((dirent = readdir(pDir)) != NULL) + { + if ((dirent->d_type & DT_DIR) && strcmp(dirent->d_name, "..") != 0) + { + // フォルダと同名の.model3.jsonがあるか探索する + struct dirent *dirent2; + + csmString modelName(dirent->d_name); + + csmString modelPath(crawlPath); + modelPath += modelName; + modelPath.Append(1, '/'); + + csmString model3jsonName(modelName); + model3jsonName += ".model3.json"; + + DIR *pDir2 = opendir(modelPath.GetRawString()); + while ((dirent2 = readdir(pDir2)) != NULL) + { + if (strcmp(dirent2->d_name, model3jsonName.GetRawString()) == 0) + { + _modelDir.PushBack(csmString(dirent->d_name)); + } + } + closedir(pDir2); + } + } + closedir(pDir); + qsort(_modelDir.GetPtr(), _modelDir.GetSize(), sizeof(csmString), CompareCsmString); +} + +csmVector LAppLive2DManager::GetModelDir() const +{ + return _modelDir; +} + +csmInt32 LAppLive2DManager::GetModelDirSize() const +{ + return _modelDir.GetSize(); +} + +LAppModel* LAppLive2DManager::GetModel(csmUint32 no) const +{ + if (no < _models.GetSize()) + { + return _models[no]; + } + + return NULL; +} + +void LAppLive2DManager::OnDrag(csmFloat32 x, csmFloat32 y) const +{ + for (csmUint32 i = 0; i < _models.GetSize(); i++) + { + LAppModel* model = GetModel(i); + + model->SetDragging(x, y); + } +} + +void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) +{ + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]tap point: {x:%.2f y:%.2f}", x, y); + } + + for (csmUint32 i = 0; i < _models.GetSize(); i++) + { + if (_models[i]->HitTest(HitAreaNameHead, x, y)) + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameHead); + } + _models[i]->SetRandomExpression(); + } + else if (_models[i]->HitTest(HitAreaNameBody, x, y)) + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); + } + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); + } + } +} + +void LAppLive2DManager::OnUpdate() const +{ + int width, height; + glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); + + VulkanManager* vulkanManager = VulkanManager::GetInstance(); + + csmUint32 modelCount = _models.GetSize(); + for (csmUint32 i = 0; i < modelCount; ++i) + { + CubismMatrix44 projection; + LAppModel* model = GetModel(i); + + if (model->GetModel() == NULL) + { + LAppPal::PrintLogLn("Failed to model->GetModel()."); + continue; + } + + if (model->GetModel()->GetCanvasWidth() > 1.0f && width < height) + { + // 横に長いモデルを縦長ウィンドウに表示する際モデルの横サイズでscaleを算出する + model->GetModelMatrix()->SetWidth(2.0f); + projection.Scale(1.0f, static_cast(width) / static_cast(height)); + } + else + { + projection.Scale(static_cast(height) / static_cast(width), 1.0f); + } + + // 必要があればここで乗算 + if (_viewMatrix != NULL) + { + projection.MultiplyByMatrix(_viewMatrix); + } + + LAppDelegate::GetInstance()->GetView()->PreModelDraw(*model); + model->Update(); + model->Draw(projection);///< 参照渡しなのでprojectionは変質する + LAppDelegate::GetInstance()->GetView()->PostModelDraw(*model); + } +} + +void LAppLive2DManager::NextScene() +{ + csmInt32 no = (_sceneIndex + 1) % GetModelDirSize(); + ChangeScene(no); +} + +void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) +{ + _sceneIndex = index; + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]model index: %d", _sceneIndex); + } + + // ModelDir[]に保持したディレクトリ名から + // model3.jsonのパスを決定する. + // ディレクトリ名とmodel3.jsonの名前を一致させておくこと. + const csmString& model = _modelDir[index]; + LAppPal::PrintLogLn("[APP]_modelDir: %s", model.GetRawString()); + + csmString modelPath(LAppDelegate::GetInstance()->GetExecuteAbsolutePath().c_str()); + modelPath += ResourcesPath; + modelPath += model; + modelPath.Append(1, '/'); + + csmString modelJsonName(model); + modelJsonName += ".model3.json"; + + VulkanManager* vulkanManager = VulkanManager::GetInstance(); + vkDeviceWaitIdle(vulkanManager->GetDevice()); + + ReleaseAllModel(); + _models.PushBack(new LAppModel()); +#if defined(USE_RENDER_TARGET) || defined(USE_MODEL_RENDER_TARGET) + Csm::Rendering::CubismRenderer_Vulkan::EnableChangeRenderTarget(); +#endif + + _models[0]->LoadAssets(vulkanManager->GetDevice(), vulkanManager->GetTextureFormat(), modelPath.GetRawString(), modelJsonName.GetRawString()); + + /* + * モデル半透明表示を行うサンプルを提示する。 + * ここでUSE_RENDER_TARGET、USE_MODEL_RENDER_TARGETが定義されている場合 + * 別のレンダリングターゲットにモデルを描画し、描画結果をテクスチャとして別のスプライトに張り付ける。 + */ + { +#if defined(USE_RENDER_TARGET) + // LAppViewの持つターゲットに描画を行う場合、こちらを選択 + LAppView::SelectTarget useRenderTarget = LAppView::SelectTarget_ViewFrameBuffer; +#elif defined(USE_MODEL_RENDER_TARGET) + // 各LAppModelの持つターゲットに描画を行う場合、こちらを選択 + LAppView::SelectTarget useRenderTarget = LAppView::SelectTarget_ModelFrameBuffer; +#else + // デフォルトのメインフレームバッファへレンダリングする(通常) + LAppView::SelectTarget useRenderTarget = LAppView::SelectTarget_None; +#endif + +#if defined(USE_RENDER_TARGET) || defined(USE_MODEL_RENDER_TARGET) + // モデル個別にαを付けるサンプルとして、もう1体モデルを作成し、少し位置をずらす + _models.PushBack(new LAppModel()); + _models[1]->LoadAssets(VulkanManager::GetInstance()->GetDevice(), vulkanManager->GetTextureFormat(), modelPath.GetRawString(), modelJsonName.GetRawString()); + _models[1]->GetModelMatrix()->TranslateX(0.2f); +#endif + LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); + + float clearColor[3] = { 0.0f, 0.0f, 0.0f }; + LAppDelegate::GetInstance()->GetView()->SetRenderTargetClearColor(clearColor[0], clearColor[1], clearColor[2]); + } +} + +csmUint32 LAppLive2DManager::GetModelNum() const +{ + return _models.GetSize(); +} + +void LAppLive2DManager::SetViewMatrix(CubismMatrix44* m) +{ + for (int i = 0; i < 16; i++) + { + _viewMatrix->GetArray()[i] = m->GetArray()[i]; + } +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppLive2DManager.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppLive2DManager.hpp new file mode 100644 index 0000000..b5b9380 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppLive2DManager.hpp @@ -0,0 +1,132 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include "VulkanManager.hpp" + +class LAppModel; + +/** +* @brief サンプルアプリケーションにおいてCubismModelを管理するクラス
+* モデル生成と破棄、タップイベントの処理、モデル切り替えを行う。 +* +*/ +class LAppLive2DManager +{ +public: + /** + * @brief クラスのインスタンス(シングルトン)を返す。
+ * インスタンスが生成されていない場合は内部でインスタンを生成する。 + * + * @return クラスのインスタンス + */ + static LAppLive2DManager* GetInstance(); + + /** + * @brief クラスのインスタンス(シングルトン)を解放する。 + * + */ + static void ReleaseInstance(); + + /** + * @brief Resources フォルダにあるモデルフォルダ名をセットする + * + */ + void SetUpModel(); + + /** + * @brief Resources フォルダにあるモデルフォルダ名を取得する + * + */ + Csm::csmVector GetModelDir() const; + + /** + * @brief Resources フォルダにあるモデルフォルダのサイズを取得する + * + */ + Csm::csmInt32 GetModelDirSize() const; + + /** + * @brief 現在のシーンで保持しているモデルを返す + * + * @param[in] no モデルリストのインデックス値 + * @return モデルのインスタンスを返す。インデックス値が範囲外の場合はNULLを返す。 + */ + LAppModel* GetModel(Csm::csmUint32 no) const; + + /** + * @brief 現在のシーンで保持しているすべてのモデルを解放する + * + */ + void ReleaseAllModel(); + + /** + * @brief 画面をドラッグしたときの処理 + * + * @param[in] x 画面のX座標 + * @param[in] y 画面のY座標 + */ + void OnDrag(Csm::csmFloat32 x, Csm::csmFloat32 y) const; + + /** + * @brief 画面をタップしたときの処理 + * + * @param[in] x 画面のX座標 + * @param[in] y 画面のY座標 + */ + void OnTap(Csm::csmFloat32 x, Csm::csmFloat32 y); + + /** + * @brief 画面を更新するときの処理 + * モデルの更新処理および描画処理を行う + */ + void OnUpdate() const; + + /** + * @brief 次のシーンに切り替える
+ * サンプルアプリケーションではモデルセットの切り替えを行う。 + */ + void NextScene(); + + /** + * @brief シーンを切り替える
+ * サンプルアプリケーションではモデルセットの切り替えを行う。 + */ + void ChangeScene(Csm::csmInt32 index); + + /** + * @brief モデル個数を得る + * @return 所持モデル個数 + */ + Csm::csmUint32 GetModelNum() const; + + /** + * @brief viewMatrixをセットする + */ + void SetViewMatrix(Live2D::Cubism::Framework::CubismMatrix44* m); + +private: + /** + * @brief コンストラクタ + */ + LAppLive2DManager(); + + /** + * @brief デストラクタ + */ + virtual ~LAppLive2DManager(); + + Csm::CubismMatrix44* _viewMatrix; ///< モデル描画に用いるView行列 + Csm::csmVector _models; ///< モデルインスタンスのコンテナ + Csm::csmInt32 _sceneIndex; ///< 表示するシーンのインデックス値 + + Csm::csmVector _modelDir; ///< モデルディレクトリ名のコンテナ +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppModel.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppModel.cpp new file mode 100644 index 0000000..3f79ef2 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppModel.cpp @@ -0,0 +1,652 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppModel.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "LAppDefine.hpp" +#include "LAppPal.hpp" +#include "LAppTextureManager.hpp" +#include "LAppDelegate.hpp" + +using namespace Live2D::Cubism::Framework; +using namespace Live2D::Cubism::Framework::DefaultParameterId; +using namespace LAppDefine; + +namespace { + csmByte* CreateBuffer(const csmChar* path, csmSizeInt* size) + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]create buffer: %s ", path); + } + return LAppPal::LoadFileAsBytes(path, size); + } + + void DeleteBuffer(csmByte* buffer, const csmChar* path = "") + { + if (DebugLogEnable) + { + LAppPal::PrintLogLn("[APP]delete buffer: %s", path); + } + LAppPal::ReleaseBytes(buffer); + } +} + +LAppModel::LAppModel() + : CubismUserModel() + , _modelSetting(NULL) + , _userTimeSeconds(0.0f) +{ + if (DebugLogEnable) + { + _debugMode = true; + } + + _idParamAngleX = CubismFramework::GetIdManager()->GetId(ParamAngleX); + _idParamAngleY = CubismFramework::GetIdManager()->GetId(ParamAngleY); + _idParamAngleZ = CubismFramework::GetIdManager()->GetId(ParamAngleZ); + _idParamBodyAngleX = CubismFramework::GetIdManager()->GetId(ParamBodyAngleX); + _idParamEyeBallX = CubismFramework::GetIdManager()->GetId(ParamEyeBallX); + _idParamEyeBallY = CubismFramework::GetIdManager()->GetId(ParamEyeBallY); +} + +LAppModel::~LAppModel() +{ + _renderBuffer.DestroyOffscreenSurface(VulkanManager::GetInstance()->GetDevice()); + + ReleaseMotions(); + ReleaseExpressions(); + + for (csmInt32 i = 0; i < _modelSetting->GetMotionGroupCount(); i++) + { + const csmChar* group = _modelSetting->GetMotionGroupName(i); + ReleaseMotionGroup(group); + } + delete(_modelSetting); +} + +void LAppModel::LoadAssets(VkDevice device, VkFormat imageFormat, const csmChar* dir, const csmChar* fileName) +{ + _modelHomeDir = dir; + + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]load model setting: %s", fileName); + } + + csmSizeInt size; + const csmString path = csmString(dir) + fileName; + + csmByte* buffer = CreateBuffer(path.GetRawString(), &size); + ICubismModelSetting* setting = new CubismModelSettingJson(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + + SetupModel(setting); + + if (_model == NULL) + { + LAppPal::PrintLogLn("Failed to LoadAssets()."); + return; + } + + CreateRenderer(); + + SetupTextures(device, imageFormat); +} + +void LAppModel::SetupModel(ICubismModelSetting* setting) +{ + _updating = true; + _initialized = false; + _modelSetting = setting; + + csmByte* buffer; + csmSizeInt size; + + //Cubism Model + if (strcmp(_modelSetting->GetModelFileName(), "") != 0) + { + csmString path = _modelSetting->GetModelFileName(); + path = _modelHomeDir + path; + + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]create model: %s", setting->GetModelFileName()); + } + + buffer = CreateBuffer(path.GetRawString(), &size); + LoadModel(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + } + + //Expression + if (_modelSetting->GetExpressionCount() > 0) + { + const csmInt32 count = _modelSetting->GetExpressionCount(); + for (csmInt32 i = 0; i < count; i++) + { + csmString name = _modelSetting->GetExpressionName(i); + csmString path = _modelSetting->GetExpressionFileName(i); + path = _modelHomeDir + path; + + buffer = CreateBuffer(path.GetRawString(), &size); + ACubismMotion* motion = LoadExpression(buffer, size, name.GetRawString()); + + if (motion) + { + if (_expressions[name] != NULL) + { + ACubismMotion::Delete(_expressions[name]); + _expressions[name] = NULL; + } + _expressions[name] = motion; + } + + DeleteBuffer(buffer, path.GetRawString()); + } + } + + //Physics + if (strcmp(_modelSetting->GetPhysicsFileName(), "") != 0) + { + csmString path = _modelSetting->GetPhysicsFileName(); + path = _modelHomeDir + path; + + buffer = CreateBuffer(path.GetRawString(), &size); + LoadPhysics(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + } + + //Pose + if (strcmp(_modelSetting->GetPoseFileName(), "") != 0) + { + csmString path = _modelSetting->GetPoseFileName(); + path = _modelHomeDir + path; + + buffer = CreateBuffer(path.GetRawString(), &size); + LoadPose(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + } + + //EyeBlink + if (_modelSetting->GetEyeBlinkParameterCount() > 0) + { + _eyeBlink = CubismEyeBlink::Create(_modelSetting); + } + + //Breath + { + _breath = CubismBreath::Create(); + + csmVector breathParameters; + + breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleX, 0.0f, 15.0f, 6.5345f, 0.5f)); + breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleY, 0.0f, 8.0f, 3.5345f, 0.5f)); + breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamAngleZ, 0.0f, 10.0f, 5.5345f, 0.5f)); + breathParameters.PushBack(CubismBreath::BreathParameterData(_idParamBodyAngleX, 0.0f, 4.0f, 15.5345f, 0.5f)); + breathParameters.PushBack( + CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId(ParamBreath), 0.5f, 0.5f, 3.2345f, 0.5f)); + + _breath->SetParameters(breathParameters); + } + + //UserData + if (strcmp(_modelSetting->GetUserDataFile(), "") != 0) + { + csmString path = _modelSetting->GetUserDataFile(); + path = _modelHomeDir + path; + buffer = CreateBuffer(path.GetRawString(), &size); + LoadUserData(buffer, size); + DeleteBuffer(buffer, path.GetRawString()); + } + + // EyeBlinkIds + { + csmInt32 eyeBlinkIdCount = _modelSetting->GetEyeBlinkParameterCount(); + for (csmInt32 i = 0; i < eyeBlinkIdCount; ++i) + { + _eyeBlinkIds.PushBack(_modelSetting->GetEyeBlinkParameterId(i)); + } + } + + // LipSyncIds + { + csmInt32 lipSyncIdCount = _modelSetting->GetLipSyncParameterCount(); + for (csmInt32 i = 0; i < lipSyncIdCount; ++i) + { + _lipSyncIds.PushBack(_modelSetting->GetLipSyncParameterId(i)); + } + } + + if (_modelSetting == NULL || _modelMatrix == NULL) + { + LAppPal::PrintLogLn("Failed to SetupModel()."); + return; + } + + //Layout + csmMap layout; + _modelSetting->GetLayoutMap(layout); + _modelMatrix->SetupFromLayout(layout); + + _model->SaveParameters(); + + for (csmInt32 i = 0; i < _modelSetting->GetMotionGroupCount(); i++) + { + const csmChar* group = _modelSetting->GetMotionGroupName(i); + PreloadMotionGroup(group); + } + + _motionManager->StopAllMotions(); + + _updating = false; + _initialized = true; +} + +void LAppModel::PreloadMotionGroup(const csmChar* group) +{ + const csmInt32 count = _modelSetting->GetMotionCount(group); + + for (csmInt32 i = 0; i < count; i++) + { + //ex) idle_0 + csmString name = Utils::CubismString::GetFormatedString("%s_%d", group, i); + csmString path = _modelSetting->GetMotionFileName(group, i); + path = _modelHomeDir + path; + + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]load motion: %s => [%s_%d] ", path.GetRawString(), group, i); + } + + csmByte* buffer; + csmSizeInt size; + buffer = CreateBuffer(path.GetRawString(), &size); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); + + if (tmpMotion) + { + tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); + + if (_motions[name] != NULL) + { + ACubismMotion::Delete(_motions[name]); + } + _motions[name] = tmpMotion; + } + + DeleteBuffer(buffer, path.GetRawString()); + } +} + +void LAppModel::ReleaseMotionGroup(const csmChar* group) const +{ + const csmInt32 count = _modelSetting->GetMotionCount(group); + for (csmInt32 i = 0; i < count; i++) + { + csmString voice = _modelSetting->GetMotionSoundFileName(group, i); + if (strcmp(voice.GetRawString(), "") != 0) + { + csmString path = voice; + path = _modelHomeDir + path; + } + } +} + +/** +* @brief すべてのモーションデータの解放 +* +* すべてのモーションデータを解放する。 +*/ +void LAppModel::ReleaseMotions() +{ + for (csmMap::const_iterator iter = _motions.Begin(); iter != _motions.End(); ++iter) + { + ACubismMotion::Delete(iter->Second); + } + + _motions.Clear(); +} + +/** +* @brief すべての表情データの解放 +* +* すべての表情データを解放する。 +*/ +void LAppModel::ReleaseExpressions() +{ + for (csmMap::const_iterator iter = _expressions.Begin(); iter != _expressions.End(); ++iter) + { + ACubismMotion::Delete(iter->Second); + } + + _expressions.Clear(); +} + +void LAppModel::Update() +{ + const csmFloat32 deltaTimeSeconds = LAppPal::GetDeltaTime(); + _userTimeSeconds += deltaTimeSeconds; + + _dragManager->Update(deltaTimeSeconds); + _dragX = _dragManager->GetX(); + _dragY = _dragManager->GetY(); + + // モーションによるパラメータ更新の有無 + csmBool motionUpdated = false; + + //----------------------------------------------------------------- + _model->LoadParameters(); // 前回セーブされた状態をロード + if (_motionManager->IsFinished()) + { + // モーションの再生がない場合、待機モーションの中からランダムで再生する + StartRandomMotion(MotionGroupIdle, PriorityIdle); + } + else + { + motionUpdated = _motionManager->UpdateMotion(_model, deltaTimeSeconds); // モーションを更新 + } + _model->SaveParameters(); // 状態を保存 + //----------------------------------------------------------------- + + // 不透明度 + _opacity = _model->GetModelOpacity(); + + // まばたき + if (!motionUpdated) + { + if (_eyeBlink != NULL) + { + // メインモーションの更新がないとき + _eyeBlink->UpdateParameters(_model, deltaTimeSeconds); // 目パチ + } + } + + if (_expressionManager != NULL) + { + _expressionManager->UpdateMotion(_model, deltaTimeSeconds); // 表情でパラメータ更新(相対変化) + } + + //ドラッグによる変化 + //ドラッグによる顔の向きの調整 + _model->AddParameterValue(_idParamAngleX, _dragX * 30); // -30から30の値を加える + _model->AddParameterValue(_idParamAngleY, _dragY * 30); + _model->AddParameterValue(_idParamAngleZ, _dragX * _dragY * -30); + + //ドラッグによる体の向きの調整 + _model->AddParameterValue(_idParamBodyAngleX, _dragX * 10); // -10から10の値を加える + + //ドラッグによる目の向きの調整 + _model->AddParameterValue(_idParamEyeBallX, _dragX); // -1から1の値を加える + _model->AddParameterValue(_idParamEyeBallY, _dragY); + + // 呼吸など + if (_breath != NULL) + { + _breath->UpdateParameters(_model, deltaTimeSeconds); + } + + // 物理演算の設定 + if (_physics != NULL) + { + _physics->Evaluate(_model, deltaTimeSeconds); + } + + // リップシンクの設定 + if (_lipSync) + { + // リアルタイムでリップシンクを行う場合、システムから音量を取得して0〜1の範囲で値を入力します。 + csmFloat32 value = 0.0f; + + // 状態更新/RMS値取得 + _wavFileHandler.Update(deltaTimeSeconds); + value = _wavFileHandler.GetRms(); + + for (csmUint32 i = 0; i < _lipSyncIds.GetSize(); ++i) + { + _model->AddParameterValue(_lipSyncIds[i], value, 0.8f); + } + } + + // ポーズの設定 + if (_pose != NULL) + { + _pose->UpdateParameters(_model, deltaTimeSeconds); + } + + _model->Update(); +} + +CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, + ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) +{ + if (priority == PriorityForce) + { + _motionManager->SetReservePriority(priority); + } + else if (!_motionManager->ReserveMotion(priority)) + { + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]can't start motion."); + } + return InvalidMotionQueueEntryHandleValue; + } + + const csmString fileName = _modelSetting->GetMotionFileName(group, no); + + //ex) idle_0 + csmString name = Utils::CubismString::GetFormatedString("%s_%d", group, no); + CubismMotion* motion = static_cast(_motions[name.GetRawString()]); + csmBool autoDelete = false; + + if (motion == NULL) + { + csmString path = fileName; + path = _modelHomeDir + path; + + csmByte* buffer; + csmSizeInt size; + buffer = CreateBuffer(path.GetRawString(), &size); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); + + if (motion) + { + motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); + autoDelete = true; // 終了時にメモリから削除 + } + + DeleteBuffer(buffer, path.GetRawString()); + } + else + { + motion->SetBeganMotionHandler(onBeganMotionHandler); + motion->SetFinishedMotionHandler(onFinishedMotionHandler); + } + + //voice + csmString voice = _modelSetting->GetMotionSoundFileName(group, no); + if (strcmp(voice.GetRawString(), "") != 0) + { + csmString path = voice; + path = _modelHomeDir + path; + _wavFileHandler.Start(path); + } + + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]start motion: [%s_%d]", group, no); + } + return _motionManager->StartMotionPriority(motion, autoDelete, priority); +} + +CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, + ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) +{ + if (_modelSetting->GetMotionCount(group) == 0) + { + return InvalidMotionQueueEntryHandleValue; + } + + csmInt32 no = rand() % _modelSetting->GetMotionCount(group); + + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); +} + +void LAppModel::DoDraw() +{ + if (_model == NULL) + { + return; + } + + GetRenderer()->DrawModel(); +} + +void LAppModel::Draw(CubismMatrix44& matrix) +{ + if (_model == NULL) + { + return; + } + + matrix.MultiplyByMatrix(_modelMatrix); + + GetRenderer()->SetMvpMatrix(&matrix); + DoDraw(); +} + +csmBool LAppModel::HitTest(const csmChar* hitAreaName, csmFloat32 x, csmFloat32 y) +{ + // 透明時は当たり判定なし。 + if (_opacity < 1) + { + return false; + } + const csmInt32 count = _modelSetting->GetHitAreasCount(); + for (csmInt32 i = 0; i < count; i++) + { + if (strcmp(_modelSetting->GetHitAreaName(i), hitAreaName) == 0) + { + const CubismIdHandle drawID = _modelSetting->GetHitAreaId(i); + return IsHit(drawID, x, y); + } + } + return false; // 存在しない場合はfalse +} + +void LAppModel::SetExpression(const csmChar* expressionID) +{ + ACubismMotion* motion = _expressions[expressionID]; + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]expression: [%s]", expressionID); + } + + if (motion != NULL) + { + _expressionManager->StartMotion(motion, false); + } + else + { + if (_debugMode) + { + LAppPal::PrintLogLn("[APP]expression[%s] is null ", expressionID); + } + } +} + +void LAppModel::SetRandomExpression() +{ + if (_expressions.GetSize() == 0) + { + return; + } + + csmInt32 no = rand() % _expressions.GetSize(); + csmMap::const_iterator map_ite; + csmInt32 i = 0; + for (map_ite = _expressions.Begin(); map_ite != _expressions.End(); map_ite++) + { + if (i == no) + { + csmString name = (*map_ite).First; + SetExpression(name.GetRawString()); + return; + } + i++; + } +} + +void LAppModel::ReloadRenderer(VkDevice device, VkFormat surfaceFormat) +{ + DeleteRenderer(); + + CreateRenderer(); + + SetupTextures(device, surfaceFormat); +} + +void LAppModel::SetupTextures(VkDevice device, VkFormat surfaceFormat) +{ + _bindTextureId.Clear(); + + for (csmInt32 modelTextureNumber = 0; modelTextureNumber < _modelSetting->GetTextureCount(); modelTextureNumber++) + { + // テクスチャ名が空文字だった場合はロード・バインド処理をスキップ + if (strcmp(_modelSetting->GetTextureFileName(modelTextureNumber), "") == 0) + { + continue; + } + + //OpenGLのテクスチャユニットにテクスチャをロードする + csmString texturePath = _modelSetting->GetTextureFileName(modelTextureNumber); + texturePath = _modelHomeDir + texturePath; + + LAppTextureManager::TextureInfo* texture = LAppDelegate::GetInstance()->GetTextureManager()->CreateTextureFromPngFile( + texturePath.GetRawString(), surfaceFormat, VK_IMAGE_TILING_OPTIMAL, + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + + if (texture) + { + const csmUint32 textureManageId = texture->Id; + CubismImageVulkan image; + if (LAppDelegate::GetInstance()->GetTextureManager()->GetTexture(textureManageId, image)) + { + GetRenderer()->BindTexture(image); + _bindTextureId.PushBack(textureManageId); + } + } + } + +#ifdef PREMULTIPLIED_ALPHA_ENABLE + GetRenderer()->IsPremultipliedAlpha(true); +#else + GetRenderer()->IsPremultipliedAlpha(false); +#endif + +} + +void LAppModel::MotionEventFired(const csmString& eventValue) +{ + CubismLogInfo("%s is fired on LAppModel!!", eventValue.GetRawString()); +} + +Csm::Rendering::CubismOffscreenSurface_Vulkan& LAppModel::GetRenderBuffer() +{ + return _renderBuffer; +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppModel.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppModel.hpp new file mode 100644 index 0000000..fa8592d --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppModel.hpp @@ -0,0 +1,199 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include +#include +#include +#include "LAppWavFileHandler.hpp" + +/** + * @brief ユーザーが実際に使用するモデルの実装クラス
+ * モデル生成、機能コンポーネント生成、更新処理とレンダリングの呼び出しを行う。 + * + */ +class LAppModel : public Csm::CubismUserModel +{ +public: + /** + * @brief コンストラクタ + */ + LAppModel(); + + /** + * @brief デストラクタ + * + */ + virtual ~LAppModel(); + + /** + * @brief model3.jsonが置かれたディレクトリとファイルパスからモデルを生成する + * + * @param[in] device デバイス + * @param[in] dir ディレクトリ名 + * @param[in] fileName アセット名 + */ + void LoadAssets(VkDevice device, VkFormat imageFormat, const Csm::csmChar* dir, const Csm::csmChar* fileName); + + /** + * @brief レンダラを再構築する + * + * @param[in] device デバイス + */ + void ReloadRenderer(VkDevice device, VkFormat surfaceFormat); + + /** + * @brief モデルの更新処理。モデルのパラメータから描画状態を決定する。 + * + */ + void Update(); + + /** + * @brief モデルを描画する処理。モデルを描画する空間のView-Projection行列を渡す。 + * + * @param[in] IsWindowSizeChanged ウィンドウサイズが変更されたか + * @param[in] matrix View-Projection行列 + */ + void Draw(Csm::CubismMatrix44& matrix); + + /** + * @brief 引数で指定したモーションの再生を開始する。 + * + * @param[in] group モーショングループ名 + * @param[in] no グループ内の番号 + * @param[in] priority 優先度 + * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 + */ + Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, + Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); + + /** + * @brief ランダムに選ばれたモーションの再生を開始する。 + * + * @param[in] group モーショングループ名 + * @param[in] priority 優先度 + * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 + */ + Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, + Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); + + /** + * @brief 引数で指定した表情モーションをセットする + * + * @param expressionID 表情モーションのID + */ + void SetExpression(const Csm::csmChar* expressionID); + + /** + * @brief ランダムに選ばれた表情モーションをセットする + * + */ + void SetRandomExpression(); + + /** + * @brief イベントの発火を受け取る + * + */ + virtual void MotionEventFired(const Live2D::Cubism::Framework::csmString& eventValue); + + /** + * @brief 当たり判定テスト。
+ * 指定IDの頂点リストから矩形を計算し、座標が矩形範囲内か判定する。 + * + * @param[in] hitAreaName 当たり判定をテストする対象のID + * @param[in] x 判定を行うX座標 + * @param[in] y 判定を行うY座標 + */ + virtual Csm::csmBool HitTest(const Csm::csmChar* hitAreaName, Csm::csmFloat32 x, Csm::csmFloat32 y); + + /** + * @brief 別ターゲットに描画する際に使用するバッファの取得 + */ + Csm::Rendering::CubismOffscreenSurface_Vulkan& GetRenderBuffer(); + +protected: + /** + * @brief モデルを描画する処理。モデルを描画する空間のView-Projection行列を渡す。 + * + */ + void DoDraw(); + +private: + /** + * @brief model3.jsonからモデルを生成する。
+ * model3.jsonの記述に従ってモデル生成、モーション、物理演算などのコンポーネント生成を行う。 + * + * @param[in] setting ICubismModelSettingのインスタンス + * + */ + void SetupModel(Csm::ICubismModelSetting* setting); + + /** + * @brief OpenGLのテクスチャユニットにテクスチャをロードする + * + * @param[in] device デバイス + */ + void SetupTextures(VkDevice device, VkFormat surfaceFormat); + + /** + * @brief モーションデータをグループ名から一括でロードする。
+ * モーションデータの名前は内部でModelSettingから取得する。 + * + * @param[in] group モーションデータのグループ名 + */ + void PreloadMotionGroup(const Csm::csmChar* group); + + /** + * @brief モーションデータをグループ名から一括で解放する。
+ * モーションデータの名前は内部でModelSettingから取得する。 + * + * @param[in] group モーションデータのグループ名 + */ + void ReleaseMotionGroup(const Csm::csmChar* group) const; + + /** + * @brief すべてのモーションデータの解放 + * + * すべてのモーションデータを解放する。 + */ + void ReleaseMotions(); + + /** + * @brief すべての表情データの解放 + * + * すべての表情データを解放する。 + */ + void ReleaseExpressions(); + + Csm::ICubismModelSetting* _modelSetting; ///< モデルセッティング情報 + Csm::csmString _modelHomeDir; ///< モデルセッティングが置かれたディレクトリ + Csm::csmFloat32 _userTimeSeconds; ///< デルタ時間の積算値[秒] + Csm::csmVector _eyeBlinkIds; ///< モデルに設定されたまばたき機能用パラメータID + Csm::csmVector _lipSyncIds; ///< モデルに設定されたリップシンク機能用パラメータID + Csm::csmMap _motions; ///< 読み込まれているモーションのリスト + Csm::csmMap _expressions; ///< 読み込まれている表情のリスト + Csm::csmVector _hitArea; + Csm::csmVector _userArea; + const Csm::CubismId* _idParamAngleX; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamAngleY; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamAngleZ; ///< パラメータID: ParamAngleX + const Csm::CubismId* _idParamBodyAngleX; ///< パラメータID: ParamBodyAngleX + const Csm::CubismId* _idParamEyeBallX; ///< パラメータID: ParamEyeBallX + const Csm::CubismId* _idParamEyeBallY; ///< パラメータID: ParamEyeBallXY + + LAppWavFileHandler _wavFileHandler; ///< wavファイルハンドラ + + Csm::Rendering::CubismOffscreenSurface_Vulkan _renderBuffer; ///< フレームバッファ以外の描画先 + Csm::csmVector _bindTextureId; ///< テクスチャID +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppPal.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppPal.cpp new file mode 100644 index 0000000..04c423d --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppPal.cpp @@ -0,0 +1,122 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppPal.hpp" +#include +#include +#include +#include +#include +#include +#define GLFW_INCLUDE_VULKAN +#include +#include +#include "LAppDefine.hpp" + +using std::endl; +using namespace Csm; +using namespace std; +using namespace LAppDefine; + +double LAppPal::s_currentFrame = 0.0; +double LAppPal::s_lastFrame = 0.0; +double LAppPal::s_deltaTime = 0.0; + +csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) +{ + //filePath;// + const char* path = filePath.c_str(); + + int size = 0; + struct stat statBuf; + if (stat(path, &statBuf) == 0) + { + size = statBuf.st_size; + + if (size == 0) + { + if (DebugLogEnable) + { + PrintLogLn("Stat succeeded but file size is zero. path:%s", path); + } + return NULL; + } + } + else + { + if (DebugLogEnable) + { + PrintLogLn("Stat failed. errno:%d path:%s", errno, path); + } + return NULL; + } + + std::fstream file; + file.open(path, std::ios::in | std::ios::binary); + if (!file.is_open()) + { + if (DebugLogEnable) + { + PrintLogLn("File open failed. path:%s", path); + } + return NULL; + } + + char* buf = new char[size]; + file.read(buf, size); + file.close(); + + *outSize = size; + return reinterpret_cast(buf); +} + +void LAppPal::ReleaseBytes(csmByte* byteData) +{ + delete[] byteData; +} + +csmFloat32 LAppPal::GetDeltaTime() +{ + return static_cast(s_deltaTime); +} + +void LAppPal::UpdateTime() +{ + s_currentFrame = glfwGetTime(); + s_deltaTime = s_currentFrame - s_lastFrame; + s_lastFrame = s_currentFrame; +} + +void LAppPal::PrintLog(const csmChar* format, ...) +{ + va_list args; + csmChar buf[256]; + va_start(args, format); + vsnprintf(buf, sizeof(buf), format, args); // 標準出力でレンダリング + std::cout << buf; + va_end(args); +} + +void LAppPal::PrintLogLn(const csmChar* format, ...) +{ + va_list args; + csmChar buf[256]; + va_start(args, format); + vsnprintf(buf, sizeof(buf), format, args); // 標準出力でレンダリング + std::cout << buf << std::endl; + va_end(args); +} + +void LAppPal::PrintMessage(const csmChar* message) +{ + PrintLog("%s", message); +} + +void LAppPal::PrintMessageLn(const csmChar* message) +{ + PrintLogLn("%s", message); +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppPal.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppPal.hpp new file mode 100644 index 0000000..5b1ee03 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppPal.hpp @@ -0,0 +1,101 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include + +/** +* @brief プラットフォーム依存機能を抽象化する Cubism Platform Abstraction Layer. +* +* ファイル読み込みや時刻取得等のプラットフォームに依存する関数をまとめる +* +*/ +class LAppPal +{ +public: + /** + * @brief ファイルをバイトデータとして読み込む + * + * ファイルをバイトデータとして読み込む + * + * @param[in] filePath 読み込み対象ファイルのパス + * @param[out] outSize ファイルサイズ + * @return バイトデータ + */ + static Csm::csmByte* LoadFileAsBytes(const std::string filePath, Csm::csmSizeInt* outSize); + + + /** + * @brief バイトデータを解放する + * + * バイトデータを解放する + * + * @param[in] byteData 解放したいバイトデータ + */ + static void ReleaseBytes(Csm::csmByte* byteData); + + /** + * @biref デルタ時間(前回フレームとの差分)を取得する + * + * @return デルタ時間[ms] + * + */ + static Csm::csmFloat32 GetDeltaTime(); + + static void UpdateTime(); + + /** + * @brief ログを出力する + * + * ログを出力する + * + * @param[in] format 書式付文字列 + * @param[in] ... (可変長引数)文字列 + * + */ + static void PrintLog(const Csm::csmChar* format, ...); + + /** + * @brief ログを出力し最後に改行する + * + * ログを出力し最後に改行する + * + * @param[in] format 書式付文字列 + * @param[in] ... (可変長引数)文字列 + * + */ + static void PrintLogLn(const Csm::csmChar* format, ...); + + /** + * @brief メッセージを出力する + * + * メッセージを出力する + * + * @param[in] message 文字列 + * + */ + static void PrintMessage(const Csm::csmChar* message); + + /** + * @brief メッセージを出力し最後に改行する + * + * メッセージを出力し最後に改行する + * + * @param[in] message 文字列 + * + */ + static void PrintMessageLn(const Csm::csmChar* message); + +private: + static double s_currentFrame; + static double s_lastFrame; + static double s_deltaTime; +}; + diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppSprite.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppSprite.cpp new file mode 100644 index 0000000..47c30fd --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppSprite.cpp @@ -0,0 +1,258 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSprite.hpp" +#include "LAppTextureManager.hpp" +#include "VulkanManager.hpp" + +using namespace Csm; + +LAppSprite::LAppSprite( + VkDevice device, VkPhysicalDevice physicalDevice, VulkanManager* vkManager, float x, float y, float width, float height, + Csm::csmUint32 textureId, VkImageView view, VkSampler sampler, VkDescriptorSetLayout descriptorSetLayout) + : _rect() + , _textureId(textureId) +{ + _rect.Left = (x - width * 0.5f); + _rect.Right = (x + width * 0.5f); + _rect.Up = (y - height * 0.5f); + _rect.Down = (y + height * 0.5f); + + _spriteColor[0] = 1.0f; + _spriteColor[1] = 1.0f; + _spriteColor[2] = 1.0f; + _spriteColor[3] = 1.0f; + + if (_vertexBuffer.GetBuffer() == VK_NULL_HANDLE) + { + VkDeviceSize bufferSize = sizeof(SpriteVertex) * VertexNum; // 総長 構造体サイズ*個数 + _stagingBuffer.CreateBuffer(device, physicalDevice, bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + _stagingBuffer.Map(device, bufferSize); + _vertexBuffer.CreateBuffer(device, physicalDevice, bufferSize, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + } + + if (_indexBuffer.GetBuffer() == VK_NULL_HANDLE) + { + uint16_t idx[IndexNum] = { + 0, 1, 2, + 1, 3, 2 + }; + + uint64_t bufferSize = sizeof(uint16_t) * IndexNum; + + CubismBufferVulkan stagingBuffer; + stagingBuffer.CreateBuffer(device, physicalDevice, bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + stagingBuffer.Map(device, bufferSize); + stagingBuffer.MemCpy(idx, bufferSize); + stagingBuffer.UnMap(device); + + _indexBuffer.CreateBuffer(device, physicalDevice, bufferSize, + VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + + VkCommandBuffer commandBuffer = vkManager->BeginSingleTimeCommands(); + VkBufferCopy copyRegion{}; + copyRegion.size = bufferSize; + vkCmdCopyBuffer(commandBuffer, stagingBuffer.GetBuffer(), _indexBuffer.GetBuffer(), 1, ©Region); + vkManager->SubmitCommand(commandBuffer); + + stagingBuffer.Destroy(device); + } + + if (_uniformBuffer.GetBuffer() == VK_NULL_HANDLE) + { + _uniformBuffer.CreateBuffer(device, physicalDevice, sizeof(SpriteUBO), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + _uniformBuffer.Map(device, VK_WHOLE_SIZE); + } + + VkDescriptorPoolSize poolSizes[2]{}; + poolSizes[0].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + poolSizes[0].descriptorCount = 1; + poolSizes[1].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + poolSizes[1].descriptorCount = 1; + + VkDescriptorPoolCreateInfo poolInfo{}; + poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; + poolInfo.poolSizeCount = 2; + poolInfo.pPoolSizes = poolSizes; + poolInfo.maxSets = 1; + + if (vkCreateDescriptorPool(device, &poolInfo, nullptr, &_descriptorPool) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create descriptor pool!"); + } + + CreateDescriptorSet(device, descriptorSetLayout); + if (view != NULL && sampler != NULL) + { + SetDescriptorUpdated(false); + UpdateDescriptorSet(device, view, sampler); + } +} + +LAppSprite::~LAppSprite() +{} + +void LAppSprite::Release(VkDevice device) +{ + _vertexBuffer.Destroy(device); + _stagingBuffer.Destroy(device); + _indexBuffer.Destroy(device); + _uniformBuffer.Destroy(device); + vkDestroyDescriptorPool(device, _descriptorPool, nullptr); +} + +void LAppSprite::CreateDescriptorSet(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) +{ + VkDescriptorSetAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; + allocInfo.descriptorPool = _descriptorPool; + allocInfo.descriptorSetCount = 1; + allocInfo.pSetLayouts = &descriptorSetLayout; + if (vkAllocateDescriptorSets(device, &allocInfo, &_descriptorSet) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to allocate descriptor sets!"); + } +} + +void LAppSprite::UpdateData(VulkanManager* vkManager, int maxWidth, int maxHeight) const +{ + if (maxWidth == 0 || maxHeight == 0) + { + return; // この際は描画できず + } + + SpriteVertex vtx[VertexNum] = { + {0.0f, 0.0f, 0.0f, 0.0f}, + {0.5f, 0.0f, 1.0f, 0.0f}, + {0.0f, 0.5f, 0.0f, 1.0f}, + {0.5f, 0.5f, 1.0f, 1.0f}, + }; + + vtx[0].X = (_rect.Left - maxWidth * 0.5f) / (maxWidth * 0.5f); + vtx[0].Y = (_rect.Down - maxHeight * 0.5f) / (maxHeight * 0.5f); + vtx[1].X = (_rect.Right - maxWidth * 0.5f) / (maxWidth * 0.5f); + vtx[1].Y = (_rect.Down - maxHeight * 0.5f) / (maxHeight * 0.5f); + vtx[2].X = (_rect.Left - maxWidth * 0.5f) / (maxWidth * 0.5f); + vtx[2].Y = (_rect.Up - maxHeight * 0.5f) / (maxHeight * 0.5f); + vtx[3].X = (_rect.Right - maxWidth * 0.5f) / (maxWidth * 0.5f); + vtx[3].Y = (_rect.Up - maxHeight * 0.5f) / (maxHeight * 0.5f); + + SpriteVertex vertex; + csmVector vertices; + for (SpriteVertex vt : vtx) + { + vertex.X = vt.X; + vertex.Y = vt.Y; + vertex.U = vt.U; + vertex.V = vt.V; + vertices.PushBack(vertex); + } + + VkCommandBuffer commandBuffer = vkManager->BeginSingleTimeCommands(); + csmUint32 bufferSize = sizeof(SpriteVertex) * vertices.GetSize(); + + _stagingBuffer.MemCpy(vertices.GetPtr(), bufferSize); + + VkBufferCopy copyRegion{}; + copyRegion.size = bufferSize; + vkCmdCopyBuffer(commandBuffer, _stagingBuffer.GetBuffer(), _vertexBuffer.GetBuffer(), 1, ©Region); + + vkManager->SubmitCommand(commandBuffer); + + //ユニフォームバッファ設定 + SpriteUBO _ubo; + _ubo.SpriteColor[0] = _spriteColor[0]; + _ubo.SpriteColor[1] = _spriteColor[1]; + _ubo.SpriteColor[2] = _spriteColor[2]; + _ubo.SpriteColor[3] = _spriteColor[3]; + _uniformBuffer.MemCpy(&_ubo, sizeof(SpriteUBO)); +} + +void LAppSprite::UpdateDescriptorSet(VkDevice device, VkImageView view, VkSampler sampler) +{ + if (!isDescriptorUpdated) + { + csmVector descriptorWrites; + descriptorWrites.Resize(2); + + VkDescriptorBufferInfo uniformBufferInfo{}; + uniformBufferInfo.buffer = _uniformBuffer.GetBuffer(); + uniformBufferInfo.offset = 0; + uniformBufferInfo.range = VK_WHOLE_SIZE; + + descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + descriptorWrites[0].dstSet = _descriptorSet; + descriptorWrites[0].dstBinding = 0; + descriptorWrites[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + descriptorWrites[0].descriptorCount = 1; + descriptorWrites[0].pBufferInfo = &uniformBufferInfo; + + VkDescriptorImageInfo imageInfo; + imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + imageInfo.imageView = view; + imageInfo.sampler = sampler; + + descriptorWrites[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + descriptorWrites[1].dstSet = _descriptorSet; + descriptorWrites[1].dstBinding = 1; + descriptorWrites[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + descriptorWrites[1].descriptorCount = 1; + descriptorWrites[1].pImageInfo = &imageInfo; + + vkUpdateDescriptorSets(device, descriptorWrites.GetSize(), descriptorWrites.GetPtr(), 0, NULL); + isDescriptorUpdated = true; + } +} + +void LAppSprite::SetDescriptorUpdated(bool frag) +{ + isDescriptorUpdated = frag; +} + +void LAppSprite::Render(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, VulkanManager* vkManager, int windowWidth, int windowHeight) +{ + UpdateData(vkManager, windowWidth, windowHeight); + VkBuffer vertexBuffers[] = {_vertexBuffer.GetBuffer()}; + VkDeviceSize offsets[] = {0}; + vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets); + vkCmdBindIndexBuffer(commandBuffer, _indexBuffer.GetBuffer(), 0, VK_INDEX_TYPE_UINT16); + vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &_descriptorSet, 0,nullptr); + vkCmdDrawIndexed(commandBuffer, IndexNum, 1, 0, 0, 0); +} + +bool LAppSprite::IsHit(int windowWidth, int windowHeight, float pointX, float pointY) const +{ + if(windowWidth==0 || windowHeight==0) + { + return false; + } + float y = pointY; + + return (pointX >= _rect.Left && pointX <= _rect.Right && y >= _rect.Up && y <= _rect.Down); +} + +void LAppSprite::SetColor(float r, float g, float b, float a) +{ + _spriteColor[0] = r; + _spriteColor[1] = g; + _spriteColor[2] = b; + _spriteColor[3] = a; +} + +void LAppSprite::ResetRect(float x, float y, float width, float height) +{ + _rect.Left = (x - width * 0.5f); + _rect.Right = (x + width * 0.5f); + _rect.Up = (y - height * 0.5f); + _rect.Down = (y + height * 0.5f); +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppSprite.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppSprite.hpp new file mode 100644 index 0000000..85f0f13 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppSprite.hpp @@ -0,0 +1,207 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once +#include + +// 前方宣言 +class VulkanManager; + +/** +* @brief スプライトを実装するクラス。 +* +* テクスチャID、Rectの管理。 +* +*/ +class LAppSprite +{ +public: + /** + * @brief Rect 構造体。 + */ + struct Rect + { + public: + float Left; ///< 左辺 + float Right; ///< 右辺 + float Up; ///< 上辺 + float Down; ///< 下辺 + }; + /** + * @brief 頂点情報を保持する構造体 + * + */ + struct SpriteVertex + { + float X, Y; // Position + float U, V; // UVs + + /** + * @brief 頂点入力のバインド設定を指定する + */ + static VkVertexInputBindingDescription GetBindingDescription() + { + VkVertexInputBindingDescription bindingDescription{}; + bindingDescription.binding = 0; + bindingDescription.stride = sizeof(SpriteVertex); + bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; + return bindingDescription; + } + + /** + * @brief 頂点入力の構造を指定する + */ + static void GetAttributeDescriptions(VkVertexInputAttributeDescription attributeDescriptions[2]) + { + attributeDescriptions[0].binding = 0; + attributeDescriptions[0].location = 0; + attributeDescriptions[0].format = VK_FORMAT_R32G32_SFLOAT; + attributeDescriptions[0].offset = offsetof(SpriteVertex, X); + attributeDescriptions[1].binding = 0; + attributeDescriptions[1].location = 1; + attributeDescriptions[1].format = VK_FORMAT_R32G32_SFLOAT; + attributeDescriptions[1].offset = offsetof(SpriteVertex, U); + } + }; + + /** + * @brief スプライト用ユニフォームバッファオブジェクトの中身を保持する構造体 + * + */ + struct SpriteUBO + { + float SpriteColor[4]; + }; + + /** + * @brief コンストラクタ + * + * @param[in] device デバイス + * @param[in] physicalDevice 物理デバイス + * @param[in] vkManager Vulkanリソースマネージャ + * @param[in] x x座標 + * @param[in] y y座標 + * @param[in] width 横幅 + * @param[in] height 高さ + * @param[in] textureId テクスチャID + * @param[in] view テクスチャビュー + * @param[in] sampler テクスチャサンプラー + * @param[in] descriptorSetLayout ディスクリプタセット + */ + LAppSprite( + VkDevice device, VkPhysicalDevice physicalDevice, VulkanManager* vkManager, float x, float y, float width, float height, + uint32_t textureId, VkImageView view, VkSampler sampler, VkDescriptorSetLayout descriptorSetLayout + ); + + /** + * @brief デストラクタ + */ + ~LAppSprite(); + + /** + * @brief リソースを開放する + * + * @param[in] device デバイス + */ + void Release(VkDevice device); + + /** + * @brief ディスクリプタセットを作成する + * + * @param[in] device デバイス + * @param[in] descriptorSetLayout ディスクリプタセットレイアウト + */ + void CreateDescriptorSet(VkDevice device, VkDescriptorSetLayout descriptorSetLayout); + + /** + * @brief ユニフォームバッファを更新する + * + * @param[in] vkManager Vulkanリソースマネージャ + * @param[in] maxWidth 最大幅 + * @param[in] maxHeight 最大高さ + */ + void UpdateData(VulkanManager* vkManager, int maxWidth, int maxHeight) const; + + /** + * @brief ディスクリプタセットを更新する + * + * @param[in] device デバイス + * @param[in] view テクスチャビュー + * @param[in] sampler テクスチャサンプラー + */ + void UpdateDescriptorSet(VkDevice device, VkImageView view, VkSampler sampler); + + /** + * @brief ディスクリプタセットの更新フラグを設定する + * + * @param[in] frag フラグ + */ + void SetDescriptorUpdated(bool frag); + + /** + * @brief 描画する + * + * @param[in] commandBuffer コマンドバッファ + * @param[in] pipelineLayout パイプラインレイアウト + * @param[in] vkManager Vulkanリソースマネージャ + * @param[in] windowWidth ウィンドウ幅 + * @param[in] windowHeight ウィンドウ高さ + */ + void Render(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, VulkanManager* vkManager, int windowWidth, int windowHeight); + + /** + * @brief コンストラクタ + * + * @param[in] windowWidth ウィンドウ幅 + * @param[in] windowHeight ウィンドウ高さ + * @param[in] pointX x座標 + * @param[in] pointY y座標 + */ + bool IsHit(int windowWidth, int windowHeight, float pointX, float pointY) const; + + /** + * @brief 色設定 + * + * @param[in] r (0.0~1.0) + * @param[in] g (0.0~1.0) + * @param[in] b (0.0~1.0) + * @param[in] a (0.0~1.0) + */ + void SetColor(float r, float g, float b, float a); + + /** + * @brief サイズ再設定 + * + * @param[in] x x座標 + * @param[in] y y座標 + * @param[in] width 横幅 + * @param[in] height 高さ + */ + void ResetRect(float x, float y, float width, float height); + + /** + * @brief Getter テクスチャID + * @return テクスチャIDを返す + */ + uint32_t GetTextureId() { return _textureId; } + + +private: + static const uint16_t VertexNum = 4; + static const uint16_t IndexNum = 6; + Csm::csmUint32 _textureId; ///< テクスチャID + Rect _rect; ///< 矩形 + float _spriteColor[4]; ///< 表示カラー + Live2D::Cubism::Framework::CubismBufferVulkan _vertexBuffer; ///< 頂点バッファ + Live2D::Cubism::Framework::CubismBufferVulkan _stagingBuffer; ///< ステージングバッファ + Live2D::Cubism::Framework::CubismBufferVulkan _indexBuffer; ///< インデックスバッファ + Live2D::Cubism::Framework::CubismBufferVulkan _uniformBuffer; ///< ユニフォームバッファ + VkDescriptorPool _descriptorPool; ///< ディスクリプタプール + VkDescriptorSet _descriptorSet; ///< ディスクリプタセット モデルの数 + bool isDescriptorUpdated; +}; + diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppTextureManager.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppTextureManager.cpp new file mode 100644 index 0000000..dad7169 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppTextureManager.cpp @@ -0,0 +1,331 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppTextureManager.hpp" +#include +#define STBI_NO_STDIO +#define STBI_ONLY_PNG +#define STB_IMAGE_IMPLEMENTATION +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-function" +#endif +#include "stb_image.h" +#if defined(__clang__) +#pragma clang diagnostic pop +#endif +#include "LAppPal.hpp" +#include "LAppDelegate.hpp" + +using namespace Live2D::Cubism::Framework; + +LAppTextureManager::LAppTextureManager() + : _sequenceId(0) + , _mipLevels(0) +{ +} + +LAppTextureManager::~LAppTextureManager() +{ + ReleaseTextures(); +} + +void LAppTextureManager::CopyBufferToImage(VkCommandBuffer commandBuffer, const VkBuffer& buffer, VkImage image, + uint32_t width, uint32_t height) +{ + VkBufferImageCopy region{}; + region.bufferOffset = 0; + region.bufferRowLength = 0; + region.bufferImageHeight = 0; + region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + region.imageSubresource.mipLevel = 0; + region.imageSubresource.baseArrayLayer = 0; + region.imageSubresource.layerCount = 1; + region.imageOffset = {0, 0, 0}; + region.imageExtent = { + width, + height, + 1 + }; + + vkCmdCopyBufferToImage(commandBuffer, buffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion); +} + +void LAppTextureManager::GenerateMipmaps(CubismImageVulkan image, uint32_t texWidth, uint32_t texHeight, + uint32_t mipLevels) +{ + VkCommandBuffer commandBuffer = VulkanManager::GetInstance()->BeginSingleTimeCommands(); + + VkImageMemoryBarrier barrier{}; + barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + barrier.image = image.GetImage(); + barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + barrier.subresourceRange.baseArrayLayer = 0; + barrier.subresourceRange.layerCount = 1; + barrier.subresourceRange.levelCount = 1; + + int32_t mipWidth = texWidth; + int32_t mipHeight = texHeight; + + for (uint32_t i = 1; i < mipLevels; i++) + { + barrier.subresourceRange.baseMipLevel = i - 1; + barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + + vkCmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, + 0, nullptr, + 0, nullptr, + 1, &barrier); + + VkImageBlit blit{}; + blit.srcOffsets[0] = {0, 0, 0}; + blit.srcOffsets[1] = {mipWidth, mipHeight, 1}; + blit.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + blit.srcSubresource.mipLevel = i - 1; + blit.srcSubresource.baseArrayLayer = 0; + blit.srcSubresource.layerCount = 1; + blit.dstOffsets[0] = {0, 0, 0}; + blit.dstOffsets[1] = {mipWidth > 1 ? mipWidth / 2 : 1, mipHeight > 1 ? mipHeight / 2 : 1, 1}; + blit.dstSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + blit.dstSubresource.mipLevel = i; + blit.dstSubresource.baseArrayLayer = 0; + blit.dstSubresource.layerCount = 1; + + vkCmdBlitImage(commandBuffer, + image.GetImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + image.GetImage(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + 1, &blit, + VK_FILTER_LINEAR); + + barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + barrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + barrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + + vkCmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, + 0, nullptr, + 0, nullptr, + 1, &barrier); + + if (mipWidth > 1) + { + mipWidth /= 2; + } + + if (mipHeight > 1) + { + mipHeight /= 2; + } + } + + barrier.subresourceRange.baseMipLevel = mipLevels - 1; + barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + barrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + + vkCmdPipelineBarrier(commandBuffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, + 0, nullptr, + 0, nullptr, + 1, &barrier); + + VulkanManager::GetInstance()->SubmitCommand(commandBuffer); +} + +LAppTextureManager::TextureInfo* LAppTextureManager::CreateTextureFromPngFile( + std::string fileName, VkFormat format, + VkImageTiling tiling, VkImageUsageFlags usage, VkMemoryPropertyFlags imageProperties) +{ + VkDevice device = VulkanManager::GetInstance()->GetDevice(); + VkPhysicalDevice physicalDevice = VulkanManager::GetInstance()->GetPhysicalDevice(); + + //search loaded texture already. + for (Csm::csmUint32 i = 0; i < _texturesInfo.GetSize(); i++) + { + if (_texturesInfo[i]->FileName == fileName) + { + return _texturesInfo[i]; + } + } + + int width, height, channels; + unsigned int size; + unsigned char* png; + unsigned char* address; + + address = LAppPal::LoadFileAsBytes(fileName, &size); + + // png情報を取得する + png = stbi_load_from_memory( + address, + static_cast(size), + &width, + &height, + &channels, + STBI_rgb_alpha); + { +#ifdef PREMULTIPLIED_ALPHA_ENABLE + unsigned int* fourBytes = reinterpret_cast(png); + for (int i = 0; i < width * height; i++) + { + unsigned char* p = png + i * 4; + fourBytes[i] = Premultiply(p[0], p[1], p[2], p[3]); + } +#endif + } + + VkDeviceSize imageSize = static_cast(width * height * 4); + if (!png) + { + LAppPal::PrintLogLn("could'nt load texture image."); + } + + CubismBufferVulkan stagingBuffer; + stagingBuffer.CreateBuffer(device, physicalDevice, imageSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + stagingBuffer.Map(device, imageSize); + stagingBuffer.MemCpy(png, imageSize); + stagingBuffer.UnMap(device); + + // 解放処理 + stbi_image_free(png); + LAppPal::ReleaseBytes(address); + + _mipLevels = static_cast(std::floor(std::log2(std::max(width, height)))) + 1; + + CubismImageVulkan textureImage; + + textureImage.CreateImage(device, physicalDevice, width, height, _mipLevels, format, tiling, usage); + VkCommandBuffer commandBuffer = VulkanManager::GetInstance()->BeginSingleTimeCommands(); + textureImage.SetImageLayout(commandBuffer, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, _mipLevels, VK_IMAGE_ASPECT_COLOR_BIT); + CopyBufferToImage(commandBuffer, stagingBuffer.GetBuffer(), textureImage.GetImage(), width, height); + VulkanManager::GetInstance()->SubmitCommand(commandBuffer); + GenerateMipmaps(textureImage, width, height, _mipLevels); + textureImage.CreateView(device, format, VK_IMAGE_ASPECT_COLOR_BIT, _mipLevels); + VkPhysicalDeviceProperties properties{}; + vkGetPhysicalDeviceProperties(physicalDevice, &properties); + textureImage.CreateSampler(device, properties.limits.maxSamplerAnisotropy, _mipLevels); + _textures.PushBack(textureImage); + + LAppTextureManager::TextureInfo* textureInfo = new LAppTextureManager::TextureInfo(); + if (textureInfo != NULL) + { + _sequenceId++; + textureInfo->FileName = fileName; + textureInfo->Width = width; + textureInfo->Height = height; + textureInfo->Id = _sequenceId; + _texturesInfo.PushBack(textureInfo); + } + stagingBuffer.Destroy(device); + return textureInfo; +} + +void LAppTextureManager::ReleaseTextures() +{ + VkDevice device = VulkanManager::GetInstance()->GetDevice(); + + for (Csm::csmUint32 i = 0; i < _texturesInfo.GetSize(); i++) + { + _textures[i].Destroy(device); + delete _texturesInfo[i]; + } + + _texturesInfo.Clear(); +} + +void LAppTextureManager::ReleaseTexture(Csm::csmUint32 textureId) +{ + VkDevice device = VulkanManager::GetInstance()->GetDevice(); + + for (Csm::csmUint32 i = 0; i < _texturesInfo.GetSize(); i++) + { + if (_texturesInfo[i]->Id != textureId) + { + continue; + } + // ID一致 + // info除去 + delete _texturesInfo[i]; + + // 実体除去 + VkDevice device = VulkanManager::GetInstance()->GetDevice(); + _textures[i].Destroy(device); + + _texturesInfo.Remove(i); + _textures.Remove(i); + _sequenceId--; + break; + } +} + +void LAppTextureManager::ReleaseTexture(std::string fileName) +{ + for (Csm::csmUint32 i = 0; i < _texturesInfo.GetSize(); i++) + { + if (_texturesInfo[i]->FileName == fileName) + { + // info除去 + delete _texturesInfo[i]; + + // 実体除去 + if (_texturesInfo[i] != VK_NULL_HANDLE) + { + VkDevice device = VulkanManager::GetInstance()->GetDevice(); + _textures[i].Destroy(device); + _texturesInfo[i] = VK_NULL_HANDLE; + } + _texturesInfo.Remove(i); + _texturesInfo.Remove(i); + break; + } + } + if (_texturesInfo.GetSize() == 0) + { + _texturesInfo.Clear(); + } + if (_texturesInfo.GetSize() == 0) + { + _texturesInfo.Clear(); + } + +} + +LAppTextureManager::TextureInfo* LAppTextureManager::GetTextureInfoById(uint32_t textureId) const +{ + for (Csm::csmUint32 i = 0; i < _texturesInfo.GetSize(); i++) + { + if (_texturesInfo[i]->Id == textureId) + { + return _texturesInfo[i]; + } + } + + return NULL; +} + +bool LAppTextureManager::GetTexture(Csm::csmUint64 textureId, CubismImageVulkan& retTexture) const +{ + for (Csm::csmUint32 i = 0; i < _texturesInfo.GetSize(); i++) + { + if (_texturesInfo[i]->Id == textureId) + { + retTexture = _textures[i]; + return true; + } + } + + return false; +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppTextureManager.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppTextureManager.hpp new file mode 100644 index 0000000..0ca4acf --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppTextureManager.hpp @@ -0,0 +1,150 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once +#include +#include +#include +#include + +/** +* @brief テクスチャ管理クラス +* +* 画像読み込み、管理を行うクラス。 +*/ +class LAppTextureManager +{ +public: + /** + * @brief 画像情報構造体 + */ + struct TextureInfo + { + uint32_t Id; ///< テクスチャID + int Width = 0; ///< 横幅 + int Height = 0; ///< 高さ + std::string FileName; ///< ファイル名 + }; + + /** + * @brief コンストラクタ + */ + LAppTextureManager(); + + /** + * @brief デストラクタ + * + */ + ~LAppTextureManager(); + + /** + * @brief プリマルチプライ処理 + * + * @param[in] red 画像のRed値 + * @param[in] green 画像のGreen値 + * @param[in] blue 画像のBlue値 + * @param[in] alpha 画像のAlpha値 + * + * @return プリマルチプライ処理後のカラー値 + */ + inline unsigned int Premultiply(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) + { + return static_cast(\ + (red * (alpha + 1) >> 8) | \ + ((green * (alpha + 1) >> 8) << 8) | \ + ((blue * (alpha + 1) >> 8) << 16) | \ + (((alpha)) << 24) \ + ); + } + + /** + * @brief バッファをイメージにコピーする + * + * @param[in] commandBuffer コマンドバッファ + * @param[in] buffer バッファ + * @param[in] image イメージ + * @param[in] width 画像の横幅 + * @param[in] height 画像の縦幅 + */ + void CopyBufferToImage(VkCommandBuffer commandBuffer, const VkBuffer& buffer, VkImage image, uint32_t width, + uint32_t height); + + /** + * @brief ミップマップを作成する + * + * @param[in] image イメージ + * @param[in] texWidth 画像の幅 + * @param[in] texHeight 画像の高さ + * @param[in] mipLevels ミップレべル + */ + void GenerateMipmaps(Live2D::Cubism::Framework::CubismImageVulkan image, uint32_t texWidth, uint32_t texHeight, + uint32_t mipLevels); + + /** + * @brief 画像ファイルを読み込む + * + * @param[in] fileName 読み込む画像ファイルパス名 + * @param[in] format 画像フォーマット + * @param[in] tiling 画像データのタイリング配置の設定 + * @param[in] usage     画像の使用フラグ + * @param[in] imageProperties + * + * @return 作成したイメージのリソース。読み込み失敗時はNULLを返す。 + */ + TextureInfo* CreateTextureFromPngFile( + std::string fileName, + VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, VkMemoryPropertyFlags imageProperties + ); + + /** + * @brief 画像の解放 + * + * 配列に存在する画像全てを解放する + */ + void ReleaseTextures(); + + /** + * @brief 画像の解放 + * + * 指定したテクスチャIDの画像を解放する + * @param[in] textureId 解放するテクスチャID + **/ + void ReleaseTexture(Csm::csmUint32 textureId); + + /** + * @brief 画像の解放 + * + * 指定した名前の画像を解放する + * @param[in] fileName 解放する画像ファイルパス名 + **/ + void ReleaseTexture(std::string fileName); + + /** + * @brief テクスチャIDからテクスチャ情報を得る + * + * @param textureId[in] 取得したいテクスチャID + * + * @return テクスチャが存在していればTextureInfoが返る + */ + TextureInfo* GetTextureInfoById(uint32_t textureId) const; + + /** + * @brief テクスチャIDからテクスチャ情報を得る + * + * @param textureId[in] 取得したいテクスチャID + * @param retTexture 取得したいテクスチャを入れる変数 + * + * @return テクスチャが存在していればTextureInfoが返る + */ + bool GetTexture(Csm::csmUint64 textureId, Live2D::Cubism::Framework::CubismImageVulkan& retTexture) const; + +private: + Csm::csmVector _texturesInfo; + Csm::csmVector _textures; + Csm::csmUint32 _sequenceId; ///< イメージのインデックス + uint32_t _mipLevels; ///< ミップレベル +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppView.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppView.cpp new file mode 100644 index 0000000..58a3949 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppView.cpp @@ -0,0 +1,762 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppView.hpp" +#include +#include +#include "LAppPal.hpp" +#include "LAppDelegate.hpp" +#include "LAppLive2DManager.hpp" +#include "LAppTextureManager.hpp" +#include "LAppDefine.hpp" +#include "TouchManager.hpp" +#include "LAppSprite.hpp" +#include "LAppModel.hpp" + +using namespace std; +using namespace LAppDefine; + +LAppView::LAppView(): + _back(NULL), + _gear(NULL), + _power(NULL), + _renderSprite(NULL), + _renderTarget(SelectTarget_None), + _fragShaderModule(VK_NULL_HANDLE), + _vertShaderModule(VK_NULL_HANDLE), + _descriptorSetLayout(VK_NULL_HANDLE), + _pipeline(VK_NULL_HANDLE), + _pipelineLayout(VK_NULL_HANDLE) +{ + _clearColor[0] = 1.0f; + _clearColor[1] = 1.0f; + _clearColor[2] = 1.0f; + _clearColor[3] = 0.0f; + + // タッチ関係のイベント管理 + _touchManager = new TouchManager(); + + // デバイス座標からスクリーン座標に変換するための + _deviceToScreen = new CubismMatrix44(); + + // 画面の表示の拡大縮小や移動の変換を行う行列 + _viewMatrix = new CubismViewMatrix(); +} + +LAppView::~LAppView() +{ + VkDevice device = VulkanManager::GetInstance()->GetDevice(); + Cleanup(device); + vkDestroyDescriptorSetLayout(device, _descriptorSetLayout, nullptr); + vkDestroyShaderModule(device, _vertShaderModule, nullptr); + vkDestroyShaderModule(device, _fragShaderModule, nullptr); + _renderBuffer.DestroyOffscreenSurface(device); + delete _viewMatrix; + delete _deviceToScreen; + delete _touchManager; + + _back->Release(device); + _gear->Release(device); + _power->Release(device); + _renderSprite->Release(device); + delete _back; + delete _gear; + delete _power; + delete _renderSprite; +} + +void LAppView::Initialize() +{ + int width, height; + glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); + + if(width==0 || height==0) + { + return; + } + + // 縦サイズを基準とする + float ratio = static_cast(width) / static_cast(height); + float left = -ratio; + float right = ratio; + float bottom = ViewLogicalLeft; + float top = ViewLogicalRight; + + _viewMatrix->SetScreenRect(left, right, bottom, top); // デバイスに対応する画面の範囲。 Xの左端, Xの右端, Yの下端, Yの上端 + _viewMatrix->Scale(ViewScale, ViewScale); + + _deviceToScreen->LoadIdentity(); + if (width > height) + { + float screenW = fabsf(right - left); + _deviceToScreen->ScaleRelative(screenW / width, -screenW / width); + } + else + { + float screenH = fabsf(top - bottom); + _deviceToScreen->ScaleRelative(screenH / height, -screenH / height); + } + _deviceToScreen->TranslateRelative(-width * 0.5f, -height * 0.5f); + + // 表示範囲の設定 + _viewMatrix->SetMaxScale(ViewMaxScale); // 限界拡大率 + _viewMatrix->SetMinScale(ViewMinScale); // 限界縮小率 + + // 表示できる最大範囲 + _viewMatrix->SetMaxScreenRect( + ViewLogicalMaxLeft, + ViewLogicalMaxRight, + ViewLogicalMaxBottom, + ViewLogicalMaxTop + ); +} + +void LAppView::ChangeBeginLayout(VkCommandBuffer commandBuffer) +{ + VulkanManager* vkManager = VulkanManager::GetInstance(); + VkImageMemoryBarrier memoryBarrier{}; + memoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + memoryBarrier.srcAccessMask = 0; + memoryBarrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + memoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + memoryBarrier.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + memoryBarrier.image = vkManager->GetSwapchainImage(); + memoryBarrier.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }; + vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, 0, nullptr, 0, nullptr, 1, &memoryBarrier); +} + +void LAppView::BeginRendering(VkCommandBuffer commandBuffer, float r, float g, float b, float a, bool isClear) +{ + VulkanManager* vkManager = VulkanManager::GetInstance(); + VkRenderingAttachmentInfoKHR colorAttachment{}; + colorAttachment.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR; + colorAttachment.imageView = vkManager->GetSwapchainImageView(); + colorAttachment.imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL; + if (isClear) + { + colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; + } + else + { + colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; + } + colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE; + colorAttachment.clearValue = {r, g, b, a}; + + VkRenderingInfo renderingInfo{}; + renderingInfo.sType = VK_STRUCTURE_TYPE_RENDERING_INFO; + renderingInfo.renderArea = {{0, 0}, {vkManager->GetSwapchainManager()->GetExtent()}}; + renderingInfo.layerCount = 1; + renderingInfo.colorAttachmentCount = 1; + renderingInfo.pColorAttachments = &colorAttachment; + + vkCmdBeginRendering(commandBuffer, &renderingInfo); +} + +void LAppView::ChangeEndLayout(VkCommandBuffer commandBuffer) +{ + VulkanManager* vkManager = VulkanManager::GetInstance(); + VkImageMemoryBarrier memoryBarrier{}; + memoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + memoryBarrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + memoryBarrier.dstAccessMask = 0; + memoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + memoryBarrier.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; + memoryBarrier.image = vkManager->GetSwapchainImage(); + memoryBarrier.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }; + vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &memoryBarrier); +} + +void LAppView::EndRendering(VkCommandBuffer commandBuffer) +{ + vkCmdEndRendering(commandBuffer); +} + +void LAppView::Render() +{ + LAppLive2DManager* live2DManager = LAppLive2DManager::GetInstance(); + if (!live2DManager) + { + return; + } + + //スプライト描画 + int width, height; + glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); + VulkanManager* vkManager = VulkanManager::GetInstance(); + VkCommandBuffer commandBuffer = vkManager->BeginSingleTimeCommands(); + ChangeBeginLayout(commandBuffer); + BeginRendering(commandBuffer, 0.0, 0.0, 0.0, 1.0, true); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _pipeline); + _back->Render(commandBuffer, _pipelineLayout, vkManager, width, height); + _gear->Render(commandBuffer, _pipelineLayout, vkManager, width, height); + _power->Render(commandBuffer, _pipelineLayout, vkManager, width, height); + EndRendering(commandBuffer); + vkManager->SubmitCommand(commandBuffer, true); + + live2DManager->SetViewMatrix(_viewMatrix); + + // Cubism更新・描画 + live2DManager->OnUpdate(); + + // 各モデルが持つ描画ターゲットをテクスチャとする場合 + if (_renderTarget == SelectTarget_ModelFrameBuffer && _renderSprite) + { + for (csmUint32 i = 0; i < live2DManager->GetModelNum(); i++) + { + LAppModel* model = live2DManager->GetModel(i); + commandBuffer = vkManager->BeginSingleTimeCommands(); + _renderSprite->SetDescriptorUpdated(false); + _renderSprite->UpdateDescriptorSet(vkManager->GetDevice(), + model->GetRenderBuffer().GetTextureView(), + model->GetRenderBuffer().GetTextureSampler()); + BeginRendering(commandBuffer, 0.f, 0.f, 0.3, 1.f, false); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _pipeline); + + float alpha = i < 1 ? 1.0f : model->GetOpacity(); // サンプルとしてαに適当な差をつける + _renderSprite->SetColor(1.0f, 1.0f, 1.0f, alpha); + if (model) + { + _renderSprite->Render(commandBuffer, _pipelineLayout, vkManager, width, height); + } + EndRendering(commandBuffer); + vkManager->SubmitCommand(commandBuffer); + } + } + + commandBuffer = vkManager->BeginSingleTimeCommands(); + ChangeEndLayout(commandBuffer); + vkManager->SubmitCommand(commandBuffer); +} + +VkShaderModule LAppView::CreateShaderModule(VkDevice device, std::string filename) +{ + std::ifstream file(filename, std::ios::ate | std::ios::binary); + + if (!file.is_open()) + { + CubismLogError("failed to open file!"); + } + + csmInt32 fileSize = (csmInt32)file.tellg(); + csmVector buffer(fileSize); + + file.seekg(0); + file.read(buffer.GetPtr(), fileSize); + file.close(); + + VkShaderModuleCreateInfo createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + createInfo.codeSize = fileSize; + createInfo.pCode = reinterpret_cast(buffer.GetPtr()); + + VkShaderModule shaderModule; + if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) + { + CubismLogError("failed to create shader module!"); + } + + return shaderModule; +} + +void LAppView::CreateDescriptorSetLayout(VkDevice device) +{ + VkDescriptorSetLayoutBinding bindings[2]; + + bindings[0].binding = 0; + bindings[0].descriptorCount = 1; + bindings[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + bindings[0].pImmutableSamplers = nullptr; + bindings[0].stageFlags = VK_SHADER_STAGE_ALL; + + bindings[1].binding = 1; + bindings[1].descriptorCount = 1; + bindings[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + bindings[1].pImmutableSamplers = nullptr; + bindings[1].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; + + VkDescriptorSetLayoutCreateInfo layoutInfo{}; + layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + layoutInfo.bindingCount = sizeof(bindings) / sizeof(bindings[0]); + layoutInfo.pBindings = bindings; + + if (vkCreateDescriptorSetLayout(device, &layoutInfo, nullptr, &_descriptorSetLayout) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create descriptor set layout!"); + } +} + +void LAppView::CreateSpriteGraphicsPipeline(VkDevice device, VkExtent2D extent, VkShaderModule vertShaderModule, + VkShaderModule fragShaderModule, VkFormat swapchainFormat) +{ + VkPipelineShaderStageCreateInfo vertShaderStageInfo{}; + vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; + vertShaderStageInfo.module = vertShaderModule; + vertShaderStageInfo.pName = "main"; + + VkPipelineShaderStageCreateInfo fragShaderStageInfo{}; + fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT; + fragShaderStageInfo.module = fragShaderModule; + fragShaderStageInfo.pName = "main"; + + VkPipelineShaderStageCreateInfo shaderStages[] = {vertShaderStageInfo, fragShaderStageInfo}; + + VkPipelineVertexInputStateCreateInfo vertexInputInfo{}; + vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; + + VkVertexInputBindingDescription bindingDescription = LAppSprite::SpriteVertex::GetBindingDescription(); + VkVertexInputAttributeDescription attributeDescriptions[2]{}; + LAppSprite::SpriteVertex::GetAttributeDescriptions(attributeDescriptions); + vertexInputInfo.vertexBindingDescriptionCount = 1; + vertexInputInfo.pVertexBindingDescriptions = &bindingDescription; + vertexInputInfo.vertexAttributeDescriptionCount = sizeof(attributeDescriptions) / sizeof(attributeDescriptions[0]); + vertexInputInfo.pVertexAttributeDescriptions = attributeDescriptions; + + VkPipelineInputAssemblyStateCreateInfo inputAssembly{}; + inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + inputAssembly.primitiveRestartEnable = VK_FALSE; + + VkRect2D scissor{}; + scissor.offset = {0, 0}; + scissor.extent = extent; + + VkViewport viewport{}; + viewport.x = 0.0f; + viewport.y = 0.0f; + viewport.width = (float)scissor.extent.width; + viewport.height = (float)scissor.extent.height; + viewport.minDepth = 0.0f; + viewport.maxDepth = 1.0f; + + VkPipelineViewportStateCreateInfo viewportState{}; + viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + viewportState.viewportCount = 1; + viewportState.pViewports = &viewport; + viewportState.scissorCount = 1; + viewportState.pScissors = &scissor; + + VkPipelineRasterizationStateCreateInfo rasterizer{}; + rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; + rasterizer.depthClampEnable = VK_FALSE; + rasterizer.rasterizerDiscardEnable = VK_FALSE; + rasterizer.polygonMode = VK_POLYGON_MODE_FILL; + rasterizer.lineWidth = 1.0f; + rasterizer.cullMode = VK_CULL_MODE_BACK_BIT; + rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; + rasterizer.depthBiasEnable = VK_FALSE; + + VkPipelineMultisampleStateCreateInfo multisampling{}; + multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + multisampling.sampleShadingEnable = VK_FALSE; + multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + + VkPipelineColorBlendAttachmentState colorBlendAttachment{}; + colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT + | VK_COLOR_COMPONENT_A_BIT; + colorBlendAttachment.blendEnable = VK_TRUE; + colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; + colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + colorBlendAttachment.colorBlendOp = VK_BLEND_OP_ADD; + colorBlendAttachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; + colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD; + + VkPipelineColorBlendStateCreateInfo colorBlending{}; + colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + colorBlending.logicOpEnable = VK_FALSE; + colorBlending.logicOp = VK_LOGIC_OP_COPY; + colorBlending.attachmentCount = 1; + colorBlending.pAttachments = &colorBlendAttachment; + + VkPipelineLayoutCreateInfo pipelineLayoutInfo{}; + pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + pipelineLayoutInfo.setLayoutCount = 1; + pipelineLayoutInfo.pSetLayouts = &_descriptorSetLayout; + + if (vkCreatePipelineLayout(device, &pipelineLayoutInfo, nullptr, &_pipelineLayout) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create pipeline layout!"); + } + + VkPipelineRenderingCreateInfo renderingInfo{}; + renderingInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO; + renderingInfo.colorAttachmentCount = 1; + renderingInfo.pColorAttachmentFormats = &swapchainFormat; + + VkGraphicsPipelineCreateInfo pipelineInfo{}; + pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + pipelineInfo.stageCount = 2; + pipelineInfo.pStages = shaderStages; + pipelineInfo.pVertexInputState = &vertexInputInfo; + pipelineInfo.pInputAssemblyState = &inputAssembly; + pipelineInfo.pViewportState = &viewportState; + pipelineInfo.pRasterizationState = &rasterizer; + pipelineInfo.pMultisampleState = &multisampling; + pipelineInfo.pColorBlendState = &colorBlending; + pipelineInfo.layout = _pipelineLayout; + pipelineInfo.subpass = 0; + pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; + pipelineInfo.pNext = &renderingInfo; + + if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &_pipeline) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create graphics pipeline!"); + } +} + +void LAppView::InitializeSprite() +{ + VulkanManager* vkManager = VulkanManager::GetInstance(); + VkDevice device = vkManager->GetDevice(); + VkPhysicalDevice physicalDevice = vkManager->GetPhysicalDevice(); + SwapchainManager* swapchainManager = vkManager->GetSwapchainManager(); + _vertShaderModule = CreateShaderModule(device, "SampleShaders/VertSprite.spv"); + _fragShaderModule = CreateShaderModule(device, "SampleShaders/FragSprite.spv"); + CreateDescriptorSetLayout(device); + CreateSpriteGraphicsPipeline(device, swapchainManager->GetExtent(), _vertShaderModule, _fragShaderModule, + vkManager->GetSwapchainManager()->GetSwapchainImageFormat()); + + int width, height; + glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); + + LAppTextureManager* textureManager = LAppDelegate::GetInstance()->GetTextureManager(); + const string resourcesPath = LAppDelegate::GetInstance()->GetExecuteAbsolutePath() + ResourcesPath; + + string imageName; + CubismImageVulkan textureImage; + float x; + float y; + float fWidth; + float fHeight; + + imageName = BackImageName; + LAppTextureManager::TextureInfo* backgroundTexture = textureManager->CreateTextureFromPngFile( + resourcesPath + imageName, vkManager->GetTextureFormat(), VK_IMAGE_TILING_OPTIMAL, + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + LAppDelegate::GetInstance()->GetTextureManager()->GetTexture(backgroundTexture->Id, textureImage); + + x = width * 0.5f; + y = height * 0.5f; + fWidth = static_cast(backgroundTexture->Width * 2.0f); + fHeight = static_cast(height * 0.95f); + _back = new LAppSprite(device, physicalDevice, vkManager, x, y, fWidth, fHeight, backgroundTexture->Id, + textureImage.GetView(), textureImage.GetSampler(), _descriptorSetLayout); + + imageName = GearImageName; + LAppTextureManager::TextureInfo* gearTexture = textureManager->CreateTextureFromPngFile( + resourcesPath + imageName, vkManager->GetTextureFormat(), VK_IMAGE_TILING_OPTIMAL, + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + LAppDelegate::GetInstance()->GetTextureManager()->GetTexture(gearTexture->Id, textureImage); + + //X:右向き正、Y:下向き正 + x = static_cast(width - gearTexture->Width * 0.5f); + y = static_cast(gearTexture->Height * 0.5f); + fWidth = static_cast(gearTexture->Width); + fHeight = static_cast(gearTexture->Height); + _gear = new LAppSprite(device, physicalDevice, vkManager, x, y, fWidth, fHeight, gearTexture->Id, + textureImage.GetView(), textureImage.GetSampler(), _descriptorSetLayout); + + imageName = PowerImageName; + LAppTextureManager::TextureInfo* powerTexture = textureManager->CreateTextureFromPngFile( + resourcesPath + imageName, vkManager->GetTextureFormat(), VK_IMAGE_TILING_OPTIMAL, + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + LAppDelegate::GetInstance()->GetTextureManager()->GetTexture(powerTexture->Id, textureImage); + + //X:右向き正、Y:下向き正 + x = static_cast(width - powerTexture->Width * 0.5f); + y = static_cast(height - powerTexture->Height * 0.5f); + fWidth = static_cast(powerTexture->Width); + fHeight = static_cast(powerTexture->Height); + _power = new LAppSprite(device, physicalDevice, vkManager, x, y, fWidth, fHeight, powerTexture->Id, + textureImage.GetView(), textureImage.GetSampler(), _descriptorSetLayout); + + // 画面全体を覆うサイズ + x = width * 0.5f; + y = height * 0.5f; + _renderSprite = new LAppSprite(device, physicalDevice, vkManager, x, y, static_cast(width), static_cast(height),0, NULL, NULL, _descriptorSetLayout); +} + +void LAppView::OnTouchesBegan(float px, float py) const +{ + _touchManager->TouchesBegan(px, py); +} + +void LAppView::OnTouchesMoved(float px, float py) const +{ + float viewX = this->TransformViewX(_touchManager->GetX()); + float viewY = this->TransformViewY(_touchManager->GetY()); + + _touchManager->TouchesMoved(px, py); + + LAppLive2DManager* Live2DManager = LAppLive2DManager::GetInstance(); + Live2DManager->OnDrag(viewX, viewY); +} + +void LAppView::OnTouchesEnded(float px, float py) const +{ + // タッチ終了 + LAppLive2DManager* live2DManager = LAppLive2DManager::GetInstance(); + live2DManager->OnDrag(0.0f, 0.0f); + { + // シングルタップ + float x = _deviceToScreen->TransformX(_touchManager->GetX()); // 論理座標変換した座標を取得。 + float y = _deviceToScreen->TransformY(_touchManager->GetY()); // 論理座標変換した座標を取得。 + if (DebugTouchLogEnable) + { + LAppPal::PrintLogLn("[APP]touchesEnded x:%.2f y:%.2f", x, y); + } + live2DManager->OnTap(x, y); + + // 画面サイズの取得 + int windowWidth, windowHeight; + glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &windowWidth, &windowHeight); + + // 歯車にタップしたか + if (_gear->IsHit(windowWidth, windowHeight, px, py)) + { + live2DManager->NextScene(); + } + + // 電源ボタンにタップしたか + if (_power->IsHit(windowWidth, windowHeight, px, py)) + { + LAppDelegate::GetInstance()->AppEnd(); + } + } +} + +float LAppView::TransformViewX(float deviceX) const +{ + float screenX = _deviceToScreen->TransformX(deviceX); // 論理座標変換した座標を取得。 + return _viewMatrix->InvertTransformX(screenX); // 拡大、縮小、移動後の値。 +} + +float LAppView::TransformViewY(float deviceY) const +{ + float screenY = _deviceToScreen->TransformY(deviceY); // 論理座標変換した座標を取得。 + return _viewMatrix->InvertTransformY(screenY); // 拡大、縮小、移動後の値。 +} + +float LAppView::TransformScreenX(float deviceX) const +{ + return _deviceToScreen->TransformX(deviceX); +} + +float LAppView::TransformScreenY(float deviceY) const +{ + return _deviceToScreen->TransformY(deviceY); +} + +void LAppView::PreModelDraw(LAppModel &refModel) +{ + if (_renderTarget == SelectTarget_None) + { + // 通常のスワップチェーンイメージへと描画 + VulkanManager* vkManager = VulkanManager::GetInstance(); + Csm::Rendering::CubismRenderer_Vulkan::SetRenderTarget(vkManager->GetSwapchainImage(), + vkManager->GetSwapchainImageView(), + vkManager->GetSwapchainManager()->GetSwapchainImageFormat(), + vkManager->GetSwapchainManager()->GetExtent()); + } + else + { + // 別のレンダリングターゲットへ向けて描画する場合の使用するフレームバッファ + Csm::Rendering::CubismOffscreenSurface_Vulkan* useTarget = NULL; + // 使用するターゲット + useTarget = (_renderTarget == SelectTarget_ViewFrameBuffer) ? &_renderBuffer : &refModel.GetRenderBuffer(); + + // 別のレンダリングターゲットへ向けて描画する場合 + if (!useTarget->IsValid()) + { + // 描画ターゲット内部未作成の場合はここで作成 + int bufWidth, bufHeight; + glfwGetFramebufferSize(LAppDelegate::GetInstance()->GetWindow(), &bufWidth, &bufHeight); + VulkanManager* vkManager = VulkanManager::GetInstance(); + if(bufWidth!=0 && bufHeight!=0) + { + // モデル描画キャンバス + useTarget->CreateOffscreenSurface(vkManager->GetDevice(), vkManager->GetPhysicalDevice(), + static_cast(bufWidth), static_cast(bufHeight), + vkManager->GetImageFormat(), + vkManager->GetDepthFormat() + ); + _renderSprite->SetDescriptorUpdated(false); + } + } + Csm::Rendering::CubismRenderer_Vulkan::SetRenderTarget(useTarget->GetTextureImage(), useTarget->GetTextureView(), + VulkanManager::GetInstance()->GetImageFormat(), + VkExtent2D{useTarget->GetBufferWidth(), useTarget->GetBufferHeight()}); + } +} + +void LAppView::PostModelDraw(LAppModel &refModel) +{ + // 別のレンダリングターゲットへ向けて描画する場合の使用するフレームバッファ + Csm::Rendering::CubismOffscreenSurface_Vulkan* useTarget = NULL; + + if (_renderTarget != SelectTarget_None) + { + // 別のレンダリングターゲットへ向けて描画する場合 + + // 使用するターゲット + useTarget = (_renderTarget == SelectTarget_ViewFrameBuffer) ? &_renderBuffer : &refModel.GetRenderBuffer(); + + // LAppViewの持つフレームバッファを使うなら、スプライトへの描画はここ + if (_renderTarget == SelectTarget_ViewFrameBuffer && _renderSprite) + { + int width, height; + glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); + VulkanManager* vkManager = VulkanManager::GetInstance(); + VkCommandBuffer commandBuffer = vkManager->BeginSingleTimeCommands(); + _renderSprite->UpdateDescriptorSet(vkManager->GetDevice(), useTarget->GetTextureView(), + useTarget->GetTextureSampler()); + BeginRendering(commandBuffer, 0.f, 0.f, 0.3, 1.f, false); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _pipeline); + _renderSprite->SetColor(1.0f, 1.0f, 1.0f, GetSpriteAlpha(0)); + _renderSprite->Render(commandBuffer, _pipelineLayout, vkManager, width, height); + EndRendering(commandBuffer); + vkManager->SubmitCommand(commandBuffer); + } + } + + // レンダーターゲットをスワップチェーンのものへと戻す + VulkanManager* vkManager = VulkanManager::GetInstance(); + Csm::Rendering::CubismRenderer_Vulkan::SetRenderTarget(vkManager->GetSwapchainImage(), + vkManager->GetSwapchainImageView(), + vkManager->GetSwapchainManager()->GetSwapchainImageFormat(), + vkManager->GetSwapchainManager()->GetExtent()); +} + +void LAppView::SwitchRenderingTarget(SelectTarget targetType) +{ + _renderTarget = targetType; +} + +void LAppView::SetRenderTargetClearColor(float r, float g, float b) +{ + _clearColor[0] = r; + _clearColor[1] = g; + _clearColor[2] = b; +} + +float LAppView::GetSpriteAlpha(int assign) const +{ + // assignの数値に応じて適当に決定 + float alpha = 0.25f + static_cast(assign) * 0.5f; // サンプルとしてαに適当な差をつける + if (alpha > 1.0f) + { + alpha = 1.0f; + } + if (alpha < 0.1f) + { + alpha = 0.1f; + } + + return alpha; +} + +void LAppView::Cleanup(VkDevice device) +{ + vkDestroyPipelineLayout(device, _pipelineLayout, nullptr); + vkDestroyPipeline(device, _pipeline, nullptr); +} + +void LAppView::ResizeSprite(int width, int height) +{ + VulkanManager* vkManager = VulkanManager::GetInstance(); + VkDevice device = vkManager->GetDevice(); + SwapchainManager* swapchainManager = vkManager->GetSwapchainManager(); + Cleanup(device); + CreateSpriteGraphicsPipeline(device, swapchainManager->GetExtent(), _vertShaderModule, _fragShaderModule, + vkManager->GetSwapchainManager()->GetSwapchainImageFormat()); + + LAppTextureManager* textureManager = LAppDelegate::GetInstance()->GetTextureManager(); + if (!textureManager) + { + return; + } + + float x = 0.0f; + float y = 0.0f; + float fWidth = 0.0f; + float fHeight = 0.0f; + + if (_back) + { + uint32_t id = _back->GetTextureId(); + LAppTextureManager::TextureInfo* texInfo = textureManager->GetTextureInfoById(id); + if (texInfo) + { + x = width * 0.5f; + y = height * 0.5f; + fWidth = static_cast(texInfo->Width * 2); + fHeight = static_cast(height) * 0.95f; + _back->ResetRect(x, y, fWidth, fHeight); + } + } + + if (_power) + { + uint32_t id = _power->GetTextureId(); + LAppTextureManager::TextureInfo* texInfo = textureManager->GetTextureInfoById(id); + if (texInfo) + { + x = static_cast(width - texInfo->Width * 0.5f); + y = static_cast(height - texInfo->Height * 0.5f); + fWidth = static_cast(texInfo->Width); + fHeight = static_cast(texInfo->Height); + _power->ResetRect(x, y, fWidth, fHeight); + } + } + + if (_gear) + { + uint32_t id = _gear->GetTextureId(); + LAppTextureManager::TextureInfo* texInfo = textureManager->GetTextureInfoById(id); + if (texInfo) + { + x = static_cast(width - texInfo->Width * 0.5f); + y = static_cast(texInfo->Height * 0.5f); + fWidth = static_cast(texInfo->Width); + fHeight = static_cast(texInfo->Height); + _gear->ResetRect(x, y, fWidth, fHeight); + } + } + + if (_renderSprite) + { + x = width * 0.5f; + y = height * 0.5f; + _renderSprite->ResetRect(x, y, static_cast(width), static_cast(height)); + } +} + +void LAppView::DestroyOffscreenSurface() +{ + LAppLive2DManager* live2DManager = LAppLive2DManager::GetInstance(); + if (_renderTarget == SelectTarget_ViewFrameBuffer) + { + _renderBuffer.DestroyOffscreenSurface(VulkanManager::GetInstance()->GetDevice()); + } + else if (_renderTarget == SelectTarget_ModelFrameBuffer) + { + for (csmUint32 i = 0; i < live2DManager->GetModelNum(); i++) + { + LAppModel* model = live2DManager->GetModel(i); + model->GetRenderBuffer(). + DestroyOffscreenSurface(VulkanManager::GetInstance()->GetDevice()); + } + } +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppView.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppView.hpp new file mode 100644 index 0000000..3afe1b3 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppView.hpp @@ -0,0 +1,241 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once +#include +#include +#include +#include +#include "CubismFramework.hpp" + +class TouchManager; +class LAppSprite; +class LAppModel; + +/** +* @brief 描画クラス +*/ +class LAppView +{ +public: + + /** + * @brief LAppModelのレンダリング先 + */ + enum SelectTarget + { + SelectTarget_None, ///< デフォルトのフレームバッファにレンダリング + SelectTarget_ModelFrameBuffer, ///< LAppModelが各自持つフレームバッファにレンダリング + SelectTarget_ViewFrameBuffer, ///< LAppViewの持つフレームバッファにレンダリング + }; + + /** + * @brief コンストラクタ + */ + LAppView(); + + /** + * @brief デストラクタ + */ + ~LAppView(); + + /** + * @brief 初期化する。 + */ + void Initialize(); + + /** + * @brief レイアウトを変更する。 + * @param[in] commandBuffer -> コマンドバッファ + */ + void ChangeBeginLayout(VkCommandBuffer commandBuffer); + + /** + * @brief レイアウトを変更する。 + * @param[in] commandBuffer -> コマンドバッファ + */ + void ChangeEndLayout(VkCommandBuffer commandBuffer); + + /** + * @brief レンダリングを開始する。 + * @param[in] commandBuffer -> コマンドバッファ + * @param[in] r -> r + * @param[in] g -> g + * @param[in] b -> b + * @param[in] a -> a + * @param[in] isClear -> クリアするかのフラグ + */ + void BeginRendering(VkCommandBuffer commandBuffer, float r, float g, float b, float a, bool isClear); + + + /** + * @brief レンダリングを終了する。 + * + * @param[in] commandBuffer -> コマンドバッファ + */ + void EndRendering(VkCommandBuffer commandBuffer); + + /** + * @brief 描画する。 + */ + void Render(); + /** + * @brief シェーダーモジュ―ルを作成する + * + * @param[in] device -> デバイス + * @param[in] filename -> シェーダーのファイル名 + */ + VkShaderModule CreateShaderModule(VkDevice device, std::string filename); + + /** + * @brief スプライト用のディスクリプタセットのレイアウトを作成する。 + * + * @param[in] device 論理デバイス + */ + void CreateDescriptorSetLayout(VkDevice device); + + /** + * @brief スプライト用のパイプラインを作成する。 + * + * @param[in] device デバイス + * @param[in] extent フレームバッファのサイズ + * @param[in] vertShaderModule 頂点シェーダのモジュール + * @param[in] fragShaderModule フラグメントシェーダのモジュール + */ + void CreateSpriteGraphicsPipeline(VkDevice device, VkExtent2D extent, VkShaderModule vertShaderModule, + VkShaderModule fragShaderModule, VkFormat swapchainFormat); + + /** + * @brief 画像の初期化を行う。 + */ + void InitializeSprite(); + + /** + * @brief タッチされたときに呼ばれる。 + * + * @param[in] pointX スクリーンX座標 + * @param[in] pointY スクリーンY座標 + */ + void OnTouchesBegan(float pointX, float pointY) const; + + /** + * @brief タッチしているときにポインタが動いたら呼ばれる。 + * + * @param[in] pointX スクリーンX座標 + * @param[in] pointY スクリーンY座標 + */ + void OnTouchesMoved(float pointX, float pointY) const; + + /** + * @brief タッチが終了したら呼ばれる。 + * + * @param[in] pointX スクリーンX座標 + * @param[in] pointY スクリーンY座標 + */ + void OnTouchesEnded(float pointX, float pointY) const; + + /** + * @brief X座標をView座標に変換する。 + * + * @param[in] deviceX デバイスX座標 + */ + float TransformViewX(float deviceX) const; + + /** + * @brief Y座標をView座標に変換する。 + * + * @param[in] deviceY デバイスY座標 + */ + float TransformViewY(float deviceY) const; + + /** + * @brief X座標をScreen座標に変換する。 + * + * @param[in] deviceX デバイスX座標 + */ + float TransformScreenX(float deviceX) const; + + /** + * @brief Y座標をScreen座標に変換する。 + * + * @param[in] deviceY デバイスY座標 + */ + float TransformScreenY(float deviceY) const; + + /** + * @brief モデル1体を描画した直後にコールされる + * + * @param[in] refModel モデルのインスタンス + */ + void PreModelDraw(LAppModel &refModel); + + /** + * @brief モデル1体を描画した直後にコールされる + * + * @param[in] refModel モデルのインスタンス + * @param[in] modelIndex モデルのインデックス + */ + void PostModelDraw(LAppModel &refModel); + + /** + * @brief レンダリング先を切り替える + * @param[in] targetType ターゲットタイプ + */ + void SwitchRenderingTarget(SelectTarget targetType); + + /** + * @brief レンダリング先をデフォルト以外に切り替えた際の背景クリア色設定 + * @param[in] r 赤(0.0~1.0) + * @param[in] g 緑(0.0~1.0) + * @param[in] b 青(0.0~1.0) + */ + void SetRenderTargetClearColor(float r, float g, float b); + /** + * @brief 別レンダリングターゲットにモデルを描画するサンプルで + * 描画時のαを決定する + */ + float GetSpriteAlpha(int assign) const; + + /** + * @brief ウィンドウサイズ変更の際にリソースを破棄する。 + * + * @param[in] device デバイス + */ + void Cleanup(VkDevice device); + + /** + * @brief ウィンドウサイズ変更の際にスプライトを再作成する + * + * @param[in] width 横幅 + * @param[in] height 縦幅 + */ + void ResizeSprite(int width, int height); + + /** + * @brief オフスクリーンの破棄 + */ + void DestroyOffscreenSurface(); + +private: + TouchManager* _touchManager; ///< タッチマネージャー + Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 + Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix + LAppSprite* _back; ///< 背景画像 + LAppSprite* _gear; ///< ギア画像 + LAppSprite* _power; ///< 電源画像 + + // レンダリング先を別ターゲットにする方式の場合に使用 + LAppSprite* _renderSprite; ///< モードによっては_renderBufferのテクスチャを描画 + Csm::Rendering::CubismOffscreenSurface_Vulkan _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング + SelectTarget _renderTarget; ///< レンダリング先の選択肢 + float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + VkShaderModule _vertShaderModule; ///< 頂点シェーダーモジュール + VkShaderModule _fragShaderModule; ///< フラグメントシェーダーモジュール + VkDescriptorSetLayout _descriptorSetLayout; ///< ディスクリプタセットのレイアウト, UBOが1つとテクスチャが1つずつ + VkPipelineLayout _pipelineLayout; ///< スプライト描画に使うパイプラインのレイアウト + VkPipeline _pipeline; ///< スプライト描画に使うパイプライン +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppWavFileHandler.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppWavFileHandler.cpp new file mode 100644 index 0000000..7bb1ff6 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppWavFileHandler.cpp @@ -0,0 +1,232 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppWavFileHandler.hpp" +#include +#include +#include "LAppPal.hpp" + +LAppWavFileHandler::LAppWavFileHandler() + : _pcmData(NULL) + , _userTimeSeconds(0.0f) + , _lastRms(0.0f) + , _sampleOffset(0) +{ +} + +LAppWavFileHandler::~LAppWavFileHandler() +{ + if (_pcmData != NULL) + { + ReleasePcmData(); + } +} + +Csm::csmBool LAppWavFileHandler::Update(Csm::csmFloat32 deltaTimeSeconds) +{ + Csm::csmUint32 goalOffset; + Csm::csmFloat32 rms; + + // データロード前/ファイル末尾に達した場合は更新しない + if ((_pcmData == NULL) || (_sampleOffset >= _wavFileInfo._samplesPerChannel)) + { + _lastRms = 0.0f; + return false; + } + + // 経過時間後の状態を保持 + _userTimeSeconds += deltaTimeSeconds; + goalOffset = static_cast(_userTimeSeconds * _wavFileInfo._samplingRate); + if (goalOffset > _wavFileInfo._samplesPerChannel) + { + goalOffset = _wavFileInfo._samplesPerChannel; + } + + // RMS計測 + rms = 0.0f; + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + for (Csm::csmUint32 sampleCount = _sampleOffset; sampleCount < goalOffset; sampleCount++) + { + Csm::csmFloat32 pcm = _pcmData[channelCount][sampleCount]; + rms += pcm * pcm; + } + } + rms = sqrt(rms / (_wavFileInfo._numberOfChannels * (goalOffset - _sampleOffset))); + + _lastRms = rms; + _sampleOffset = goalOffset; + return true; +} + +void LAppWavFileHandler::Start(const Csm::csmString& filePath) +{ + // WAVファイルのロード + if (!LoadWavFile(filePath)) + { + return; + } + + // サンプル参照位置を初期化 + _sampleOffset = 0; + _userTimeSeconds = 0.0f; + + // RMS値をリセット + _lastRms = 0.0f; +} + +Csm::csmFloat32 LAppWavFileHandler::GetRms() const +{ + return _lastRms; +} + +Csm::csmBool LAppWavFileHandler::LoadWavFile(const Csm::csmString& filePath) +{ + Csm::csmBool ret; + + // 既にwavファイルロード済みならば領域開放 + if (_pcmData != NULL) + { + ReleasePcmData(); + } + + // ファイルロード + _byteReader._fileByte = LAppPal::LoadFileAsBytes(filePath.GetRawString(), &(_byteReader._fileSize)); + _byteReader._readOffset = 0; + + // ファイルロードに失敗しているか、先頭のシグネチャ"RIFF"を入れるサイズもない場合は失敗 + if ((_byteReader._fileByte == NULL) || (_byteReader._fileSize < 4)) + { + return false; + } + + // ファイル名 + _wavFileInfo._fileName = filePath; + + do { + // シグネチャ "RIFF" + if (!_byteReader.GetCheckSignature("RIFF")) + { + ret = false; + break; + } + // ファイルサイズ-8(読み飛ばし) + _byteReader.Get32LittleEndian(); + // シグネチャ "WAVE" + if (!_byteReader.GetCheckSignature("WAVE")) + { + ret = false; + break; + } + // シグネチャ "fmt " + if (!_byteReader.GetCheckSignature("fmt ")) + { + ret = false; + break; + } + // fmtチャンクサイズ + const Csm::csmUint32 fmtChunkSize = _byteReader.Get32LittleEndian(); + // フォーマットIDは1(リニアPCM)以外受け付けない + if (_byteReader.Get16LittleEndian() != 1) + { + ret = false; + break; + } + // チャンネル数 + _wavFileInfo._numberOfChannels = _byteReader.Get16LittleEndian(); + // サンプリングレート + _wavFileInfo._samplingRate = _byteReader.Get32LittleEndian(); + // データ速度[byte/sec](読み飛ばし) + _byteReader.Get32LittleEndian(); + // ブロックサイズ(読み飛ばし) + _byteReader.Get16LittleEndian(); + // 量子化ビット数 + _wavFileInfo._bitsPerSample = _byteReader.Get16LittleEndian(); + // fmtチャンクの拡張部分の読み飛ばし + if (fmtChunkSize > 16) + { + _byteReader._readOffset += (fmtChunkSize - 16); + } + // "data"チャンクが出現するまで読み飛ばし + while (!(_byteReader.GetCheckSignature("data")) + && (_byteReader._readOffset < _byteReader._fileSize)) + { + _byteReader._readOffset += _byteReader.Get32LittleEndian(); + } + // ファイル内に"data"チャンクが出現しなかった + if (_byteReader._readOffset >= _byteReader._fileSize) + { + ret = false; + break; + } + // サンプル数 + { + const Csm::csmUint32 dataChunkSize = _byteReader.Get32LittleEndian(); + _wavFileInfo._samplesPerChannel = (dataChunkSize * 8) / (_wavFileInfo._bitsPerSample * _wavFileInfo._numberOfChannels); + } + // 領域確保 + _pcmData = static_cast(CSM_MALLOC(sizeof(Csm::csmFloat32*) * _wavFileInfo._numberOfChannels)); + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + _pcmData[channelCount] = static_cast(CSM_MALLOC(sizeof(Csm::csmFloat32) * _wavFileInfo._samplesPerChannel)); + } + // 波形データ取得 + for (Csm::csmUint32 sampleCount = 0; sampleCount < _wavFileInfo._samplesPerChannel; sampleCount++) + { + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + _pcmData[channelCount][sampleCount] = GetPcmSample(); + } + } + + ret = true; + + } while (false); + + // ファイル開放 + LAppPal::ReleaseBytes(_byteReader._fileByte); + _byteReader._fileByte = NULL; + _byteReader._fileSize = 0; + + return ret; +} + +Csm::csmFloat32 LAppWavFileHandler::GetPcmSample() +{ + Csm::csmInt32 pcm32; + + // 32ビット幅に拡張してから-1~1の範囲に丸める + switch (_wavFileInfo._bitsPerSample) + { + case 8: + pcm32 = static_cast(_byteReader.Get8()) - 128; + pcm32 <<= 24; + break; + case 16: + pcm32 = _byteReader.Get16LittleEndian() << 16; + break; + case 24: + pcm32 = _byteReader.Get24LittleEndian() << 8; + break; + default: + // 対応していないビット幅 + pcm32 = 0; + break; + } + + return static_cast(pcm32) / INT32_MAX; +} + +void LAppWavFileHandler::ReleasePcmData() +{ + for (Csm::csmUint32 channelCount = 0; channelCount < _wavFileInfo._numberOfChannels; channelCount++) + { + CSM_FREE(_pcmData[channelCount]); + } + CSM_FREE(_pcmData); + _pcmData = NULL; +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppWavFileHandler.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppWavFileHandler.hpp new file mode 100644 index 0000000..8d5be9a --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/LAppWavFileHandler.hpp @@ -0,0 +1,182 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include + + /** + * @brief wavファイルハンドラ + * @attention 16bit wav ファイル読み込みのみ実装済み + */ +class LAppWavFileHandler +{ +public: + /** + * @brief コンストラクタ + */ + LAppWavFileHandler(); + + /** + * @brief デストラクタ + */ + ~LAppWavFileHandler(); + + /** + * @brief wavファイルハンドラの内部状態更新 + * + * @param[in] deltaTimeSeconds デルタ時間[秒] + * @retval true 更新されている + * @retval false 更新されていない + */ + Csm::csmBool Update(Csm::csmFloat32 deltaTimeSeconds); + + /** + * @brief 引数で指定したwavファイルの読み込みを開始する + * + * @param[in] filePath wavファイルのパス + */ + void Start(const Csm::csmString& filePath); + + /** + * @brief 現在のRMS値取得 + * + * @retval csmFloat32 RMS値 + */ + Csm::csmFloat32 GetRms() const; + +private: + /** + * @brief wavファイルのロード + * + * @param[in] filePath wavファイルのパス + * @retval true 読み込み成功 + * @retval false 読み込み失敗 + */ + Csm::csmBool LoadWavFile(const Csm::csmString& filePath); + + /** + * @brief PCMデータの解放 + */ + void ReleasePcmData(); + + /** + * @brief -1~1の範囲の1サンプル取得 + * @retval csmFloat32 正規化されたサンプル + */ + Csm::csmFloat32 GetPcmSample(); + + /** + * @brief 読み込んだwavfileの情報 + */ + struct WavFileInfo + { + /** + * @brief コンストラクタ + */ + WavFileInfo() : _fileName(""), _numberOfChannels(0), + _bitsPerSample(0), _samplingRate(0), _samplesPerChannel(0) + { } + + Csm::csmString _fileName; ///< ファイル名 + Csm::csmUint32 _numberOfChannels; ///< チャンネル数 + Csm::csmUint32 _bitsPerSample; ///< サンプルあたりビット数 + Csm::csmUint32 _samplingRate; ///< サンプリングレート + Csm::csmUint32 _samplesPerChannel; ///< 1チャンネルあたり総サンプル数 + } _wavFileInfo; + + /** + * @brief バイトリーダ + */ + struct ByteReader { + /** + * @brief コンストラクタ + */ + ByteReader() : _fileByte(NULL), _fileSize(0), _readOffset(0) + { } + + /** + * @brief 8ビット読み込み + * @return Csm::csmUint8 読み取った8ビット値 + */ + Csm::csmUint8 Get8() + { + const Csm::csmUint8 ret = _fileByte[_readOffset]; + _readOffset++; + return ret; + } + + /** + * @brief 16ビット読み込み(リトルエンディアン) + * @return Csm::csmUint16 読み取った16ビット値 + */ + Csm::csmUint16 Get16LittleEndian() + { + const Csm::csmUint16 ret = (_fileByte[_readOffset + 1] << 8) | _fileByte[_readOffset]; + _readOffset += 2; + return ret; + } + + /** + * @brief 24ビット読み込み(リトルエンディアン) + * @return Csm::csmUint32 読み取った24ビット値(下位24ビットに設定) + */ + Csm::csmUint32 Get24LittleEndian() + { + const Csm::csmUint32 ret = + (_fileByte[_readOffset + 2] << 16) | (_fileByte[_readOffset + 1] << 8) + | _fileByte[_readOffset]; + _readOffset += 3; + return ret; + } + + /** + * @brief 32ビット読み込み(リトルエンディアン) + * @return Csm::csmUint32 読み取った32ビット値 + */ + Csm::csmUint32 Get32LittleEndian() + { + const Csm::csmUint32 ret = + (_fileByte[_readOffset + 3] << 24) | (_fileByte[_readOffset + 2] << 16) + | (_fileByte[_readOffset + 1] << 8) | _fileByte[_readOffset]; + _readOffset += 4; + return ret; + } + + /** + * @brief シグネチャの取得と参照文字列との一致チェック + * @param[in] reference 検査対象のシグネチャ文字列 + * @retval true 一致している + * @retval false 一致していない + */ + Csm::csmBool GetCheckSignature(const Csm::csmString& reference) + { + Csm::csmChar getSignature[4] = { 0, 0, 0, 0 }; + const Csm::csmChar* referenceString = reference.GetRawString(); + if (reference.GetLength() != 4) + { + return false; + } + for (Csm::csmUint32 signatureOffset = 0; signatureOffset < 4; signatureOffset++) + { + getSignature[signatureOffset] = static_cast(Get8()); + } + return (getSignature[0] == referenceString[0]) && (getSignature[1] == referenceString[1]) + && (getSignature[2] == referenceString[2]) && (getSignature[3] == referenceString[3]); + } + + Csm::csmByte* _fileByte; ///< ロードしたファイルのバイト列 + Csm::csmSizeInt _fileSize; ///< ファイルサイズ + Csm::csmUint32 _readOffset; ///< ファイル参照位置 + } _byteReader; + + Csm::csmFloat32** _pcmData; ///< -1から1の範囲で表現された音声データ配列 + Csm::csmUint32 _sampleOffset; ///< サンプル参照位置 + Csm::csmFloat32 _lastRms; ///< 最後に計測したRMS値 + Csm::csmFloat32 _userTimeSeconds; ///< デルタ時間の積算値[秒] + }; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/MouseActionManager.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/MouseActionManager.cpp new file mode 100644 index 0000000..0caee4c --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/MouseActionManager.cpp @@ -0,0 +1,141 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "MouseActionManager.hpp" + +namespace { + MouseActionManager* instance = NULL; +} + +MouseActionManager* MouseActionManager::GetInstance() +{ + if (!instance) + { + instance = new MouseActionManager(); + } + + return instance; +} + +void MouseActionManager::ReleaseInstance() +{ + if (instance) + { + delete instance; + } + + instance = NULL; +} + +MouseActionManager::MouseActionManager() +{ +} + +MouseActionManager::~MouseActionManager() +{ + // 行列データの解放 + delete _viewMatrix; + delete _deviceToScreen; + delete _touchManager; +} + +void MouseActionManager::Initialize(int windowWidth, int windowHeight) +{ + // 行列の初期化 + ViewInitialize(windowWidth, windowHeight); + + // タッチ関係のイベント管理 + _touchManager = new TouchManager(); + + _captured = false; + _mouseX = 0.0f; + _mouseY = 0.0f; +} + +void MouseActionManager::ViewInitialize(int windowWidth, int windowHeight) +{ + _deviceToScreen = new Csm::CubismMatrix44(); + _viewMatrix = new CubismSampleViewMatrix(_deviceToScreen, windowWidth, windowHeight); +} + +void MouseActionManager::OnDrag(Csm::csmFloat32 x, Csm::csmFloat32 y) +{ + _userModel->SetDragging(x, y); +} + +void MouseActionManager::OnTouchesBegan(float px, float py) +{ + _touchManager->TouchesBegan(px, py); +} + +void MouseActionManager::OnTouchesMoved(float px, float py) +{ + float screenX = _deviceToScreen->TransformX(_touchManager->GetX()); // 論理座標変換した座標を取得。 + float viewX = _viewMatrix->InvertTransformX(screenX); // 拡大、縮小、移動後の値。 + + float screenY = _deviceToScreen->TransformY(_touchManager->GetY()); // 論理座標変換した座標を取得。 + float viewY = _viewMatrix->InvertTransformY(screenY); // 拡大、縮小、移動後の値。 + + _touchManager->TouchesMoved(px, py); + + // ドラッグ情報を設定 + _userModel->SetDragging(viewX, viewY); +} + +void MouseActionManager::OnTouchesEnded(float px, float py) +{ + // タッチ終了 + OnDrag(0.0f, 0.0f); +} + +void MouseActionManager::OnMouseCallBack(GLFWwindow* window, int button, int action, int modify) +{ + if (GLFW_MOUSE_BUTTON_LEFT != button) + { + return; + } + + switch (action) + { + case GLFW_PRESS: + _captured = true; + OnTouchesBegan(_mouseX, _mouseY); + break; + case GLFW_RELEASE: + if (_captured) + { + _captured = false; + OnTouchesEnded(_mouseX, _mouseY); + } + break; + default: + break; + } +} + +void MouseActionManager::OnMouseCallBack(GLFWwindow* window, double x, double y) +{ + _mouseX = static_cast(x); + _mouseY = static_cast(y); + + if (!_captured) + { + return; + } + + OnTouchesMoved(_mouseX, _mouseY); +} + +CubismSampleViewMatrix * MouseActionManager::GetViewMatrix() +{ + return _viewMatrix; +} + +void MouseActionManager::SetUserModel(Csm::CubismUserModel * userModel) +{ + _userModel = userModel; +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/MouseActionManager.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/MouseActionManager.hpp new file mode 100644 index 0000000..4bb3f40 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/MouseActionManager.hpp @@ -0,0 +1,149 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include "LAppDefine.hpp" +#include "TouchManager.hpp" +#include "CubismSampleViewMatrix.hpp" + +/** +* @brief マウスの動作を通知するクラス +* +* マウス操作等を Cubism へ橋渡しする。 +* +*/ +class MouseActionManager +{ +public: + /** + * @brief クラスのインスタンス(シングルトン)を返す + * + * インスタンスが生成されていない場合は内部でインスタンスを生成する + * + * @return クラスのインスタンス + */ + static MouseActionManager* GetInstance(); + + /** + * @brief クラスのインスタンス(シングルトン)を解放する + * + */ + static void ReleaseInstance(); + + MouseActionManager(); ///< コンストラクタ + ~MouseActionManager(); ///< デストラクタ + + /** + * @brief 必要なものを初期化する + */ + void Initialize(int windowWidth, int windowHeight); + + /** + * @brief 行列の初期化をする + */ + void ViewInitialize(int windowWidth, int windowHeight); + + /** + * @brief OpenGL用 glfwSetMouseButtonCallback用関数。 + * + * @param[in] window コールバックを呼んだWindow情報 + * @param[in] button ボタン種類 + * @param[in] action 実行結果 + * @param[in] modify + */ + void OnMouseCallBack(GLFWwindow* window, int button, int action, int modify); + + /** + * @brief OpenGL用 glfwSetCursorPosCallback用関数。 + * + * @param[in] window コールバックを呼んだWindow情報 + * @param[in] x x座標 + * @param[in] y x座標 + */ + void OnMouseCallBack(GLFWwindow* window, double x, double y); + + /** + * @brief _userModelをセットする + * + */ + void SetUserModel(Csm::CubismUserModel* userModel); + + /** + * @brief _viewMatrixを取得する + * + */ + CubismSampleViewMatrix * GetViewMatrix(); + +private: + /** + * @brief ドラッグ + * + * ドラッグ時にどれだけ移動したかを通知する + */ + void OnDrag(Csm::csmFloat32 x, Csm::csmFloat32 y); + + /** + * @brief クリック入力始め + * + * クリックの入力が始まった時に呼ばれる + */ + void OnTouchesBegan(float px, float py); + + /** + * @brief クリック入力中の移動 + * + * クリック入力中の移動時に呼ばれる + */ + void OnTouchesMoved(float px, float py); + + /** + * @brief クリック入力終了時 + * + * クリックの入力が終了した時に呼ばれる + */ + void OnTouchesEnded(float px, float py); + + Csm::CubismUserModel* _userModel; + + TouchManager* _touchManager; ///< タッチマネージャー + + bool _captured; ///< クリックしているか + float _mouseX; ///< マウスX座標 + float _mouseY; ///< マウスY座標 + + CubismSampleViewMatrix* _viewMatrix; ///< 画面の表示の拡大縮小や移動の変換を行う行列 + Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 +}; + +class EventHandler +{ +public: + /** + * @brief glfwSetMouseButtonCallback用コールバック関数。 + */ + static void OnMouseCallBack(GLFWwindow* window, int button, int action, int modify) + { + MouseActionManager::GetInstance()->OnMouseCallBack(window, button, action, modify); + } + + /** + * @brief glfwSetCursorPosCallback用コールバック関数。 + */ + static void OnMouseCallBack(GLFWwindow* window, double x, double y) + { + MouseActionManager::GetInstance()->OnMouseCallBack(window, x, y); + } +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/SwapchainManager.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/SwapchainManager.cpp new file mode 100644 index 0000000..40dac80 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/SwapchainManager.cpp @@ -0,0 +1,212 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "SwapchainManager.hpp" + +using namespace Csm; + +SwapchainManager::SwapchainManager(GLFWwindow* _window, VkPhysicalDevice physicalDevice, VkDevice device, + VkSurfaceKHR surface, Csm::csmUint32 graphicsFamily, Csm::csmUint32 presentFamily) + : _extent(VkExtent2D{0, 0}) + , _imageCount(0) +{ + CreateSwapchain(_window, physicalDevice, device, surface, graphicsFamily, presentFamily); +} + +SwapchainManager::SwapchainSupportDetails SwapchainManager::QuerySwapchainSupport( + VkPhysicalDevice& physicalDevice, VkSurfaceKHR surface) +{ + SwapchainSupportDetails details; + vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, &details.capabilities); + + csmUint32 formatCount; + vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, &formatCount, nullptr); + if (formatCount != 0) + { + details.formats.Resize(formatCount); + vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, &formatCount, details.formats.GetPtr()); + } + + csmUint32 presentModeCount; + vkGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, &presentModeCount, nullptr); + + if (presentModeCount != 0) + { + details.presentModes.Resize(presentModeCount); + vkGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, &presentModeCount, + details.presentModes.GetPtr()); + } + + return details; +} + +VkSurfaceFormatKHR SwapchainManager::ChooseSwapSurfaceFormat(const csmVector& availableFormats) +{ + for (csmUint32 i = 0; i < availableFormats.GetSize(); i++) + { + if (availableFormats[i].format == _swapchainFormat && availableFormats[i].colorSpace == + VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) + { + return availableFormats[i]; + } + } + //他に使えるフォーマットが無かったら最初のフォーマットを使う + return availableFormats[0]; +} + +VkPresentModeKHR SwapchainManager::ChooseSwapPresentMode(const csmVector& availablePresentModes) +{ + for (csmUint32 i = 0; i < availablePresentModes.GetSize(); i++) + { + if (availablePresentModes[i] == VK_PRESENT_MODE_MAILBOX_KHR) + { + return availablePresentModes[i]; + } + } + return VK_PRESENT_MODE_FIFO_KHR; +} + +VkExtent2D SwapchainManager::ChooseSwapExtent(GLFWwindow* window, const VkSurfaceCapabilitiesKHR& capabilities) +{ + if (capabilities.currentExtent.width != UINT32_MAX) + { + return capabilities.currentExtent; + } + else + { + //for Retina display + int width, height; + glfwGetFramebufferSize(window, &width, &height); + + VkExtent2D actualExtent = { + static_cast(width), + static_cast(height) + }; + + if (actualExtent.width < capabilities.minImageExtent.width) + { + actualExtent.width = capabilities.minImageExtent.width; + } + else if (actualExtent.width > capabilities.maxImageExtent.width) + { + actualExtent.width = capabilities.maxImageExtent.width; + } + + if (actualExtent.height < capabilities.minImageExtent.height) + { + actualExtent.height = capabilities.minImageExtent.height; + } + else if (actualExtent.height > capabilities.maxImageExtent.height) + { + actualExtent.height = capabilities.maxImageExtent.height; + } + + return actualExtent; + } +} + +void SwapchainManager::CreateSwapchain(GLFWwindow* window, VkPhysicalDevice physicalDevice, VkDevice device, + VkSurfaceKHR surface, Csm::csmUint32 graphicsFamily, + Csm::csmUint32 presentFamily) +{ + SwapchainSupportDetails swapChainSupport = QuerySwapchainSupport(physicalDevice, surface); + VkSurfaceFormatKHR surfaceFormat = ChooseSwapSurfaceFormat(swapChainSupport.formats); + VkPresentModeKHR presentMode = ChooseSwapPresentMode(swapChainSupport.presentModes); + _extent = ChooseSwapExtent(window, swapChainSupport.capabilities); + + _imageCount = swapChainSupport.capabilities.minImageCount + 1; + if (swapChainSupport.capabilities.maxImageCount > 0 && _imageCount > swapChainSupport.capabilities.maxImageCount) + { + _imageCount = swapChainSupport.capabilities.maxImageCount; + } + + VkSwapchainCreateInfoKHR createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + createInfo.surface = surface; + createInfo.minImageCount = _imageCount; + createInfo.imageFormat = surfaceFormat.format; + createInfo.imageColorSpace = surfaceFormat.colorSpace; + createInfo.imageExtent = _extent; + createInfo.imageArrayLayers = 1; + createInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | + VK_IMAGE_USAGE_TRANSFER_DST_BIT; + if (graphicsFamily != presentFamily) + { + createInfo.imageSharingMode = VK_SHARING_MODE_CONCURRENT; + createInfo.queueFamilyIndexCount = 2; + Csm::csmUint32 queueFamilyIndices[2] = {graphicsFamily, presentFamily}; + createInfo.pQueueFamilyIndices = queueFamilyIndices; + } + else + { + createInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; + createInfo.queueFamilyIndexCount = 0; + createInfo.pQueueFamilyIndices = nullptr; + } + createInfo.preTransform = swapChainSupport.capabilities.currentTransform; + createInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + createInfo.presentMode = presentMode; + createInfo.clipped = VK_TRUE; + createInfo.oldSwapchain = VK_NULL_HANDLE; + if (vkCreateSwapchainKHR(device, &createInfo, nullptr, &_swapchain) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create swap chain"); + } + + // swapchain imageを取得する + vkGetSwapchainImagesKHR(device, _swapchain, &_imageCount, nullptr); + _images.Resize(_imageCount); + vkGetSwapchainImagesKHR(device, _swapchain, &_imageCount, _images.GetPtr()); + + _imageViews.Resize(_imageCount); + for (csmUint32 i = 0; i < _imageCount; i++) + { + VkImageViewCreateInfo viewInfo{}; + viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + viewInfo.image = _images[i]; + viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; + viewInfo.format = _swapchainFormat; + viewInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; + viewInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; + viewInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; + viewInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; + viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + viewInfo.subresourceRange.baseMipLevel = 0; + viewInfo.subresourceRange.levelCount = 1; + viewInfo.subresourceRange.baseArrayLayer = 0; + viewInfo.subresourceRange.layerCount = 1; + + if (vkCreateImageView(device, &viewInfo, nullptr, &_imageViews[i]) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create texture image view"); + } + } +} + +VkResult SwapchainManager::QueuePresent(VkQueue& queue, csmUint32 imageIndex) +{ + VkPresentInfoKHR presentInfo{}; + presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; + + VkSwapchainKHR swapChains[] = {_swapchain}; + presentInfo.swapchainCount = 1; + presentInfo.pSwapchains = swapChains; + presentInfo.pImageIndices = &imageIndex; + return vkQueuePresentKHR(queue, &presentInfo); +} + +void SwapchainManager::Cleanup(VkDevice device) +{ + if (_swapchain != VK_NULL_HANDLE) + { + for (csmUint32 i = 0; i < _imageViews.GetSize(); i++) + { + vkDestroyImageView(device, _imageViews[i], nullptr); + } + vkDestroySwapchainKHR(device, _swapchain, nullptr); + } +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/SwapchainManager.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/SwapchainManager.hpp new file mode 100644 index 0000000..ec85ca0 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/SwapchainManager.hpp @@ -0,0 +1,156 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once +#include +#define GLFW_INCLUDE_VULKAN +#include +#include +#include +#include "LAppPal.hpp" + + +/** + * @brief スワップチェーンを扱うクラス + */ +class SwapchainManager +{ +public: + struct SwapchainSupportDetails + { + VkSurfaceCapabilitiesKHR capabilities; //基本的な機能 + Csm::csmVector formats; //利用可能なフォーマット + Csm::csmVector presentModes; //利用可能な表示モード + }; + + /** + * @brief コンストラクタ + * @param[in] _window -> ウィンドウ + * @param[in] physicalDevice -> 物理デバイス + * @param[in] device -> デバイス + * @param[in] surface -> サーフェス + * @param[in] graphicsFamily -> 描画コマンドに使うキューファミリ + * @param[in] presentFamily -> 表示コマンドに使うキューファミリ + */ + SwapchainManager(GLFWwindow* _window, VkPhysicalDevice physicalDevice, VkDevice device, VkSurfaceKHR surface, Csm::csmUint32 graphicsFamily, Csm::csmUint32 presentFamily); + + /** + * @brief 物理デバイスのサポートを確認する + * + * @param[in] physicalDevice -> 物理デバイス + * @param[in] surface -> スワップチェーンサーフェス + * @return 物理デバイスのサポート情報 + */ + static SwapchainSupportDetails QuerySwapchainSupport(VkPhysicalDevice& physicalDevice, VkSurfaceKHR surface); + + /** + * @brief サーフェスフォーマットを選択する + * @param[in] availableFormats -> 使えるサーフェスフォーマット + * @return 選択するサーフェスフォーマット + */ + VkSurfaceFormatKHR ChooseSwapSurfaceFormat(const Csm::csmVector& availableFormats); + + /** + * @brief 表示モードを選択する + * @param[in] availableFormats -> 使えるフォーマット + */ + VkPresentModeKHR ChooseSwapPresentMode(const Csm::csmVector& availablePresentModes); + + /** + * @brief スワップチェーンイメージの解像度を選択する + * + * @param[in] window -> ウィンドウ + * @param[in] capabilities -> サーフェスの機能を保持する構造体 + * @return スワップチェーンイメージの解像度 + */ + VkExtent2D ChooseSwapExtent(GLFWwindow* window, const VkSurfaceCapabilitiesKHR& capabilities); + + /** + * @brief スワップチェーンを作成する + * + * @param[in] _window -> ウィンドウ + * @param[in] physicalDevice -> 物理デバイス + * @param[in] device -> デバイス + * @param[in] surface -> サーフェス + * @param[in] graphicsFamily -> 描画コマンドに使うキューファミリ + * @param[in] presentFamily -> 表示コマンドに使うキューファミリ + */ + void CreateSwapchain(GLFWwindow* window, VkPhysicalDevice physicalDevice, VkDevice device, VkSurfaceKHR surface, Csm::csmUint32 graphicsFamily, Csm::csmUint32 presentFamily); + + /** + * @brief 表示コマンドをキューに積む + * + * @param[in] queue -> キュー + * @param[in] imageIndex -> イメージのインデックス + * @return 成功したか + */ + VkResult QueuePresent(VkQueue& queue, Csm::csmUint32 imageIndex); + + /** + * @brief リソースを破棄&再作成する + * + * @param[in] device -> デバイス + */ + void Cleanup(VkDevice device); + + /** + * @brief extentを取得する + * + * @return extent + */ + VkExtent2D GetExtent() { return _extent; } + + /** + * @brief イメージ数を取得する + * + * @return イメージ数 + */ + Csm::csmInt32 GetImageCount() { return _imageCount; } + + /** + * @brief スワップチェーンイメージビューを取得する + * + * @return スワップチェーンイメージビュー + */ + Csm::csmVector GetViews() { return _imageViews; } + + /** + * @brief スワップチェーンを取得する + * + * @return スワップチェーン + */ + VkSwapchainKHR GetSwapchain() { return _swapchain; } + + /** + * @brief スワップチェーンのフォーマットを取得する + * + * @return フォーマット + */ + VkFormat GetSwapchainImageFormat() { return _swapchainFormat; } + + /** + * @brief スワップチェーンのイメージを取得する + * + * @return イメージ + */ + Csm::csmVector GetImages() { return _images; } + + /** + * @brief スワップチェーンのイメージを取得する + * + * @return イメージ + */ + Csm::csmVector GetImageViews() { return _imageViews; } + +private: + VkExtent2D _extent; ///< イメージの解像度 + Csm::csmUint32 _imageCount; ///< イメージ数 + Csm::csmVector _images; ///< スワップチェーンのイメージ + Csm::csmVector _imageViews; ///< スワップチェーンのイメージビュー + VkSwapchainKHR _swapchain; ///< スワップチェーン + const VkFormat _swapchainFormat = VK_FORMAT_B8G8R8A8_UNORM; ///< スワップチェーンのフォーマット +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/TouchManager.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/TouchManager.cpp new file mode 100644 index 0000000..60003c3 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/TouchManager.cpp @@ -0,0 +1,97 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "TouchManager.hpp" +#include + +TouchManager::TouchManager() + : _startY(0.0f) + , _startX(0.0f) + , _lastX(0.0f) + , _lastY(0.0f) + , _lastX1(0.0f) + , _lastY1(0.0f) + , _lastX2(0.0f) + , _lastY2(0.0f) + , _lastTouchDistance(0.0f) + , _deltaX(0.0f) + , _deltaY(0.0f) + , _scale(1.0f) + , _touchSingle(false) + , _flipAvailable(false) +{ } + +void TouchManager::TouchesBegan(float deviceX, float deviceY) +{ + _lastX = deviceX; + _lastY = deviceY; + _startX = deviceX; + _startY = deviceY; + _lastTouchDistance = -1.0f; + _flipAvailable = true; + _touchSingle = true; +} + +void TouchManager::TouchesMoved(float deviceX, float deviceY) +{ + _lastX = deviceX; + _lastY = deviceY; + _lastTouchDistance = -1.0f; + _touchSingle = true; +} + +void TouchManager::TouchesMoved(float deviceX1, float deviceY1, float deviceX2, float deviceY2) +{ + float distance = CalculateDistance(deviceX1, deviceY1, deviceX2, deviceY2); + float centerX = (deviceX1 + deviceX2) * 0.5f; + float centerY = (deviceY1 + deviceY2) * 0.5f; + + if (_lastTouchDistance > 0.0f) + { + _scale = powf(distance / _lastTouchDistance, 0.75f); + _deltaX = CalculateMovingAmount(deviceX1 - _lastX1, deviceX2 - _lastX2); + _deltaY = CalculateMovingAmount(deviceY1 - _lastY1, deviceY2 - _lastY2); + } + else + { + _scale = 1.0f; + _deltaX = 0.0f; + _deltaY = 0.0f; + } + + _lastX = centerX; + _lastY = centerY; + _lastX1 = deviceX1; + _lastY1 = deviceY1; + _lastX2 = deviceX2; + _lastY2 = deviceY2; + _lastTouchDistance = distance; + _touchSingle = false; +} + +float TouchManager::GetFlickDistance() const +{ + return CalculateDistance(_startX, _startY, _lastX, _lastY); +} + +float TouchManager::CalculateDistance(float x1, float y1, float x2, float y2) const +{ + return sqrtf((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); +} + +float TouchManager::CalculateMovingAmount(float v1, float v2) +{ + if ((v1 > 0.0f) != (v2 > 0.0f)) + { + return 0.0f; + } + + float sign = v1 > 0.0f ? 1.0f : -1.0f; + float absoluteValue1 = fabsf(v1); + float absoluteValue2 = fabsf(v2); + return sign * ((absoluteValue1 < absoluteValue2) ? absoluteValue1 : absoluteValue2); +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/TouchManager.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/TouchManager.hpp new file mode 100644 index 0000000..d07072b --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/TouchManager.hpp @@ -0,0 +1,104 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +class TouchManager +{ +public: + + TouchManager(); + + float GetCenterX() const { return _lastX; } + float GetCenterY() const { return _lastY; } + float GetDeltaX() const { return _deltaX; } + float GetDeltaY() const{ return _deltaY; } + float GetStartX() const{ return _startX; } + float GetStartY() const{ return _startY; } + float GetScale() const { return _scale; } + float GetX() const{ return _lastX; } + float GetY() const{ return _lastY; } + float GetX1() const{ return _lastX1; } + float GetY1() const{ return _lastY1; } + float GetX2() const{ return _lastX2; } + float GetY2() const{ return _lastY2; } + bool IsSingleTouch() const { return _touchSingle; } + bool IsFlickAvailable() const { return _flipAvailable; } + void DisableFlick() { _flipAvailable = false; } + + /* + * @brief タッチ開始時イベント + * + * @param[in] deviceY タッチした画面のyの値 + * @param[in] deviceX タッチした画面のxの値 + */ + void TouchesBegan(float deviceX, float deviceY); + + /* + * @brief ドラッグ時のイベント + * + * @param[in] deviceX タッチした画面のyの値 + * @param[in] deviceY タッチした画面のxの値 + */ + void TouchesMoved(float deviceX, float deviceY); + + /* + * @brief ドラッグ時のイベント + * + * @param[in] deviceX1 1つめのタッチした画面のxの値 + * @param[in] deviceY1 1つめのタッチした画面のyの値 + * @param[in] deviceX2 2つめのタッチした画面のxの値 + * @param[in] deviceY2 2つめのタッチした画面のyの値 + */ + void TouchesMoved(float deviceX1, float deviceY1, float deviceX2, float deviceY2); + + /* + * @brief フリックの距離測定 + * + * @return フリック距離 + */ + float GetFlickDistance() const; + +private: + /* + * @brief 点1から点2への距離を求める + * + * @param[in] x1 1つめのタッチした画面のxの値 + * @param[in] y1 1つめのタッチした画面のyの値 + * @param[in] x2 2つめのタッチした画面のxの値 + * @param[in] y2 2つめのタッチした画面のyの値 + * @return 2点の距離 + */ + float CalculateDistance(float x1, float y1, float x2, float y2) const; + + /* + * 二つの値から、移動量を求める。 + * 違う方向の場合は移動量0。同じ方向の場合は、絶対値が小さい方の値を参照する + * + * @param[in] v1 1つめの移動量 + * @param[in] v2 2つめの移動量 + * + * @return 小さい方の移動量 + */ + float CalculateMovingAmount(float v1, float v2); + + float _startY; // タッチを開始した時のxの値 + float _startX; // タッチを開始した時のyの値 + float _lastX; // シングルタッチ時のxの値 + float _lastY; // シングルタッチ時のyの値 + float _lastX1; // ダブルタッチ時の一つ目のxの値 + float _lastY1; // ダブルタッチ時の一つ目のyの値 + float _lastX2; // ダブルタッチ時の二つ目のxの値 + float _lastY2; // ダブルタッチ時の二つ目のyの値 + float _lastTouchDistance; // 2本以上でタッチしたときの指の距離 + float _deltaX; // 前回の値から今回の値へのxの移動距離。 + float _deltaY; // 前回の値から今回の値へのyの移動距離。 + float _scale; // このフレームで掛け合わせる拡大率。拡大操作中以外は1。 + bool _touchSingle; // シングルタッチ時はtrue + bool _flipAvailable; // フリップが有効かどうか + +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/VulkanManager.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/VulkanManager.cpp new file mode 100644 index 0000000..87e4876 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/VulkanManager.cpp @@ -0,0 +1,576 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "VulkanManager.hpp" +#include +#include + +#include "Rendering/Vulkan/CubismRenderer_Vulkan.hpp" +using namespace Csm; + +/** +* @brief デバッグ用コールバック +*/ +static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageType, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + void* pUserData) +{ + // LappPal::PrintLogは最大文字数を増やせば使える + // LAppPal::PrintLog("validation layer: %s\n", pCallbackData->pMessage); + std::cout << "validation layer: " << pCallbackData->pMessage << std::endl; + return VK_FALSE; +} + +/** +* @brief デバッグ用拡張関数を使えるようにする +*/ +VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugUtilsMessengerEXT* pDebugMessenger) +{ + PFN_vkCreateDebugUtilsMessengerEXT func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT"); + if (func != nullptr) + { + return func(instance, pCreateInfo, pAllocator, pDebugMessenger); + } + else + { + return VK_ERROR_EXTENSION_NOT_PRESENT; + } +} + +/** +* @brief デバッグメッセンジャーの破棄 +*/ +void DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, + const VkAllocationCallbacks* pAllocator) +{ + PFN_vkDestroyDebugUtilsMessengerEXT func = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT"); + if (func != nullptr) + { + func(instance, debugMessenger, pAllocator); + } +} + +namespace +{ + VulkanManager* s_vulkanManager = NULL; +} + +VulkanManager* VulkanManager::GetInstance() +{ + if (s_vulkanManager == NULL) + { + s_vulkanManager = new VulkanManager(); + } + + return s_vulkanManager; +} + +void VulkanManager::ReleaseInstance() +{ + if (s_vulkanManager != NULL) + { + delete s_vulkanManager; + } + + s_vulkanManager = NULL; +} + +VulkanManager::VulkanManager() + : _window(NULL) + , _instance(VK_NULL_HANDLE) + , _physicalDevice(VK_NULL_HANDLE) + , _device(VK_NULL_HANDLE) + , _swapchainManager() + , _isSwapchainInvalid(false) + , _surface() + , _graphicQueue(VK_NULL_HANDLE) + , _presentQueue(VK_NULL_HANDLE) + , _commandPool(VK_NULL_HANDLE) + , _debugMessenger() + , _imageIndex(0) + , _framebufferResized(false) +{ +} + +VulkanManager::~VulkanManager() +{ + Destroy(); +} + +bool VulkanManager::CheckValidationLayerSupport() +{ + csmUint32 layerCount; + vkEnumerateInstanceLayerProperties(&layerCount, nullptr); + + csmVector availableLayers; + availableLayers.Resize(layerCount); + vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.GetPtr()); + + for (const char* layerName : validationLayers) + { + bool layerFound = false; + + for (csmUint32 i = 0; i < availableLayers.GetSize(); i++) + { + if (strcmp(layerName, availableLayers[i].layerName) == 0) + { + layerFound = true; + break; + } + } + + if (!layerFound) + { + return false; + } + } + + return true; +} + +csmVector VulkanManager::GetRequiredExtensions() +{ + csmUint32 glfwExtensionCount = 0; + const char** glfwExtensions; + glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount); + + csmVector extensions; + for (csmUint32 i = 0; i < glfwExtensionCount; i++) + { + extensions.PushBack(*(glfwExtensions + i)); + } + + if (_enableValidationLayers) + { + extensions.PushBack(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + } + + return extensions; +} + +void VulkanManager::PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) +{ + createInfo = {}; + createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; + createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; + createInfo.pfnUserCallback = DebugCallback; +} + +void VulkanManager::CreateInstance() +{ + //検証レイヤーが有効のときに使えるか確認 + if (_enableValidationLayers && !CheckValidationLayerSupport()) + { + LAppPal::PrintLogLn("validation layers requested, but not available!"); + } + + VkApplicationInfo appInfo{}; + appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + appInfo.pApplicationName = "SAMPLE"; + appInfo.pEngineName = "SAMPLE"; + appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); + appInfo.apiVersion = VK_API_VERSION_1_3; + + VkInstanceCreateInfo createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + createInfo.pApplicationInfo = &appInfo; + + csmVector extensions = GetRequiredExtensions(); + createInfo.enabledExtensionCount = static_cast(extensions.GetSize()); + createInfo.ppEnabledExtensionNames = extensions.GetPtr(); + + VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo{}; + if (_enableValidationLayers) + { + createInfo.enabledLayerCount = static_cast(sizeof(validationLayers) / sizeof(validationLayers[0])); + createInfo.ppEnabledLayerNames = validationLayers; + // vkDestroyInstanceでデバッグコールが呼ばれるために次の行が必要 + PopulateDebugMessengerCreateInfo(debugCreateInfo); + createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*)&debugCreateInfo; + } + else + { + createInfo.enabledLayerCount = 0; + } + if (vkCreateInstance(&createInfo, nullptr, &_instance) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create _instance!"); + } +} + +void VulkanManager::SetupDebugMessenger() +{ + if (!_enableValidationLayers) + { + return; + } + + VkDebugUtilsMessengerCreateInfoEXT createInfo; + PopulateDebugMessengerCreateInfo(createInfo); + + if (CreateDebugUtilsMessengerEXT(_instance, &createInfo, nullptr, &_debugMessenger) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to set up debug messenger!"); + } +} + +bool VulkanManager::CheckDeviceExtensionSupport(VkPhysicalDevice physicalDevice) +{ + csmUint32 extensionCount; + vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extensionCount, nullptr); + + csmVector availableExtensions; + availableExtensions.Resize(extensionCount); + vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extensionCount, availableExtensions.GetPtr()); + + for (csmUint32 i = 0; i < sizeof(deviceExtensions) / sizeof(deviceExtensions[0]); i++) + { + bool found = false; + for (csmUint32 j = 0; j < availableExtensions.GetSize(); j++) + { + if (*deviceExtensions[i] == *availableExtensions[j].extensionName) + { + found = true; + } + } + if (found == false) + { + return false; + } + } + return true; +} + +void VulkanManager::CreateSurface() +{ + if (glfwCreateWindowSurface(_instance, _window, nullptr, &_surface) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create _window _surface!"); + } +} + +void VulkanManager::FindQueueFamilies(VkPhysicalDevice device) +{ + csmUint32 queueFamilyCount = 0; + vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, nullptr); + csmVector queueFamilies; + queueFamilies.Resize(queueFamilyCount); + vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, queueFamilies.GetPtr()); + + for (csmUint32 i = 0; i < queueFamilies.GetSize(); i++) + { + if (queueFamilies[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) + { + indices.graphicsFamily = i; + } + + VkBool32 presentSupport = false; + vkGetPhysicalDeviceSurfaceSupportKHR(device, i, _surface, &presentSupport); + if (presentSupport) + { + indices.presentFamily = i; + } + + if (indices.IsComplete()) + { + break; + } + } +} + +bool VulkanManager::IsDeviceSuitable(VkPhysicalDevice device) +{ + FindQueueFamilies(device); + bool extensionsSupported = CheckDeviceExtensionSupport(device); + bool swapChainAdequate = false; + //デバイスの拡張機能がサポートされていたら、スワップチェインをサポートしているか確認する + if (extensionsSupported) + { + SwapchainManager::SwapchainSupportDetails swapchainSupport = SwapchainManager::QuerySwapchainSupport( + device, _surface); + swapChainAdequate = swapchainSupport.formats.GetSize() != 0 && swapchainSupport.presentModes.GetSize() != 0; + } + + VkPhysicalDeviceFeatures supportedFeatures; + vkGetPhysicalDeviceFeatures(device, &supportedFeatures); + + return indices.IsComplete() && swapChainAdequate && supportedFeatures.samplerAnisotropy; +} + +void VulkanManager::PickPhysicalDevice() +{ + csmUint32 deviceCount = 0; + vkEnumeratePhysicalDevices(_instance, &deviceCount, nullptr); + + if (deviceCount == 0) + { + LAppPal::PrintLogLn("failed to find GPUs with Vulkan support!"); + } + + csmVector devices; + devices.Resize(deviceCount); + vkEnumeratePhysicalDevices(_instance, &deviceCount, devices.GetPtr()); + + // 一番最初に取得した物理デバイスを使用する + for (csmUint32 i = 0; i < devices.GetSize(); i++) + { + if (IsDeviceSuitable(devices[i])) + { + _physicalDevice = devices[i]; + break; + } + } + + if (_physicalDevice == VK_NULL_HANDLE) + { + LAppPal::PrintLogLn("failed to find a suitable GPU!"); + } +} + +void VulkanManager::CreateLogicalDevice() +{ + FindQueueFamilies(_physicalDevice); + + csmVector uniqueQueueFamilies; + if (indices.graphicsFamily == indices.presentFamily) + { + uniqueQueueFamilies.PushBack(indices.graphicsFamily); + } + else + { + uniqueQueueFamilies.PushBack(indices.graphicsFamily); + uniqueQueueFamilies.PushBack(indices.presentFamily); + } + + float queuePriority = 1.0f; + csmVector queueCreateInfos; + for (csmUint32 i = 0; i < uniqueQueueFamilies.GetSize(); i++) + { + VkDeviceQueueCreateInfo queueCreateInfo{}; + queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + queueCreateInfo.queueFamilyIndex = uniqueQueueFamilies[i]; + queueCreateInfo.queueCount = 1; + queueCreateInfo.pQueuePriorities = &queuePriority; + queueCreateInfos.PushBack(queueCreateInfo); + } + + VkDeviceCreateInfo createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + createInfo.queueCreateInfoCount = queueCreateInfos.GetSize(); + createInfo.pQueueCreateInfos = queueCreateInfos.GetPtr(); + createInfo.enabledExtensionCount = sizeof(deviceExtensions) / sizeof(deviceExtensions[0]); + createInfo.ppEnabledExtensionNames = deviceExtensions; + + if (_enableValidationLayers) + { + createInfo.enabledLayerCount = sizeof(validationLayers) / sizeof(validationLayers[0]); + createInfo.ppEnabledLayerNames = validationLayers; + } + else + { + createInfo.enabledLayerCount = 0; + } + + VkPhysicalDeviceDynamicRenderingFeaturesKHR dynamicRenderingF{}; + dynamicRenderingF.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR; + dynamicRenderingF.dynamicRendering = VK_TRUE; + + VkPhysicalDeviceExtendedDynamicStateFeaturesEXT dynamicStateF{}; + dynamicStateF.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT; + dynamicStateF.extendedDynamicState = VK_TRUE; + dynamicStateF.pNext = &dynamicRenderingF; + + VkPhysicalDeviceFeatures2 deviceFeatures2{}; + deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; + deviceFeatures2.pNext = &dynamicStateF; + vkGetPhysicalDeviceFeatures2(_physicalDevice, &deviceFeatures2); + createInfo.pNext = &deviceFeatures2; + + if (vkCreateDevice(_physicalDevice, &createInfo, nullptr, &_device) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create logical _device!"); + } + + // キューハンドルを取得 + vkGetDeviceQueue(_device, indices.graphicsFamily, 0, &_graphicQueue); + vkGetDeviceQueue(_device, indices.presentFamily, 0, &_presentQueue); +} + +void VulkanManager::ChooseSupportedDepthFormat() +{ + VkFormat depthFormats[5] = { + VK_FORMAT_D32_SFLOAT_S8_UINT, + VK_FORMAT_D32_SFLOAT, + VK_FORMAT_D24_UNORM_S8_UINT, + VK_FORMAT_D16_UNORM_S8_UINT, + VK_FORMAT_D16_UNORM + }; + + for (csmInt32 i = 0; i < sizeof(depthFormats) / sizeof(depthFormats[0]); i++) + { + VkFormatProperties formatProps; + vkGetPhysicalDeviceFormatProperties(_physicalDevice, depthFormats[i], &formatProps); + + if (formatProps.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) + { + _depthFormat = depthFormats[i]; + return; + } + } + CubismLogError("can't find depth format!"); + _depthFormat = depthFormats[0]; +} + +void VulkanManager::CreateCommandPool() +{ + VkCommandPoolCreateInfo poolInfo{}; + poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + poolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; + poolInfo.queueFamilyIndex = indices.graphicsFamily; + + if (vkCreateCommandPool(_device, &poolInfo, nullptr, &_commandPool) != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to create graphics command pool!"); + } +} + +void VulkanManager::CreateSyncObjects() +{ + VkSemaphoreCreateInfo semaphoreInfo{}; + semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; + vkCreateSemaphore(_device, &semaphoreInfo, nullptr, &_imageAvailableSemaphore); +} + +void VulkanManager::Initialize(GLFWwindow* wind) +{ + _window = wind; + + CreateInstance(); + SetupDebugMessenger(); + CreateSurface(); + PickPhysicalDevice(); + CreateLogicalDevice(); + ChooseSupportedDepthFormat(); + _swapchainManager = new SwapchainManager(_window, _physicalDevice, _device, _surface, indices.graphicsFamily, + indices.presentFamily); + CreateCommandPool(); + CreateSyncObjects(); +} + +VkCommandBuffer VulkanManager::BeginSingleTimeCommands() +{ + VkCommandBufferAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + allocInfo.commandPool = _commandPool; + allocInfo.commandBufferCount = 1; + + VkCommandBuffer commandBuffer; + vkAllocateCommandBuffers(_device, &allocInfo, &commandBuffer); + + VkCommandBufferBeginInfo beginInfo{}; + beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; + + vkBeginCommandBuffer(commandBuffer, &beginInfo); + + return commandBuffer; +} + +void VulkanManager::SubmitCommand(VkCommandBuffer commandBuffer, bool isFirstDraw) +{ + vkEndCommandBuffer(commandBuffer); + + if(isFirstDraw) + { + VkSubmitInfo submitInfo{}; + submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submitInfo.commandBufferCount = 1; + submitInfo.pCommandBuffers = &commandBuffer; + submitInfo.waitSemaphoreCount = 1; + submitInfo.pWaitSemaphores = &_imageAvailableSemaphore; + VkPipelineStageFlags waitStages[] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT }; + submitInfo.pWaitDstStageMask = waitStages; + vkQueueSubmit(_graphicQueue, 1, &submitInfo, VK_NULL_HANDLE); + } + else + { + VkSubmitInfo submitInfo{}; + submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submitInfo.commandBufferCount = 1; + submitInfo.pCommandBuffers = &commandBuffer; + VkPipelineStageFlags waitStages[] = { VK_PIPELINE_STAGE_VERTEX_INPUT_BIT }; + submitInfo.pWaitDstStageMask = waitStages; + vkQueueSubmit(_graphicQueue, 1, &submitInfo, VK_NULL_HANDLE); + } + + // コマンドの実行終了まで待機 + vkQueueWaitIdle(_graphicQueue); + vkFreeCommandBuffers(_device, _commandPool, 1, &commandBuffer); +} + +void VulkanManager::UpdateDrawFrame() +{ + VkResult result = vkAcquireNextImageKHR(_device, _swapchainManager->GetSwapchain(), UINT64_MAX, + _imageAvailableSemaphore, VK_NULL_HANDLE, + &_imageIndex); + if (result == VK_ERROR_OUT_OF_DATE_KHR) + { + _isSwapchainInvalid = true; + } + else if (result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR) + { + LAppPal::PrintLogLn("failed to acquire swap chain image!"); + } +} + +void VulkanManager::PostDraw() +{ + VkResult result = _swapchainManager->QueuePresent(_presentQueue, _imageIndex); + if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR || _framebufferResized) + { + _framebufferResized = false; + _isSwapchainInvalid = true; + } + else if (result != VK_SUCCESS) + { + LAppPal::PrintLogLn("failed to present swap chain image!"); + } +} + +void VulkanManager::RecreateSwapchain() +{ + vkDeviceWaitIdle(_device); + _swapchainManager->Cleanup(_device); + _swapchainManager->CreateSwapchain(_window, _physicalDevice, _device, _surface, indices.graphicsFamily, + indices.presentFamily); +} + +void VulkanManager::Destroy() +{ + vkDeviceWaitIdle(_device); + _swapchainManager->Cleanup(_device); + + delete _swapchainManager; + vkDestroySemaphore(_device, _imageAvailableSemaphore, nullptr); + + if (_enableValidationLayers) + { + DestroyDebugUtilsMessengerEXT(_instance, _debugMessenger, nullptr); + } + + vkDestroyCommandPool(_device, _commandPool, nullptr); + vkDestroyDevice(_device, nullptr); + vkDestroySurfaceKHR(_instance, _surface, nullptr); + vkDestroyInstance(_instance, nullptr); +} diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/VulkanManager.hpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/VulkanManager.hpp new file mode 100644 index 0000000..8d3a2d1 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/VulkanManager.hpp @@ -0,0 +1,288 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once +#include +#include "Type/csmMap.hpp" +#include "SwapchainManager.hpp" + + /** + * @brief vulkanに必要なリソースを扱うクラス + */ +class VulkanManager +{ +public: + // キューファミリの情報を格納する構造体 + struct QueueFamilyIndices + { + // 描画用と表示用のキューファミリは必ずしも一致するとは限らないので分ける + Csm::csmInt32 graphicsFamily = -1; // 描画コマンドに使用するキューファミリ + Csm::csmInt32 presentFamily = -1; // 表示に使用するキューファミリ + + // 対応するキューファミリがあるか + bool IsComplete() + { + return graphicsFamily != -1 && presentFamily != -1; + } + }indices; + + const char* deviceExtensions[3] = { + VK_KHR_SWAPCHAIN_EXTENSION_NAME, + VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, + VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME + }; + + const char* validationLayers[1] = { + "VK_LAYER_KHRONOS_validation" + }; + + /** + * @brief クラスのインスタンス(シングルトン)を返す。
+ * インスタンスが生成されていない場合は内部でインスタンを生成する。 + * + * @return クラスのインスタンス + */ + static VulkanManager* GetInstance(); + + /** + * @brief クラスのインスタンス(シングルトン)を解放する。 + * + */ + static void ReleaseInstance(); + + /** + * @brief コンストラクタ + */ + VulkanManager(); + + /** + * @brief デストラクタ + */ + ~VulkanManager(); + + /** + * @brief 検証レイヤーのサポートを確認する + */ + bool CheckValidationLayerSupport(); + + /** + * @brief 必要な拡張機能を取得する + * + * @return 必要な拡張の配列 + */ + Csm::csmVector GetRequiredExtensions(); + + /** + * @brief デバッグメッセージを有効にする + * + * @param[in] createInfo -> デバッグメッセンジャーオブジェクトの情報 + */ + void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo); + + /** + * @brief インスタンスを生成する + */ + void CreateInstance(); + + /** + * @brief デバッグメッセージを有効にする + */ + void SetupDebugMessenger(); + + /** + * @brief デバイスの拡張をチェックする + * + * @param[in] physicalDevice -> 物理デバイス + */ + bool CheckDeviceExtensionSupport(VkPhysicalDevice physicalDevice); + + /** + * @brief サーフェスを作る + */ + void CreateSurface(); + + /** + * @brief キューファミリを見つける + * + * @param[in] queueFlags -> 物理デバイス + */ + void FindQueueFamilies(VkPhysicalDevice device); + + /** + * @brief デバイスが使えるか確認する + * + * @param[in] device -> 物理デバイス + */ + bool IsDeviceSuitable(VkPhysicalDevice device); + + /** + * @brief 物理デバイスを取得する + */ + void PickPhysicalDevice(); + + /** + * @brief 論理デバイスを作成する + */ + void CreateLogicalDevice(); + + /** + * @brief 深度フォーマットを作成する + */ + void ChooseSupportedDepthFormat(); + + /** + * @brief コマンドプールを作成する + */ + void CreateCommandPool(); + + /** + * @brief 同期オブジェクトを作成する + */ + void CreateSyncObjects(); + + /** + * @brief 初期化する + * @param[in] wind -> ウィンドウ + */ + void Initialize(GLFWwindow* wind); + + /** + * @brief コマンドの記録を開始する + */ + VkCommandBuffer BeginSingleTimeCommands(); + + /** + * @brief コマンドを提出する + * + * @param[in] commandBuffer -> コマンドバッファ + * @param[in] isDraw -> 描画コマンドか + * @param[in] isFirstDraw -> 最初の描画コマンドか + */ + void SubmitCommand(VkCommandBuffer commandBuffer, bool isFirstDraw = false); + + /** + * @brief 描画する + */ + void UpdateDrawFrame(); + + /** + * @brief 描画完了の追加処理 + */ + void PostDraw(); + + /** + * @brief スワップチェーンを再構成する + */ + void RecreateSwapchain(); + + /** + * @brief リソースを破棄する + */ + void Destroy(); + + /** + * @brief デバイスを取得する + * @return デバイス + */ + VkDevice GetDevice() { return _device; } + + /** + * @brief 物理デバイスを取得する + * @return 物理デバイス + */ + VkPhysicalDevice GetPhysicalDevice() { return _physicalDevice; } + + /** + * @brief モデル描画用コマンドバッファを取得する + * @return コマンドバッファの配列 + */ + VkQueue GetGraphicQueue() { return _graphicQueue; } + + /** + * @brief コマンドプールを取得する + * @return コマンドプール + */ + VkCommandPool GetCommandPool() { return _commandPool; } + + /** + * @brief スワップチェーンマネージャーを取得する + * @return スワップチェーンマネージャー + */ + SwapchainManager* GetSwapchainManager() { return _swapchainManager; } + + /** + * @brief ウィンドウサイズが変更されたかのフラグを取得する + * @return ウィンドウサイズの変更フラグ + */ + bool GetIsWindowSizeChanged() { return _isSwapchainInvalid; } + + /** + * @brief ウィンドウサイズが変更されたかのフラグをセットする + * @param[in] flag -> セットするフラグ + */ + void SetIsWindowSizeChanged(bool flag) { _isSwapchainInvalid = flag; } + + /** + * @brief フレームバッファのフラグを更新する + * + */ + void SetFrameBufferResized(bool flag) { _framebufferResized = flag; } + + /** + * @brief 深度フォーマットを取得する + * @return 深度フォーマット + */ + VkFormat GetDepthFormat() const { return _depthFormat; } + + /** + * @brief サーフェスのフォーマットを取得する + * + * @return フォーマット + */ + VkFormat GetImageFormat() { return _surfaceFormat; } + + /** + * @brief モデルテクスチャのフォーマットを取得する + * + * @return フォーマット + */ + VkFormat GetTextureFormat() { return _textureFormat; } + + /** + * @brief スワップチェーンイメージを取得する + * + * @return スワップチェーンイメージ + */ + VkImage GetSwapchainImage() { return GetSwapchainManager()->GetImages()[_imageIndex]; } + + /** + * @brief スワップチェーンイメージを取得する + * + * @return スワップチェーンイメージ + */ + VkImageView GetSwapchainImageView() { return GetSwapchainManager()->GetImageViews()[_imageIndex]; } + +private: + GLFWwindow* _window; // ウィンドウ + VkInstance _instance; // ライブラリを初期化するインスタンス + VkSurfaceKHR _surface; // ウィンドウシステムに描画ために必要なサーフェス + VkPhysicalDevice _physicalDevice; // 物理デバイス + VkDevice _device; // 論理デバイス + VkQueue _graphicQueue; // 描画コマンドを積むキュー + VkQueue _presentQueue; // 表示コマンドに使用するキュー + VkCommandPool _commandPool; // コマンドバッファの作成に必要なコマンドプール + VkSemaphore _imageAvailableSemaphore; // セマフォ + SwapchainManager* _swapchainManager; // スワップチェーンの管理を行うスワップチェーンマネージャー + bool _isSwapchainInvalid; // ウィンドウサイズが変更されたかのフラグ + const bool _enableValidationLayers = true; // 検証レイヤーを有効にするか + VkDebugUtilsMessengerEXT _debugMessenger; // デバッグメッセージを出力するオブジェクト + Csm::csmUint32 _imageIndex; // 現在のイメージインデックス + VkFormat _depthFormat; // 深度フォーマット + const VkFormat _surfaceFormat = VK_FORMAT_B8G8R8A8_UNORM; // サーフェイス用フォーマット + const VkFormat _textureFormat = VK_FORMAT_R8G8B8A8_UNORM; // テクスチャ用フォーマット + bool _framebufferResized; // フレームバッファのサイズが変わったか +}; diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/main.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/main.cpp new file mode 100644 index 0000000..b65c1f0 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/main.cpp @@ -0,0 +1,22 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppDelegate.hpp" + +int main(int argc, char* argv[]) +{ + // create the application instance + if (LAppDelegate::GetInstance()->Initialize() == GL_FALSE) + { + return 1; + } + + LAppDelegate::GetInstance()->Run(); + + return 0; +} + diff --git a/Samples/Vulkan/Demo/proj.linux.cmake/src/mainMinimum.cpp b/Samples/Vulkan/Demo/proj.linux.cmake/src/mainMinimum.cpp new file mode 100644 index 0000000..6fc8e93 --- /dev/null +++ b/Samples/Vulkan/Demo/proj.linux.cmake/src/mainMinimum.cpp @@ -0,0 +1,352 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include + +#include +#include +#include +#include + +#include "LAppDefine.hpp" +#include "LAppAllocator.hpp" +#include "LAppTextureManager.hpp" +#include "LAppPal.hpp" +#include "CubismUserModelExtend.hpp" +#include "MouseActionManager.hpp" +#include "VulkanManager.hpp" + +#include +#include +#include +#include +#include +#include + +/** +*@brief モデルデータのディレクトリ名 +* このディレクトリ名と同名の.model3.jsonを読み込む +*/ +static const Csm::csmChar* _modelDirectoryName = "Hiyori"; + +static Csm::CubismUserModel* _userModel; ///< ユーザーが実際に使用するモデル +static Csm::CubismFramework::Option _cubismOption; ///< CubismFrameworkに関するオプション +static LAppAllocator _cubismAllocator; ///< メモリのアロケーター + +static std::string _executeAbsolutePath; ///< アプリケーションの実行パス +static std::string _currentModelDirectory; ///< 現在のモデルのディレクトリ名 + +static GLFWwindow* _window; ///< ウィンドウオブジェクト +int _windowWidth, _windowHeight; ///< ウィンドウサイズの保存 + +/** +* @brief Cubism SDKの初期化 +* +* Cubism SDKの初期化処理を行う +*/ +static void InitializeCubism() +{ + //Initialize cubism + Csm::CubismFramework::Initialize(); + + LAppPal::UpdateTime(); +} + +/** +* @brief アプリケーションの実行パスの設定 +* +* Linuxのアプリケーションの実行パスを確認し、パスを取得する +*/ +void SetExecuteAbsolutePath() +{ + const int maximumPathBufferSize = 1024; + char path[maximumPathBufferSize]; + ssize_t len = readlink("/proc/self/exe", path, maximumPathBufferSize - 1); + + if (len != -1) + { + path[len] = '\0'; + } + + _executeAbsolutePath = dirname(path); + _executeAbsolutePath += "/"; +} + +/** +* @brief システムの初期化 +* +* 基盤システムの初期化処理を行う +*/ +static bool InitializeSystem() +{ + LAppPal::PrintLogLn("START"); + + // GLFWの初期化 + if (glfwInit() == GL_FALSE) + { + LAppPal::PrintLogLn("Can't initilize GLFW"); + + return GL_FALSE; + } + + // Windowの生成 + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + _window = glfwCreateWindow(LAppDefine::RenderTargetWidth, LAppDefine::RenderTargetHeight, "SIMPLE_SAMPLE", NULL, NULL); + if (_window == NULL) + { + LAppPal::PrintLogLn("Can't create GLFW window."); + + glfwTerminate(); + return GL_FALSE; + } + + glfwSetWindowUserPointer(_window, VulkanManager::GetInstance()); + + // Windowのコンテキストをカレントに設定 + glfwMakeContextCurrent(_window); + glfwSwapInterval(1); + + // コールバック関数の登録 + glfwSetMouseButtonCallback(_window, EventHandler::OnMouseCallBack); + glfwSetCursorPosCallback(_window, EventHandler::OnMouseCallBack); + + // ウィンドウサイズ記憶 + glfwGetWindowSize(_window, &_windowWidth, &_windowHeight); + + // Cubism SDK の初期化 + _cubismOption.LogFunction = LAppPal::PrintMessage; + _cubismOption.LoggingLevel = Csm::CubismFramework::Option::LogLevel_Verbose; + Csm::CubismFramework::StartUp(&_cubismAllocator, &_cubismOption); + + InitializeCubism(); + + LAppPal::UpdateTime(); + + // vulkanデバイスの作成 + VulkanManager::GetInstance()->Initialize(_window); + SwapchainManager* swapchainManager = VulkanManager::GetInstance()->GetSwapchainManager(); + // レンダラにvulkanManagerの変数を渡す + Live2D::Cubism::Framework::Rendering::CubismRenderer_Vulkan::InitializeConstantSettings( + VulkanManager::GetInstance()->GetDevice(), VulkanManager::GetInstance()->GetPhysicalDevice(), + VulkanManager::GetInstance()->GetCommandPool(), VulkanManager::GetInstance()->GetGraphicQueue(), + swapchainManager->GetImageCount(), swapchainManager->GetExtent(), + VulkanManager::GetInstance()->GetSwapchainImageView(), swapchainManager->GetSwapchainImageFormat(), + VulkanManager::GetInstance()->GetDepthFormat() + ); + + // ドラッグ入力管理クラスの初期化 + MouseActionManager::GetInstance()->Initialize(_windowWidth, _windowHeight); + + SetExecuteAbsolutePath(); + + return GL_TRUE; +} + +/** +* @brief 解放 +* +* 解放の処理を行う +*/ +void Release() +{ + // レンダラの解放 + _userModel->DeleteRenderer(); + + // モデルデータの解放 + delete _userModel; + + // Windowの削除 + glfwDestroyWindow(_window); + + // OpenGLの処理を終了 + glfwTerminate(); + + // MouseActionManagerの解放 + MouseActionManager::ReleaseInstance(); + + // Cubism SDK の解放 + Csm::CubismFramework::Dispose(); +} + +/** +* @brief モデルの読み込み +* +* モデルデータの読み込み処理を行う +* +* @param[in] modelDirectory モデルのディレクトリ名 +*/ +void LoadModel(const std::string modelDirectoryName) +{ + // モデルのディレクトリを指定 + _currentModelDirectory = _executeAbsolutePath + LAppDefine::ResourcesPath + modelDirectoryName + "/"; + + // モデルデータの新規生成 + _userModel = new CubismUserModelExtend(modelDirectoryName, _currentModelDirectory); + + // モデルデータの読み込み及び生成とセットアップを行う + std::string json = ".model3.json"; + std::string fileName = _modelDirectoryName + json; + static_cast(_userModel)->LoadAssets(fileName.c_str()); + + // ユーザーモデルをMouseActionManagerへ渡す + MouseActionManager::GetInstance()->SetUserModel(_userModel); +} + +bool RecreateSwapchain() +{ + int width = 0, height = 0; + if (VulkanManager::GetInstance()->GetIsWindowSizeChanged()) + { + glfwGetFramebufferSize(_window, &width, &height); + while (width == 0 || height == 0) + { + glfwGetFramebufferSize(_window, &width, &height); + glfwWaitEvents(); + } + + VulkanManager::GetInstance()->RecreateSwapchain(); + Live2D::Cubism::Framework::Rendering::CubismRenderer_Vulkan::SetRenderTarget( + VulkanManager::GetInstance()->GetSwapchainImage(), + VulkanManager::GetInstance()->GetSwapchainImageView(), + VulkanManager::GetInstance()->GetSwapchainManager()->GetSwapchainImageFormat(), + VulkanManager::GetInstance()->GetSwapchainManager()->GetExtent() + ); + + // サイズを保存しておく + _windowWidth = width; + _windowHeight = height; + VulkanManager::GetInstance()->SetIsWindowSizeChanged(false); + + return true; + } + return false; +} + +/** +* @brief モデル描画前処理 +* +* スワップチェーンのクリアとメモリーレイアウトの変更を行う +*/ +void PreModelDraw() +{ + VulkanManager* vkManager = VulkanManager::GetInstance(); + VkCommandBuffer commandBuffer = vkManager->BeginSingleTimeCommands(); + + // レイアウト変更 + VkImageMemoryBarrier memoryBarrier{}; + memoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + memoryBarrier.srcAccessMask = 0; + memoryBarrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + memoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + memoryBarrier.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + memoryBarrier.image = vkManager->GetSwapchainImage(); + memoryBarrier.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }; + vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, 0, nullptr, 0, nullptr, 1, &memoryBarrier); + + VkRenderingAttachmentInfoKHR colorAttachment{}; + colorAttachment.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR; + colorAttachment.imageView = vkManager->GetSwapchainImageView(); + colorAttachment.imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL; + colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; + colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE; + colorAttachment.clearValue = {0.0, 0.0, 0.0, 1.0}; + + VkRenderingInfo renderingInfo{}; + renderingInfo.sType = VK_STRUCTURE_TYPE_RENDERING_INFO; + renderingInfo.renderArea = {{0, 0}, {vkManager->GetSwapchainManager()->GetExtent()}}; + renderingInfo.layerCount = 1; + renderingInfo.colorAttachmentCount = 1; + renderingInfo.pColorAttachments = &colorAttachment; + + // 画面クリア + vkCmdBeginRendering(commandBuffer, &renderingInfo); + vkCmdEndRendering(commandBuffer); + vkManager->SubmitCommand(commandBuffer, true); + + Live2D::Cubism::Framework::Rendering::CubismRenderer_Vulkan::SetRenderTarget( + VulkanManager::GetInstance()->GetSwapchainImage(), + VulkanManager::GetInstance()->GetSwapchainImageView(), + VulkanManager::GetInstance()->GetSwapchainManager()->GetSwapchainImageFormat(), + VulkanManager::GetInstance()->GetSwapchainManager()->GetExtent() + ); +} + +/** +* @brief モデル描画後処理 +* +* スワップチェーンのレイアウトを描画用へ変更 +*/ +void PostModelDraw() +{ + VulkanManager* vkManager = VulkanManager::GetInstance(); + + VkCommandBuffer commandBuffer = vkManager->BeginSingleTimeCommands(); + + // スワップチェーン描画終了バリア + VkImageMemoryBarrier memoryBarrier{}; + memoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + memoryBarrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + memoryBarrier.dstAccessMask = 0; + memoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + memoryBarrier.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; + memoryBarrier.image = vkManager->GetSwapchainImage(); + memoryBarrier.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }; + vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &memoryBarrier); + + vkManager->SubmitCommand(commandBuffer); +} + +void Run() +{ + //メインループ + while (glfwWindowShouldClose(_window) == GL_FALSE) + { + // Poll for and process events + glfwPollEvents(); + + // 時間更新 + LAppPal::UpdateTime(); + VulkanManager::GetInstance()->UpdateDrawFrame(); + + if (RecreateSwapchain()) + { + continue; + } + + // View の PreModelDraw + PreModelDraw(); + + // モデルの更新及び描画 + static_cast(_userModel)->ModelOnUpdate(_window); + + // View の PostModelDraw + PostModelDraw(); + + // バッファの入れ替え + VulkanManager::GetInstance()->PostDraw(); + RecreateSwapchain(); + } +} + +int main() +{ + // 初期化 + InitializeSystem(); + + // モデルの読み込み + LoadModel(_modelDirectoryName); + + // メインループ + Run(); + + // 解放処理 + Release(); + + return 0; +} diff --git a/Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt b/Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt index c290b79..8fe9329 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt +++ b/Samples/Vulkan/Demo/proj.win.cmake/CMakeLists.txt @@ -56,16 +56,7 @@ else() message(FATAL_ERROR "[${APP_NAME}] Invalid linker flag ${CMAKE_EXE_LINKER_FLAGS}.") endif() # Detect compiler. -if(MSVC_VERSION MATCHES 1800) - # Visual Studio 2013 - set(COMPILER 120) -elseif(MSVC_VERSION MATCHES 1900) - # Visual Studio 2015 - set(COMPILER 140) -elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) - # Visual Studio 2017 - set(COMPILER 141) -elseif(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) +if(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019 set(COMPILER 142) elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/CMakeLists.txt b/Samples/Vulkan/Demo/proj.win.cmake/src/CMakeLists.txt index 1c58b24..48e0a9b 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/CMakeLists.txt +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/CMakeLists.txt @@ -16,6 +16,8 @@ target_sources(${APP_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/LAppPal.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppSprite.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpritePipeline.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/LAppSpritePipeline.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppTextureManager.hpp ${CMAKE_CURRENT_SOURCE_DIR}/LAppView.cpp diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDefine.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDefine.cpp index 155b9eb..85bcc28 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDefine.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDefine.cpp @@ -37,6 +37,13 @@ const csmChar* GearImageName = "icon_gear.png"; // 終了ボタン const csmChar* PowerImageName = "close.png"; +// シェーダー相対パス +const csmChar* ShaderPath = "SampleShaders/"; +// 頂点シェーダー +const csmChar* VertShaderName = "VertSprite.spv"; +// フラグメントシェーダー +const csmChar* FragShaderName = "FragSprite.spv"; + // モデル定義------------------------------------------ // 外部定義ファイル(json)と合わせる const csmChar* MotionGroupIdle = "Idle"; // アイドリング diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDefine.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDefine.hpp index 50c428f..04ba5ac 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDefine.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDefine.hpp @@ -35,6 +35,10 @@ extern const csmChar* BackImageName; ///< 背景画像ファイル extern const csmChar* GearImageName; ///< 歯車画像ファイル extern const csmChar* PowerImageName; ///< 終了ボタン画像ファイル +extern const csmChar* ShaderPath;///< シェーダーパス +extern const csmChar* VertShaderName;///< 頂点シェーダー +extern const csmChar* FragShaderName;///< フラグメントシェーダー + // モデル定義-------------------------------------------- // 外部定義ファイル(json)と合わせる extern const csmChar* MotionGroupIdle; ///< アイドリング時に再生するモーションのリスト diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDelegate.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDelegate.cpp index dc12838..11adae6 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDelegate.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDelegate.cpp @@ -7,8 +7,6 @@ #include "LAppDelegate.hpp" #include -#define GLFW_INCLUDE_VULKAN -#include #include #include "LAppLive2DManager.hpp" #include "LAppView.hpp" @@ -86,7 +84,7 @@ bool LAppDelegate::Initialize() //コールバック関数の登録 glfwSetMouseButtonCallback(window, EventHandler::OnMouseCallBack); glfwSetCursorPosCallback(window, EventHandler::OnMouseCallBack); - glfwSetFramebufferSizeCallback(window, s_vulkanManager->framebufferResizeCallback); + glfwSetFramebufferSizeCallback(window, EventHandler::OnFramebufferResizedCallback); // ウィンドウサイズ記憶 int width, height; @@ -106,9 +104,8 @@ bool LAppDelegate::Initialize() Live2D::Cubism::Framework::Rendering::CubismRenderer_Vulkan::InitializeConstantSettings( s_vulkanManager->GetDevice(), s_vulkanManager->GetPhysicalDevice(), s_vulkanManager->GetCommandPool(), s_vulkanManager->GetGraphicQueue(), - swapchainManager->GetExtent(), swapchainManager->GetSwapchainImageFormat(), - s_vulkanManager->GetImageFormat(), - s_vulkanManager->GetSwapchainImage(), s_vulkanManager->GetSwapchainImageView(), + swapchainManager->GetImageCount() , swapchainManager->GetExtent(), + s_vulkanManager->GetSwapchainImageView(), swapchainManager->GetSwapchainImageFormat(), s_vulkanManager->GetDepthFormat() ); @@ -140,7 +137,8 @@ void LAppDelegate::Release() //Cubism SDK の解放 CubismFramework::Dispose(); - s_vulkanManager->Destroy(); + delete s_vulkanManager; + s_vulkanManager = NULL; } bool LAppDelegate::RecreateSwapchain() @@ -156,10 +154,11 @@ bool LAppDelegate::RecreateSwapchain() } s_vulkanManager->RecreateSwapchain(); - Live2D::Cubism::Framework::Rendering::CubismRenderer_Vulkan::UpdateSwapchainVariable( - s_vulkanManager->GetSwapchainManager()->GetExtent(), + Live2D::Cubism::Framework::Rendering::CubismRenderer_Vulkan::SetRenderTarget( s_vulkanManager->GetSwapchainImage(), - s_vulkanManager->GetSwapchainImageView() + s_vulkanManager->GetSwapchainImageView(), + s_vulkanManager->GetSwapchainManager()->GetSwapchainImageFormat(), + s_vulkanManager->GetSwapchainManager()->GetExtent() ); // AppViewの初期化 diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDelegate.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDelegate.hpp index ed7d04e..66c44fe 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDelegate.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppDelegate.hpp @@ -7,8 +7,6 @@ #pragma once -#define GLFW_INCLUDE_VULKAN -#include #include "LAppAllocator.hpp" #include "VulkanManager.hpp" @@ -148,4 +146,13 @@ class EventHandler { LAppDelegate::GetInstance()->OnMouseCallBack(window, x, y); } + + /** + * @brief glfwSetFramebufferSizeCallback用コールバック関数。 + */ + static void OnFramebufferResizedCallback(GLFWwindow* window, int width, int height) + { + auto app = reinterpret_cast(glfwGetWindowUserPointer(window)); + app->SetFrameBufferResized(true); + } }; diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppLive2DManager.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppLive2DManager.cpp index f139ffd..86f080e 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppLive2DManager.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppLive2DManager.cpp @@ -6,11 +6,11 @@ */ #include "LAppLive2DManager.hpp" +#include #include #include #include #include -#include #include "LAppPal.hpp" #include "LAppDefine.hpp" #include "LAppDelegate.hpp" @@ -23,6 +23,11 @@ using namespace LAppDefine; namespace { LAppLive2DManager* s_instance = NULL; +void BeganMotion(ACubismMotion* self) +{ + LAppPal::PrintLogLn("Motion began: %x", self); +} + void FinishedMotion(ACubismMotion* self) { LAppPal::PrintLogLn("Motion Finished: %x", self); @@ -85,30 +90,43 @@ void LAppLive2DManager::SetUpModel() { // ResourcesPathの中にあるフォルダ名を全てクロールし、モデルが存在するフォルダを定義する。 // フォルダはあるが同名の.model3.jsonが見つからなかった場合はリストに含めない。 + // 一部文字が受け取れないためワイド文字で受け取ってUTF8に変換し格納する。 + csmString crawlPath(ResourcesPath); crawlPath += "*.*"; - struct _finddata_t fdata; - intptr_t fh = _findfirst(crawlPath.GetRawString(), &fdata); - if (fh == -1) return; + wchar_t wideStr[MAX_PATH]; + csmChar name[MAX_PATH]; + LAppPal::ConvertMultiByteToWide(crawlPath.GetRawString(), wideStr, MAX_PATH); + + struct _wfinddata_t fdata; + intptr_t fh = _wfindfirst(wideStr, &fdata); + if (fh == -1) + { + return; + } _modelDir.Clear(); - while (_findnext(fh, &fdata) == 0) + while (_wfindnext(fh, &fdata) == 0) { - if ((fdata.attrib & _A_SUBDIR) && strcmp(fdata.name, "..") != 0) + if ((fdata.attrib & _A_SUBDIR) && wcscmp(fdata.name, L"..") != 0) { + LAppPal::ConvertWideToMultiByte(fdata.name, name, MAX_PATH); + // フォルダと同名の.model3.jsonがあるか探索する csmString model3jsonPath(ResourcesPath); - model3jsonPath += fdata.name; + model3jsonPath += name; model3jsonPath.Append(1, '/'); - model3jsonPath += fdata.name; + model3jsonPath += name; model3jsonPath += ".model3.json"; - struct _finddata_t fdata2; - if (_findfirst(model3jsonPath.GetRawString(), &fdata2) != -1) + LAppPal::ConvertMultiByteToWide(model3jsonPath.GetRawString(), wideStr, MAX_PATH); + + struct _wfinddata_t fdata2; + if (_wfindfirst(wideStr, &fdata2) != -1) { - _modelDir.PushBack(csmString(fdata.name)); + _modelDir.PushBack(csmString(name)); } } } @@ -168,7 +186,7 @@ void LAppLive2DManager::OnTap(csmFloat32 x, csmFloat32 y) { LAppPal::PrintLogLn("[APP]hit area: [%s]", HitAreaNameBody); } - _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion); + _models[i]->StartRandomMotion(MotionGroupTapBody, PriorityNormal, FinishedMotion, BeganMotion); } } } @@ -179,7 +197,6 @@ void LAppLive2DManager::OnUpdate() const glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); VulkanManager* vulkanManager = LAppDelegate::GetInstance()->GetVulkanManager(); - Rendering::CubismRenderer_Vulkan::UpdateRendererSettings(vulkanManager->GetSwapchainImage(), vulkanManager->GetSwapchainImageView()); csmUint32 modelCount = _models.GetSize(); for (csmUint32 i = 0; i < modelCount; ++i) @@ -280,7 +297,7 @@ void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) LAppDelegate::GetInstance()->GetView()->SwitchRenderingTarget(useRenderTarget); // 別レンダリング先を選択した際の背景クリア色 - float clearColor[3] = {1.0f, 1.0f, 1.0f}; + float clearColor[3] = {0.0f, 0.0f, 0.0f}; LAppDelegate::GetInstance()->GetView()->SetRenderTargetClearColor(clearColor[0], clearColor[1], clearColor[2]); } diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppModel.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppModel.cpp index 66c8493..6a33918 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppModel.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppModel.cpp @@ -281,21 +281,10 @@ void LAppModel::PreloadMotionGroup(const csmChar* group) csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString())); + CubismMotion* tmpMotion = static_cast(LoadMotion(buffer, size, name.GetRawString(), NULL, NULL, _modelSetting, group, i)); if (tmpMotion) { - csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, i); - if (fadeTime >= 0.0f) - { - tmpMotion->SetFadeOutTime(fadeTime); - } tmpMotion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); if (_motions[name] != NULL) @@ -449,7 +438,7 @@ void LAppModel::Update() } CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt32 no, csmInt32 priority, - ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) + ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (priority == PriorityForce) { @@ -479,21 +468,11 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt csmByte* buffer; csmSizeInt size; buffer = CreateBuffer(path.GetRawString(), &size); - motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler)); + motion = static_cast(LoadMotion(buffer, size, NULL, onFinishedMotionHandler, onBeganMotionHandler, _modelSetting, group, no)); csmFloat32 fadeTime = _modelSetting->GetMotionFadeInTimeValue(group, no); if (fadeTime) { - if (fadeTime >= 0.0f) - { - motion->SetFadeInTime(fadeTime); - } - - fadeTime = _modelSetting->GetMotionFadeOutTimeValue(group, no); - if (fadeTime >= 0.0f) - { - motion->SetFadeOutTime(fadeTime); - } motion->SetEffectIds(_eyeBlinkIds, _lipSyncIds); autoDelete = true; // 終了時にメモリから削除 } @@ -502,6 +481,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } else { + motion->SetBeganMotionHandler(onBeganMotionHandler); motion->SetFinishedMotionHandler(onFinishedMotionHandler); } @@ -522,7 +502,7 @@ CubismMotionQueueEntryHandle LAppModel::StartMotion(const csmChar* group, csmInt } CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 priority, - ACubismMotion::FinishedMotionCallback onFinishedMotionHandler) + ACubismMotion::FinishedMotionCallback onFinishedMotionHandler, ACubismMotion::BeganMotionCallback onBeganMotionHandler) { if (_modelSetting->GetMotionCount(group) == 0) { @@ -531,7 +511,7 @@ CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(const csmChar* group, csmInt32 no = rand() % _modelSetting->GetMotionCount(group); - return StartMotion(group, no, priority, onFinishedMotionHandler); + return StartMotion(group, no, priority, onFinishedMotionHandler, onBeganMotionHandler); } void LAppModel::DoDraw() @@ -586,7 +566,7 @@ void LAppModel::SetExpression(const csmChar* expressionID) if (motion != NULL) { - _expressionManager->StartMotionPriority(motion, false, PriorityForce); + _expressionManager->StartMotion(motion, false); } else { @@ -645,7 +625,7 @@ void LAppModel::SetupTextures(VkDevice device, VkFormat surfaceFormat) CreateTextureFromPngFile( texturePath.GetRawString(), surfaceFormat, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, GetRenderer()->GetAnisotropy()); if (texture) { diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppModel.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppModel.hpp index e20f52d..6385b54 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppModel.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppModel.hpp @@ -70,11 +70,12 @@ class LAppModel : public Csm::CubismUserModel * @param[in] no グループ内の番号 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, - Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = - NULL); + Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, + Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief ランダムに選ばれたモーションの再生を開始する。 @@ -82,11 +83,12 @@ class LAppModel : public Csm::CubismUserModel * @param[in] group モーショングループ名 * @param[in] priority 優先度 * @param[in] onFinishedMotionHandler モーション再生終了時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 + * @param[in] onBeganMotionHandler モーション再生開始時に呼び出されるコールバック関数。NULLの場合、呼び出されない。 * @return 開始したモーションの識別番号を返す。個別のモーションが終了したか否かを判定するIsFinished()の引数で使用する。開始できない時は「-1」 */ Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, - Csm::ACubismMotion::FinishedMotionCallback - onFinishedMotionHandler = NULL); + Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL, + Csm::ACubismMotion::BeganMotionCallback onBeganMotionHandler = NULL); /** * @brief 引数で指定した表情モーションをセットする diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppPal.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppPal.cpp index 4858767..46a885a 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppPal.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppPal.cpp @@ -6,11 +6,13 @@ */ #include "LAppPal.hpp" +#include #include #include #include #include #include +#define GLFW_INCLUDE_VULKAN #include #include #include "LAppDefine.hpp" @@ -26,12 +28,12 @@ double LAppPal::s_deltaTime = 0.0; csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { - //filePath;// - const char* path = filePath.c_str(); + wchar_t wideStr[MAX_PATH]; + MultiByteToWideChar(CP_UTF8, 0U, filePath.c_str(), -1, wideStr, MAX_PATH); int size = 0; - struct stat statBuf; - if (stat(path, &statBuf) == 0) + struct _stat statBuf; + if (_wstat(wideStr, &statBuf) == 0) { size = statBuf.st_size; @@ -39,7 +41,7 @@ csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { if (DebugLogEnable) { - PrintLogLn("Stat succeeded but file size is zero. path:%s", path); + PrintLogLn("Stat succeeded but file size is zero. path:%s", filePath.c_str()); } return NULL; } @@ -48,28 +50,33 @@ csmByte* LAppPal::LoadFileAsBytes(const string filePath, csmSizeInt* outSize) { if (DebugLogEnable) { - PrintLogLn("Stat failed. errno:%d path:%s", errno, path); + PrintLogLn("Stat failed. errno:%d path:%s", errno, filePath.c_str()); } return NULL; } - std::fstream file; - - file.open(path, std::ios::in | std::ios::binary); + std::wfstream file; + file.open(wideStr, std::ios::in | std::ios::binary); if (!file.is_open()) { if (DebugLogEnable) { - PrintLogLn("File open failed. path:%s", path); + PrintLogLn("File open failed. path:%s", filePath.c_str()); } return NULL; } - char* buf = new char[size]; - file.read(buf, size); - file.close(); + // ファイル名はワイド文字で探しているがファイルの中身はutf-8なので、1バイトずつ取得する。 *outSize = size; + csmChar* buf = new char[*outSize]; + std::wfilebuf* fileBuf = file.rdbuf(); + for (csmUint32 i = 0; i < *outSize; i++) + { + buf[i] = fileBuf->sbumpc(); + } + file.close(); + return reinterpret_cast(buf); } @@ -129,3 +136,13 @@ void LAppPal::PrintMessageLn(const csmChar* message) { PrintLogLn("%s", message); } + +bool LAppPal::ConvertMultiByteToWide(const csmChar* multiByte, wchar_t* wide, int wideSize) +{ + return MultiByteToWideChar(CP_UTF8, 0U, multiByte, -1, wide, wideSize) != 0; +} + +bool LAppPal::ConvertWideToMultiByte(const wchar_t* wide, csmChar* multiByte, int multiByteSize) +{ + return WideCharToMultiByte(CP_UTF8, 0U, wide, -1, multiByte, multiByteSize, NULL, NULL) != 0; +} diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppPal.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppPal.hpp index f65e11f..70c7643 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppPal.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppPal.hpp @@ -91,6 +91,24 @@ class LAppPal */ static void PrintMessageLn(const Csm::csmChar* message); + /** + * @brief マルチバイト文字からワイド文字に変換する + * + * @param[in] multiByte 変換元 + * @param[in] wide 格納先 + * @param[in] wideSize 格納先の大きさ + */ + static bool ConvertMultiByteToWide(const Csm::csmChar* multiByte, wchar_t* wide, int wideSize); + + /** + * @brief ワイド文字からマルチバイト文字に変換する + * + * @param[in] wide 変換元 + * @param[in] multiByte 格納先 + * @param[in] multiByteSize 格納先の大きさ + */ + static bool ConvertWideToMultiByte(const wchar_t* wide, Csm::csmChar* multiByte, int multiByteSize); + private: static double s_currentFrame; static double s_lastFrame; diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSprite.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSprite.cpp index d723312..ef18cc5 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSprite.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSprite.cpp @@ -7,14 +7,17 @@ #include "LAppSprite.hpp" #include "LAppTextureManager.hpp" +#include "LAppSpritePipeline.hpp" #include "VulkanManager.hpp" using namespace Csm; LAppSprite::LAppSprite( - VkDevice device, VkPhysicalDevice physicalDevice, VulkanManager* vkManager, float x, float y, float width, float height, - Csm::csmUint32 textureId, VkImageView view, VkSampler sampler, VkDescriptorSetLayout descriptorSetLayout) - : _rect() + VkDevice device, VkPhysicalDevice physicalDevice, VulkanManager* vkManager, + float x, float y, float width, float height, + Csm::csmUint32 textureId, LAppSpritePipeline* pipeline, + VkImageView view, VkSampler sampler) + : _rect(), _pipeline(pipeline) { _rect.left = (x - width * 0.5f); _rect.right = (x + width * 0.5f); @@ -91,8 +94,8 @@ LAppSprite::LAppSprite( LAppPal::PrintLogLn("failed to create descriptor pool!"); } - CreateDescriptorSet(device, descriptorSetLayout); - if (view != NULL && sampler != NULL) + CreateDescriptorSet(device, _pipeline->GetDescriptorSetLayout()); + if (textureId != 0) { SetDescriptorUpdated(false); UpdateDescriptorSet(device, view, sampler); @@ -219,14 +222,14 @@ void LAppSprite::SetDescriptorUpdated(bool frag) isDescriptorUpdated = frag; } -void LAppSprite::Render(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, VulkanManager* vkManager, int windowWidth, int windowHeight) +void LAppSprite::Render(VkCommandBuffer commandBuffer, VulkanManager* vkManager, int windowWidth, int windowHeight) { UpdateData(vkManager, windowWidth, windowHeight); VkBuffer vertexBuffers[] = {_vertexBuffer.GetBuffer()}; VkDeviceSize offsets[] = {0}; vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets); vkCmdBindIndexBuffer(commandBuffer, _indexBuffer.GetBuffer(), 0, VK_INDEX_TYPE_UINT16); - vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &_descriptorSet, 0,nullptr); + vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _pipeline->GetPipelineLayout(), 0, 1, &_descriptorSet, 0,nullptr); vkCmdDrawIndexed(commandBuffer, IndexNum, 1, 0, 0, 0); } @@ -257,3 +260,8 @@ void LAppSprite::ResetRect(float x, float y, float width, float height) _rect.up = (y - height * 0.5f); _rect.down = (y + height * 0.5f); } + +void LAppSprite::SetPipeline(LAppSpritePipeline* pipeline) +{ + _pipeline = pipeline; +} diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSprite.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSprite.hpp index f0ddd7b..4ac3a8a 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSprite.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSprite.hpp @@ -10,6 +10,7 @@ // 前方宣言 class VulkanManager; +class LAppSpritePipeline; /** * @brief スプライトを実装するクラス。 @@ -89,13 +90,13 @@ class LAppSprite * @param[in] width 横幅 * @param[in] height 高さ * @param[in] textureId テクスチャID + * @param[in] pipeline パイプライン * @param[in] view テクスチャビュー * @param[in] sampler テクスチャサンプラー - * @param[in] descriptorSetLayout ディスクリプタセット */ LAppSprite( VkDevice device, VkPhysicalDevice physicalDevice, VulkanManager* vkManager, float x, float y, float width, float height, - uint32_t textureId, VkImageView view, VkSampler sampler, VkDescriptorSetLayout descriptorSetLayout + uint32_t textureId, LAppSpritePipeline* pipeline, VkImageView view, VkSampler sampler ); /** @@ -152,7 +153,7 @@ class LAppSprite * @param[in] windowWidth ウィンドウ幅 * @param[in] windowHeight ウィンドウ高さ */ - void Render(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, VulkanManager* vkManager, int windowWidth, int windowHeight); + void Render(VkCommandBuffer commandBuffer, VulkanManager* vkManager, int windowWidth, int windowHeight); /** * @brief コンストラクタ @@ -184,6 +185,13 @@ class LAppSprite */ void ResetRect(float x, float y, float width, float height); + /** + * @brief パイプラインのセット + * + * @param[in] pipeline パイプラインクラスへのポインタ + */ + void SetPipeline(LAppSpritePipeline* pipeline); + /** * @brief Getter テクスチャID * @return テクスチャIDを返す @@ -201,6 +209,7 @@ class LAppSprite Live2D::Cubism::Framework::CubismBufferVulkan _stagingBuffer; ///< ステージングバッファ Live2D::Cubism::Framework::CubismBufferVulkan _indexBuffer; ///< インデックスバッファ Live2D::Cubism::Framework::CubismBufferVulkan _uniformBuffer; ///< ユニフォームバッファ + LAppSpritePipeline* _pipeline; ///< パイプライン VkDescriptorPool _descriptorPool; ///< ディスクリプタプール VkDescriptorSet _descriptorSet; ///< ディスクリプタセット モデルの数 bool isDescriptorUpdated; diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSpritePipeline.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSpritePipeline.cpp new file mode 100644 index 0000000..3b8ea1c --- /dev/null +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSpritePipeline.cpp @@ -0,0 +1,241 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#include "LAppSpritePipeline.hpp" +#include + +#include "LAppSprite.hpp" +#include "LAppPal.hpp" +#include "LAppDefine.hpp" +#include "LAppDelegate.hpp" + +LAppSpritePipeline::LAppSpritePipeline(VkDevice device, VkExtent2D extent, VkFormat swapchainFormat) +{ + CreateDescriptorSetLayout(device); + CreatePipelineLayout(device, _descriptorSetLayout); + CreatePipeline(device, extent, swapchainFormat); +} + +LAppSpritePipeline::~LAppSpritePipeline() +{ + VkDevice device = LAppDelegate::GetInstance()->GetVulkanManager()->GetDevice(); + vkDestroyDescriptorSetLayout(device, _descriptorSetLayout, nullptr); + vkDestroyPipelineLayout(device, _pipelineLayout, nullptr); + vkDestroyPipeline(device, _pipeline, nullptr); +} + +VkShaderModule LAppSpritePipeline::CreateShaderModule(VkDevice device, Csm::csmString filename) +{ + // ファイル読み込み + const uint32_t* shaderCode; + Csm::csmSizeInt shaderSize; + shaderCode = reinterpret_cast(LAppPal::LoadFileAsBytes(filename.GetRawString(), &shaderSize)); + + VkShaderModuleCreateInfo createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + createInfo.codeSize = shaderSize; + createInfo.pCode = shaderCode; + + VkShaderModule shaderModule; + if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) + { + CubismLogError("failed to create shader module!"); + } + + // 読み込んだコードの開放 + delete[] shaderCode; + + return shaderModule; +} + +void LAppSpritePipeline::CreateDescriptorSetLayout(VkDevice device) +{ + VkDescriptorSetLayoutBinding bindings[2]; + + bindings[0].binding = 0; + bindings[0].descriptorCount = 1; + bindings[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + bindings[0].pImmutableSamplers = nullptr; + bindings[0].stageFlags = VK_SHADER_STAGE_ALL; + + bindings[1].binding = 1; + bindings[1].descriptorCount = 1; + bindings[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + bindings[1].pImmutableSamplers = nullptr; + bindings[1].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; + + VkDescriptorSetLayoutCreateInfo layoutInfo{}; + layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + layoutInfo.bindingCount = sizeof(bindings) / sizeof(bindings[0]); + layoutInfo.pBindings = bindings; + + if (vkCreateDescriptorSetLayout(device, &layoutInfo, nullptr, &_descriptorSetLayout) != VK_SUCCESS) + { + LAppPal::PrintLog("failed to create descriptor set layout!"); + } +} + +void LAppSpritePipeline::CreatePipelineLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) +{ + // パイプラインレイアウト作成 + VkPipelineLayoutCreateInfo pipelineLayoutInfo{}; + pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + pipelineLayoutInfo.setLayoutCount = 1; + pipelineLayoutInfo.pSetLayouts = &descriptorSetLayout; + + if (vkCreatePipelineLayout(device, &pipelineLayoutInfo, nullptr, &_pipelineLayout) != VK_SUCCESS) + { + LAppPal::PrintLog("failed to create pipeline layout!"); + } +} + +void LAppSpritePipeline::CreatePipeline(VkDevice device, VkExtent2D extent, VkFormat swapchainFormat) +{ + // シェーダーのパスの作成 + Csm::csmString vertShaderFile(LAppDefine::ShaderPath); + vertShaderFile += LAppDefine::VertShaderName; + Csm::csmString fragShaderFile(LAppDefine::ShaderPath); + fragShaderFile += LAppDefine::FragShaderName; + + VkShaderModule vertShaderModule = CreateShaderModule(device, vertShaderFile); + VkShaderModule fragShaderModule = CreateShaderModule(device, fragShaderFile); + + // 頂点シェーダー + VkPipelineShaderStageCreateInfo vertShaderStageInfo{}; + vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; + vertShaderStageInfo.module = vertShaderModule; + vertShaderStageInfo.pName = "main"; + + // フラグメントシェーダー + VkPipelineShaderStageCreateInfo fragShaderStageInfo{}; + fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT; + fragShaderStageInfo.module = fragShaderModule; + fragShaderStageInfo.pName = "main"; + + VkPipelineShaderStageCreateInfo shaderStages[] = {vertShaderStageInfo, fragShaderStageInfo}; + + + // 頂点入力バインド + VkPipelineVertexInputStateCreateInfo vertexInputInfo{}; + vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; + + VkVertexInputBindingDescription bindingDescription = LAppSprite::SpriteVertex::GetBindingDescription(); + VkVertexInputAttributeDescription attributeDescriptions[2]{}; + LAppSprite::SpriteVertex::GetAttributeDescriptions(attributeDescriptions); + vertexInputInfo.vertexBindingDescriptionCount = 1; + vertexInputInfo.pVertexBindingDescriptions = &bindingDescription; + vertexInputInfo.vertexAttributeDescriptionCount = sizeof(attributeDescriptions) / sizeof(attributeDescriptions[0]); + vertexInputInfo.pVertexAttributeDescriptions = attributeDescriptions; + + // インプットアセンブラ + VkPipelineInputAssemblyStateCreateInfo inputAssembly{}; + inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + inputAssembly.primitiveRestartEnable = VK_FALSE; + + // ビューポート + VkRect2D scissor{}; + scissor.offset = {0, 0}; + scissor.extent = extent; + + VkViewport viewport{}; + viewport.x = 0.0f; + viewport.y = 0.0f; + viewport.width = (float)scissor.extent.width; + viewport.height = (float)scissor.extent.height; + viewport.minDepth = 0.0f; + viewport.maxDepth = 1.0f; + + VkPipelineViewportStateCreateInfo viewportState{}; + viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + viewportState.viewportCount = 1; + viewportState.pViewports = &viewport; + viewportState.scissorCount = 1; + viewportState.pScissors = &scissor; + + // ラスタライザ + VkPipelineRasterizationStateCreateInfo rasterizer{}; + rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; + rasterizer.depthClampEnable = VK_FALSE; + rasterizer.rasterizerDiscardEnable = VK_FALSE; + rasterizer.polygonMode = VK_POLYGON_MODE_FILL; + rasterizer.lineWidth = 1.0f; + rasterizer.cullMode = VK_CULL_MODE_BACK_BIT; + rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; + rasterizer.depthBiasEnable = VK_FALSE; + + // サンプラー + VkPipelineMultisampleStateCreateInfo multisampling{}; + multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + multisampling.sampleShadingEnable = VK_FALSE; + multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + + // ブレンドステート + VkPipelineColorBlendAttachmentState colorBlendAttachment{}; + colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT + | VK_COLOR_COMPONENT_A_BIT; + colorBlendAttachment.blendEnable = VK_TRUE; + colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; + colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + colorBlendAttachment.colorBlendOp = VK_BLEND_OP_ADD; + colorBlendAttachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; + colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD; + + VkPipelineColorBlendStateCreateInfo colorBlending{}; + colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + colorBlending.logicOpEnable = VK_FALSE; + colorBlending.logicOp = VK_LOGIC_OP_COPY; + colorBlending.attachmentCount = 1; + colorBlending.pAttachments = &colorBlendAttachment; + + // パイプライン作成 + VkPipelineRenderingCreateInfo renderingInfo{}; + renderingInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO; + renderingInfo.colorAttachmentCount = 1; + renderingInfo.pColorAttachmentFormats = &swapchainFormat; + + VkGraphicsPipelineCreateInfo pipelineInfo{}; + pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + pipelineInfo.stageCount = 2; + pipelineInfo.pStages = shaderStages; + pipelineInfo.pVertexInputState = &vertexInputInfo; + pipelineInfo.pInputAssemblyState = &inputAssembly; + pipelineInfo.pViewportState = &viewportState; + pipelineInfo.pRasterizationState = &rasterizer; + pipelineInfo.pMultisampleState = &multisampling; + pipelineInfo.pColorBlendState = &colorBlending; + pipelineInfo.layout = _pipelineLayout; + pipelineInfo.subpass = 0; + pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; + pipelineInfo.pNext = &renderingInfo; + + if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &_pipeline) != VK_SUCCESS) + { + LAppPal::PrintLog("failed to create graphics pipeline!"); + } + + vkDestroyShaderModule(device, vertShaderModule, nullptr); + vkDestroyShaderModule(device, fragShaderModule, nullptr); +} + +VkPipelineLayout LAppSpritePipeline::GetPipelineLayout() const +{ + return _pipelineLayout; +} + +VkPipeline LAppSpritePipeline::GetPipeline() const +{ + return _pipeline; +} + +VkDescriptorSetLayout LAppSpritePipeline::GetDescriptorSetLayout() const +{ + return _descriptorSetLayout; +} diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSpritePipeline.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSpritePipeline.hpp new file mode 100644 index 0000000..8806ffd --- /dev/null +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppSpritePipeline.hpp @@ -0,0 +1,85 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + +#pragma once + +#include +#include +#include "CubismFramework.hpp" + +/** +* @brief スプライト用パイプラインクラス +*/ +class LAppSpritePipeline +{ +public: + /** + * @brief コンストラクタ + * + * @param[in] device 論理デバイス + * @param[in] extent フレームバッファのサイズ + * @param[in] swapchainFormat スワップチェーンフォーマット + */ + LAppSpritePipeline(VkDevice device, VkExtent2D extent, VkFormat swapchainFormat); + + /** + * @brief デストラクタ + */ + ~LAppSpritePipeline(); + + /** + * @brief パイプラインレイアウトを取得する + */ + VkPipelineLayout GetPipelineLayout() const; + + /** + * @brief パイプラインを取得する + */ + VkPipeline GetPipeline() const; + + /** + * @brief ディスクリプタセットレイアウトを取得する + */ + VkDescriptorSetLayout GetDescriptorSetLayout() const; + +private: + /** + * @brief スプライト用のディスクリプタセットのレイアウトを作成する。 + * + * @param[in] device 論理デバイス + */ + void CreateDescriptorSetLayout(VkDevice device); + + /** + * @brief パイプラインレイアウトを作成する。 + * + * @param[in] device 論理デバイス + * @param[in] descriptorSetLayout ディスクリプタセットレイアウト + */ + void CreatePipelineLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout); + + /** + * @brief スプライト用のパイプラインを作成する。 + * + * @param[in] device 論理デバイス + * @param[in] extent フレームバッファのサイズ + * @param[in] swapchainFormat スワップチェーンフォーマット + */ + void CreatePipeline(VkDevice device, VkExtent2D extent, VkFormat swapchainFormat); + + /** + * @brief シェーダーモジュ―ルを作成する + * + * @param[in] device 論理デバイス + * @param[in] filename シェーダーのファイル名 + */ + VkShaderModule CreateShaderModule(VkDevice device, Csm::csmString filename); + + VkDescriptorSetLayout _descriptorSetLayout; ///< ディスクリプタセットのレイアウト, UBOが1つとテクスチャが1つずつ + VkPipelineLayout _pipelineLayout; ///< スプライト描画に使うパイプラインのレイアウト + VkPipeline _pipeline; ///< スプライト描画に使うパイプライン +}; diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppTextureManager.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppTextureManager.cpp index 10bf463..5a809bf 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppTextureManager.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppTextureManager.cpp @@ -130,8 +130,8 @@ void LAppTextureManager::GenerateMipmaps(CubismImageVulkan image, uint32_t texWi } LAppTextureManager::TextureInfo* LAppTextureManager::CreateTextureFromPngFile( - std::string fileName, VkFormat format, - VkImageTiling tiling, VkImageUsageFlags usage, VkMemoryPropertyFlags imageProperties) + std::string fileName, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, + VkMemoryPropertyFlags imageProperties, Csm::csmFloat32 anisotropy) { VkDevice device = LAppDelegate::GetInstance()->GetVulkanManager()->GetDevice(); VkPhysicalDevice physicalDevice = LAppDelegate::GetInstance()->GetVulkanManager()->GetPhysicalDevice(); @@ -199,9 +199,7 @@ LAppTextureManager::TextureInfo* LAppTextureManager::CreateTextureFromPngFile( LAppDelegate::GetInstance()->GetVulkanManager()->SubmitCommand(commandBuffer); GenerateMipmaps(textureImage, width, height, _mipLevels); textureImage.CreateView(device, format, VK_IMAGE_ASPECT_COLOR_BIT, _mipLevels); - VkPhysicalDeviceProperties properties{}; - vkGetPhysicalDeviceProperties(physicalDevice, &properties); - textureImage.CreateSampler(device, properties.limits.maxSamplerAnisotropy, _mipLevels); + textureImage.CreateSampler(device, anisotropy, _mipLevels); _textures.PushBack(textureImage); LAppTextureManager::TextureInfo* textureInfo = new LAppTextureManager::TextureInfo(); diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppTextureManager.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppTextureManager.hpp index af9eed8..10ae35d 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppTextureManager.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppTextureManager.hpp @@ -96,8 +96,8 @@ class LAppTextureManager * @return 作成したイメージのリソース。読み込み失敗時はNULLを返す。 */ TextureInfo* CreateTextureFromPngFile( - std::string fileName, - VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, VkMemoryPropertyFlags imageProperties + std::string fileName,VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, + VkMemoryPropertyFlags imageProperties, Csm::csmFloat32 anisotropy ); /** diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppView.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppView.cpp index 95054ae..deeaf04 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppView.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppView.cpp @@ -15,6 +15,7 @@ #include "LAppDefine.hpp" #include "TouchManager.hpp" #include "LAppSprite.hpp" +#include "LAppSpritePipeline.hpp" #include "LAppModel.hpp" using namespace std; @@ -26,11 +27,7 @@ LAppView::LAppView(): , _power(NULL) , _renderSprite(NULL) , _renderTarget(SelectTarget_None) - , _fragShaderModule(VK_NULL_HANDLE) - , _vertShaderModule(VK_NULL_HANDLE) - , _descriptorSetLayout(VK_NULL_HANDLE) - , _pipeline(VK_NULL_HANDLE) - , _pipelineLayout(VK_NULL_HANDLE) + , _spritePipeline(NULL) { _clearColor[0] = 1.0f; _clearColor[1] = 1.0f; @@ -50,12 +47,7 @@ LAppView::LAppView(): LAppView::~LAppView() { VkDevice device = LAppDelegate::GetInstance()->GetVulkanManager()->GetDevice(); - Cleanup(device); - vkDestroyDescriptorSetLayout(device, _descriptorSetLayout, nullptr); - vkDestroyShaderModule(device, _vertShaderModule, nullptr); - vkDestroyShaderModule(device, _fragShaderModule, nullptr); _renderBuffer.DestroyOffscreenSurface(device); - delete _renderSprite; delete _viewMatrix; delete _deviceToScreen; delete _touchManager; @@ -66,9 +58,12 @@ LAppView::~LAppView() _back->Release(device); _gear->Release(device); _power->Release(device); + _renderSprite->Release(device); delete _back; delete _gear; delete _power; + delete _renderSprite; + delete _spritePipeline; } void LAppView::Initialize() @@ -145,6 +140,21 @@ void LAppView::BeginRendering(VkCommandBuffer commandBuffer, float r, float g, f vkCmdBeginRendering(commandBuffer, &renderingInfo); } +void LAppView::ChangeEndLayout(VkCommandBuffer commandBuffer) +{ + VulkanManager* vkManager = LAppDelegate::GetInstance()->GetVulkanManager(); + VkImageMemoryBarrier memoryBarrier{}; + memoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + memoryBarrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + memoryBarrier.dstAccessMask = 0; + memoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + memoryBarrier.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; + memoryBarrier.image = vkManager->GetSwapchainImage(); + memoryBarrier.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }; + vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &memoryBarrier); +} + void LAppView::EndRendering(VkCommandBuffer commandBuffer) { vkCmdEndRendering(commandBuffer); @@ -166,10 +176,10 @@ void LAppView::Render() beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; VkCommandBuffer commandBuffer = vkManager->BeginSingleTimeCommands(); BeginRendering(commandBuffer, 0.0, 0.0, 0.0, 1.0, true); - vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _pipeline); - _back->Render(commandBuffer, _pipelineLayout, vkManager, width, height); - _gear->Render(commandBuffer, _pipelineLayout, vkManager, width, height); - _power->Render(commandBuffer, _pipelineLayout, vkManager, width, height); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _spritePipeline->GetPipeline()); + _back->Render(commandBuffer, vkManager, width, height); + _gear->Render(commandBuffer, vkManager, width, height); + _power->Render(commandBuffer, vkManager, width, height); EndRendering(commandBuffer); vkManager->SubmitCommand(commandBuffer, true); @@ -190,196 +200,22 @@ void LAppView::Render() model->GetRenderBuffer().GetTextureView(), model->GetRenderBuffer().GetTextureSampler()); BeginRendering(commandBuffer, 0.f, 0.f, 0.3, 1.f, false); - vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _pipeline); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _spritePipeline->GetPipeline()); float alpha = i < 1 ? 1.0f : model->GetOpacity(); // サンプルとしてαに適当な差をつける _renderSprite->SetColor(1.0f, 1.0f, 1.0f, alpha); if (model) { - _renderSprite->Render(commandBuffer, _pipelineLayout, vkManager, width, height); + _renderSprite->Render(commandBuffer, vkManager, width, height); } EndRendering(commandBuffer); vkManager->SubmitCommand(commandBuffer); } } -} - -VkShaderModule LAppView::CreateShaderModule(VkDevice device, std::string filename) -{ - std::ifstream file(filename, std::ios::ate | std::ios::binary); - - if (!file.is_open()) - { - CubismLogError("failed to open file!"); - } - csmInt32 fileSize = (csmInt32)file.tellg(); - csmVector buffer(fileSize); - - file.seekg(0); - file.read(buffer.GetPtr(), fileSize); - file.close(); - - VkShaderModuleCreateInfo createInfo{}; - createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - createInfo.codeSize = fileSize; - createInfo.pCode = reinterpret_cast(buffer.GetPtr()); - - VkShaderModule shaderModule; - if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) - { - CubismLogError("failed to create shader module!"); - } - - return shaderModule; -} - -void LAppView::CreateDescriptorSetLayout(VkDevice device) -{ - VkDescriptorSetLayoutBinding bindings[2]; - - bindings[0].binding = 0; - bindings[0].descriptorCount = 1; - bindings[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - bindings[0].pImmutableSamplers = nullptr; - bindings[0].stageFlags = VK_SHADER_STAGE_ALL; - - bindings[1].binding = 1; - bindings[1].descriptorCount = 1; - bindings[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; - bindings[1].pImmutableSamplers = nullptr; - bindings[1].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; - - VkDescriptorSetLayoutCreateInfo layoutInfo{}; - layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; - layoutInfo.bindingCount = sizeof(bindings) / sizeof(bindings[0]); - layoutInfo.pBindings = bindings; - - if (vkCreateDescriptorSetLayout(device, &layoutInfo, nullptr, &_descriptorSetLayout) != VK_SUCCESS) - { - LAppPal::PrintLogLn("failed to create descriptor set layout!"); - } -} - -void LAppView::CreateSpriteGraphicsPipeline(VkDevice device, VkExtent2D extent, VkShaderModule vertShaderModule, - VkShaderModule fragShaderModule, VkFormat swapchainFormat) -{ - VkPipelineShaderStageCreateInfo vertShaderStageInfo{}; - vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; - vertShaderStageInfo.module = vertShaderModule; - vertShaderStageInfo.pName = "main"; - - VkPipelineShaderStageCreateInfo fragShaderStageInfo{}; - fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT; - fragShaderStageInfo.module = fragShaderModule; - fragShaderStageInfo.pName = "main"; - - VkPipelineShaderStageCreateInfo shaderStages[] = {vertShaderStageInfo, fragShaderStageInfo}; - - VkPipelineVertexInputStateCreateInfo vertexInputInfo{}; - vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; - - VkVertexInputBindingDescription bindingDescription = LAppSprite::SpriteVertex::GetBindingDescription(); - VkVertexInputAttributeDescription attributeDescriptions[2]{}; - LAppSprite::SpriteVertex::GetAttributeDescriptions(attributeDescriptions); - vertexInputInfo.vertexBindingDescriptionCount = 1; - vertexInputInfo.pVertexBindingDescriptions = &bindingDescription; - vertexInputInfo.vertexAttributeDescriptionCount = sizeof(attributeDescriptions) / sizeof(attributeDescriptions[0]); - vertexInputInfo.pVertexAttributeDescriptions = attributeDescriptions; - - VkPipelineInputAssemblyStateCreateInfo inputAssembly{}; - inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; - inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; - inputAssembly.primitiveRestartEnable = VK_FALSE; - - VkRect2D scissor{}; - scissor.offset = {0, 0}; - scissor.extent = extent; - - VkViewport viewport{}; - viewport.x = 0.0f; - viewport.y = 0.0f; - viewport.width = (float)scissor.extent.width; - viewport.height = (float)scissor.extent.height; - viewport.minDepth = 0.0f; - viewport.maxDepth = 1.0f; - - VkPipelineViewportStateCreateInfo viewportState{}; - viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; - viewportState.viewportCount = 1; - viewportState.pViewports = &viewport; - viewportState.scissorCount = 1; - viewportState.pScissors = &scissor; - - VkPipelineRasterizationStateCreateInfo rasterizer{}; - rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; - rasterizer.depthClampEnable = VK_FALSE; - rasterizer.rasterizerDiscardEnable = VK_FALSE; - rasterizer.polygonMode = VK_POLYGON_MODE_FILL; - rasterizer.lineWidth = 1.0f; - rasterizer.cullMode = VK_CULL_MODE_BACK_BIT; - rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; - rasterizer.depthBiasEnable = VK_FALSE; - - VkPipelineMultisampleStateCreateInfo multisampling{}; - multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; - multisampling.sampleShadingEnable = VK_FALSE; - multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; - - VkPipelineColorBlendAttachmentState colorBlendAttachment{}; - colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT - | VK_COLOR_COMPONENT_A_BIT; - colorBlendAttachment.blendEnable = VK_TRUE; - colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; - colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; - colorBlendAttachment.colorBlendOp = VK_BLEND_OP_ADD; - colorBlendAttachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; - colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; - colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD; - - VkPipelineColorBlendStateCreateInfo colorBlending{}; - colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; - colorBlending.logicOpEnable = VK_FALSE; - colorBlending.logicOp = VK_LOGIC_OP_COPY; - colorBlending.attachmentCount = 1; - colorBlending.pAttachments = &colorBlendAttachment; - - VkPipelineLayoutCreateInfo pipelineLayoutInfo{}; - pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; - pipelineLayoutInfo.setLayoutCount = 1; - pipelineLayoutInfo.pSetLayouts = &_descriptorSetLayout; - - if (vkCreatePipelineLayout(device, &pipelineLayoutInfo, nullptr, &_pipelineLayout) != VK_SUCCESS) - { - LAppPal::PrintLogLn("failed to create pipeline layout!"); - } - - VkPipelineRenderingCreateInfo renderingInfo{}; - renderingInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO; - renderingInfo.colorAttachmentCount = 1; - renderingInfo.pColorAttachmentFormats = &swapchainFormat; - - VkGraphicsPipelineCreateInfo pipelineInfo{}; - pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; - pipelineInfo.stageCount = 2; - pipelineInfo.pStages = shaderStages; - pipelineInfo.pVertexInputState = &vertexInputInfo; - pipelineInfo.pInputAssemblyState = &inputAssembly; - pipelineInfo.pViewportState = &viewportState; - pipelineInfo.pRasterizationState = &rasterizer; - pipelineInfo.pMultisampleState = &multisampling; - pipelineInfo.pColorBlendState = &colorBlending; - pipelineInfo.layout = _pipelineLayout; - pipelineInfo.subpass = 0; - pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; - pipelineInfo.pNext = &renderingInfo; - - if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &_pipeline) != VK_SUCCESS) - { - LAppPal::PrintLogLn("failed to create graphics pipeline!"); - } + commandBuffer = vkManager->BeginSingleTimeCommands(); + ChangeEndLayout(commandBuffer); + vkManager->SubmitCommand(commandBuffer); } void LAppView::InitializeSprite() @@ -388,11 +224,7 @@ void LAppView::InitializeSprite() VkDevice device = vkManager->GetDevice(); VkPhysicalDevice physicalDevice = vkManager->GetPhysicalDevice(); SwapchainManager* swapchainManager = vkManager->GetSwapchainManager(); - _vertShaderModule = CreateShaderModule(device, "SampleShaders/VertSprite.spv"); - _fragShaderModule = CreateShaderModule(device, "SampleShaders/FragSprite.spv"); - CreateDescriptorSetLayout(device); - CreateSpriteGraphicsPipeline(device, swapchainManager->GetExtent(), _vertShaderModule, _fragShaderModule, - vkManager->GetSwapchainManager()->GetSwapchainImageFormat()); + _spritePipeline = new LAppSpritePipeline(device, swapchainManager->GetExtent(), vkManager->GetSwapchainManager()->GetSwapchainImageFormat()); int width, height; glfwGetWindowSize(LAppDelegate::GetInstance()->GetWindow(), &width, &height); @@ -411,7 +243,7 @@ void LAppView::InitializeSprite() LAppTextureManager::TextureInfo* backgroundTexture = textureManager->CreateTextureFromPngFile( resourcesPath + imageName, vkManager->GetImageFormat(), VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, 0.0); LAppDelegate::GetInstance()->GetTextureManager()->GetTexture(backgroundTexture->id, textureImage); x = width * 0.5f; @@ -419,13 +251,13 @@ void LAppView::InitializeSprite() fWidth = static_cast(backgroundTexture->width * 2.0f); fHeight = static_cast(height * 0.95f); _back = new LAppSprite(device, physicalDevice, vkManager, x, y, fWidth, fHeight, backgroundTexture->id, - textureImage.GetView(), textureImage.GetSampler(), _descriptorSetLayout); + _spritePipeline, textureImage.GetView(), textureImage.GetSampler()); imageName = GearImageName; LAppTextureManager::TextureInfo* gearTexture = textureManager->CreateTextureFromPngFile( resourcesPath + imageName, vkManager->GetImageFormat(), VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, 0.0); LAppDelegate::GetInstance()->GetTextureManager()->GetTexture(gearTexture->id, textureImage); //X:右向き正、Y:下向き正 @@ -434,13 +266,13 @@ void LAppView::InitializeSprite() fWidth = static_cast(gearTexture->width); fHeight = static_cast(gearTexture->height); _gear = new LAppSprite(device, physicalDevice, vkManager, x, y, fWidth, fHeight, gearTexture->id, - textureImage.GetView(), textureImage.GetSampler(), _descriptorSetLayout); + _spritePipeline, textureImage.GetView(), textureImage.GetSampler()); imageName = PowerImageName; LAppTextureManager::TextureInfo* powerTexture = textureManager->CreateTextureFromPngFile( resourcesPath + imageName, vkManager->GetImageFormat(), VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, 0.0); LAppDelegate::GetInstance()->GetTextureManager()->GetTexture(powerTexture->id, textureImage); //X:右向き正、Y:下向き正 @@ -449,13 +281,13 @@ void LAppView::InitializeSprite() fWidth = static_cast(powerTexture->width); fHeight = static_cast(powerTexture->height); _power = new LAppSprite(device, physicalDevice, vkManager, x, y, fWidth, fHeight, powerTexture->id, - textureImage.GetView(), textureImage.GetSampler(), _descriptorSetLayout); + _spritePipeline, textureImage.GetView(), textureImage.GetSampler()); // 画面全体を覆うサイズ x = width * 0.5f; y = height * 0.5f; LAppLive2DManager* live2DManager = LAppLive2DManager::GetInstance(); - _renderSprite = new LAppSprite(device, physicalDevice, vkManager, x, y, static_cast(width), static_cast(height),0, NULL, NULL, _descriptorSetLayout); + _renderSprite = new LAppSprite(device, physicalDevice, vkManager, x, y, static_cast(width), static_cast(height),0, _spritePipeline, NULL, NULL); } void LAppView::OnTouchesBegan(float px, float py) const @@ -532,12 +364,22 @@ float LAppView::TransformScreenY(float deviceY) const void LAppView::PreModelDraw(LAppModel& refModel) { - // 別のレンダリングターゲットへ向けて描画する場合の使用するフレームバッファ - Csm::Rendering::CubismOffscreenSurface_Vulkan* useTarget = NULL; - useTarget = (_renderTarget == SelectTarget_ViewFrameBuffer) ? &_renderBuffer : &refModel.GetRenderBuffer(); - - if (_renderTarget != SelectTarget_None) + if (_renderTarget == SelectTarget_None) + { + // 通常のスワップチェーンイメージへと描画 + VulkanManager* vkManager = LAppDelegate::GetInstance()->GetVulkanManager(); + Csm::Rendering::CubismRenderer_Vulkan::SetRenderTarget(vkManager->GetSwapchainImage(), + vkManager->GetSwapchainImageView(), + vkManager->GetSwapchainManager()->GetSwapchainImageFormat(), + vkManager->GetSwapchainManager()->GetExtent()); + } + else { + // 別のレンダリングターゲットへ向けて描画する場合の使用するフレームバッファ + Csm::Rendering::CubismOffscreenSurface_Vulkan* useTarget = NULL; + useTarget = (_renderTarget == SelectTarget_ViewFrameBuffer) ? &_renderBuffer // LAppView が持つバッファ + : &refModel.GetRenderBuffer(); // Model が持つバッファ + // 別のレンダリングターゲットへ向けて描画する場合 if (!useTarget->IsValid()) { @@ -555,7 +397,10 @@ void LAppView::PreModelDraw(LAppModel& refModel) _renderSprite->SetDescriptorUpdated(false); } } - Csm::Rendering::CubismRenderer_Vulkan::SetRenderTarget(useTarget->GetTextureImage(), useTarget->GetTextureView()); + // 描画先を別のレンダリングターゲットへ指定 + Csm::Rendering::CubismRenderer_Vulkan::SetRenderTarget(useTarget->GetTextureImage(), useTarget->GetTextureView(), + LAppDelegate::GetInstance()->GetVulkanManager()->GetImageFormat(), + VkExtent2D{useTarget->GetBufferWidth(), useTarget->GetBufferHeight()}); } } @@ -581,13 +426,20 @@ void LAppView::PostModelDraw(LAppModel& refModel, csmInt32 modelIndex) _renderSprite->UpdateDescriptorSet(vkManager->GetDevice(), useTarget->GetTextureView(), useTarget->GetTextureSampler()); BeginRendering(commandBuffer, 0.f, 0.f, 0.3, 1.f, false); - vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _pipeline); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, _spritePipeline->GetPipeline()); _renderSprite->SetColor(1.0f, 1.0f, 1.0f, GetSpriteAlpha(0)); - _renderSprite->Render(commandBuffer, _pipelineLayout, vkManager, width, height); + _renderSprite->Render(commandBuffer, vkManager, width, height); EndRendering(commandBuffer); vkManager->SubmitCommand(commandBuffer); } } + + // レンダーターゲットをスワップチェーンのものへと戻す + VulkanManager* vkManager = LAppDelegate::GetInstance()->GetVulkanManager(); + Csm::Rendering::CubismRenderer_Vulkan::SetRenderTarget(vkManager->GetSwapchainImage(), + vkManager->GetSwapchainImageView(), + vkManager->GetSwapchainManager()->GetSwapchainImageFormat(), + vkManager->GetSwapchainManager()->GetExtent()); } void LAppView::SwitchRenderingTarget(SelectTarget targetType) @@ -618,20 +470,13 @@ float LAppView::GetSpriteAlpha(int assign) const return alpha; } -void LAppView::Cleanup(VkDevice device) -{ - vkDestroyPipelineLayout(device, _pipelineLayout, nullptr); - vkDestroyPipeline(device, _pipeline, nullptr); -} - void LAppView::ResizeSprite(int width, int height) { VulkanManager* vkManager = LAppDelegate::GetInstance()->GetVulkanManager(); VkDevice device = vkManager->GetDevice(); SwapchainManager* swapchainManager = vkManager->GetSwapchainManager(); - Cleanup(device); - CreateSpriteGraphicsPipeline(device, swapchainManager->GetExtent(), _vertShaderModule, _fragShaderModule, - vkManager->GetSwapchainManager()->GetSwapchainImageFormat()); + delete _spritePipeline; + _spritePipeline = new LAppSpritePipeline(device, swapchainManager->GetExtent(), vkManager->GetSwapchainManager()->GetSwapchainImageFormat()); LAppTextureManager* textureManager = LAppDelegate::GetInstance()->GetTextureManager(); if (!textureManager) @@ -646,6 +491,7 @@ void LAppView::ResizeSprite(int width, int height) if (_back) { + _back->SetPipeline(_spritePipeline); uint32_t id = _back->GetTextureId(); LAppTextureManager::TextureInfo* texInfo = textureManager->GetTextureInfoById(id); if (texInfo) @@ -660,6 +506,7 @@ void LAppView::ResizeSprite(int width, int height) if (_power) { + _power->SetPipeline(_spritePipeline); uint32_t id = _power->GetTextureId(); LAppTextureManager::TextureInfo* texInfo = textureManager->GetTextureInfoById(id); if (texInfo) @@ -674,6 +521,7 @@ void LAppView::ResizeSprite(int width, int height) if (_gear) { + _gear->SetPipeline(_spritePipeline); uint32_t id = _gear->GetTextureId(); LAppTextureManager::TextureInfo* texInfo = textureManager->GetTextureInfoById(id); if (texInfo) @@ -687,6 +535,7 @@ void LAppView::ResizeSprite(int width, int height) } if (_renderSprite) { + _renderSprite->SetPipeline(_spritePipeline); x = width * 0.5f; y = height * 0.5f; _renderSprite->ResetRect(x, y, static_cast(width), static_cast(height)); diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppView.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppView.hpp index a8ed1be..35cddab 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/LAppView.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/LAppView.hpp @@ -16,6 +16,7 @@ class TouchManager; class LAppSprite; class LAppModel; +class LAppSpritePipeline; /** * @brief 描画クラス @@ -62,6 +63,12 @@ class LAppView */ void BeginRendering(VkCommandBuffer commandBuffer, float r, float g, float b, float a, bool isClear); + /** + * @brief レンダリングを終了する際のレイアウトを変更する。 + * + * @param[in] commandBuffer -> コマンドバッファ + */ + void ChangeEndLayout(VkCommandBuffer commandBuffer); /** * @brief レンダリングを終了する。 @@ -75,32 +82,6 @@ class LAppView */ void Render(); - /** - * @brief シェーダーモジュ―ルを作成する - * - * @param[in] device -> デバイス - * @param[in] filename -> シェーダーのファイル名 - */ - VkShaderModule CreateShaderModule(VkDevice device, std::string filename); - - /** - * @brief スプライト用のディスクリプタセットのレイアウトを作成する。 - * - * @param[in] device 論理デバイス - */ - void CreateDescriptorSetLayout(VkDevice device); - - /** - * @brief スプライト用のパイプラインを作成する。 - * - * @param[in] device デバイス - * @param[in] extent フレームバッファのサイズ - * @param[in] vertShaderModule 頂点シェーダのモジュール - * @param[in] fragShaderModule フラグメントシェーダのモジュール - */ - void CreateSpriteGraphicsPipeline(VkDevice device, VkExtent2D extent, VkShaderModule vertShaderModule, - VkShaderModule fragShaderModule, VkFormat swapchainFormat); - /** * @brief 画像の初期化を行う。 */ @@ -195,13 +176,6 @@ class LAppView */ float GetSpriteAlpha(int assign) const; - /** - * @brief ウィンドウサイズ変更の際にリソースを破棄する。 - * - * @param[in] device デバイス - */ - void Cleanup(VkDevice device); - /** * @brief ウィンドウサイズ変更の際にスプライトを再作成する * @@ -216,19 +190,15 @@ class LAppView void DestroyOffscreenSurface(); private: - TouchManager* _touchManager; ///< タッチマネージャー - Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 - Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix - LAppSprite* _back; ///< 背景画像 - LAppSprite* _gear; ///< ギア画像 - LAppSprite* _power; ///< 電源画像 - LAppSprite* _renderSprite; ///< レンダリング先を別ターゲットにする方式の場合に使用 + TouchManager* _touchManager; ///< タッチマネージャー + Csm::CubismMatrix44* _deviceToScreen; ///< デバイスからスクリーンへの行列 + Csm::CubismViewMatrix* _viewMatrix; ///< viewMatrix + LAppSprite* _back; ///< 背景画像 + LAppSprite* _gear; ///< ギア画像 + LAppSprite* _power; ///< 電源画像 + LAppSprite* _renderSprite; ///< レンダリング先を別ターゲットにする方式の場合に使用 Csm::Rendering::CubismOffscreenSurface_Vulkan _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング - SelectTarget _renderTarget; ///< レンダリング先の選択肢 - float _clearColor[4]; ///< レンダリングターゲットのクリアカラー - VkShaderModule _vertShaderModule; ///< 頂点シェーダーモジュール - VkShaderModule _fragShaderModule; ///< フラグメントシェーダーモジュール - VkDescriptorSetLayout _descriptorSetLayout; ///< ディスクリプタセットのレイアウト, UBOが1つとテクスチャが1つずつ - VkPipelineLayout _pipelineLayout; ///< スプライト描画に使うパイプラインのレイアウト - VkPipeline _pipeline; ///< スプライト描画に使うパイプライン + SelectTarget _renderTarget; ///< レンダリング先の選択肢 + float _clearColor[4]; ///< レンダリングターゲットのクリアカラー + LAppSpritePipeline* _spritePipeline; ///< スプライト用パイプライン }; diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/SwapchainManager.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/SwapchainManager.hpp index 204bde4..8a87a9a 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/SwapchainManager.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/SwapchainManager.hpp @@ -7,6 +7,7 @@ #pragma once #include +#define GLFW_INCLUDE_VULKAN #include #include #include @@ -160,5 +161,5 @@ class SwapchainManager Csm::csmVector images; ///< スワップチェーンのイメージ Csm::csmVector imageViews; ///< スワップチェーンのイメージビュー VkSwapchainKHR swapchain; ///< スワップチェーン - const VkFormat swapchainFormat = VK_FORMAT_B8G8R8A8_UNORM; ///< スワップチェーンのフォーマット + const VkFormat swapchainFormat = VK_FORMAT_R8G8B8A8_UNORM; ///< スワップチェーンのフォーマット }; diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/VulkanManager.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/VulkanManager.cpp index ca410dd..434eebb 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/VulkanManager.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/VulkanManager.cpp @@ -50,11 +50,6 @@ void DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT } } -void VulkanManager::framebufferResizeCallback(GLFWwindow* window, int width, int height) { - auto app = reinterpret_cast(glfwGetWindowUserPointer(window)); - app->_framebufferResized = true; -} - VulkanManager::VulkanManager(GLFWwindow* wind): _instance(VK_NULL_HANDLE) , _physicalDevice(VK_NULL_HANDLE) @@ -458,17 +453,30 @@ void VulkanManager::SubmitCommand(VkCommandBuffer commandBuffer, bool isFirstDra vkEndCommandBuffer(commandBuffer); VkSubmitInfo submitInfo{}; - submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; - submitInfo.commandBufferCount = 1; - submitInfo.pCommandBuffers = &commandBuffer; + if(isFirstDraw) { + VkSubmitInfo submitInfo{}; + submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submitInfo.commandBufferCount = 1; + submitInfo.pCommandBuffers = &commandBuffer; submitInfo.waitSemaphoreCount = 1; submitInfo.pWaitSemaphores = &_imageAvailableSemaphore; VkPipelineStageFlags waitStages[] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT }; submitInfo.pWaitDstStageMask = waitStages; + vkQueueSubmit(_graphicQueue, 1, &submitInfo, VK_NULL_HANDLE); + } + else + { + VkSubmitInfo submitInfo{}; + submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submitInfo.commandBufferCount = 1; + submitInfo.pCommandBuffers = &commandBuffer; + VkPipelineStageFlags waitStages[] = { VK_PIPELINE_STAGE_VERTEX_INPUT_BIT }; + submitInfo.pWaitDstStageMask = waitStages; + vkQueueSubmit(_graphicQueue, 1, &submitInfo, VK_NULL_HANDLE); } - vkQueueSubmit(_graphicQueue, 1, &submitInfo, VK_NULL_HANDLE); + // コマンドの実行終了まで待機 vkQueueWaitIdle(_graphicQueue); vkFreeCommandBuffers(_device, _commandPool, 1, &commandBuffer); @@ -513,6 +521,8 @@ void VulkanManager::RecreateSwapchain() void VulkanManager::Destroy() { _swapchainManager->Cleanup(_device); + delete _swapchainManager; + _swapchainManager = NULL; vkDestroySemaphore(_device, _imageAvailableSemaphore, nullptr); diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/VulkanManager.hpp b/Samples/Vulkan/Demo/proj.win.cmake/src/VulkanManager.hpp index 3aba6ab..16358c3 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/VulkanManager.hpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/VulkanManager.hpp @@ -7,7 +7,6 @@ #pragma once #include -#include #include "Type/csmMap.hpp" #include "SwapchainManager.hpp" @@ -40,8 +39,6 @@ class VulkanManager "VK_LAYER_KHRONOS_validation" }; - static void VulkanManager::framebufferResizeCallback(GLFWwindow* window, int width, int height); - /** * @brief コンストラクタ * @param[in] wind -> ウィンドウ @@ -158,7 +155,7 @@ class VulkanManager void UpdateDrawFrame(); /** - * @brief 描画する + * @brief 描画完了の追加処理 */ void PostDraw(); @@ -214,6 +211,12 @@ class VulkanManager */ void SetIsWindowSizeChanged(bool flag) { _isSwapchainInvalid = flag; } + /** + * @brief フレームバッファのフラグを更新する + * + */ + void SetFrameBufferResized(bool flag) { _framebufferResized = flag; } + /** * @brief 深度フォーマットを取得する * @return 深度フォーマット diff --git a/Samples/Vulkan/Demo/proj.win.cmake/src/main.cpp b/Samples/Vulkan/Demo/proj.win.cmake/src/main.cpp index 07b6e81..9430db3 100644 --- a/Samples/Vulkan/Demo/proj.win.cmake/src/main.cpp +++ b/Samples/Vulkan/Demo/proj.win.cmake/src/main.cpp @@ -6,17 +6,24 @@ */ #include "LAppDelegate.hpp" +#include int main() { + // Setting the console character encoding to UTF-8 + UINT preConsoleOutputCP = GetConsoleOutputCP(); + SetConsoleOutputCP(65001); + // create the application instance if (LAppDelegate::GetInstance()->Initialize() == GL_FALSE) { + SetConsoleOutputCP(preConsoleOutputCP); return 1; } LAppDelegate::GetInstance()->Run(); + SetConsoleOutputCP(preConsoleOutputCP); return 0; } diff --git a/Samples/Vulkan/README.ja.md b/Samples/Vulkan/README.ja.md index d826850..ef43966 100644 --- a/Samples/Vulkan/README.ja.md +++ b/Samples/Vulkan/README.ja.md @@ -8,8 +8,8 @@ Vulkan で実装したアプリケーションのサンプル実装です。 | サードパーティ | バージョン | | --- | --- | | [GLFW] | 3.4 | -| [stb_image.h] | 2.29 | -| [Vulkan SDK] | 1.3 | +| [stb_image.h] | 2.30 | +| [Vulkan SDK] | 1.3.296 | その他の開発環境・動作確認環境はトップディレクトリにある [README.ja.md](/README.ja.md) を参照してください。 @@ -19,7 +19,8 @@ Vulkan で実装したアプリケーションのサンプル実装です。 ``` . ├─ Demo -│ └─ proj.win.cmake # CMake project for Windows +│ ├─ proj.linux.cmake # CMake project for Linux +│ ├─ proj.win.cmake # CMake project for Windows └─ thirdParty # Third party libraries and scripts ``` @@ -34,6 +35,23 @@ Vulkan で実装したアプリケーションのサンプル実装です。 このディレクトリ内に含まれるものは以下の通りです。 +### proj.linux.cmake + +Linux 用の CMake プロジェクトです。 + +`script` ディレクトリのスクリプトを実行すると `build` ディレクトリに CMake 成果物が生成されます + +| スクリプト名 | 生成物 | +| --- | --- | +| `make_gcc` | 実行可能なアプリケーション | + +これらのスクリプトを実行した際にフルバージョンのサンプルを生成するか、ミニマムバージョンのサンプルを生成するかを選択することができます。 + +追加ライブラリとして [GLFW] を使用しています。 +[thirdParty](#thirdParty) の項目を参照して事前にダウンロードを行なってください。 +ビルド時、これ以外に`libpng`やX Windows System依存ライブラリ等必要なパッケージのインストールを求められる場合がございますので、その際は求められたパッケージをインストールしてください。 + + ### proj.win.cmake Windows 用の CMake プロジェクトです。 @@ -58,17 +76,28 @@ Windows 用の CMake プロジェクトです。 | プラットフォーム | スクリプト名 | | --- | --- | -| Windows | `setup_glew_glfw.bat` | +| Linux *1 | `setup_glfw` | +| Windows | `setup_glfw.bat` | スクリプト内の `GLFW_VERSION` を変更することで、ダウンロードするバージョンを変更できます。 -[GLFW]: https://github.com/glfw/glfw -[stb_image.h]: https://github.com/nothings/stb/blob/master/stb_image.h +*1 Linuxでは GLFW が依存するライブラリのインストールが必要になる場合がございますので、公式ページを参考に依存関係にあるライブラリをすべてインストールしてください。 +[GLFW.org Dependencies for X11 on Unix-like systems](https://www.glfw.org/docs/latest/compile_guide.html#compile_deps_x11) +詳しくは [NOTICE.md](/NOTICE.ja.md) をご確認ください。 ### Vulkan SDK のインストール -あらかじめVulkan SDKインストールしておき、環境変数VULKAN_SDKを設定しておく必要があります。 -x86プラットフォームでビルドする場合、Vulkan SDKインストールの際に `SDK 32-bit Core Components` をインストールする必要があります。 +あらかじめVulkan SDKインストールしておき、環境変数VULKAN_SDKを設定しておく必要があります。 +x86プラットフォームでビルドする場合、Vulkan SDKインストールの際に `SDK 32-bit Core Components` をインストールする必要があります。 +[Windowsのインストールの詳細](https://vulkan-tutorial.com/Development_environment#page_Windows) -[Vulkan SDK]: https://www.lunarg.com/vulkan-sdk/ +Linuxでは以下のVulkanパッケージをインストールする必要があります。 +[Linuxのインストールの詳細](https://vulkan-tutorial.com/Development_environment#page_Linux) +| ディストリビューション | パッケージ | +| --- | --- | +| `Ubuntu` | `vulkan-tools` `libvulkan-dev` `vulkan-validationlayers-dev` `spirv-tools` | +| `AlmaLinux` | `vulkan-tools` `vulkan-loader-devel` `vulkan-validation-layers` | +[GLFW]: https://github.com/glfw/glfw +[stb_image.h]: https://github.com/nothings/stb/blob/master/stb_image.h +[Vulkan SDK]: https://www.lunarg.com/vulkan-sdk/ diff --git a/Samples/Vulkan/README.md b/Samples/Vulkan/README.md index a07b60b..063be9d 100644 --- a/Samples/Vulkan/README.md +++ b/Samples/Vulkan/README.md @@ -8,8 +8,8 @@ This is a sample implementation of an application implemented with Vulkan. | Third Party | Version | | --- | --- | | [GLFW] | 3.4 | -| [stb_image.h] | 2.29 | -| [Vulkan SDK] | 1.3 | +| [stb_image.h] | 2.30 | +| [Vulkan SDK] | 1.3.296 | For other development environment and operation environment, refer to [README.md](/README.md) in the top directory. @@ -19,6 +19,7 @@ For other development environment and operation environment, refer to [README.md ``` . ├─ Demo +│ ├─ proj.linux.cmake # CMake project for Linux │  └─ proj.win.cmake        # CMake project for Windows └─ thirdParty               # Third party libraries and scripts ``` @@ -34,6 +35,22 @@ You can switch models from the menu button. The items contained in this directory are as follows. +### proj.linux.cmake + +CMake project for Linux. + +Running the script in the `script` directory will generate a CMake deliverable in the `build` directory. + +| Script name | Product | +| --- | --- | +| `make_gcc` | Executable application | + +When you run these scripts, you can choose to generate the full version or the minimum version of the sample. + +[GLFW] are used as additional libraries. +Please refer to the [thirdParty](#thirdParty) section and download in advance. +During the build process, you may be prompted to install additional packages such as `libpng` or X Windows System dependent libraries. If prompted, please install the required packages. + ### proj.win.cmake CMake project for Windows. @@ -58,16 +75,28 @@ Download GLFW by running the script in the 'script' directory. | Platform | Script name | | --- | --- | -| Windows | `setup_glew_glfw.bat` | +| Linux | `setup_glfw` | +| Windows | `set_glfw.bat` | You can change the version to download by changing `GLFW_VERSION` in the script. -[GLFW]: https://github.com/glfw/glfw -[stb_image.h]: https://github.com/nothings/stb/blob/master/stb_image.h +*1 On Linux, it may be necessary to install libraries on which GLFW depends. Please refer to the official page to install all libraries on which GLFW depends. +[GLFW.org Dependencies for X11 on Unix-like systems](https://www.glfw.org/docs/latest/compile_guide.html#compile_deps_x11) +See [NOTICE.md](/NOTICE.md) for details. ### Installing the Vulkan SDK -You need to install the Vulkan SDK in advance and set the environment variable VULKAN_SDK. -When building on an x86 platform, you must install the `SDK 32-bit Core Components` when installing the Vulkan SDK. +You need to install the Vulkan SDK in advance and set the environment variable VULKAN_SDK. +If you are building on an x86 platform, you must install the `SDK 32-bit Core Components` when installing the Vulkan SDK. +[Installation details on windows](https://vulkan-tutorial.com/Development_environment#page_Windows) +On Linux, the following packages must be installed +[Installation details on linux](https://vulkan-tutorial.com/Development_environment#page_Linux) +| Distribution | Package | +| --- | --- | +| `Ubuntu` | `vulkan-tools` `libvulkan-dev` `vulkan-validationlayers-dev` `spirv-tools` | +| `AlmaLinux` | `vulkan-tools` `vulkan-loader-devel` `vulkan-validation-layers` | + +[GLFW]: https://github.com/glfw/glfw +[stb_image.h]: https://github.com/nothings/stb/blob/master/stb_image.h [Vulkan SDK]: https://www.lunarg.com/vulkan-sdk/ diff --git a/Samples/Vulkan/Shaders/CMakeLists.txt b/Samples/Vulkan/Shaders/CMakeLists.txt index 3a8f729..8a91e3e 100644 --- a/Samples/Vulkan/Shaders/CMakeLists.txt +++ b/Samples/Vulkan/Shaders/CMakeLists.txt @@ -13,13 +13,23 @@ foreach(shader ${shader_files}) set(compiled_shaders_app ${compiled_shaders_app} ${output_file}) set(compiled_shaders_app ${compiled_shaders_app} PARENT_SCOPE) set_source_files_properties(${shader} PROPERTIES HEADER_FILE_ONLY TRUE) + if(WIN32) + add_custom_command( + OUTPUT ${output_file} + COMMAND ${CMAKE_COMMAND} -E make_directory ${output_dir} + COMMAND $ENV{VK_SDK_PATH}/Bin/glslc.exe ${full_path} -o ${output_file} + DEPENDS ${full_path} + ) + endif() + if(UNIX AND NOT APPLE) + add_custom_command( + OUTPUT ${output_file} + COMMAND ${CMAKE_COMMAND} -E make_directory ${output_dir} + COMMAND glslc ${full_path} -o ${output_file} + DEPENDS ${full_path} + ) + endif() - add_custom_command( - OUTPUT ${output_file} - COMMAND ${CMAKE_COMMAND} -E make_directory ${output_dir} - COMMAND $ENV{VK_SDK_PATH}/Bin/glslc.exe ${full_path} -o ${output_file} - DEPENDS ${full_path} - ) endforeach() source_group("shaders" FILES ${shader_files}) diff --git a/Samples/Vulkan/Shaders/src/FragSprite.frag b/Samples/Vulkan/Shaders/src/FragSprite.frag index 026291f..144ba7f 100644 --- a/Samples/Vulkan/Shaders/src/FragSprite.frag +++ b/Samples/Vulkan/Shaders/src/FragSprite.frag @@ -1,3 +1,10 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + #version 460 #extension GL_GOOGLE_include_directive : enable layout(binding = 0) uniform UBO diff --git a/Samples/Vulkan/Shaders/src/VertSprite.vert b/Samples/Vulkan/Shaders/src/VertSprite.vert index c0504d0..bd62041 100644 --- a/Samples/Vulkan/Shaders/src/VertSprite.vert +++ b/Samples/Vulkan/Shaders/src/VertSprite.vert @@ -1,3 +1,10 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + #version 460 #extension GL_GOOGLE_include_directive : enable diff --git a/Samples/Vulkan/Shaders/src/common.glsl b/Samples/Vulkan/Shaders/src/common.glsl index 4806606..7bfc146 100644 --- a/Samples/Vulkan/Shaders/src/common.glsl +++ b/Samples/Vulkan/Shaders/src/common.glsl @@ -1,3 +1,10 @@ +/** + * Copyright(c) Live2D Inc. All rights reserved. + * + * Use of this source code is governed by the Live2D Open Software license + * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. + */ + layout(binding = 0) uniform UBO { mat4 u_matrix;

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

Mza|73}=yFVqB5oM}< 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