├── .gitignore ├── .vscode └── settings.json ├── CMakeLists.txt ├── LICENSE ├── README.md ├── UE4Test ├── Config │ ├── DefaultEditor.ini │ ├── DefaultEngine.ini │ ├── DefaultGame.ini │ └── DefaultInput.ini ├── Content │ ├── NewMap.umap │ ├── NewMap_BuiltData.uasset │ ├── PicoPawn.uasset │ ├── mattingtest.uasset │ ├── sun.umap │ ├── sunnew.umap │ └── sunnew_BuiltData.uasset ├── Plugins │ └── AocePlugins │ │ ├── AocePlugins.uplugin │ │ ├── Content │ │ ├── AoceLiveActorBp.uasset │ │ ├── DispTex.uasset │ │ └── MainWnd.uasset │ │ ├── Resources │ │ └── Icon128.png │ │ └── Source │ │ └── AocePlugins │ │ ├── AocePlugins.Build.cs │ │ ├── AocePlugins_APL.xml │ │ ├── Private │ │ ├── AoceDisplayActor.cpp │ │ ├── AoceLiveActor.cpp │ │ ├── AocePlugins.cpp │ │ ├── CameraManager.cpp │ │ ├── CameraProcess.cpp │ │ ├── LiveManager.cpp │ │ ├── VideoDisplay.cpp │ │ ├── VideoProcess.cpp │ │ └── VideoView.cpp │ │ └── Public │ │ ├── AoceDisplayActor.h │ │ ├── AoceLiveActor.h │ │ ├── AocePlugins.h │ │ ├── CameraManager.hpp │ │ ├── CameraProcess.hpp │ │ ├── LiveManager.hpp │ │ ├── VideoDisplay.hpp │ │ ├── VideoProcess.hpp │ │ └── VideoView.hpp ├── README.md ├── Source │ ├── UE4Test.Target.cs │ ├── UE4Test │ │ ├── UE4Test.Build.cs │ │ ├── UE4Test.cpp │ │ ├── UE4Test.h │ │ ├── UE4TestGameModeBase.cpp │ │ └── UE4TestGameModeBase.h │ └── UE4TestEditor.Target.cs ├── UE4Test.uproject └── copybin.bat ├── android ├── 04_vulkantest │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── aoce │ │ │ └── samples │ │ │ └── vulkantest │ │ │ └── MainActivity.java │ │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ └── values │ │ └── strings.xml ├── 05_livetest │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── aoce │ │ │ └── samples │ │ │ └── livetest │ │ │ ├── MainActivity.java │ │ │ └── MainActivity2.java │ │ └── res │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── activity_main2.xml │ │ └── activity_main3.xml │ │ └── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml ├── 06_mediaplayer │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── aoce │ │ │ └── samples │ │ │ └── mediaplayer │ │ │ └── MainActivity.java │ │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ └── values │ │ └── strings.xml ├── 07_androidtest │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── aoce │ │ │ └── samples │ │ │ └── androidtest │ │ │ └── MainActivity.java │ │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ └── values │ │ └── strings.xml ├── README.md ├── aoce │ ├── .gitignore │ ├── build.gradle │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── aoce │ │ │ └── android │ │ │ └── library │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── aoce │ │ │ └── android │ │ │ └── library │ │ │ ├── AoceHelper.java │ │ │ ├── JNIHelper.java │ │ │ └── wrapper │ │ │ ├── GLVideoRender.java │ │ │ ├── IGLCopyTexture.java │ │ │ ├── IVKInitSurface.java │ │ │ └── VKVideoRender.java │ │ └── test │ │ └── java │ │ └── aoce │ │ └── android │ │ └── library │ │ └── ExampleUnitTest.java ├── aocencnntest │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── aoce │ │ │ └── samples │ │ │ └── aocencnntest │ │ │ ├── AoceManager.java │ │ │ └── MainActivity.java │ │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ └── values │ │ ├── strings.xml │ │ └── styles.xml ├── aoceswigtest │ ├── assets │ │ ├── blend.png │ │ ├── lookup.png │ │ ├── lookup_amatorka.png │ │ ├── lookup_miss_etikate.png │ │ ├── lookup_soft_elegance_1.png │ │ └── lookup_soft_elegance_2.png │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── aoce │ │ │ └── samples │ │ │ └── aoceswigtest │ │ │ ├── DataManager.java │ │ │ ├── LayerActivity.java │ │ │ ├── LayerMetaTag.java │ │ │ ├── NavigationActivity.java │ │ │ ├── TestActivity.java │ │ │ ├── TestViewModel.java │ │ │ ├── aocewrapper │ │ │ └── AoceManager.java │ │ │ └── ui │ │ │ ├── gallery │ │ │ ├── GalleryFragment.java │ │ │ └── GalleryViewModel.java │ │ │ ├── layergroup │ │ │ ├── LayerAdapter.java │ │ │ ├── LayerFragment.java │ │ │ ├── LayerGroupAdapter.java │ │ │ └── LayerGroupFragment.java │ │ │ ├── layerparamet │ │ │ ├── ParametAdapter.java │ │ │ └── ParametFragment.java │ │ │ └── slideshow │ │ │ ├── SlideshowFragment.java │ │ │ └── SlideshowViewModel.java │ │ └── res │ │ ├── drawable │ │ ├── ic_menu_camera.xml │ │ ├── ic_menu_gallery.xml │ │ ├── ic_menu_slideshow.xml │ │ └── side_nav_bar.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── activity_main2.xml │ │ ├── activity_navigation.xml │ │ ├── app_bar_main.xml │ │ ├── content_main.xml │ │ ├── fragment_gallery.xml │ │ ├── fragment_layer.xml │ │ ├── fragment_layer_group.xml │ │ ├── fragment_paramet.xml │ │ ├── fragment_slideshow.xml │ │ ├── item_layer.xml │ │ ├── item_paramet_bool.xml │ │ ├── item_paramet_float.xml │ │ ├── item_paramet_int.xml │ │ ├── nav_header_main.xml │ │ └── paramet_layer.xml │ │ ├── menu │ │ ├── activity_main_drawer.xml │ │ └── navigation.xml │ │ ├── navigation │ │ └── mobile_navigation.xml │ │ └── values │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── settings.gradle └── vulkanextratest │ ├── build.gradle │ └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── aoce │ │ └── samples │ │ └── vulkanextratest │ │ └── MainActivity.java │ └── res │ ├── layout │ └── activity_main.xml │ └── values │ └── strings.xml ├── aoce_android_install.jks ├── assets ├── images │ ├── adaptiveThreshold1.png │ ├── android_build1.png │ ├── android_build2.png │ ├── android_build3.png │ ├── android_build4.png │ ├── android_build5.png │ ├── cs_time_1.png │ ├── cs_time_10.png │ ├── cs_time_11.png │ ├── cs_time_12.png │ ├── cs_time_13.png │ ├── cs_time_14.png │ ├── cs_time_15.png │ ├── cs_time_16.png │ ├── cs_time_17.png │ ├── cs_time_18.png │ ├── cs_time_19.png │ ├── cs_time_2.png │ ├── cs_time_3_0.png │ ├── cs_time_3_1.png │ ├── cs_time_3_2.png │ ├── cs_time_4.png │ ├── cs_time_5.png │ ├── cs_time_6.png │ ├── cs_time_7.png │ ├── cs_time_8.png │ ├── cs_time_9.png │ ├── gaussianA.png │ ├── gaussianB.png │ ├── guided_process.png │ ├── guidedtest_1.png │ ├── guidedtest_2.png │ ├── guidedtest_3.png │ ├── guidedtest_nsight.png │ ├── harris_1.jpg │ ├── layers_demo.png │ ├── lookup.png │ ├── lookup_amatorka.binary │ ├── lookup_amatorka.png │ ├── toy-mask.bmp │ └── toy.bmp └── net │ ├── face.bin │ ├── face.param │ ├── pfld-sim.bin │ ├── pfld-sim.param │ ├── rvm-512.bin │ ├── rvm-512.param │ ├── slim_320.bin │ └── slim_320.param ├── cmake ├── AoceBuildSettings.h.in ├── AoceHelper.cmake ├── FindAgora.cmake ├── FindDirectX.cmake ├── FindDirectX11.cmake ├── FindFFmpeg.cmake ├── FindNCNN.cmake └── FindRealsense.cmake ├── code ├── CMakeLists.txt ├── README.md ├── aoce │ ├── Aoce.cpp │ ├── Aoce.h │ ├── Aoce.hpp │ ├── AoceAudioDevice.h │ ├── AoceCore.cpp │ ├── AoceCore.h │ ├── AoceDefine.h │ ├── AoceLayer.h │ ├── AoceLive.h │ ├── AoceManager.cpp │ ├── AoceManager.hpp │ ├── AoceMath.h │ ├── AoceMedia.h │ ├── AoceMetadata.h │ ├── AoceVideoDevice.h │ ├── AoceWindow.h │ ├── CMakeLists.txt │ ├── README.md │ ├── audiodevice │ │ ├── AudioDevice.cpp │ │ ├── AudioDevice.hpp │ │ └── AudioHelper.cpp │ ├── fixgraph │ │ ├── VideoView.cpp │ │ └── VideoView.hpp │ ├── layer │ │ ├── BaseLayer.cpp │ │ ├── BaseLayer.hpp │ │ ├── InputLayer.cpp │ │ ├── InputLayer.hpp │ │ ├── OutputLayer.cpp │ │ ├── OutputLayer.hpp │ │ ├── PipeGraph.cpp │ │ ├── PipeGraph.hpp │ │ ├── PipeNode.cpp │ │ └── PipeNode.hpp │ ├── live │ │ ├── LiveRoom.cpp │ │ └── LiveRoom.hpp │ ├── math │ │ ├── AMath.cpp │ │ ├── WrapMat.cpp │ │ └── WrapMat.hpp │ ├── media │ │ ├── AudioEncoder.cpp │ │ ├── AudioEncoder.hpp │ │ ├── MediaHelper.cpp │ │ ├── MediaHelper.hpp │ │ ├── MediaMuxer.cpp │ │ ├── MediaMuxer.hpp │ │ ├── MediaPlayer.cpp │ │ ├── MediaPlayer.hpp │ │ ├── VideoEncoder.cpp │ │ └── VideoEncoder.hpp │ ├── metadata │ │ ├── LayerMetadata.cpp │ │ └── LayerMetadata.hpp │ ├── module │ │ ├── FrameCount.cpp │ │ ├── FrameCount.hpp │ │ ├── IModule.cpp │ │ ├── IModule.hpp │ │ ├── ModuleManager.cpp │ │ └── ModuleManager.hpp │ └── videodevice │ │ ├── VideoDevice.cpp │ │ ├── VideoDevice.hpp │ │ ├── VideoManager.cpp │ │ └── VideoManager.hpp ├── aoce_android │ ├── AVideoDevice.cpp │ ├── AVideoDevice.hpp │ ├── AVideoManager.cpp │ ├── AVideoManager.hpp │ ├── AndroidModule.cpp │ ├── AndroidModule.hpp │ ├── CMakeLists.txt │ ├── JNIHelper.cpp │ └── README.md ├── aoce_cuda │ ├── CMakeLists.txt │ ├── CuLayerFactory.cpp │ ├── CuLayerFactory.hpp │ ├── CudaHelper.cpp │ ├── CudaHelper.hpp │ ├── CudaMat.cpp │ ├── CudaMat.hpp │ ├── CudaModule.cpp │ ├── CudaModule.hpp │ ├── README.md │ ├── cuda │ │ ├── CudaTypes.hpp │ │ ├── CudaWrapper.cu │ │ ├── colorconvert.h │ │ ├── cuda_common.h │ │ ├── helper_math.h │ │ └── imageprocess.h │ └── layer │ │ ├── CuComputeLayer.cpp │ │ ├── CuComputeLayer.hpp │ │ ├── CuInputLayer.cpp │ │ ├── CuInputLayer.hpp │ │ ├── CuLayer.cpp │ │ ├── CuLayer.hpp │ │ ├── CuOutputLayer.cpp │ │ ├── CuOutputLayer.hpp │ │ ├── CuPipeGraph.cpp │ │ ├── CuPipeGraph.hpp │ │ ├── CuRGBA2YUVLayer.cpp │ │ ├── CuRGBA2YUVLayer.hpp │ │ ├── CuResizeLayer.cpp │ │ ├── CuResizeLayer.hpp │ │ ├── CuYUV2RGBALayer.cpp │ │ └── CuYUV2RGBALayer.hpp ├── aoce_ffmpeg │ ├── AoceFFmpeg.cpp │ ├── AoceFFmpeg.hpp │ ├── CMakeLists.txt │ ├── FFmpegModule.cpp │ ├── FFmpegModule.hpp │ ├── FMediaFactory.cpp │ ├── FMediaFactory.hpp │ └── media │ │ ├── FAACEncoder.cpp │ │ ├── FAACEncoder.hpp │ │ ├── FH264Encoder.cpp │ │ ├── FH264Encoder.hpp │ │ ├── FMediaMuxer.cpp │ │ ├── FMediaMuxer.hpp │ │ ├── FMediaPlayer.cpp │ │ └── FMediaPlayer.hpp ├── aoce_ncnn │ ├── AoceInterop.cpp │ ├── AoceInterop.hpp │ ├── AoceNcnnExport.cpp │ ├── AoceNcnnExport.h │ ├── CMakeLists.txt │ ├── CNNHelper.hpp │ ├── FaceDetector.cpp │ ├── FaceDetector.hpp │ ├── FaceKeypointDetector.cpp │ ├── FaceKeypointDetector.hpp │ ├── README.md │ ├── VideoMatting.cpp │ ├── VideoMatting.hpp │ ├── VkNcnnInLayer.cpp │ ├── VkNcnnInLayer.hpp │ ├── VkNcnnModule.cpp │ └── VkNcnnModule.hpp ├── aoce_vulkan │ ├── CMakeLists.txt │ ├── README.md │ ├── VkCommand.cpp │ ├── VkCommand.hpp │ ├── VkLayerFactory.cpp │ ├── VkLayerFactory.hpp │ ├── VulkanModule.cpp │ ├── VulkanModule.hpp │ ├── android │ │ ├── HardwareImage.cpp │ │ ├── HardwareImage.hpp │ │ ├── vulkan_wrapper.cpp │ │ └── vulkan_wrapper.h │ ├── layer │ │ ├── VkBlendLayer.cpp │ │ ├── VkBlendLayer.hpp │ │ ├── VkHelper.cpp │ │ ├── VkHelper.hpp │ │ ├── VkInputLayer.cpp │ │ ├── VkInputLayer.hpp │ │ ├── VkLayer.cpp │ │ ├── VkLayer.hpp │ │ ├── VkOperateLayer.cpp │ │ ├── VkOperateLayer.hpp │ │ ├── VkOutputLayer.cpp │ │ ├── VkOutputLayer.hpp │ │ ├── VkPipeGraph.cpp │ │ ├── VkPipeGraph.hpp │ │ ├── VkRGBA2YUVLayer.cpp │ │ ├── VkRGBA2YUVLayer.hpp │ │ ├── VkResizeLayer.cpp │ │ ├── VkResizeLayer.hpp │ │ ├── VkTransposeLayer.cpp │ │ ├── VkTransposeLayer.hpp │ │ ├── VkYUV2RGBALayer.cpp │ │ └── VkYUV2RGBALayer.hpp │ ├── vulkan │ │ ├── VulkanBuffer.cpp │ │ ├── VulkanBuffer.hpp │ │ ├── VulkanCommon.hpp │ │ ├── VulkanContext.cpp │ │ ├── VulkanContext.hpp │ │ ├── VulkanHelper.cpp │ │ ├── VulkanHelper.hpp │ │ ├── VulkanManager.cpp │ │ ├── VulkanManager.hpp │ │ ├── VulkanPipeline.cpp │ │ ├── VulkanPipeline.hpp │ │ ├── VulkanShader.cpp │ │ ├── VulkanShader.hpp │ │ ├── VulkanTexture.cpp │ │ ├── VulkanTexture.hpp │ │ ├── VulkanWindow.cpp │ │ └── VulkanWindow.hpp │ └── win32 │ │ ├── VkWinImage.cpp │ │ ├── VkWinImage.hpp │ │ ├── Win32Window.cpp │ │ └── Win32Window.hpp ├── aoce_vulkan_extra │ ├── AoceVkExtra.h │ ├── CMakeLists.txt │ ├── README.md │ ├── VkExtraExport.cpp │ ├── VkExtraExport.h │ ├── VkExtraModule.cpp │ ├── VkExtraModule.hpp │ └── layer │ │ ├── VkAdaptiveThresholdLayer.cpp │ │ ├── VkAdaptiveThresholdLayer.hpp │ │ ├── VkAlphaShowLayer.cpp │ │ ├── VkAlphaShowLayer.hpp │ │ ├── VkBilateralLayer.cpp │ │ ├── VkBilateralLayer.hpp │ │ ├── VkBlendingModeLayer.cpp │ │ ├── VkBlendingModeLayer.hpp │ │ ├── VkBlurBlendBaseLayer.cpp │ │ ├── VkBlurBlendBaseLayer.hpp │ │ ├── VkBulgeDistortionLayer.cpp │ │ ├── VkBulgeDistortionLayer.hpp │ │ ├── VkCannyEdgeDetectionLayer.cpp │ │ ├── VkCannyEdgeDetectionLayer.hpp │ │ ├── VkColorAdjustmentLayer.cpp │ │ ├── VkColorAdjustmentLayer.hpp │ │ ├── VkColorMatrixLayer.cpp │ │ ├── VkColorMatrixLayer.hpp │ │ ├── VkColourFASTFeatureDetector.cpp │ │ ├── VkColourFASTFeatureDetector.hpp │ │ ├── VkConvertImageLayer.cpp │ │ ├── VkConvertImageLayer.hpp │ │ ├── VkCropLayer.cpp │ │ ├── VkCropLayer.hpp │ │ ├── VkDrawLayer.cpp │ │ ├── VkDrawLayer.hpp │ │ ├── VkEdgeDetectionLayer.cpp │ │ ├── VkEdgeDetectionLayer.hpp │ │ ├── VkGuidedLayer.cpp │ │ ├── VkGuidedLayer.hpp │ │ ├── VkHarrisCornerDetectionLayer.cpp │ │ ├── VkHarrisCornerDetectionLayer.hpp │ │ ├── VkHistogramLayer.cpp │ │ ├── VkHistogramLayer.hpp │ │ ├── VkIOSBlurLayer.cpp │ │ ├── VkIOSBlurLayer.hpp │ │ ├── VkImageProcessing.cpp │ │ ├── VkImageProcessing.hpp │ │ ├── VkLaplacianLayer.cpp │ │ ├── VkLaplacianLayer.hpp │ │ ├── VkLinearFilterLayer.cpp │ │ ├── VkLinearFilterLayer.hpp │ │ ├── VkLookupLayer.cpp │ │ ├── VkLookupLayer.hpp │ │ ├── VkLowPassLayer.cpp │ │ ├── VkLowPassLayer.hpp │ │ ├── VkLuminanceLayer.cpp │ │ ├── VkLuminanceLayer.hpp │ │ ├── VkMedianLayer.cpp │ │ ├── VkMedianLayer.hpp │ │ ├── VkMorphLayer.cpp │ │ ├── VkMorphLayer.hpp │ │ ├── VkMotionBlurLayer.cpp │ │ ├── VkMotionBlurLayer.hpp │ │ ├── VkPerlinNoiseLayer.cpp │ │ ├── VkPerlinNoiseLayer.hpp │ │ ├── VkPixellateLayer.cpp │ │ ├── VkPixellateLayer.hpp │ │ ├── VkPoissonBlendLayer.cpp │ │ ├── VkPoissonBlendLayer.hpp │ │ ├── VkReduceLayer.cpp │ │ ├── VkReduceLayer.hpp │ │ ├── VkSeparableLinearLayer.cpp │ │ ├── VkSeparableLinearLayer.hpp │ │ ├── VkSphereLayer.cpp │ │ ├── VkSphereLayer.hpp │ │ ├── VkToonLayer.cpp │ │ ├── VkToonLayer.hpp │ │ ├── VkVisualEffectLayer.cpp │ │ ├── VkVisualEffectLayer.hpp │ │ ├── VkVoronoiLayer.cpp │ │ └── VkVoronoiLayer.hpp ├── aoce_win │ ├── BCaptureWindow.cpp │ ├── BCaptureWindow.hpp │ ├── CMakeLists.txt │ ├── WinHelp.cpp │ ├── WinHelp.hpp │ ├── WinModule.cpp │ ├── WinModule.hpp │ ├── dx11 │ │ ├── Dx11Helper.cpp │ │ ├── Dx11Helper.hpp │ │ ├── Dx11Resource.cpp │ │ ├── Dx11Resource.hpp │ │ ├── Dx11Window.cpp │ │ └── Dx11Window.hpp │ └── window │ │ ├── MCaptureWindow.cpp │ │ ├── MCaptureWindow.hpp │ │ ├── MWindow.cpp │ │ ├── MWindow.hpp │ │ ├── MWindowManager.cpp │ │ └── MWindowManager.hpp ├── aoce_win_mf │ ├── CMakeLists.txt │ ├── MfModule.cpp │ ├── MfModule.hpp │ ├── README.md │ └── videodevice │ │ ├── FormatReader.cpp │ │ ├── FormatReader.hpp │ │ ├── MFVideoDevice.cpp │ │ ├── MFVideoDevice.hpp │ │ ├── MFVideoManager.cpp │ │ ├── MFVideoManager.hpp │ │ ├── MediaStruct.cpp │ │ └── MediaStruct.hpp └── aoce_winrt │ ├── CMakeLists.txt │ ├── RTCaptureWindow.cpp │ ├── RTCaptureWindow.hpp │ ├── WinRTModule.cpp │ └── WinRTModule.hpp ├── doc ├── android │ ├── Android开发.md │ ├── Android界面.md │ ├── oculus开发.md │ └── 交叉编译.md ├── aoce.md ├── cnn │ ├── NCNN优化实时面部关键点检测.md │ ├── aoce对接NCNN输入输出.md │ ├── ncnn源码解析.md │ ├── 基本环境配置.md │ └── 资料.md ├── math │ ├── 摄像机畸变校正.md │ ├── 深度卷积神经网络.md │ └── 资料.md ├── project │ ├── aoce graph流程图.md │ ├── guided流程.odg │ ├── 下一步解决.md │ ├── 注意.md │ └── 问题定位.md ├── thirdparty │ ├── FFmpeg开发.md │ ├── GPUImage注解.md │ ├── MAUI.md │ ├── opencv扩展.md │ ├── swig.md │ ├── 使用Swig转换成别的语言.md │ └── 窗口捕获.md ├── ue4 │ ├── UE4对接.md │ ├── UE4插件.md │ ├── UE4整理.md │ └── UE4行为树.md ├── unity3d │ └── Unity3d对接.md └── vulkan │ ├── ChromaKey.md │ ├── PC平台Vulkan运算层时间记录.md │ ├── Vulkan glsl.md │ ├── Vulkan与DX11交互.md │ ├── Vulkan移植GPUImage总结.md │ ├── Vulkan移植GPUImage的安卓Demo展示.md │ ├── Vulkan移植GpuImage1.md │ ├── Vulkan移植GpuImage2.md │ ├── Vulkan移植GpuImage3.md │ ├── Vulkan移植GpuImage4.md │ └── Vulkan移植GpuImage5.md ├── glsl ├── CMakeLists.txt ├── README.md ├── compileglsl.py ├── glslindex.txt ├── glslindexcurrent.txt ├── source │ ├── adaptiveThreshold.comp │ ├── addBlend.comp │ ├── alphaBlend.comp │ ├── alphaCombin.comp │ ├── alphaSeparate.comp │ ├── alphaShow.comp │ ├── averageLuminanceThreshold.comp │ ├── bilateral.comp │ ├── blend.comp │ ├── blurPosition.comp │ ├── blurSelective.comp │ ├── brightness.comp │ ├── bulgeDistortion.comp │ ├── canny.comp │ ├── cgaColorspace.comp │ ├── chromaKey.comp │ ├── colorBlend.comp │ ├── colorBurnBlend.comp │ ├── colorDodgeBlend.comp │ ├── colorInvert.comp │ ├── colorLocalBinaryPattern.comp │ ├── colorMatrix.comp │ ├── contrast.comp │ ├── convertImage.comp │ ├── copyImage.comp │ ├── cropFilter.comp │ ├── crosshatch.comp │ ├── darkenBlend.comp │ ├── differenceBlend.comp │ ├── directionalNMS.comp │ ├── directionalSobel.comp │ ├── dissolveBlend.comp │ ├── divideBlend.comp │ ├── drawPointBlend.comp │ ├── drawPoints.comp │ ├── drawRect.comp │ ├── emboss.comp │ ├── exclusionBlend.comp │ ├── exposure.comp │ ├── falseColor.comp │ ├── fastFeatureDetector.comp │ ├── filter2D.comp │ ├── filterColumn.comp │ ├── filterMat3x3.comp │ ├── filterRow.comp │ ├── flip.comp │ ├── gamma.comp │ ├── glassSphere.comp │ ├── guidedFilter1.comp │ ├── guidedFilter2.comp │ ├── guidedMatting.comp │ ├── halftone.comp │ ├── hardLightBlend.comp │ ├── harrisCornerDetection.comp │ ├── haze.comp │ ├── highlightShadow.comp │ ├── highlightShadowTint.comp │ ├── histogram.comp │ ├── histogramCombin.comp │ ├── histogramLut.comp │ ├── histogramLutResult.comp │ ├── hue.comp │ ├── hueBlend.comp │ ├── input.comp │ ├── kuwahara.comp │ ├── levels.comp │ ├── lightenBlend.comp │ ├── linearBurnBlend.comp │ ├── lookup.comp │ ├── luminance.comp │ ├── luminanceRange.comp │ ├── luminanceThreshold.comp │ ├── luminosityBlend.comp │ ├── mapChannel.comp │ ├── mask.comp │ ├── median.comp │ ├── memset.comp │ ├── monochrome.comp │ ├── morph1.comp │ ├── morph2.comp │ ├── motionBlur.comp │ ├── motionDetector.comp │ ├── multiplyBlend.comp │ ├── ncnnInMat.comp │ ├── ncnnUpload.comp │ ├── nobleCornerDetection.comp │ ├── normalBlend.comp │ ├── opacity.comp │ ├── operate.comp │ ├── overlayBlend.comp │ ├── perlinNoise.comp │ ├── pinchDistortion.comp │ ├── pixellate.comp │ ├── pixellatePosition.comp │ ├── poissonBlend.comp │ ├── polarPixellate.comp │ ├── polkaDot.comp │ ├── posterize.comp │ ├── prewittEdge.comp │ ├── reduce.comp │ ├── reduce2.comp │ ├── resize.comp │ ├── rgb.comp │ ├── rgba2yuvV1.comp │ ├── rgba2yuvV2.comp │ ├── saturation.comp │ ├── saturationBlend.comp │ ├── screenBlend.comp │ ├── sharpen.comp │ ├── shiTomasiFeatureDetection.comp │ ├── showRound.comp │ ├── skinTone.comp │ ├── sobelEdge.comp │ ├── sobelThreshold.comp │ ├── softLightBlend.comp │ ├── solarize.comp │ ├── sourceOverBlend.comp │ ├── sphereRefraction.comp │ ├── stretchDisortion.comp │ ├── subtractBlend.comp │ ├── swirl.comp │ ├── thresholdedNMS.comp │ ├── tiltShift.comp │ ├── toon.comp │ ├── transpose.comp │ ├── twoImage.comp │ ├── unsharpMask.comp │ ├── vibrance.comp │ ├── vignette.comp │ ├── voronoiConsumer.comp │ ├── whiteBalance.comp │ ├── xyDerivative.comp │ ├── yuv2rgbaV1.comp │ ├── yuv2rgbaV2.comp │ └── zoomBlur.comp └── target │ ├── adaptiveThreshold.comp.spv │ ├── addBlend.comp.spv │ ├── alphaBlend.comp.spv │ ├── alphaCombin.comp.spv │ ├── alphaScaleCombin.comp.spv │ ├── alphaSeparate.comp.spv │ ├── alphaShow.comp.spv │ ├── alphaShowC1.comp.spv │ ├── alphaShowF1.comp.spv │ ├── alphaShowF4.comp.spv │ ├── alphaShowSI1.comp.spv │ ├── alphaShowSI4.comp.spv │ ├── averageLuminanceThreshold.comp.spv │ ├── bilateral.comp.spv │ ├── bilateralC1.comp.spv │ ├── blend.comp.spv │ ├── blurPosition.comp.spv │ ├── blurSelective.comp.spv │ ├── brightness.comp.spv │ ├── bulgeDistortion.comp.spv │ ├── canny.comp.spv │ ├── cgaColorspace.comp.spv │ ├── chromaKey.comp.spv │ ├── colorBlend.comp.spv │ ├── colorBurnBlend.comp.spv │ ├── colorDodgeBlend.comp.spv │ ├── colorInvert.comp.spv │ ├── colorLocalBinaryPattern.comp.spv │ ├── colorMatrix.comp.spv │ ├── contrast.comp.spv │ ├── convertImage.comp.spv │ ├── convertImageF4.comp.spv │ ├── copyImage.comp.spv │ ├── cropFilter.comp.spv │ ├── crosshatch.comp.spv │ ├── darkenBlend.comp.spv │ ├── differenceBlend.comp.spv │ ├── directionalNMS.comp.spv │ ├── directionalSobel.comp.spv │ ├── dissolveBlend.comp.spv │ ├── divideBlend.comp.spv │ ├── drawPointBlend.comp.spv │ ├── drawPoints.comp.spv │ ├── drawRect.comp.spv │ ├── emboss.comp.spv │ ├── exclusionBlend.comp.spv │ ├── exposure.comp.spv │ ├── falseColor.comp.spv │ ├── fastFeatureDetector.comp.spv │ ├── filter2D.comp.spv │ ├── filter2DC1.comp.spv │ ├── filter2DF4.comp.spv │ ├── filterColumn.comp.spv │ ├── filterColumnC1.comp.spv │ ├── filterColumnF4.comp.spv │ ├── filterMat3x3.comp.spv │ ├── filterRow.comp.spv │ ├── filterRowC1.comp.spv │ ├── filterRowF4.comp.spv │ ├── flip.comp.spv │ ├── gamma.comp.spv │ ├── glassSphere.comp.spv │ ├── guidedFilter1.comp.spv │ ├── guidedFilter2.comp.spv │ ├── guidedMatting.comp.spv │ ├── halftone.comp.spv │ ├── hardLightBlend.comp.spv │ ├── harrisCornerDetection.comp.spv │ ├── haze.comp.spv │ ├── highlightShadow.comp.spv │ ├── highlightShadowTint.comp.spv │ ├── histogram.comp.spv │ ├── histogramC1.comp.spv │ ├── histogramCombin.comp.spv │ ├── histogramLut.comp.spv │ ├── histogramLutResult.comp.spv │ ├── histogramLutResultC1.comp.spv │ ├── hue.comp.spv │ ├── hueBlend.comp.spv │ ├── inputARGB.comp.spv │ ├── inputBRGA.comp.spv │ ├── inputRGB.comp.spv │ ├── kuwahara.comp.spv │ ├── levels.comp.spv │ ├── lightenBlend.comp.spv │ ├── linearBurnBlend.comp.spv │ ├── lookup.comp.spv │ ├── luminance.comp.spv │ ├── luminanceRange.comp.spv │ ├── luminanceThreshold.comp.spv │ ├── luminosityBlend.comp.spv │ ├── mapChannel.comp.spv │ ├── mask.comp.spv │ ├── median.comp.spv │ ├── medianC1.comp.spv │ ├── medianK3.comp.spv │ ├── medianK3C1.comp.spv │ ├── memset.comp.spv │ ├── memsetU1.comp.spv │ ├── monochrome.comp.spv │ ├── morph1_dilation.comp.spv │ ├── morph1_dilationC1.comp.spv │ ├── morph1_erosion.comp.spv │ ├── morph1_erosionC1.comp.spv │ ├── morph2_dilation.comp.spv │ ├── morph2_dilationC1.comp.spv │ ├── morph2_erosion.comp.spv │ ├── morph2_erosionC1.comp.spv │ ├── motionBlur.comp.spv │ ├── motionDetector.comp.spv │ ├── multiplyBlend.comp.spv │ ├── ncnnInCropMatBGR.comp.spv │ ├── ncnnInCropMatBGRF16.comp.spv │ ├── ncnnInCropMatRGB.comp.spv │ ├── ncnnInCropMatRGBF16.comp.spv │ ├── ncnnInMatBGR.comp.spv │ ├── ncnnInMatBGRF16.comp.spv │ ├── ncnnInMatRGB.comp.spv │ ├── ncnnInMatRGBF16.comp.spv │ ├── ncnnUpload.comp.spv │ ├── ncnnUploadF16.comp.spv │ ├── nobleCornerDetection.comp.spv │ ├── normalBlend.comp.spv │ ├── opacity.comp.spv │ ├── operate.comp.spv │ ├── overlayBlend.comp.spv │ ├── perlinNoise.comp.spv │ ├── pinchDistortion.comp.spv │ ├── pixellate.comp.spv │ ├── pixellatePosition.comp.spv │ ├── poissonBlend.comp.spv │ ├── polarPixellate.comp.spv │ ├── polkaDot.comp.spv │ ├── posterize.comp.spv │ ├── prewittEdge.comp.spv │ ├── reduce2_sumF1.comp.spv │ ├── reduce2_sumF4.comp.spv │ ├── reduce_sum.comp.spv │ ├── reduce_sumC1.comp.spv │ ├── resize.comp.spv │ ├── resizeC1.comp.spv │ ├── resizeF4.comp.spv │ ├── rgb.comp.spv │ ├── rgba2yuvV1.comp.spv │ ├── rgba2yuvV2.comp.spv │ ├── saturation.comp.spv │ ├── saturationBlend.comp.spv │ ├── screenBlend.comp.spv │ ├── sharpen.comp.spv │ ├── shiTomasiFeatureDetection.comp.spv │ ├── showRound.comp.spv │ ├── sketch.comp.spv │ ├── sketchThreshold.comp.spv │ ├── sketchThresholdC1.comp.spv │ ├── skinTone.comp.spv │ ├── sobelEdge.comp.spv │ ├── sobelThreshold.comp.spv │ ├── sobelThresholdC1.comp.spv │ ├── softLightBlend.comp.spv │ ├── solarize.comp.spv │ ├── sourceOverBlend.comp.spv │ ├── sphereRefraction.comp.spv │ ├── stretchDisortion.comp.spv │ ├── subtractBlend.comp.spv │ ├── swirl.comp.spv │ ├── thresholdedNMS.comp.spv │ ├── tiltShift.comp.spv │ ├── toon.comp.spv │ ├── transpose.comp.spv │ ├── twoImageBGR.comp.spv │ ├── twoImageColumn.comp.spv │ ├── twoImageRGB.comp.spv │ ├── twoImageRow.comp.spv │ ├── unsharpMask.comp.spv │ ├── vibrance.comp.spv │ ├── vignette.comp.spv │ ├── voronoiConsumer.comp.spv │ ├── whiteBalance.comp.spv │ ├── xyDerivative.comp.spv │ ├── yuv2rgbaV1.comp.spv │ ├── yuv2rgbaV2.comp.spv │ └── zoomBlur.comp.spv ├── samples ├── 01_findmodule │ └── 01_findmodule.cpp ├── 02_showdevice │ └── 02_showdevice.cpp ├── 03_findvulkan │ └── 03_findvulkan.cpp ├── 04_vulkantest │ └── 04_vulkantest.cpp ├── 05_livetest │ └── 05_livetest.cpp ├── 06_mediaplayer │ └── 06_mediaplayer.cpp ├── 07_androidtest │ └── 07_androidtest.cpp ├── 07_wintest │ └── 07_wintest.cpp ├── 08_vulkanextra │ └── 08_vulkanextra.cpp ├── 09_wincapture │ └── 09_wincapture.cpp ├── CMakeLists.txt ├── README.md ├── cudatest │ ├── CMakeLists.txt │ ├── cudatest.cpp │ ├── cudatest.h │ ├── fastguidedfilter_color.cu │ ├── fastguidedtest.cu │ └── hist.cu ├── mathtest │ ├── CMakeLists.txt │ ├── base.cpp │ └── base.hpp ├── ncnntest │ ├── CMakeLists.txt │ ├── mattingtest.cpp │ └── ncnntest.cpp └── vulkanextratest │ ├── Android.cpp │ ├── CMakeLists.txt │ ├── VkExtraBaseView.cpp │ ├── VkExtraBaseView.hpp │ └── Win32.cpp └── swig ├── CMakeLists.txt ├── CSharp └── CMakeLists.txt ├── Java └── CMakeLists.txt ├── aocewrapper.i └── talkto.i /UE4Test/Config/DefaultEditor.ini: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /UE4Test/Config/DefaultGame.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GeneralProjectSettings] 2 | ProjectID=622BDB85451A1C87DD79DFB4961F9527 3 | -------------------------------------------------------------------------------- /UE4Test/Content/NewMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Content/NewMap.umap -------------------------------------------------------------------------------- /UE4Test/Content/NewMap_BuiltData.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Content/NewMap_BuiltData.uasset -------------------------------------------------------------------------------- /UE4Test/Content/PicoPawn.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Content/PicoPawn.uasset -------------------------------------------------------------------------------- /UE4Test/Content/mattingtest.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Content/mattingtest.uasset -------------------------------------------------------------------------------- /UE4Test/Content/sun.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Content/sun.umap -------------------------------------------------------------------------------- /UE4Test/Content/sunnew.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Content/sunnew.umap -------------------------------------------------------------------------------- /UE4Test/Content/sunnew_BuiltData.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Content/sunnew_BuiltData.uasset -------------------------------------------------------------------------------- /UE4Test/Plugins/AocePlugins/AocePlugins.uplugin: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "Version": 1, 4 | "VersionName": "1.1", 5 | "FriendlyName": "AocePlugins", 6 | "Description": "", 7 | "Category": "Other", 8 | "CreatedBy": "xin.zhou", 9 | "CreatedByURL": "", 10 | "DocsURL": "", 11 | "MarketplaceURL": "", 12 | "SupportURL": "", 13 | "CanContainContent": true, 14 | "IsBetaVersion": false, 15 | "Installed": false, 16 | "Modules": [ 17 | { 18 | "Name": "AocePlugins", 19 | "Type": "Runtime", 20 | "LoadingPhase": "PreDefault" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /UE4Test/Plugins/AocePlugins/Content/AoceLiveActorBp.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Plugins/AocePlugins/Content/AoceLiveActorBp.uasset -------------------------------------------------------------------------------- /UE4Test/Plugins/AocePlugins/Content/DispTex.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Plugins/AocePlugins/Content/DispTex.uasset -------------------------------------------------------------------------------- /UE4Test/Plugins/AocePlugins/Content/MainWnd.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Plugins/AocePlugins/Content/MainWnd.uasset -------------------------------------------------------------------------------- /UE4Test/Plugins/AocePlugins/Resources/Icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/UE4Test/Plugins/AocePlugins/Resources/Icon128.png -------------------------------------------------------------------------------- /UE4Test/Plugins/AocePlugins/Source/AocePlugins/Public/AocePlugins.h: -------------------------------------------------------------------------------- 1 | // Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "Modules/ModuleManager.h" 7 | 8 | class FAocePluginsModule : public IModuleInterface 9 | { 10 | public: 11 | 12 | /** IModuleInterface implementation */ 13 | virtual void StartupModule() override; 14 | virtual void ShutdownModule() override; 15 | private: 16 | void LoadDllEx(FString relativePath, bool bSeacher = false); 17 | }; 18 | -------------------------------------------------------------------------------- /UE4Test/Plugins/AocePlugins/Source/AocePlugins/Public/CameraManager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include "aoce/AoceCore.h" 8 | 9 | namespace aoce { 10 | 11 | class CameraManager { 12 | private: 13 | /* data */ 14 | CameraManager(/* args */); 15 | static CameraManager *instance; 16 | 17 | private: 18 | std::vector deviceList; 19 | 20 | public: 21 | static CameraManager &Get(); 22 | ~CameraManager(); 23 | 24 | public: 25 | std::vector getVideoList(); 26 | IVideoDevice *getVideoDevice(const char *deviceId); 27 | }; 28 | 29 | } // namespace aoce 30 | -------------------------------------------------------------------------------- /UE4Test/README.md: -------------------------------------------------------------------------------- 1 | # UE4集成 2 | 3 | ## 配置 4 | 5 | 请先编译运行好aoce,然后运行UE4Test/copybin.bat会把aoce运行好的dll放入本UE4项目下的插件目录中. 6 | 7 | ## 功能 8 | 9 | 在UE4Test下查看Plugins/AocePlugins里的相关实现. 10 | 11 | ## 注意 12 | 13 | 链接下的lib文件,如果需要延迟加载,需要把所有链接下的lib都提供延迟加载,否则延迟加载没用,因为差任何一个,都会导致前面会预先加载,然后又没告知要延迟自己加载,所以会卡在75%. 14 | -------------------------------------------------------------------------------- /UE4Test/Source/UE4Test.Target.cs: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class UE4TestTarget : TargetRules 7 | { 8 | public UE4TestTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Game; 11 | 12 | ExtraModuleNames.AddRange(new string[] { "UE4Test", "AocePlugins" }); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /UE4Test/Source/UE4Test/UE4Test.Build.cs: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | using UnrealBuildTool; 4 | 5 | public class UE4Test : ModuleRules 6 | { 7 | public UE4Test(ReadOnlyTargetRules Target) : base(Target) 8 | { 9 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" }); 12 | 13 | PrivateDependencyModuleNames.AddRange(new string[] { }); 14 | 15 | // Uncomment if you are using Slate UI 16 | // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); 17 | 18 | // Uncomment if you are using online features 19 | // PrivateDependencyModuleNames.Add("OnlineSubsystem"); 20 | 21 | // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /UE4Test/Source/UE4Test/UE4Test.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #include "UE4Test.h" 4 | #include "Modules/ModuleManager.h" 5 | 6 | IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, UE4Test, "UE4Test" ); 7 | -------------------------------------------------------------------------------- /UE4Test/Source/UE4Test/UE4Test.h: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | 7 | -------------------------------------------------------------------------------- /UE4Test/Source/UE4Test/UE4TestGameModeBase.cpp: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | 4 | #include "UE4TestGameModeBase.h" 5 | 6 | -------------------------------------------------------------------------------- /UE4Test/Source/UE4Test/UE4TestGameModeBase.h: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "GameFramework/GameModeBase.h" 7 | #include "UE4TestGameModeBase.generated.h" 8 | 9 | /** 10 | * 11 | */ 12 | UCLASS() 13 | class UE4TEST_API AUE4TestGameModeBase : public AGameModeBase 14 | { 15 | GENERATED_BODY() 16 | 17 | }; 18 | -------------------------------------------------------------------------------- /UE4Test/Source/UE4TestEditor.Target.cs: -------------------------------------------------------------------------------- 1 | // Fill out your copyright notice in the Description page of Project Settings. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class UE4TestEditorTarget : TargetRules 7 | { 8 | public UE4TestEditorTarget(TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Editor; 11 | 12 | ExtraModuleNames.AddRange( new string[] { "UE4Test" } ); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /UE4Test/UE4Test.uproject: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "EngineAssociation": "4.26", 4 | "Category": "", 5 | "Description": "", 6 | "Modules": [ 7 | { 8 | "Name": "UE4Test", 9 | "Type": "Runtime", 10 | "LoadingPhase": "Default" 11 | } 12 | ], 13 | "Plugins": [ 14 | { 15 | "Name": "OculusVR", 16 | "Enabled": false, 17 | "SupportedTargetPlatforms": [ 18 | "Win32", 19 | "Win64", 20 | "Android" 21 | ] 22 | }, 23 | { 24 | "Name": "OnlineSubsystemPico", 25 | "Enabled": true 26 | }, 27 | { 28 | "Name": "PicoMobile", 29 | "Enabled": true 30 | }, 31 | { 32 | "Name": "PicoMobileController", 33 | "Enabled": true 34 | }, 35 | { 36 | "Name": "PicoNeoController", 37 | "Enabled": true 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /android/04_vulkantest/src/main/java/aoce/samples/vulkantest/MainActivity.java: -------------------------------------------------------------------------------- 1 | package aoce.samples.vulkantest; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | 5 | import android.os.Bundle; 6 | 7 | public class MainActivity extends AppCompatActivity { 8 | 9 | @Override 10 | protected void onCreate(Bundle savedInstanceState) { 11 | super.onCreate(savedInstanceState); 12 | setContentView(R.layout.activity_main); 13 | } 14 | } -------------------------------------------------------------------------------- /android/04_vulkantest/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /android/04_vulkantest/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /android/05_livetest/src/main/java/aoce/samples/livetest/MainActivity2.java: -------------------------------------------------------------------------------- 1 | package aoce.samples.livetest; 2 | 3 | import android.app.NativeActivity; 4 | import aoce.samples.vulkantest.R; 5 | import android.os.Bundle; 6 | import io.agora.rtc2.RtcEngine; 7 | 8 | public class MainActivity2 extends NativeActivity { 9 | static { 10 | RtcEngine.getSdkVersion(); 11 | // System.loadLibrary("vrapi"); 12 | System.loadLibrary("05_livetest"); 13 | System.loadLibrary("agora-rtc-sdk-jni"); 14 | 15 | } 16 | } -------------------------------------------------------------------------------- /android/05_livetest/src/main/res/layout/activity_main2.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /android/05_livetest/src/main/res/layout/activity_main3.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /android/05_livetest/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/05_livetest/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #66000000 4 | 5 | -------------------------------------------------------------------------------- /android/05_livetest/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | FullscreenActivity 3 | Dummy Button 4 | DUMMY\nCONTENT 5 | 进入房间 6 | vulkan 显示 7 | opengl es 显示 8 | 123 9 | -------------------------------------------------------------------------------- /android/05_livetest/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /android/06_mediaplayer/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 打开 3 | vulkan 显示 4 | opengl es 显示 5 | 6 | rtmp://58.200.131.2:1935/livetv/hunantv 7 | -------------------------------------------------------------------------------- /android/07_androidtest/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 打开 3 | vulkan 显示 4 | opengl es 显示 5 | 6 | 0 7 | -------------------------------------------------------------------------------- /android/aoce/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /android/aoce/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/android/aoce/consumer-rules.pro -------------------------------------------------------------------------------- /android/aoce/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /android/aoce/src/androidTest/java/aoce/android/library/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package aoce.android.library; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("aoce.android.library.test", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /android/aoce/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | / 5 | -------------------------------------------------------------------------------- /android/aoce/src/main/java/aoce/android/library/wrapper/IGLCopyTexture.java: -------------------------------------------------------------------------------- 1 | package aoce.android.library.wrapper; 2 | 3 | public interface IGLCopyTexture { 4 | public void copyTex(int textureId, int width, int height); 5 | } 6 | -------------------------------------------------------------------------------- /android/aoce/src/main/java/aoce/android/library/wrapper/IVKInitSurface.java: -------------------------------------------------------------------------------- 1 | package aoce.android.library.wrapper; 2 | 3 | import android.view.Surface; 4 | 5 | public interface IVKInitSurface { 6 | public void initSurface(Surface surface, int width, int height); 7 | } 8 | -------------------------------------------------------------------------------- /android/aoce/src/main/java/aoce/android/library/wrapper/VKVideoRender.java: -------------------------------------------------------------------------------- 1 | package aoce.android.library.wrapper; 2 | 3 | import android.util.Log; 4 | import android.view.SurfaceHolder; 5 | import android.view.SurfaceView; 6 | 7 | public class VKVideoRender implements SurfaceHolder.Callback { 8 | private IVKInitSurface initSurface = null; 9 | public void init(SurfaceView surface,IVKInitSurface vkInitSurface){ 10 | initSurface = vkInitSurface; 11 | surface.getHolder().addCallback(this); 12 | } 13 | 14 | @Override 15 | public void surfaceCreated(SurfaceHolder surfaceHolder) { 16 | Log.i("aoce", "surfaceCreated: create"); 17 | } 18 | 19 | @Override 20 | public void surfaceChanged(SurfaceHolder surfaceHolder,int format, int width, int height) { 21 | initSurface.initSurface(surfaceHolder.getSurface(),width,height); 22 | } 23 | 24 | @Override 25 | public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /android/aoce/src/test/java/aoce/android/library/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package aoce.android.library; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /android/aocencnntest/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /android/aocencnntest/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/aoceswigtest/assets/blend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/android/aoceswigtest/assets/blend.png -------------------------------------------------------------------------------- /android/aoceswigtest/assets/lookup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/android/aoceswigtest/assets/lookup.png -------------------------------------------------------------------------------- /android/aoceswigtest/assets/lookup_amatorka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/android/aoceswigtest/assets/lookup_amatorka.png -------------------------------------------------------------------------------- /android/aoceswigtest/assets/lookup_miss_etikate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/android/aoceswigtest/assets/lookup_miss_etikate.png -------------------------------------------------------------------------------- /android/aoceswigtest/assets/lookup_soft_elegance_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/android/aoceswigtest/assets/lookup_soft_elegance_1.png -------------------------------------------------------------------------------- /android/aoceswigtest/assets/lookup_soft_elegance_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/android/aoceswigtest/assets/lookup_soft_elegance_2.png -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/java/aoce/samples/aoceswigtest/LayerMetaTag.java: -------------------------------------------------------------------------------- 1 | package aoce.samples.aoceswigtest; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import aoce.android.library.xswig.ILMetadata; 6 | import aoce.android.library.xswig.LayerMetadataType; 7 | 8 | public class LayerMetaTag { 9 | public LayerMetadataType metadataType = LayerMetadataType.other; 10 | public ILMetadata layerMeta = null; 11 | public Object layerObj = null; 12 | public Object parametObj = null; 13 | public Method setMethod = null; 14 | } 15 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/java/aoce/samples/aoceswigtest/TestViewModel.java: -------------------------------------------------------------------------------- 1 | package aoce.samples.aoceswigtest; 2 | 3 | import java.util.ArrayList; 4 | 5 | import androidx.lifecycle.MutableLiveData; 6 | import androidx.lifecycle.ViewModel; 7 | 8 | public class TestViewModel extends ViewModel { 9 | 10 | private MutableLiveData id = null; 11 | private ArrayList names = new ArrayList(); 12 | 13 | public String getName(int index){ 14 | if(index<0 || index>names.size()){ 15 | return null; 16 | } 17 | return names.get(index); 18 | } 19 | 20 | public MutableLiveData getId(){ 21 | return id; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/java/aoce/samples/aoceswigtest/ui/gallery/GalleryViewModel.java: -------------------------------------------------------------------------------- 1 | package aoce.samples.aoceswigtest.ui.gallery; 2 | 3 | import androidx.lifecycle.LiveData; 4 | import androidx.lifecycle.MutableLiveData; 5 | import androidx.lifecycle.ViewModel; 6 | 7 | public class GalleryViewModel extends ViewModel { 8 | 9 | private MutableLiveData mText; 10 | 11 | public GalleryViewModel() { 12 | mText = new MutableLiveData<>(); 13 | mText.setValue("This is gallery fragment"); 14 | } 15 | 16 | public LiveData getText() { 17 | return mText; 18 | } 19 | } -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/java/aoce/samples/aoceswigtest/ui/slideshow/SlideshowViewModel.java: -------------------------------------------------------------------------------- 1 | package aoce.samples.aoceswigtest.ui.slideshow; 2 | 3 | import androidx.lifecycle.LiveData; 4 | import androidx.lifecycle.MutableLiveData; 5 | import androidx.lifecycle.ViewModel; 6 | 7 | public class SlideshowViewModel extends ViewModel { 8 | 9 | private MutableLiveData mText; 10 | 11 | public SlideshowViewModel() { 12 | mText = new MutableLiveData<>(); 13 | mText.setValue("This is slideshow fragment"); 14 | } 15 | 16 | public LiveData getText() { 17 | return mText; 18 | } 19 | } -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/drawable/ic_menu_camera.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/drawable/ic_menu_gallery.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/drawable/ic_menu_slideshow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/drawable/side_nav_bar.xml: -------------------------------------------------------------------------------- 1 | 3 | 9 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/layout/fragment_layer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/layout/fragment_paramet.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/layout/item_layer.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 16 | 17 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/layout/item_paramet_bool.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/layout/paramet_layer.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/menu/activity_main_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/menu/navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 8dp 6 | 176dp 7 | 16dp 8 | 16dp 9 | -------------------------------------------------------------------------------- /android/aoceswigtest/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':aoce' 2 | 3 | //include ":04_vulkantest" 4 | //project(":04_vulkantest").projectDir = new File("04_vulkantest") 5 | // 6 | //include ":05_livetest" 7 | //project(":05_livetest").projectDir = new File("05_livetest") 8 | // 9 | //include ":06_mediaplayer" 10 | //project(":06_mediaplayer").projectDir = new File("06_mediaplayer") 11 | // 12 | //include ":07_androidtest" 13 | //project(":07_androidtest").projectDir = new File("07_androidtest") 14 | // 15 | //include ":vulkanextratest" 16 | //project(":vulkanextratest").projectDir = new File("vulkanextratest") 17 | 18 | include ":aoceswigtest" 19 | project(":aoceswigtest").projectDir = new File("aoceswigtest") 20 | 21 | include ":aocencnntest" 22 | project(":aocencnntest").projectDir = new File("aocencnntest") 23 | 24 | -------------------------------------------------------------------------------- /android/vulkanextratest/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 打开 3 | vulkan 显示 4 | opengl es 显示 5 | 6 | 0 7 | -------------------------------------------------------------------------------- /aoce_android_install.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/aoce_android_install.jks -------------------------------------------------------------------------------- /assets/images/adaptiveThreshold1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/adaptiveThreshold1.png -------------------------------------------------------------------------------- /assets/images/android_build1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/android_build1.png -------------------------------------------------------------------------------- /assets/images/android_build2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/android_build2.png -------------------------------------------------------------------------------- /assets/images/android_build3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/android_build3.png -------------------------------------------------------------------------------- /assets/images/android_build4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/android_build4.png -------------------------------------------------------------------------------- /assets/images/android_build5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/android_build5.png -------------------------------------------------------------------------------- /assets/images/cs_time_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_1.png -------------------------------------------------------------------------------- /assets/images/cs_time_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_10.png -------------------------------------------------------------------------------- /assets/images/cs_time_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_11.png -------------------------------------------------------------------------------- /assets/images/cs_time_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_12.png -------------------------------------------------------------------------------- /assets/images/cs_time_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_13.png -------------------------------------------------------------------------------- /assets/images/cs_time_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_14.png -------------------------------------------------------------------------------- /assets/images/cs_time_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_15.png -------------------------------------------------------------------------------- /assets/images/cs_time_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_16.png -------------------------------------------------------------------------------- /assets/images/cs_time_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_17.png -------------------------------------------------------------------------------- /assets/images/cs_time_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_18.png -------------------------------------------------------------------------------- /assets/images/cs_time_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_19.png -------------------------------------------------------------------------------- /assets/images/cs_time_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_2.png -------------------------------------------------------------------------------- /assets/images/cs_time_3_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_3_0.png -------------------------------------------------------------------------------- /assets/images/cs_time_3_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_3_1.png -------------------------------------------------------------------------------- /assets/images/cs_time_3_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_3_2.png -------------------------------------------------------------------------------- /assets/images/cs_time_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_4.png -------------------------------------------------------------------------------- /assets/images/cs_time_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_5.png -------------------------------------------------------------------------------- /assets/images/cs_time_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_6.png -------------------------------------------------------------------------------- /assets/images/cs_time_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_7.png -------------------------------------------------------------------------------- /assets/images/cs_time_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_8.png -------------------------------------------------------------------------------- /assets/images/cs_time_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/cs_time_9.png -------------------------------------------------------------------------------- /assets/images/gaussianA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/gaussianA.png -------------------------------------------------------------------------------- /assets/images/gaussianB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/gaussianB.png -------------------------------------------------------------------------------- /assets/images/guided_process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/guided_process.png -------------------------------------------------------------------------------- /assets/images/guidedtest_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/guidedtest_1.png -------------------------------------------------------------------------------- /assets/images/guidedtest_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/guidedtest_2.png -------------------------------------------------------------------------------- /assets/images/guidedtest_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/guidedtest_3.png -------------------------------------------------------------------------------- /assets/images/guidedtest_nsight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/guidedtest_nsight.png -------------------------------------------------------------------------------- /assets/images/harris_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/harris_1.jpg -------------------------------------------------------------------------------- /assets/images/layers_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/layers_demo.png -------------------------------------------------------------------------------- /assets/images/lookup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/lookup.png -------------------------------------------------------------------------------- /assets/images/lookup_amatorka.binary: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/lookup_amatorka.binary -------------------------------------------------------------------------------- /assets/images/lookup_amatorka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/lookup_amatorka.png -------------------------------------------------------------------------------- /assets/images/toy-mask.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/toy-mask.bmp -------------------------------------------------------------------------------- /assets/images/toy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/images/toy.bmp -------------------------------------------------------------------------------- /assets/net/face.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/net/face.bin -------------------------------------------------------------------------------- /assets/net/pfld-sim.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/net/pfld-sim.bin -------------------------------------------------------------------------------- /assets/net/rvm-512.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/net/rvm-512.bin -------------------------------------------------------------------------------- /assets/net/slim_320.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/assets/net/slim_320.bin -------------------------------------------------------------------------------- /cmake/AoceBuildSettings.h.in: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #cmakedefine AOCE_INSTALL_AGORA 4 | #cmakedefine AOCE_INSTALL_FFMPEG 5 | 6 | #define AOCE_USE_STATIC @AOCE_SET_STATIC@ 7 | 8 | -------------------------------------------------------------------------------- /cmake/FindAgora.cmake: -------------------------------------------------------------------------------- 1 | 2 | include(AoceHelper) 3 | 4 | start_android_find_host() 5 | 6 | set(Agora_PREFIX_PATH ${AOCE_THIRDPARTY_PATH}/agora) 7 | 8 | create_search_paths(Agora) 9 | 10 | find_path(Agora_INCLUDE_DIR NAME AgoraBase.h HINTS ${Agora_INC_SEARCH_PATH} PATH_SUFFIXES) 11 | 12 | # message(STATUS "agora include:" ${Agora_INC_SEARCH_PATH}) 13 | 14 | if(WIN32) 15 | find_library(Agora_LIBRARYS NAME agora_rtc_sdk HINTS ${Agora_LIB_SEARCH_PATH} PATH_SUFFIXES) 16 | find_file(Agora_BINARYS NAME "agora_rtc_sdk.dll" HINTS ${Agora_BIN_SEARCH_PATH} PATH_SUFFIXES) 17 | elseif(ANDROID) 18 | find_library(Agora_LIBRARYS NAME agora-rtc-sdk-jni HINTS ${Agora_LIB_SEARCH_PATH} PATH_SUFFIXES ${ANDROID_ABI}) 19 | endif() 20 | 21 | # message(STATUS "agora bin " ${Agora_BIN_SEARCH_PATH}) 22 | 23 | if(Agora_INCLUDE_DIR AND Agora_LIBRARYS) 24 | set(Agora_FOUND TRUE) 25 | set(Agora_INCLUDE_DIRS ${Agora_INCLUDE_DIR}) 26 | endif() 27 | 28 | end_android_find_host() 29 | 30 | -------------------------------------------------------------------------------- /cmake/FindRealsense.cmake: -------------------------------------------------------------------------------- 1 | 2 | include(AoceHelper) 3 | 4 | set(Realsense_PREFIX_PATH ${AOCE_THIRDPARTY_PATH}/realsense) 5 | 6 | create_search_paths(Realsense) 7 | 8 | find_path(Realsense_INCLUDE_DIR NAMES "librealsense2/rs.h" HINTS ${Realsense_INC_SEARCH_PATH} PATH_SUFFIXES) 9 | 10 | message(STATUS "realsense include: " ${Realsense_INCLUDE_DIR}) 11 | 12 | find_library(Realsense_LIBRARYS NAME realsense2 HINTS ${Realsense_LIB_SEARCH_PATH} PATH_SUFFIXES) 13 | find_file(Realsense_BINARYS NAME "realsense2.dll" HINTS ${Realsense_BIN_SEARCH_PATH} PATH_SUFFIXES) 14 | 15 | message(STATUS "realsense bin: " ${Realsense_LIB_SEARCH_PATH}) 16 | 17 | if(Realsense_INCLUDE_DIR AND Realsense_LIBRARYS) 18 | set(Realsense_FOUND TRUE) 19 | set(Realsense_INCLUDE_DIRS ${Agora_INCLUDE_DIR}) 20 | endif() 21 | -------------------------------------------------------------------------------- /code/README.md: -------------------------------------------------------------------------------- 1 | # aoce 2 | 3 | ## 框架数据流程 4 | 5 | 数据提供现主要包含如下三种. 6 | 7 | 1. 摄像头,在win端,有aoce_win_mf模块提供,在android端,有aoce_android提供. 8 | 9 | 2. 对于多媒体文件(本地多媒体,RTMP等),由aoce_ffmpeg(win/android都支持)提供解码. 10 | 11 | 3. 直接非压缩的图像二进制数据. 12 | 13 | 数据处理模块现有aoce_cuda/aoce_vulkan模块处理,win端现支持这二个模块,而android端只支持aoce_vulkan模块. 14 | 15 | 如果数据提供的是桢数据,对应摄像头/多媒体模块都会解析到VideoFrame并给出回调,而在数据处理模块会有InputLayer层,专门用来接收上面三种数据. 16 | 17 | 而处理后数据会根据对应OutputLayer需要,导出CPU数据以及GPU数据对接对应系统常用渲染引擎对应纹理上,如在win端,aoce_cuda/aoce_vulkan模块的OutputLayer都支持直接导致到对应DX11纹理,而在android上,aoce_vulkan能直接导致到对应opengl es纹理上,这样就能直接与对应引擎(UE4/Unity3D)底层进行对接. 18 | 19 | ## 框架导出 20 | 21 | 拿到源码自己编译,模块内部之间可以随便使用导出类. 22 | 23 | 如果导出给外部用户使用,需要严格控制只能导出纯净抽像类,或者使用C导出. 24 | -------------------------------------------------------------------------------- /code/aoce/README.md: -------------------------------------------------------------------------------- 1 | # aoce 项目所有主要接口定义 2 | 3 | ## 主要模块 4 | 5 | ### Layer 各种GPGPU图像计算层接口层 6 | 7 | 相对于oeip里的每层隐藏,只有一个更新参数,我发现这种方式对于复杂层来说,限制太大.现放出各种实现层,每层可以定义自己复杂方法接口,并且可以方便自己实现对应的cuda/vulkan层,其对应层基类可以方便拿到上下文需要的信息. 8 | 9 | ### Live 直播模块定义层 10 | 11 | ### Media 音视频资源播放接口层 12 | 13 | ### Module 模块加载与定义 14 | 15 | ### VideoDevice 图像获取设备 16 | 17 | ### fixgraph 组合一些常用的图像计算层 18 | 19 | ## 不定 20 | 21 | ### PipeNode/ILayer 有没必要合成一个类 22 | 23 | 首先这二个类,如果构造复杂,PipeNode用于控制在graph里的节点操作,ILayer用于GPU层运算,二者功能并没需要合并的地方.但是一般要声明这二个类,这二个类又是一对一那种. 24 | 25 | 暂时决定不合并,合并以后应该问题会更多. 26 | 27 | ### 是否应该专门有个类PipeNodeGroup或是LayerGroup,用来处理层内多层的情况,有些类似函数由许多函数组成,有什么好的方法了? 28 | -------------------------------------------------------------------------------- /code/aoce/audiodevice/AudioDevice.cpp: -------------------------------------------------------------------------------- 1 | #include "AudioDevice.hpp" 2 | 3 | namespace aoce { 4 | 5 | AudioDevice::AudioDevice(/* args */) {} 6 | 7 | AudioDevice::~AudioDevice() {} 8 | 9 | AudioDeviceType AudioDevice::getDeviceType() { return deviceType; } 10 | 11 | const char* AudioDevice::getName() { return name.c_str(); } 12 | 13 | const char* AudioDevice::getId() { return id.c_str(); } 14 | 15 | void AudioDevice::setObserver(IAudioDeviceObserver* observer) { 16 | this->observer = observer; 17 | } 18 | 19 | const AudioFormat& AudioDevice::getAudioFormat() { return audioFormat; } 20 | 21 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/audiodevice/AudioDevice.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | #include "../Aoce.hpp" 6 | // #include 7 | #include 8 | 9 | namespace aoce { 10 | 11 | class ACOE_EXPORT AudioDevice : public IVideoDevice { 12 | private: 13 | /* data */ 14 | std::string name = ""; 15 | std::string id = ""; 16 | AudioFormat audioFormat = {}; 17 | 18 | IAudioDeviceObserver* observer = nullptr; 19 | AudioDeviceType deviceType = AudioDeviceType::other; 20 | 21 | public: 22 | AudioDevice(/* args */); 23 | virtual ~AudioDevice(); 24 | 25 | public: 26 | virtual AudioDeviceType getDeviceType() final; 27 | virtual const char* getName() final; 28 | virtual const char* getId() final; 29 | 30 | virtual void setObserver(IAudioDeviceObserver* observer) final; 31 | // 初始化后得到使用格式 32 | virtual const AudioFormat& getAudioFormat() final; 33 | }; 34 | 35 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/fixgraph/VideoView.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "../layer/PipeGraph.hpp" 4 | 5 | namespace aoce { 6 | 7 | // 一个根据VideoFrame自动计算格式输出RGBA的图表 8 | class ACOE_EXPORT VideoView { 9 | private: 10 | /* data */ 11 | IPipeGraph* graph = nullptr; 12 | std::unique_ptr inputLayer = nullptr; 13 | std::unique_ptr outputLayer = nullptr; 14 | std::unique_ptr yuv2rgbLayer = nullptr; 15 | 16 | GpuType gpuType = GpuType::other; 17 | VideoFormat format = {}; 18 | 19 | public: 20 | VideoView(GpuType gpuType = GpuType::other); 21 | ~VideoView(); 22 | 23 | public: 24 | inline IOutputLayer* getOutputLayer() { return outputLayer.get(); } 25 | 26 | public: 27 | void runFrame(const VideoFrame& frame, bool special = false); 28 | }; 29 | 30 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/layer/OutputLayer.cpp: -------------------------------------------------------------------------------- 1 | #include "OutputLayer.hpp" 2 | 3 | namespace aoce { 4 | 5 | void OutputLayer::onImageProcessHandle(uint8_t* data, 6 | const ImageFormat& imageFormat, 7 | int32_t outIndex) { 8 | if (observer && data) { 9 | observer->onImageProcess(data, imageFormat, outIndex); 10 | } 11 | } 12 | 13 | void OutputLayer::onFormatChanged(const ImageFormat& imageFormat, 14 | int32_t outIndex) { 15 | if (observer) { 16 | observer->onFormatChanged(imageFormat, outIndex); 17 | } 18 | } 19 | 20 | void OutputLayer::setObserver(IOutputLayerObserver* observer) { 21 | this->observer = observer; 22 | } 23 | 24 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/math/WrapMat.cpp: -------------------------------------------------------------------------------- 1 | #include "WrapMat.hpp" 2 | 3 | namespace aoce { 4 | 5 | // 最小二乘法 https://www.it610.com/article/1278554388192837632.htm 6 | 7 | WrapMat getAffineTransform(const vec2 src[], const vec2 dst[]) { 8 | WrapMat mat = {}; 9 | double a[36] = {}; 10 | double b[6] = {0}; 11 | 12 | // for (int i = 0; i < 3; i++) { 13 | // int j = i * 12; 14 | // int k = i * 12 + 6; 15 | // a[j] = a[k + 3] = src1[i].x; 16 | // a[j + 1] = a[k + 4] = src1[i].y; 17 | // a[j + 2] = a[k + 5] = 1; 18 | // a[j + 3] = a[j + 4] = a[j + 5] = 0; 19 | // a[k] = a[k + 1] = a[k + 2] = 0; 20 | // b[i * 2] = src2[i].x; 21 | // b[i * 2 + 1] = src2[i].y; 22 | // } 23 | 24 | return mat; 25 | } 26 | 27 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/math/WrapMat.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../AoceMath.h" 3 | 4 | namespace aoce { 5 | 6 | WrapMat getAffineTransform(const vec2 src[], const vec2 dst[]); 7 | 8 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/media/AudioEncoder.cpp: -------------------------------------------------------------------------------- 1 | #include "AudioEncoder.hpp" 2 | 3 | namespace aoce { 4 | 5 | AudioEncoder::AudioEncoder() {} 6 | 7 | AudioEncoder::~AudioEncoder() {} 8 | 9 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/media/AudioEncoder.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../Aoce.hpp" 4 | 5 | namespace aoce { 6 | 7 | class ACOE_EXPORT AudioEncoder { 8 | protected: 9 | /* data */ 10 | AudioStream stream = {}; 11 | 12 | public: 13 | AudioEncoder(/* args */); 14 | virtual ~AudioEncoder(); 15 | 16 | public: 17 | bool configure(const AudioStream& stream) { 18 | this->stream = stream; 19 | if (stream.bitrate == 0) { 20 | this->stream.bitrate = 48000; 21 | } 22 | return onPrepare(); 23 | } 24 | 25 | protected: 26 | virtual bool onPrepare() = 0; 27 | 28 | public: 29 | virtual int32_t input(const AudioFrame& frame) = 0; 30 | }; 31 | 32 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/media/MediaHelper.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../Aoce.hpp" 4 | 5 | namespace aoce { 6 | 7 | ACOE_EXPORT MediaSourceType getMediaType(const std::string& str); 8 | 9 | ACOE_EXPORT std::string getAvformat(const std::string& uri); 10 | 11 | } -------------------------------------------------------------------------------- /code/aoce/media/MediaMuxer.cpp: -------------------------------------------------------------------------------- 1 | #include "MediaMuxer.hpp" 2 | 3 | namespace aoce { 4 | 5 | MediaMuxer::MediaMuxer(/* args */) {} 6 | 7 | MediaMuxer::~MediaMuxer() {} 8 | 9 | void MediaMuxer::setOutput(const char* path) { 10 | url = path; 11 | mediaType = getMediaType(url); 12 | } 13 | 14 | void MediaMuxer::setAudioStream(const AudioStream& stream) { 15 | audioStream = stream; 16 | bAudio = true; 17 | } 18 | 19 | void MediaMuxer::setVideoStream(const VideoStream& stream) { 20 | videoStream = stream; 21 | bVideo = true; 22 | } 23 | 24 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/media/MediaMuxer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../Aoce.hpp" 4 | #include "../module/FrameCount.hpp" 5 | #include "MediaHelper.hpp" 6 | 7 | namespace aoce { 8 | 9 | class ACOE_EXPORT MediaMuxer : public IMediaMuxer { 10 | protected: 11 | /* data */ 12 | std::string url = ""; 13 | AudioStream audioStream = {}; 14 | VideoStream videoStream = {}; 15 | bool bAudio = false; 16 | bool bVideo = false; 17 | MediaSourceType mediaType = MediaSourceType::other; 18 | //统计时间 19 | FrameCount videoFps = {}; 20 | //统计码率 21 | FrameCount videoRate = {}; 22 | 23 | public: 24 | MediaMuxer(/* args */); 25 | virtual ~MediaMuxer(); 26 | 27 | public: 28 | virtual void setOutput(const char* path) final; 29 | virtual void setAudioStream(const AudioStream& stream) final; 30 | virtual void setVideoStream(const VideoStream& stream) final; 31 | }; 32 | 33 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/media/MediaPlayer.cpp: -------------------------------------------------------------------------------- 1 | #include "MediaPlayer.hpp" 2 | 3 | #include 4 | 5 | namespace aoce { 6 | 7 | void MediaPlayer::setObserver(IMediaPlayerObserver* observer) { 8 | this->observer = observer; 9 | onSetObserver(); 10 | } 11 | 12 | void MediaPlayer::setDataSource(const char* path) { 13 | if (status != PlayStatus::idle) { 14 | logMessage(LogLevel::error, "media play current status is not idle"); 15 | } 16 | uri = path; 17 | mediaType = getMediaType(uri); 18 | onSetDataSource(); 19 | status = PlayStatus::init; 20 | } 21 | 22 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/media/VideoEncoder.cpp: -------------------------------------------------------------------------------- 1 | #include "VideoEncoder.hpp" 2 | 3 | namespace aoce { 4 | 5 | VideoEncoder::VideoEncoder() {} 6 | 7 | VideoEncoder::~VideoEncoder() {} 8 | 9 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/module/FrameCount.cpp: -------------------------------------------------------------------------------- 1 | #include "FrameCount.hpp" 2 | 3 | namespace aoce { 4 | 5 | FrameCount::FrameCount(/* args */) {} 6 | 7 | FrameCount::~FrameCount() {} 8 | 9 | void FrameCount::run() { 10 | run(0.f); 11 | } 12 | 13 | void FrameCount::run(float sum) { 14 | auto delta = getNowTimeStamp() - lastTime; 15 | //第一次或是间隔太久 16 | if (lastTime == 0 || delta > totalTime * 5) { 17 | lastTime = getNowTimeStamp(); 18 | runCount = 0; 19 | tempTime = 0; 20 | avageValue = 0.f; 21 | totalValue = 0.f; 22 | return; 23 | } 24 | runCount++; 25 | totalValue += sum; 26 | tempTime += delta; 27 | if (tempTime > totalTime) { 28 | tempTime -= totalTime; 29 | avageValue = totalValue / ((float)totalTime / 1000.f); 30 | fps = ((float)runCount) / ((float)totalTime / 1000.f); 31 | totalValue = 0; 32 | runCount = 0; 33 | } 34 | lastTime = getNowTimeStamp(); 35 | } 36 | 37 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/module/FrameCount.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../Aoce.hpp" 4 | namespace aoce { 5 | 6 | // 可用来统计桢率或是码率 7 | class ACOE_EXPORT FrameCount { 8 | private: 9 | /* data */ 10 | // 每次间隔时间 毫秒 11 | int64_t totalTime = 1000; 12 | float fps = 1.f; 13 | // 间隔时间内平均值 14 | float avageValue = 0.f; 15 | // 间隔时间内运行次数 16 | int32_t runCount = 0; 17 | float totalValue = 0.f; 18 | int64_t tempTime = 0; 19 | int64_t lastTime = 0; 20 | 21 | public: 22 | FrameCount(/* args */); 23 | ~FrameCount(); 24 | 25 | public: 26 | void run(); 27 | void run(float sum); 28 | // 统计的更新时间(默认一秒更新一次) 29 | inline void setDelteTime(int64_t ms) { totalTime = ms; } 30 | // 得到统计的平均桢率 31 | inline float getFps() { return fps; } 32 | // 得到每次运行传入sum(vaule)数据的平均值 33 | inline float getNum() { return avageValue; } 34 | }; 35 | 36 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/module/IModule.cpp: -------------------------------------------------------------------------------- 1 | #include "IModule.hpp" 2 | 3 | #include "ModuleManager.hpp" 4 | namespace aoce { 5 | IModule::IModule(/* args */) {} 6 | 7 | IModule::~IModule() {} 8 | 9 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce/module/IModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../Aoce.hpp" 4 | namespace aoce { 5 | 6 | class ACOE_EXPORT IModule { 7 | private: 8 | /* data */ 9 | void* handle; 10 | 11 | public: 12 | IModule(/* args */); 13 | virtual ~IModule(); 14 | 15 | public: 16 | // load module时调用 17 | virtual bool loadModule() { return false; }; 18 | // unload module时调用 19 | virtual void unloadModule(){}; 20 | }; 21 | 22 | } // namespace aoce 23 | -------------------------------------------------------------------------------- /code/aoce/videodevice/VideoManager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../Aoce.hpp" 3 | #include "VideoDevice.hpp" 4 | namespace aoce { 5 | 6 | class ACOE_EXPORT VideoManager : public IVideoManager { 7 | protected: 8 | /* data */ 9 | std::vector videoList; 10 | bool oldUpdate = false; 11 | 12 | public: 13 | VideoManager(/* args */); 14 | virtual ~VideoManager(); 15 | 16 | protected: 17 | virtual void getDevices(){}; 18 | 19 | public: 20 | const std::vector& getDeviceList(bool bUpdate = false); 21 | 22 | public: 23 | virtual int32_t getDeviceCount(bool bUpdate = false) override; 24 | // 得到所有支持的格式 25 | virtual void getDevices(IVideoDevice** videos, int32_t size, 26 | int32_t start = 0) override; 27 | virtual IVideoDevice* getDevice(int32_t index) override; 28 | }; 29 | 30 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_android/AVideoManager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "videodevice/VideoManager.hpp" 8 | 9 | namespace aoce { 10 | namespace android { 11 | 12 | class AVideoManager : public VideoManager { 13 | private: 14 | /* data */ 15 | ACameraManager* cameraManager = nullptr; 16 | ACameraIdList* cameraIdList = nullptr; 17 | public: 18 | AVideoManager(/* args */); 19 | virtual ~AVideoManager() override; 20 | 21 | protected: 22 | virtual void getDevices() override; 23 | }; 24 | 25 | } // namespace android 26 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_android/AndroidModule.cpp: -------------------------------------------------------------------------------- 1 | #include "AndroidModule.hpp" 2 | 3 | #include 4 | 5 | #include "AVideoManager.hpp" 6 | 7 | namespace aoce { 8 | namespace android { 9 | 10 | AndroidModule::AndroidModule(/* args */) {} 11 | 12 | AndroidModule::~AndroidModule() {} 13 | 14 | bool AndroidModule::loadModule() { 15 | AoceManager::Get().addVideoManager(CameraType::and_camera2, 16 | new AVideoManager()); 17 | return true; 18 | } 19 | 20 | void AndroidModule::unloadModule() { 21 | AoceManager::Get().removeVideoManager(CameraType::and_camera2); 22 | } 23 | 24 | ADD_MODULE(AndroidModule, aoce_android) 25 | 26 | } // namespace android 27 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_android/AndroidModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace aoce { 6 | namespace android { 7 | 8 | class AndroidModule : public IModule { 9 | private: 10 | /* data */ 11 | public: 12 | AndroidModule(/* args */); 13 | ~AndroidModule(); 14 | 15 | public: 16 | virtual bool loadModule() override; 17 | virtual void unloadModule() override; 18 | }; 19 | 20 | } // namespace android 21 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_android/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # https://www.sisik.eu/blog/android/ndk/camera 2 | # camera2ndk 3 | # mediandk 4 | include(AoceHelper) 5 | 6 | file(GLOB AOCE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" ) 7 | file(GLOB AOCE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 8 | 9 | include_directories(${AOCE_HEADER_DIR}) 10 | 11 | find_library(camera2ndk-lib camera2ndk) 12 | find_library(mediandk-lib mediandk) 13 | add_library(aoce_android SHARED ${AOCE_SOURCE} ${AOCE_HEADER}) 14 | target_link_libraries(aoce_android ${camera2ndk-lib} ${mediandk-lib} jnigraphics android aoce) -------------------------------------------------------------------------------- /code/aoce_cuda/CuLayerFactory.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "aoce/AoceCore.h" 4 | 5 | namespace aoce { 6 | namespace cuda { 7 | 8 | class CuLayerFactory : public LayerFactory { 9 | private: 10 | /* data */ 11 | public: 12 | CuLayerFactory(/* args */); 13 | virtual ~CuLayerFactory() override; 14 | 15 | public: 16 | virtual IInputLayer* createInput() override; 17 | virtual IOutputLayer* createOutput() override; 18 | virtual IYUVLayer* createYUV2RGBA() override; 19 | virtual IYUVLayer* createRGBA2YUV() override; 20 | virtual IMapChannelLayer* createMapChannel() override; 21 | virtual IFlipLayer* createFlip() override; 22 | virtual ITransposeLayer* createTranspose() override; 23 | virtual IReSizeLayer* createSize() override; 24 | virtual IBlendLayer* createBlend() override; 25 | }; 26 | 27 | } // namespace cuda 28 | } // namespace aoce 29 | -------------------------------------------------------------------------------- /code/aoce_cuda/CudaModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace aoce { 6 | namespace cuda { 7 | class CudaModule : public IModule { 8 | private: 9 | /* data */ 10 | public: 11 | CudaModule(/* args */); 12 | ~CudaModule(); 13 | 14 | public: 15 | virtual bool loadModule() override; 16 | virtual void unloadModule() override; 17 | }; 18 | } // namespace cuda 19 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_cuda/README.md: -------------------------------------------------------------------------------- 1 | # aoce_cuda 提供CUDA的aoce封装实现 2 | 3 | ## 主要改进 4 | 5 | opencv的cuda模块首先太大了,后续发展不确定,因此在aoce上去掉opencv相关的编译链接. 6 | 7 | 主要仿opencv里cuda模块的gpumat实现CudaMat/Operate,来方便C++/CUDA数据的传递,再次模仿opencv cuda模块来实现一些常用操作. 8 | -------------------------------------------------------------------------------- /code/aoce_cuda/layer/CuRGBA2YUVLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "CuLayer.hpp" 6 | 7 | namespace aoce { 8 | namespace cuda { 9 | 10 | class CuRGBA2YUVLayer : public CuLayer, public IYUVLayer { 11 | AOCE_LAYER_QUERYINTERFACE(CuRGBA2YUVLayer) 12 | private: 13 | /* data */ 14 | public: 15 | CuRGBA2YUVLayer(/* args */); 16 | ~CuRGBA2YUVLayer(); 17 | 18 | protected: 19 | virtual void onInitLayer() override; 20 | virtual bool onFrame() override; 21 | 22 | protected: 23 | virtual void onUpdateParamet() override; 24 | }; 25 | 26 | } // namespace cuda 27 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_cuda/layer/CuResizeLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "CuLayer.hpp" 6 | 7 | namespace aoce { 8 | namespace cuda { 9 | 10 | class CuResizeLayer : public CuLayer, public IReSizeLayer { 11 | AOCE_LAYER_QUERYINTERFACE(CuResizeLayer) 12 | private: 13 | /* data */ 14 | ImageType imageType = ImageType::rgba8; 15 | 16 | public: 17 | CuResizeLayer(); 18 | CuResizeLayer(ImageType imageType); 19 | virtual ~CuResizeLayer(); 20 | 21 | protected: 22 | virtual void onInitLayer() override; 23 | virtual bool onFrame() override; 24 | 25 | protected: 26 | virtual void onUpdateParamet() override; 27 | }; 28 | 29 | } // namespace cuda 30 | } // namespace aoce 31 | -------------------------------------------------------------------------------- /code/aoce_cuda/layer/CuYUV2RGBALayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #include "CuLayer.hpp" 5 | 6 | namespace aoce { 7 | namespace cuda { 8 | 9 | class CuYUV2RGBALayer : public CuLayer, public IYUVLayer { 10 | AOCE_LAYER_QUERYINTERFACE(CuYUV2RGBALayer) 11 | private: 12 | /* data */ 13 | public: 14 | CuYUV2RGBALayer(/* args */); 15 | ~CuYUV2RGBALayer(); 16 | 17 | protected: 18 | virtual void onInitLayer() override; 19 | virtual bool onFrame() override; 20 | 21 | protected: 22 | virtual void onUpdateParamet() override; 23 | }; 24 | 25 | } // namespace cuda 26 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_ffmpeg/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | find_package(FFmpeg) 3 | 4 | if(NOT FFmpeg_FOUND) 5 | message(FATAL_ERROR "FFmpeg not find.please set option AOCE_INSTALL_FFMPEG false") 6 | endif() 7 | 8 | include_directories(${FFMPEG_INCLUDE_DIRS} ${AOCE_HEADER_DIR}) 9 | 10 | file(GLOB AOCE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" ) 11 | file(GLOB AOCE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 12 | 13 | add_sub_path(media AOCE_HEADER AOCE_SOURCE) 14 | 15 | add_library(aoce_ffmpeg SHARED ${AOCE_SOURCE} ${AOCE_HEADER}) 16 | target_link_libraries(aoce_ffmpeg aoce ${FFMPEG_LIBRARIES}) 17 | aoce_output(aoce_ffmpeg) 18 | install_aoce_module(aoce_ffmpeg FLASE) 19 | 20 | if(WIN32) 21 | message(STATUS "ffmpeg dll path: " ${FFMPEG_BINARYS}) 22 | file(COPY ${FFMPEG_BINARYS} DESTINATION "${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}") 23 | endif() -------------------------------------------------------------------------------- /code/aoce_ffmpeg/FFmpegModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace aoce { 6 | class FFmpegModule : public IModule { 7 | private: 8 | /* data */ 9 | public: 10 | FFmpegModule(/* args */); 11 | virtual ~FFmpegModule() override; 12 | 13 | public: 14 | virtual bool loadModule() override; 15 | virtual void unloadModule() override; 16 | }; 17 | 18 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_ffmpeg/FMediaFactory.cpp: -------------------------------------------------------------------------------- 1 | #include "FMediaFactory.hpp" 2 | 3 | #include "media/FMediaMuxer.hpp" 4 | #include "media/FMediaPlayer.hpp" 5 | 6 | namespace aoce { 7 | namespace ffmpeg { 8 | 9 | FMediaFactory::FMediaFactory(/* args */) {} 10 | 11 | FMediaFactory::~FMediaFactory() {} 12 | 13 | IMediaPlayer* FMediaFactory::createPlay() { return new FMediaPlayer(); } 14 | 15 | IMediaMuxer* FMediaFactory::createMuxer() { return new FMediaMuxer(); } 16 | 17 | } // namespace ffmpeg 18 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_ffmpeg/FMediaFactory.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace aoce { 6 | namespace ffmpeg { 7 | 8 | class FMediaFactory : public MediaFactory { 9 | private: 10 | /* data */ 11 | public: 12 | FMediaFactory(/* args */); 13 | virtual ~FMediaFactory() override; 14 | 15 | public: 16 | virtual IMediaPlayer* createPlay() override; 17 | virtual IMediaMuxer* createMuxer() override; 18 | }; 19 | 20 | } // namespace ffmpeg 21 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_ffmpeg/media/FH264Encoder.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include "../AoceFFmpeg.hpp" 7 | 8 | namespace aoce { 9 | namespace ffmpeg { 10 | 11 | class FH264Encoder : public VideoEncoder { 12 | private: 13 | /* data */ 14 | OAVCodecContext cdeCtx = nullptr; 15 | OAVFrame frame = nullptr; 16 | RateControl rate = RateControl::vbr; 17 | int64_t totalFrame = 0; 18 | 19 | public: 20 | FH264Encoder(/* args */); 21 | virtual ~FH264Encoder(); 22 | 23 | public: 24 | AVCodecContext* getCodecCtx() { return cdeCtx.get(); } 25 | 26 | protected: 27 | virtual bool onPrepare() override; 28 | 29 | public: 30 | virtual int32_t input(const VideoFrame& frame) override; 31 | 32 | }; 33 | 34 | } // namespace ffmpeg 35 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_ncnn/AoceInterop.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "AoceNcnnExport.h" 4 | #include "net.h" 5 | 6 | namespace aoce { 7 | 8 | class AoceInterop { 9 | private: 10 | /* data */ 11 | public: 12 | AoceInterop(/* args */); 13 | ~AoceInterop(); 14 | 15 | public: 16 | void getTest(ncnn::Net* net); 17 | }; 18 | 19 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_ncnn/VkNcnnModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace aoce { 6 | 7 | 8 | class VkNcnnModule : public IModule { 9 | private: 10 | /* data */ 11 | public: 12 | VkNcnnModule(/* args */); 13 | virtual ~VkNcnnModule(); 14 | 15 | public: 16 | virtual bool loadModule() override; 17 | virtual void unloadModule() override; 18 | }; 19 | 20 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/VkLayerFactory.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "aoce/AoceCore.h" 4 | 5 | namespace aoce { 6 | namespace vulkan { 7 | namespace layer { 8 | 9 | class VkLayerFactory : public LayerFactory { 10 | private: 11 | /* data */ 12 | public: 13 | VkLayerFactory(/* args */); 14 | virtual ~VkLayerFactory() override; 15 | 16 | public: 17 | virtual IInputLayer* createInput() override; 18 | virtual IOutputLayer* createOutput() override; 19 | virtual IYUVLayer* createYUV2RGBA() override; 20 | virtual IYUVLayer* createRGBA2YUV() override; 21 | virtual IMapChannelLayer* createMapChannel() override; 22 | virtual IFlipLayer* createFlip() override; 23 | virtual ITransposeLayer* createTranspose() override; 24 | virtual IReSizeLayer* createSize() override; 25 | virtual IBlendLayer* createBlend() override; 26 | }; 27 | 28 | } // namespace layer 29 | } // namespace vulkan 30 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/VulkanModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace aoce { 6 | namespace vulkan { 7 | class VulkanModule : public IModule { 8 | private: 9 | /* data */ 10 | public: 11 | VulkanModule(/* args */); 12 | ~VulkanModule(); 13 | 14 | public: 15 | virtual bool loadModule() override; 16 | virtual void unloadModule() override; 17 | }; 18 | } // namespace vulkan 19 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/layer/VkBlendLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "VkLayer.hpp" 4 | 5 | namespace aoce { 6 | namespace vulkan { 7 | namespace layer { 8 | 9 | struct VkBlendParamet { 10 | // 0 11 | float fx; 12 | float fy; 13 | // 0 14 | float centerX; 15 | float centerY; 16 | float width; 17 | float height; 18 | // 不透明 19 | float opacity; 20 | }; 21 | 22 | class VkBlendLayer : public VkLayer, public IBlendLayer { 23 | AOCE_LAYER_QUERYINTERFACE(VkBlendLayer) 24 | private: 25 | VkBlendParamet vkParamet = {}; 26 | 27 | public: 28 | VkBlendLayer(/* args */); 29 | ~VkBlendLayer(); 30 | 31 | private: 32 | void parametTransform(); 33 | 34 | protected: 35 | virtual void onUpdateParamet() override; 36 | virtual bool getSampled(int inIndex) override; 37 | }; 38 | 39 | } // namespace layer 40 | } // namespace vulkan 41 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/layer/VkHelper.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../vulkan/VulkanContext.hpp" 4 | 5 | namespace aoce { 6 | namespace vulkan { 7 | namespace layer { 8 | 9 | AOCE_VULKAN_EXPORT VkFormat ImageFormat2Vk(ImageType imageType); 10 | 11 | } 12 | } // namespace vulkan 13 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/layer/VkOperateLayer.cpp: -------------------------------------------------------------------------------- 1 | #include "VkOperateLayer.hpp" 2 | 3 | namespace aoce { 4 | namespace vulkan { 5 | namespace layer { 6 | 7 | VkMapChannelLayer::VkMapChannelLayer(/* args */) { 8 | glslPath = "glsl/mapChannel.comp.spv"; 9 | setUBOSize(sizeof(paramet), true); 10 | updateUBO(¶met); 11 | } 12 | 13 | VkMapChannelLayer::~VkMapChannelLayer() {} 14 | 15 | VkFlipLayer::VkFlipLayer(/* args */) { 16 | glslPath = "glsl/flip.comp.spv"; 17 | setUBOSize(sizeof(paramet), true); 18 | updateUBO(¶met); 19 | } 20 | 21 | VkFlipLayer::~VkFlipLayer() {} 22 | 23 | // VkOperateLayer::VkOperateLayer(/* args */) { 24 | // glslPath = "glsl/operate.comp.spv"; 25 | // setUBOSize(sizeof(paramet), true); 26 | // updateUBO(¶met); 27 | // } 28 | 29 | // VkOperateLayer::~VkOperateLayer() {} 30 | 31 | } // namespace layer 32 | } // namespace vulkan 33 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/layer/VkRGBA2YUVLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #include "VkLayer.hpp" 5 | 6 | namespace aoce { 7 | namespace vulkan { 8 | namespace layer { 9 | class VkRGBA2YUVLayer : public VkLayer, public IYUVLayer { 10 | AOCE_LAYER_QUERYINTERFACE(VkRGBA2YUVLayer) 11 | private: 12 | /* data */ 13 | std::unique_ptr kernelBuffer; 14 | public: 15 | VkRGBA2YUVLayer(/* args */); 16 | ~VkRGBA2YUVLayer(); 17 | 18 | protected: 19 | virtual void onUpdateParamet() override; 20 | virtual void onInitLayer() override; 21 | 22 | }; 23 | 24 | } // namespace layer 25 | } // namespace vulkan 26 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/layer/VkTransposeLayer.cpp: -------------------------------------------------------------------------------- 1 | #include "VkTransposeLayer.hpp" 2 | 3 | namespace aoce { 4 | namespace vulkan { 5 | namespace layer { 6 | 7 | VkTransposeLayer::VkTransposeLayer(/* args */) { 8 | glslPath = "glsl/transpose.comp.spv"; 9 | setUBOSize(sizeof(TransposeParamet), true); 10 | updateUBO(¶met); 11 | } 12 | 13 | VkTransposeLayer::~VkTransposeLayer() {} 14 | 15 | void VkTransposeLayer::onInitLayer() { 16 | outFormats[0].width = inFormats[0].height; 17 | outFormats[0].height = inFormats[0].width; 18 | sizeX = divUp(outFormats[0].width, groupX); 19 | sizeY = divUp(outFormats[0].height, groupY); 20 | } 21 | 22 | } // namespace layer 23 | } // namespace vulkan 24 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/layer/VkTransposeLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "VkLayer.hpp" 4 | 5 | namespace aoce { 6 | namespace vulkan { 7 | namespace layer { 8 | 9 | class VkTransposeLayer : public VkLayer, public ITransposeLayer { 10 | AOCE_LAYER_QUERYINTERFACE(VkTransposeLayer) 11 | AOCE_VULKAN_PARAMETUPDATE() 12 | private: 13 | /* data */ 14 | public: 15 | VkTransposeLayer(/* args */); 16 | ~VkTransposeLayer(); 17 | 18 | public: 19 | virtual void onInitLayer() override; 20 | }; 21 | 22 | } // namespace layer 23 | } // namespace vulkan 24 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/layer/VkYUV2RGBALayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #include "VkLayer.hpp" 5 | 6 | namespace aoce { 7 | namespace vulkan { 8 | namespace layer { 9 | class VkYUV2RGBALayer : public VkLayer, public IYUVLayer { 10 | AOCE_LAYER_QUERYINTERFACE(VkYUV2RGBALayer) 11 | private: 12 | /* data */ 13 | public: 14 | VkYUV2RGBALayer(/* args */); 15 | ~VkYUV2RGBALayer(); 16 | 17 | protected: 18 | 19 | virtual void onUpdateParamet() override; 20 | virtual void onInitLayer() override; 21 | }; 22 | 23 | } // namespace layer 24 | } // namespace vulkan 25 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/vulkan/VulkanShader.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include "VulkanCommon.hpp" 7 | namespace aoce { 8 | namespace vulkan { 9 | 10 | class AOCE_VULKAN_EXPORT VulkanShader { 11 | private: 12 | /* data */ 13 | VkDevice device = VK_NULL_HANDLE; 14 | VkShaderModule shaderModule = VK_NULL_HANDLE; 15 | 16 | public: 17 | VulkanShader(/* args */); 18 | ~VulkanShader(); 19 | 20 | public: 21 | VkPipelineShaderStageCreateInfo shaderStage = {}; 22 | 23 | private: 24 | void release(); 25 | 26 | public: 27 | void loadShaderModule( 28 | VkDevice device, std::string path, 29 | VkShaderStageFlagBits shaderFlag = VK_SHADER_STAGE_COMPUTE_BIT); 30 | }; 31 | 32 | } // namespace vulkan 33 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan/win32/Win32Window.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | 5 | namespace aoce { 6 | namespace vulkan { 7 | class Win32Window { 8 | private: 9 | /* data */ 10 | public: 11 | Win32Window(/* args */); 12 | ~Win32Window(); 13 | 14 | public: 15 | HWND hwnd; 16 | 17 | public: 18 | HWND initWindow(HINSTANCE inst, int width, int height, const char* name, 19 | class VulkanWindow* swapChain); 20 | }; 21 | } // namespace common 22 | } // namespace vulkanx -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/VkExtraModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace aoce { 6 | namespace vulkan { 7 | 8 | class VkExtraModule : public IModule { 9 | private: 10 | /* data */ 11 | public: 12 | VkExtraModule(/* args */); 13 | virtual ~VkExtraModule(); 14 | 15 | public: 16 | virtual bool loadModule() override; 17 | virtual void unloadModule() override; 18 | }; 19 | 20 | } // namespace vulkan 21 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkBilateralLayer.cpp: -------------------------------------------------------------------------------- 1 | #include "VkBilateralLayer.hpp" 2 | 3 | namespace aoce { 4 | namespace vulkan { 5 | namespace layer { 6 | VkBilateralLayer::VkBilateralLayer(/* args */) { 7 | glslPath = "glsl/bilateral.comp.spv"; 8 | setUBOSize(sizeof(paramet)); 9 | transformParamet(); 10 | } 11 | 12 | VkBilateralLayer::~VkBilateralLayer() {} 13 | 14 | void VkBilateralLayer::transformParamet() { 15 | BilateralParamet tparamet = {}; 16 | tparamet.kernelSize = paramet.kernelSize; 17 | tparamet.sigma_color = -0.5f / (paramet.sigma_color * paramet.sigma_color); 18 | tparamet.sigma_spatial = 19 | -0.5f / (paramet.sigma_spatial * paramet.sigma_spatial); 20 | updateUBO(&tparamet); 21 | } 22 | 23 | void VkBilateralLayer::onUpdateParamet() { 24 | if (paramet == oldParamet) { 25 | return; 26 | } 27 | transformParamet(); 28 | } 29 | 30 | } // namespace layer 31 | } // namespace vulkan 32 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkBilateralLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "../VkExtraExport.h" 6 | #include "aoce_vulkan/layer/VkLayer.hpp" 7 | 8 | namespace aoce { 9 | namespace vulkan { 10 | namespace layer { 11 | 12 | // 双边滤波 13 | class VkBilateralLayer : public VkLayer, public ITLayer { 14 | AOCE_LAYER_QUERYINTERFACE(VkBilateralLayer) 15 | private: 16 | /* data */ 17 | public: 18 | VkBilateralLayer(/* args */); 19 | virtual ~VkBilateralLayer(); 20 | 21 | private: 22 | void transformParamet(); 23 | 24 | protected: 25 | virtual void onUpdateParamet() override; 26 | }; 27 | 28 | } // namespace layer 29 | } // namespace vulkan 30 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkConvertImageLayer.cpp: -------------------------------------------------------------------------------- 1 | #include "VkConvertImageLayer.hpp" 2 | 3 | namespace aoce { 4 | namespace vulkan { 5 | namespace layer { 6 | 7 | VkConvertImageLayer::VkConvertImageLayer(ConvertType convert) { 8 | this->convert = convert; 9 | glslPath = "glsl/convertImage.comp.spv"; 10 | if (convert == ConvertType::rgba32f2rgba8) { 11 | glslPath = "glsl/convertImageF4.comp.spv"; 12 | } 13 | } 14 | 15 | VkConvertImageLayer::~VkConvertImageLayer() {} 16 | 17 | void VkConvertImageLayer::onInitGraph() { 18 | VkLayer::onInitGraph(); 19 | inFormats[0].imageType = ImageType::rgba8; 20 | outFormats[0].imageType = ImageType::rgba32f; 21 | if (convert == ConvertType::rgba32f2rgba8) { 22 | inFormats[0].imageType = ImageType::rgba32f; 23 | outFormats[0].imageType = ImageType::rgba8; 24 | } 25 | } 26 | 27 | } // namespace layer 28 | } // namespace vulkan 29 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkConvertImageLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "../VkExtraExport.h" 6 | #include "aoce_vulkan/layer/VkLayer.hpp" 7 | 8 | namespace aoce { 9 | namespace vulkan { 10 | namespace layer { 11 | 12 | // RGBA8->RGBA32F 13 | class VkConvertImageLayer : public VkLayer { 14 | AOCE_LAYER_GETNAME(VkConvertImageLayer) 15 | private: 16 | /* data */ 17 | ConvertType convert = ConvertType::rgba82rgba32f; 18 | 19 | public: 20 | VkConvertImageLayer(ConvertType convert = ConvertType::rgba82rgba32f); 21 | virtual ~VkConvertImageLayer(); 22 | 23 | protected: 24 | virtual void onInitGraph() override; 25 | }; 26 | 27 | } // namespace layer 28 | } // namespace vulkan 29 | } // namespace aoce 30 | -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkCropLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "../VkExtraExport.h" 6 | #include "aoce_vulkan/layer/VkLayer.hpp" 7 | 8 | namespace aoce { 9 | namespace vulkan { 10 | namespace layer { 11 | 12 | class VkCropLayer : public VkLayer, public ITLayer { 13 | AOCE_LAYER_QUERYINTERFACE(VkCropLayer) 14 | private: 15 | /* data */ 16 | public: 17 | VkCropLayer(/* args */); 18 | ~VkCropLayer(); 19 | 20 | private: 21 | bool parametTransform(); 22 | 23 | protected: 24 | virtual void onUpdateParamet() override; 25 | virtual void onInitLayer() override; 26 | }; 27 | 28 | } // namespace layer 29 | } // namespace vulkan 30 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkImageProcessing.cpp: -------------------------------------------------------------------------------- 1 | #include "VkImageProcessing.hpp" 2 | 3 | namespace aoce { 4 | namespace vulkan { 5 | namespace layer { 6 | 7 | VkSharpenLayer::VkSharpenLayer(/* args */) { 8 | glslPath = "glsl/sharpen.comp.spv"; 9 | setUBOSize(sizeof(paramet), true); 10 | updateUBO(¶met); 11 | } 12 | 13 | VkSharpenLayer::~VkSharpenLayer() {} 14 | 15 | VkColorLBPLayer::VkColorLBPLayer(/* args */) { 16 | glslPath = "glsl/colorLocalBinaryPattern.comp.spv"; 17 | } 18 | 19 | VkColorLBPLayer::~VkColorLBPLayer() {} 20 | 21 | } // namespace layer 22 | } // namespace vulkan 23 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkImageProcessing.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "../VkExtraExport.h" 6 | #include "aoce_vulkan/layer/VkLayer.hpp" 7 | 8 | namespace aoce { 9 | namespace vulkan { 10 | namespace layer { 11 | 12 | class VkSharpenLayer : public VkLayer, public ITLayer { 13 | AOCE_LAYER_QUERYINTERFACE(VkSharpenLayer) 14 | AOCE_VULKAN_PARAMETUPDATE() 15 | private: 16 | /* data */ 17 | public: 18 | VkSharpenLayer(/* args */); 19 | ~VkSharpenLayer(); 20 | }; 21 | 22 | class VkColorLBPLayer : public VkLayer { 23 | AOCE_LAYER_GETNAME(VkColorLBPLayer) 24 | private: 25 | /* data */ 26 | public: 27 | VkColorLBPLayer(/* args */); 28 | virtual ~VkColorLBPLayer(); 29 | }; 30 | 31 | 32 | } // namespace layer 33 | } // namespace vulkan 34 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkPerlinNoiseLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../VkExtraExport.h" 4 | #include "aoce_vulkan/layer/VkLayer.hpp" 5 | 6 | namespace aoce { 7 | namespace vulkan { 8 | namespace layer { 9 | 10 | class VkPerlinNoiseLayer : public VkLayer, public IPerlinNoiseLayer { 11 | AOCE_LAYER_QUERYINTERFACE(VkPerlinNoiseLayer) 12 | AOCE_VULKAN_PARAMETUPDATE() 13 | private: 14 | /* data */ 15 | int32_t width = 0; 16 | int32_t height = 0; 17 | 18 | public: 19 | VkPerlinNoiseLayer(/* args */); 20 | ~VkPerlinNoiseLayer(); 21 | 22 | public: 23 | virtual void setImageSize(int32_t width, int32_t height) override; 24 | virtual void onInitGraph() override; 25 | virtual void onInitLayer() override; 26 | }; 27 | 28 | } // namespace layer 29 | } // namespace vulkan 30 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkSphereLayer.cpp: -------------------------------------------------------------------------------- 1 | #include "VkSphereLayer.hpp" 2 | 3 | namespace aoce { 4 | namespace vulkan { 5 | namespace layer { 6 | 7 | VkSphereRefractionLayer::VkSphereRefractionLayer(/* args */) { 8 | glslPath = "glsl/sphereRefraction.comp.spv"; 9 | setUBOSize(sizeof(paramet), true); 10 | updateUBO(¶met); 11 | } 12 | 13 | VkSphereRefractionLayer::~VkSphereRefractionLayer() {} 14 | 15 | bool VkSphereRefractionLayer::getSampled(int32_t inIndex) { 16 | return inIndex == 0; 17 | } 18 | 19 | VkGlassSphereLayer::VkGlassSphereLayer(/* args */) { 20 | glslPath = "glsl/glassSphere.comp.spv"; 21 | setUBOSize(sizeof(paramet), true); 22 | updateUBO(¶met); 23 | } 24 | 25 | VkGlassSphereLayer::~VkGlassSphereLayer() {} 26 | 27 | bool VkGlassSphereLayer::getSampled(int32_t inIndex) { return inIndex == 0; } 28 | 29 | } // namespace layer 30 | } // namespace vulkan 31 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkVoronoiLayer.cpp: -------------------------------------------------------------------------------- 1 | #include "VkVoronoiLayer.hpp" 2 | 3 | namespace aoce { 4 | namespace vulkan { 5 | namespace layer { 6 | 7 | VkVoronoiConsumerLayer::VkVoronoiConsumerLayer(/* args */) { 8 | glslPath = "glsl/voronoiConsumer.comp.spv"; 9 | inCount = 2; 10 | } 11 | 12 | VkVoronoiConsumerLayer::~VkVoronoiConsumerLayer() {} 13 | 14 | bool VkVoronoiConsumerLayer::getSampled(int32_t inIndex) { 15 | return inIndex == 0 || inIndex == 1; 16 | } 17 | 18 | void VkVoronoiConsumerLayer::onInitLayer() { 19 | float width = inFormats[1].width; 20 | float height = inFormats[1].height; 21 | 22 | width = log2(width); 23 | height = log2(height); 24 | 25 | logAssert(width == height, "Voronoi point texture must be square"); 26 | logAssert(width == floor(width) && height == floor(height), 27 | "Voronoi point texture must be a power of 2"); 28 | } 29 | 30 | } // namespace layer 31 | } // namespace vulkan 32 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_vulkan_extra/layer/VkVoronoiLayer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../VkExtraExport.h" 4 | #include "aoce_vulkan/layer/VkLayer.hpp" 5 | 6 | namespace aoce { 7 | namespace vulkan { 8 | namespace layer { 9 | 10 | class VkVoronoiConsumerLayer : public VkLayer { 11 | AOCE_LAYER_GETNAME(VkVoronoiConsumerLayer) 12 | private: 13 | /* data */ 14 | public: 15 | VkVoronoiConsumerLayer(/* args */); 16 | ~VkVoronoiConsumerLayer(); 17 | 18 | protected: 19 | virtual bool getSampled(int32_t inIndex) override; 20 | virtual void onInitLayer() override; 21 | }; 22 | 23 | } // namespace layer 24 | } // namespace vulkan 25 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win/BCaptureWindow.cpp: -------------------------------------------------------------------------------- 1 | #include "BCaptureWindow.hpp" 2 | 3 | namespace aoce { 4 | namespace win { 5 | 6 | BCaptureWindow::BCaptureWindow(/* args */) {} 7 | 8 | BCaptureWindow::~BCaptureWindow() { hwnd = nullptr; } 9 | 10 | void BCaptureWindow::onObserverEvent(CaptureEventId eventId, LogLevel level, 11 | const char* msg) { 12 | if (observer) { 13 | observer->onEvent(eventId, level, msg); 14 | } 15 | } 16 | 17 | void BCaptureWindow::setObserver(ICaptureObserver* observer) { 18 | this->observer = observer; 19 | } 20 | 21 | bool BCaptureWindow::bCapturing() { return bCapture; } 22 | 23 | } // namespace win 24 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | include(AoceHelper) 3 | find_package(DirectX11 REQUIRED) 4 | 5 | file(GLOB AOCE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" ) 6 | file(GLOB AOCE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 7 | add_sub_path(dx11 AOCE_HEADER AOCE_SOURCE) 8 | add_sub_path(window AOCE_HEADER AOCE_SOURCE) 9 | 10 | add_definitions(-DAOCE_WIN_EXPORT_DEFINE) 11 | include_directories(${AOCE_HEADER_DIR} ${DirectX11_INCLUDE_DIRS}) 12 | 13 | add_library(aoce_win SHARED ${AOCE_SOURCE} ${AOCE_HEADER}) 14 | message(STATUS "dx11 libs:" ${DirectX11_LIBRARY}) 15 | target_link_libraries(aoce_win aoce ${DirectX11_LIBRARY}) 16 | 17 | aoce_output(aoce_win) 18 | install_aoce_module(aoce_win FLASE) -------------------------------------------------------------------------------- /code/aoce_win/WinModule.cpp: -------------------------------------------------------------------------------- 1 | #include "WinModule.hpp" 2 | 3 | #include 4 | 5 | #include "window/MCaptureWindow.hpp" 6 | #include "window/MWindowManager.hpp" 7 | 8 | namespace aoce { 9 | namespace win { 10 | 11 | WinModule::WinModule(/* args */) {} 12 | 13 | WinModule::~WinModule() {} 14 | 15 | bool WinModule::loadModule() { 16 | AoceManager::Get().addIWindowManager(WindowType::win, new MWindowManager()); 17 | AoceManager::Get().addICaptureWindow(CaptureType::win_bitblt, 18 | new MCaptureWindow()); 19 | return true; 20 | } 21 | 22 | void WinModule::unloadModule() { 23 | AoceManager::Get().removeIWindowManager(WindowType::win); 24 | AoceManager::Get().removeICaptureWindow(CaptureType::win_bitblt); 25 | } 26 | 27 | ADD_MODULE(WinModule, aoce_win) 28 | 29 | } // namespace win 30 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win/WinModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "aoce/module/IModule.hpp" 4 | 5 | namespace aoce { 6 | namespace win { 7 | 8 | class WinModule : public IModule { 9 | private: 10 | /* data */ 11 | public: 12 | WinModule(/* args */); 13 | ~WinModule(); 14 | 15 | public: 16 | virtual bool loadModule() override; 17 | virtual void unloadModule() override; 18 | }; 19 | 20 | } // namespace win 21 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win/window/MCaptureWindow.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | #include "../BCaptureWindow.hpp" 7 | #include "../WinHelp.hpp" 8 | #include "../dx11/Dx11Helper.hpp" 9 | namespace aoce { 10 | namespace win { 11 | 12 | class MCaptureWindow : public BCaptureWindow { 13 | private: 14 | // 15 | std::mutex stopMtx; 16 | std::condition_variable stopSignal; 17 | bool bSync = false; 18 | 19 | public: 20 | MCaptureWindow(/* args */); 21 | ~MCaptureWindow(); 22 | 23 | public: 24 | // 初始化d3d device等信息 25 | virtual bool startCapture(IWindow* window, bool bSync) override; 26 | virtual bool renderCapture() override; 27 | virtual void stopCapture() override; 28 | }; 29 | 30 | } // namespace win 31 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win/window/MWindow.cpp: -------------------------------------------------------------------------------- 1 | #include "MWindow.hpp" 2 | 3 | namespace aoce { 4 | namespace win { 5 | 6 | MWindow::MWindow(/* args */) {} 7 | 8 | MWindow::~MWindow() {} 9 | 10 | void MWindow::initWindow(HWND hd) { 11 | hwnd = hd; 12 | int32_t len = ::GetWindowTextLengthA(hwnd); 13 | std::vector temp(len + 1); 14 | if (len > 0) { 15 | ::GetWindowTextA(hwnd, temp.data(), len + 1); 16 | title = temp.data(); 17 | } 18 | unsigned long pId = 0; 19 | //线程id 20 | unsigned long tId = 0; 21 | tId = ::GetWindowThreadProcessId(hwnd, &pId); 22 | this->pId = pId; 23 | this->tId = tId; 24 | } 25 | 26 | const char* MWindow::getTitle() { return title.c_str(); } 27 | 28 | void* MWindow::getHwnd() { return hwnd; } 29 | 30 | uint64_t MWindow::getProcessId() { return pId; } 31 | 32 | uint64_t MWindow::getMainThreadId() { return tId; } 33 | 34 | bool MWindow::bValid() { return validWindow(hwnd); } 35 | 36 | } // namespace win 37 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win/window/MWindow.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../WinHelp.hpp" 3 | 4 | namespace aoce { 5 | namespace win { 6 | 7 | class MWindow : public IWindow { 8 | private: 9 | /* data */ 10 | HWND hwnd = nullptr; 11 | std::string title = ""; 12 | uint64_t pId = 0; 13 | uint64_t tId = 0; 14 | 15 | public: 16 | MWindow(/* args */); 17 | ~MWindow(); 18 | 19 | public: 20 | void initWindow(HWND hd); 21 | 22 | public: 23 | virtual const char* getTitle() override; 24 | virtual void* getHwnd() override; 25 | virtual uint64_t getProcessId() override; 26 | virtual uint64_t getMainThreadId() override; 27 | 28 | virtual bool bValid() override; 29 | }; 30 | 31 | } // namespace win 32 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win/window/MWindowManager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../WinHelp.hpp" 3 | #include "MWindow.hpp" 4 | 5 | namespace aoce { 6 | namespace win { 7 | 8 | class MWindowManager : public IWindowManager { 9 | private: 10 | /* data */ 11 | std::vector> windows; 12 | 13 | public: 14 | MWindowManager(/* args */); 15 | virtual ~MWindowManager(); 16 | 17 | public: 18 | void getWindowList(); 19 | void addWindow(HWND hwnd); 20 | 21 | public: 22 | virtual int32_t getWindowCount(bool bUpdate = false) override; 23 | virtual IWindow* getWindow(int32_t index) override; 24 | virtual IWindow* getDesktop() override; 25 | virtual void setForeground(IWindow* window) override; 26 | }; 27 | 28 | } // namespace win 29 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win_mf/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | file(GLOB AOCE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" ) 4 | file(GLOB AOCE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 5 | 6 | add_sub_path(videodevice AOCE_HEADER AOCE_SOURCE) 7 | 8 | add_library(aoce_win_mf SHARED ${AOCE_SOURCE} ${AOCE_HEADER}) 9 | 10 | message(STATUS "mf- " ${AOCE_HEADER_DIR}) 11 | 12 | include_directories(${AOCE_HEADER_DIR} ${AOCE_WIN_HEADER_DIR}) 13 | # link_libraries 14 | 15 | target_link_libraries(aoce_win_mf aoce aoce_win mf mfplat mfreadwrite mfuuid shlwapi) 16 | 17 | aoce_output(aoce_win_mf) 18 | install_aoce_module(aoce_win_mf FLASE) -------------------------------------------------------------------------------- /code/aoce_win_mf/MfModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "aoce/module/IModule.hpp" 4 | 5 | namespace aoce { 6 | namespace win { 7 | namespace mf { 8 | 9 | class MfModule : public IModule { 10 | private: 11 | /* data */ 12 | public: 13 | MfModule(/* args */); 14 | ~MfModule(); 15 | 16 | public: 17 | virtual bool loadModule() override; 18 | virtual void unloadModule() override; 19 | }; 20 | 21 | } // namespace mf 22 | 23 | } // namespace win 24 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_win_mf/README.md: -------------------------------------------------------------------------------- 1 | # aoce_win_mf 2 | 3 | ## 注意点 4 | 5 | MF 异步模式每次读取的数据可能并不在同一线程上,这样可能导致问题,如vulkan gpu可能分散在不同线程reset. 6 | -------------------------------------------------------------------------------- /code/aoce_win_mf/videodevice/FormatReader.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "MediaStruct.hpp" 5 | 6 | struct IMFMediaType; 7 | struct IMFAttributes; 8 | LPCWSTR GetGUIDNameConstNew(const GUID& guid); 9 | HRESULT GetGUIDNameNew(const GUID& guid, WCHAR** ppwsz); 10 | 11 | HRESULT LogAttributeValueByIndexNew(IMFAttributes* pAttr, DWORD index); 12 | HRESULT SpecialCaseAttributeValueNew(GUID guid, const PROPVARIANT& var, MFMediaType& out); 13 | /// Class for parsing info from IMFMediaType into the local MediaType 14 | class FormatReader 15 | { 16 | public: 17 | static bool Read(IMFMediaType* pType, MFMediaType& mediaType); 18 | ~FormatReader(void); 19 | private: 20 | FormatReader(void); 21 | }; 22 | 23 | 24 | -------------------------------------------------------------------------------- /code/aoce_win_mf/videodevice/MFVideoManager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "videodevice/VideoManager.hpp" 3 | namespace aoce { 4 | namespace win { 5 | namespace mf { 6 | 7 | class MFVideoManager : public VideoManager { 8 | private: 9 | /* data */ 10 | public: 11 | MFVideoManager(/* args */); 12 | virtual ~MFVideoManager() override; 13 | 14 | protected: 15 | virtual void getDevices() override; 16 | }; 17 | 18 | } // namespace mf 19 | } // namespace win 20 | } // namespace aoce -------------------------------------------------------------------------------- /code/aoce_winrt/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include_directories(${AOCE_HEADER_DIR}) 2 | 3 | # WINRT需要C++ 17 4 | set(CMAKE_CXX_STANDARD 17) 5 | 6 | file(GLOB AOCE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" ) 7 | file(GLOB AOCE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 8 | 9 | add_library(aoce_winrt SHARED ${AOCE_SOURCE} ${AOCE_HEADER}) 10 | 11 | target_precompile_headers(aoce_winrt 12 | PRIVATE 13 | 14 | 15 | 16 | 17 | 18 | 19 | ) 20 | 21 | target_link_libraries(aoce_winrt aoce aoce_win Dwmapi windowsapp) 22 | 23 | aoce_output(aoce_winrt) 24 | install_aoce_module(aoce_winrt FLASE) -------------------------------------------------------------------------------- /code/aoce_winrt/WinRTModule.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "aoce/module/IModule.hpp" 4 | 5 | namespace aoce { 6 | namespace awinrt { 7 | 8 | class WinRTModule : public IModule { 9 | private: 10 | /* data */ 11 | public: 12 | WinRTModule(/* args */); 13 | ~WinRTModule(); 14 | 15 | public: 16 | virtual bool loadModule() override; 17 | virtual void unloadModule() override; 18 | }; 19 | 20 | } // namespace win 21 | } // namespace aoce -------------------------------------------------------------------------------- /doc/android/交叉编译.md: -------------------------------------------------------------------------------- 1 | # 交叉编译 2 | 3 | ## CMAKE_C_COMPILER 4 | -------------------------------------------------------------------------------- /doc/cnn/ncnn源码解析.md: -------------------------------------------------------------------------------- 1 | # ncnn源码解析 2 | 3 | ## ncnn层通过CMake配置 4 | 5 | 宏NCNN_STRING 表示层用一个str标识,否则只用int索引表示. 6 | 7 | 卷积神经网络平常过久就有人提出新的思路,一般来说,对应一些新的运行层,所以新增层对源码改动量是一个比较大的考量. 8 | 9 | 宏DEFINE_LAYER_CREATOR(name): 声明根据对应name创建对应层的函数指针,与头文件layer_registry.h对应起来. 10 | 11 | 通过CMake动态生成layer_declaration.h,这个文件里有所有层的工厂类,根据条件生成avx/avx2/vulkan对应层,其中DEFINE_LAYER_CREATOR指明layer_registry.h里每个name的函数指针里的实现. 12 | 13 | 外部扩展层:register_custom_layer(const char* type, layer_creator_func creator);与如上对应,type/createor表示name/layer,具体可以参考YoloV5Focus相关. 14 | 15 | ## param文件 16 | 17 | 前二位应该表示输入/输出个数.一般情况下,然后根据前面二位解析输入/输出层名字. 18 | 19 | 卷积层里: 1/11表示kernel w/h,2/12表示dilation w/h(空洞卷积),3/13表示stride w/h,4/14表示pad w/h.5表示是否有偏置,6卷积核参数大小 in(x)out(x)ksize. 20 | -------------------------------------------------------------------------------- /doc/cnn/基本环境配置.md: -------------------------------------------------------------------------------- 1 | # 各种工具配置 2 | 3 | ## conda 4 | 5 | [清华大学开源软件镜像站](https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/) 6 | 7 | [windows10下安装conda](https://www.jianshu.com/p/920a6e18cfd6) 8 | 9 | ## pytorch安装 10 | 11 | [pytorch](https://pytorch.org/get-started/previous-versions/) 12 | 13 | ## 注意 14 | 15 | conda安装包提示(Collecting package metadata (current_repodata.json): failed)出错. 16 | 17 | 很可能是访问不了网络上current_repodata.json文件中,查看VPN相关. 18 | -------------------------------------------------------------------------------- /doc/cnn/资料.md: -------------------------------------------------------------------------------- 1 | # CNN资料 2 | 3 | [ncnn](https://github.com/Tencent/ncnn) 4 | 5 | [opencv-mobile](https://github.com/nihui/opencv-mobile) 6 | 7 | [视频抠图](https://github.com/FeiGeChuanShu/ncnn_Android_RobustVideoMatting) 8 | 9 | [ncnn_Android_face](https://github.com/FeiGeChuanShu/ncnn_Android_face) 10 | 11 | [超分辨率](https://github.com/nihui/waifu2x-ncnn-vulkan) 12 | -------------------------------------------------------------------------------- /doc/math/深度卷积神经网络.md: -------------------------------------------------------------------------------- 1 | # 深度卷积神经网络 2 | 3 | ## 原理 4 | 5 | [在Markdown中输入数学公式](https://www.jianshu.com/p/a0aa94ef8ab2) 6 | 7 | [Markdown 常用数学符号汇总](https://www.jianshu.com/p/d60b844d3ba5#comments) 8 | 9 | 每次更新参数使(期望输出-out)^2越来越小. 10 | 11 | $f(x)=y=ax+b$ 12 | 13 | 设定 loss=方差$D=\sum_{x}^n(y-f(x))^2=\sum_{x}^n(y-ax-b)^2$ 14 | 15 | 令 学习速率 = η 16 | 17 | 求a偏导: $\frac{\partial loss}{\partial a}=\sum_{x}^n2*(y-ax-b)*-x$ 18 | 19 | 求b偏导: $\frac{\partial loss}{\partial b}=\sum_{x}^n2*(y-ax-b)*-1$ 20 | 21 | 这样 22 | 23 | a更新方向 $2(out-期望输出)*x $ 24 | 25 | b更新方向 $2(out-期望输出) $ 26 | 27 | 前向预测: 28 | 29 | $out=ax+b$ 30 | 31 | 反向BP : 32 | 33 | $loss = (期望输出-out)^2$ 34 | 35 | 参数更新: 36 | 37 | $new(a) = a - \eta\frac{\partial loss}{\partial a} = a - \eta*2(out-期望输出)*x $ 38 | 39 | $new(b) = b - \eta\frac{\partial loss}{\partial a} = b - \eta*2(out-期望输出) $ 40 | -------------------------------------------------------------------------------- /doc/math/资料.md: -------------------------------------------------------------------------------- 1 | # 资料 2 | 3 | [模型对应数学表达式](https://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm) -------------------------------------------------------------------------------- /doc/project/aoce graph流程图.md: -------------------------------------------------------------------------------- 1 | # aoce graph流程图 2 | 3 | [Markdown笔记:如何画流程图](https://segmentfault.com/a/1190000006247465) 4 | 5 | ```flow 6 | st=>start: Start 7 | e=>end: End 8 | op1=>operation: My Operation 9 | sub1=>subroutine: My Subroutine 10 | cond=>condition: Yes or No? 11 | io=>inputoutput: catch something... 12 | ``` 13 | -------------------------------------------------------------------------------- /doc/project/guided流程.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/doc/project/guided流程.odg -------------------------------------------------------------------------------- /doc/project/下一步解决.md: -------------------------------------------------------------------------------- 1 | # 下一步需要解决问题 2 | 3 | ## (2021.03.12)glslangValidator需要把glsl根据编译符生成几份文件 4 | 5 | 造成问题: 多份glsl文件写同一逻辑,维护不方便. 6 | 7 | 解决思路: 1 代码里集成glslangValidator的API,根据不同条件生成不同glsl. 2还是外部调用glslangValidator生成,需要的是 条件-编译符-文件名 三者对应. 8 | 9 | 先尝试用2来解决. 10 | 11 | [glslangValidator](http://manpages.ubuntu.com/manpages/focal/en/man1/glslangValidator.1.html) 12 | 13 | ## (2021.03.26) 完成GPUImage从A到C的所有filter 14 | 15 | ## (2021.05.29) 考虑win/android界面展示程序 16 | -------------------------------------------------------------------------------- /doc/project/注意.md: -------------------------------------------------------------------------------- 1 | # 项目需要注意的地方 2 | 3 | ## CMake 4 | 5 | 1 有些地方需要把资料复制过去,如glsl编译后,需要在cmake文件修改下,如加个空格啥的才能引发cmake时的文件复制,还在想办法更好解决这个问题 6 | 7 | 2021.01.25 把文件复制的逻辑放入glsl编译脚本,只要glsl脚本编译通过就复制到目标目录. 8 | 9 | 2 在android studio打开的情况下,如果用vs code添加相应的源码文件,android studio会找不到这些新增加文件. 10 | 11 | 解决方法,在android studio修改添加源码的那个项目下的CMakeLists.txt,加个空格啥的就行. 12 | 13 | 3 VSCode里直接点击Debug/Release,并不能改变CMake里的CMAKE_BUILD_TYPE值. 14 | 15 | 解决方法,在settings.json里"cmake.configureSettings": {"CMAKE_BUILD_TYPE": "${buildType}"}. 16 | 17 | 4 需要运行install项目才能执行cmake中install API. 18 | 19 | 5 使用Nsight Graphics查看渲染过程,需要本身vulkan的渲染窗口链,如使用opencv,查看不了Nsight Graphics的计算过程. 20 | 21 | ## 安装 22 | 23 | 安装CUDA Toolkit 10.1后,vulkan的vkEnumeratePhysicalDevices找不到独立显卡了,更新驱动可以解决. 24 | -------------------------------------------------------------------------------- /doc/project/问题定位.md: -------------------------------------------------------------------------------- 1 | # 问题 2 | 3 | 1 VKLayer::onInitPipe 失败. 4 | 5 | 很可能是glsl路径问题,或者对应路径下没文件. 6 | 7 | 2 ITLayer继承的对象删除时,引发delete_scalar.cpp断点错误. 8 | 9 | 因为ITLayer属于抽像类,没的提供默认的析构函数,然而ITLayer是有堆栈对象的,所以出现问题. 10 | 11 | 总结: 所有抽像类必需提供virtual析构函数. 12 | 13 | 3 UE4 android推流引发vulkan device lost问题. 14 | 15 | 正在查找 16 | 17 | 4 UE4 android中,为什么vulkan与opengl es纹理直接对接失败. 18 | 19 | 正在查找 20 | -------------------------------------------------------------------------------- /doc/thirdparty/FFmpeg开发.md: -------------------------------------------------------------------------------- 1 | # FFmpeg开发 2 | 3 | ## 编码 4 | 5 | 编码的AvFrame中的pts与对应的AVCodecContext对应,而对应编码后的AvPacket的pts与AVStream对应. 6 | -------------------------------------------------------------------------------- /doc/thirdparty/MAUI.md: -------------------------------------------------------------------------------- 1 | # MAUI 2 | 3 | ## 安装前 4 | 5 | 1 cmd执行dotnet tool install -g Redth.Net.Maui.Check,安装maui.check. 6 | 7 | [dotnet-maui-check](https://github.com/Redth/dotnet-maui-check) 8 | 9 | 2 执行maui.check,安装maui的各项所需环境. 10 | 11 | 3 运行maui-samples项目,管理员CMD定位到maui-samples文件夹,执行dotnet workload install microsoft-android-sdk-full --skip-manifest-update. 12 | 13 | [maui-samples](https://github.com/dotnet/maui-samples) 14 | 15 | 4 运行maui项目,CMD定位到maui文件夹,执行build.cmd,在此文件夹下生成bin目录. 16 | 17 | [maui](https://github.com/dotnet/maui) 18 | -------------------------------------------------------------------------------- /doc/thirdparty/opencv扩展.md: -------------------------------------------------------------------------------- 1 | # opencv扩展 2 | 3 | ## 直方图均衡化 4 | 5 | [cuda coda](https://github.com/opencv/opencv/pull/18136/commits/f617f18e46fa556daea060d3c69307567bbc65f7) -------------------------------------------------------------------------------- /doc/thirdparty/窗口捕获.md: -------------------------------------------------------------------------------- 1 | # 窗口捕获 2 | 3 | ## winrt方式 4 | 5 | ### 需要注意 6 | 7 | 1 Direct3D11CaptureFramePool::Create 失败. error_no_interface 8 | 9 | 可能是因为创建的dx11 device不对. 10 | 11 | 2 interopFactory->CreateForWindow 失败. 没有注册接口 12 | 13 | winrt方式提供同步与异步,需要注意的是,同步模式下,自己调用renderCapture渲染每桢,线程可分离,异步模式下不需要自己调用renderCapture,但是对象初始化与startCapture需要在同一线程. 14 | -------------------------------------------------------------------------------- /doc/ue4/UE4对接.md: -------------------------------------------------------------------------------- 1 | # UE4对接 2 | 3 | [android下vulkan与opengles纹理互通](https://zhuanlan.zhihu.com/p/302285687) 4 | 5 | [Vulkan与DX11交互](https://zhuanlan.zhihu.com/p/349534525) 6 | 7 | ## 注意 8 | 9 | vulkan与opengles纹理交互需要android api >= 26才行. 10 | -------------------------------------------------------------------------------- /doc/ue4/UE4插件.md: -------------------------------------------------------------------------------- 1 | # UE4插件 2 | 3 | UHT(UnrealHeaderTool): 根据定义UField/UFunction等生成元数据,供反射与蓝图等功能使用. 4 | 5 | UBT(Unreal Build Tool): 使用C#来完成CMake工程编译,各个模块间的*.Build.cs相当于CMakeLists.txt文件,因此文件夹下有*.Build.cs文件夹的,此文件夹就是一个模块,请记着这个文件夹. 6 | 7 | 在win平台下,dll文件需要复制到生成的执行目录下,可以使用PublicDelayLoadDLLs表明延迟加载这些dll,但是需要在对应Plugins.cpp中的StartupModule使用FPlatformProcess::GetDllHandle(path)加载指定路径下的dll. 8 | -------------------------------------------------------------------------------- /doc/ue4/UE4行为树.md: -------------------------------------------------------------------------------- 1 | # UE4行为树 2 | 3 | ## -------------------------------------------------------------------------------- /doc/unity3d/Unity3d对接.md: -------------------------------------------------------------------------------- 1 | # Unity3d对接 2 | 3 | [Low-level native plug-in interface](https://docs.unity3d.com/Manual/NativePluginInterface.html) 4 | 5 | [git NativeRenderingPlugin](https://github.com/Unity-Technologies/NativeRenderingPlugin) 6 | -------------------------------------------------------------------------------- /doc/vulkan/Vulkan移植GPUImage的安卓Demo展示.md: -------------------------------------------------------------------------------- 1 | # Vulkan移植GPUImage的安卓Demo展示 2 | 3 | [演示Android apk下载](https://github.com/xxxzhou/aoce_thirdparty/blob/main/aoceswigtest-release.apk) 需要Android 8以上. 4 | 5 | 先看效果图,大约一百多种滤镜,有超过一半的滤镜有参数设置,其参数调整界面使用反射自动生成与绑定. 6 | 7 | ![avatar](../../assets/images/layers_demo.png "滤镜目录") 8 | 9 | 如下每种选择一些进行展示. 10 | 11 | ## 色彩调整 12 | 13 | ## 图像处理 14 | 15 | ## 混合模式 16 | 17 | ## 视觉效果 18 | 19 | 如果对实现过程感兴趣,请转到[Vulkan移植GPUImage总结](Vulkan移植GPUImage总结.md),从aoce/Vulkan底层框架实现,到vulkan如何用ComputeShader实现GPUImage的滤镜实现,与游戏引擎UE4/Unity3d中dx11/openges纹理对接,如何使用CMake+Swig自动封装C++成C#/Java的所有流程实现. 20 | 21 | 其中java调用C++接口用Swig自动完成的,如果你没有安装Swig,编译时生成不了转接文件,这些自动生成的文件不能放入版本管理,因此我把其中C++/java转接的aoce模块导出成[aoce-release.aar](https://github.com/xxxzhou/aoce_thirdparty/blob/main/aoce-release.aar),如果你没有装Swig那就移除aoce模块,使用这个aar导入aoceswigtest模块中. 22 | 23 | [项目github地址](https://github.com/xxxzhou/aoce) 针对window/andorid的多媒体与图像处理,有兴趣的点个Star. 24 | -------------------------------------------------------------------------------- /glsl/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # 复制glsl文件到bin目录 2 | file(GLOB AOCE_SPV_SOURCE CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/target/*.spv" ) 3 | # message(STATUS "aoce_vulkan_glsl: " ${AOCE_SPV_SOURCE}) 4 | message(STATUS "aoce_vulkan_glsl_dst: " ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/glsl) 5 | if(WIN32) 6 | file(COPY ${AOCE_SPV_SOURCE} DESTINATION "${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/glsl") 7 | file(COPY ${AOCE_SPV_SOURCE} DESTINATION "${CMAKE_INSTALL_PREFIX}/bin/glsl") 8 | endif() -------------------------------------------------------------------------------- /glsl/glslindexcurrent.txt: -------------------------------------------------------------------------------- 1 | ncnnInMat.comp ncnnInMatBGR.comp NCNN_BGR=1 2 | ncnnInMat.comp ncnnInMatRGB.comp NCNN_RGB=1 3 | ncnnInMat.comp ncnnInCropMatBGR.comp NCNN_BGR=1 NCNN_CROP=1 4 | ncnnInMat.comp ncnnInCropMatRGB.comp NCNN_RGB=1 NCNN_CROP=1 5 | ncnnInMat.comp ncnnInMatBGRF16.comp NCNN_BGR=1 NCNN_FP16=1 6 | ncnnInMat.comp ncnnInMatRGBF16.comp NCNN_RGB=1 NCNN_FP16=1 7 | ncnnInMat.comp ncnnInCropMatBGRF16.comp NCNN_BGR=1 NCNN_CROP=1 NCNN_FP16=1 8 | ncnnInMat.comp ncnnInCropMatRGBF16.comp NCNN_RGB=1 NCNN_CROP=1 NCNN_FP16=1 9 | ncnnUpload.comp 10 | ncnnUpload.comp ncnnUploadF16.comp NCNN_FP16=1 -------------------------------------------------------------------------------- /glsl/source/adaptiveThreshold.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in; 4 | layout (binding = 0, r8) uniform readonly image2D inTex; 5 | layout (binding = 1, r8) uniform readonly image2D inTex1; 6 | layout (binding = 2, r8) uniform image2D outTex; 7 | layout (std140, binding = 3) uniform UBO { 8 | float offset; // 0.05f 9 | } ubo; 10 | 11 | void main(){ 12 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 13 | ivec2 size = imageSize(outTex); 14 | if(uv.x >= size.x || uv.y >= size.y){ 15 | return; 16 | } 17 | float luminance = imageLoad(inTex,uv).r; 18 | float blur = imageLoad(inTex1,uv).r; 19 | float result = step(blur - ubo.offset,luminance); 20 | imageStore(outTex,uv,vec4(result)); 21 | } -------------------------------------------------------------------------------- /glsl/source/alphaBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 3) uniform UBO { 9 | float blend; 10 | } ubo; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(inTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 color = imageLoad(inTex,uv); 19 | vec4 color1 = imageLoad(inTex1,uv); 20 | 21 | vec4 result = vec4(mix(color.rgb,color1.rgb,color1.a*ubo.blend),color.a); 22 | 23 | imageStore(outTex,uv,result); 24 | } -------------------------------------------------------------------------------- /glsl/source/alphaCombin.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | #if ALPHA_SCALE 6 | layout (binding = 1) uniform sampler2D inSampler; 7 | #else 8 | layout (binding = 1, r8) uniform readonly image2D inTex1; 9 | #endif 10 | layout (binding = 2, rgba8) uniform image2D outTex; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(inTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 color = imageLoad(inTex,uv); 19 | #if ALPHA_SCALE 20 | vec2 suv = (vec2(uv)+vec2(0.5f))/vec2(size); 21 | float alpha = textureLod(inSampler,suv ,0).r; 22 | #else 23 | float alpha = imageLoad(inTex1,uv).r; 24 | #endif 25 | imageStore(outTex,uv,vec4(color.rgb,alpha)); 26 | } -------------------------------------------------------------------------------- /glsl/source/alphaSeparate.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in; 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, r8) uniform image2D outTex; 6 | 7 | void main(){ 8 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 9 | ivec2 size = imageSize(inTex); 10 | if(uv.x >= size.x || uv.y >= size.y){ 11 | return; 12 | } 13 | vec4 color = imageLoad(inTex,uv); 14 | imageStore(outTex,uv,vec4(color.a)); 15 | } -------------------------------------------------------------------------------- /glsl/source/averageLuminanceThreshold.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in; 4 | layout (binding = 0, r8) uniform readonly image2D inTex; 5 | layout (binding = 1, r32f) uniform readonly image2D inTex1; 6 | layout (binding = 2, r8) uniform image2D outTex; 7 | layout (std140, binding = 3) uniform UBO { 8 | float threshold; // 0.05f 9 | } ubo; 10 | 11 | void main(){ 12 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 13 | ivec2 size = imageSize(outTex); 14 | if(uv.x >= size.x || uv.y >= size.y){ 15 | return; 16 | } 17 | float luminance = imageLoad(inTex,uv).r; 18 | float auvluminance = imageLoad(inTex1,ivec2(0,0)).r; 19 | float result = step(auvluminance,luminance*ubo.threshold*size.x*size.y); 20 | imageStore(outTex,uv,vec4(result)); 21 | } -------------------------------------------------------------------------------- /glsl/source/brightness.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 2) uniform UBO { 9 | float brightness; 10 | } ubo; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(inTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 color = imageLoad(inTex,uv); 19 | vec4 result = color + vec4(vec3(ubo.brightness),0.0f); 20 | imageStore(outTex,uv,result); 21 | } -------------------------------------------------------------------------------- /glsl/source/colorBurnBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 textureColor = imageLoad(inTex,uv); 15 | vec4 textureColor2 = imageLoad(inTex1,uv); 16 | vec4 whiteColor = vec4(1.0); 17 | 18 | vec4 result = whiteColor - (whiteColor - textureColor) / textureColor2; 19 | imageStore(outTex, uv, result); 20 | } -------------------------------------------------------------------------------- /glsl/source/colorInvert.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 color = imageLoad(inTex,uv); 15 | vec4 result = vec4((1.0-color.rgb),color.w); 16 | imageStore(outTex,uv,result); 17 | } -------------------------------------------------------------------------------- /glsl/source/contrast.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | // 调整图像的对比度 4 | 5 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 6 | 7 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 8 | layout (binding = 1, rgba8) uniform image2D outTex; 9 | 10 | layout (std140, binding = 2) uniform UBO { 11 | float contrast; 12 | } ubo; 13 | 14 | void main(){ 15 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 16 | ivec2 size = imageSize(inTex); 17 | if(uv.x >= size.x || uv.y >= size.y){ 18 | return; 19 | } 20 | vec4 color = imageLoad(inTex,uv); 21 | vec4 result = vec4(((color.rgb - vec3(0.5)) * ubo.contrast + vec3(0.5)), color.w); 22 | imageStore(outTex,uv,result); 23 | } -------------------------------------------------------------------------------- /glsl/source/convertImage.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in; 4 | #if CHANNEL_RGBA 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba32f) uniform image2D outTex; 7 | #elif CHANNEL_RGBA32F 8 | layout (binding = 0, rgba32f) uniform readonly image2D inTex; 9 | layout (binding = 1, rgba8) uniform image2D outTex; 10 | #endif 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(outTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 color = imageLoad(inTex,uv); 19 | imageStore(outTex,uv,color); 20 | } -------------------------------------------------------------------------------- /glsl/source/copyImage.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 color = imageLoad(inTex,uv); 15 | imageStore(outTex,uv,color); 16 | } -------------------------------------------------------------------------------- /glsl/source/cropFilter.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 2) uniform UBO { 9 | int left; 10 | int top; 11 | } ubo; 12 | 13 | void main(){ 14 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 15 | ivec2 size = imageSize(outTex); 16 | if(uv.x >= size.x || uv.y >= size.y){ 17 | return; 18 | } 19 | vec4 color = imageLoad(inTex,uv+ivec2(ubo.left,ubo.top)); 20 | imageStore(outTex,uv,color); 21 | } -------------------------------------------------------------------------------- /glsl/source/darkenBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 base = imageLoad(inTex,uv); 15 | vec4 overlayer = imageLoad(inTex1,uv); 16 | 17 | vec4 result = vec4(min(overlayer.rgb * base.a, base.rgb * overlayer.a) + overlayer.rgb * (1.0 - base.a) + base.rgb * (1.0 - overlayer.a), 1.0); 18 | imageStore(outTex, uv, result); 19 | } -------------------------------------------------------------------------------- /glsl/source/differenceBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 textureColor = imageLoad(inTex,uv); 15 | vec4 textureColor2 = imageLoad(inTex1,uv); 16 | 17 | vec4 result = vec4(abs(textureColor2.rgb - textureColor.rgb), textureColor.a); 18 | imageStore(outTex, uv, result); 19 | } -------------------------------------------------------------------------------- /glsl/source/dissolveBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 3) uniform UBO { 9 | float percent; 10 | } ubo; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(inTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 textureColor = imageLoad(inTex,uv); 19 | vec4 textureColor2 = imageLoad(inTex1,uv); 20 | 21 | vec4 result = mix(textureColor, textureColor2, ubo.percent); 22 | imageStore(outTex, uv, result); 23 | } -------------------------------------------------------------------------------- /glsl/source/drawPointBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 baseColor = imageLoad(inTex,uv); 15 | vec4 overlayColor = imageLoad(inTex1,uv); 16 | 17 | vec4 result = vec4(baseColor.rgb * (1.0 - overlayColor.a)+overlayColor.rgb*overlayColor.a,baseColor.a); 18 | imageStore(outTex, uv, result); 19 | } -------------------------------------------------------------------------------- /glsl/source/exclusionBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 base = imageLoad(inTex,uv); 15 | vec4 overlay = imageLoad(inTex1,uv); 16 | vec4 result = vec4((overlay.rgb * base.a + base.rgb * overlay.a - 2.0 * overlay.rgb * base.rgb) + overlay.rgb * (1.0 - base.a) + base.rgb * (1.0 - overlay.a), base.a); 17 | imageStore(outTex, uv, result); 18 | } -------------------------------------------------------------------------------- /glsl/source/exposure.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 2) uniform UBO { 9 | float exposure; 10 | } ubo; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(inTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 color = imageLoad(inTex,uv); 19 | vec4 result =vec4(color.rgb * pow(2.0, ubo.exposure), color.a); 20 | imageStore(outTex,uv,result); 21 | } -------------------------------------------------------------------------------- /glsl/source/flip.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform image2D outTex; 6 | 7 | layout (std140, binding = 2) uniform UBO { 8 | // 0 9 | int bFlipX; 10 | // 0 11 | int bFlipY; 12 | } ubo; 13 | 14 | void main(){ 15 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 16 | ivec2 size = imageSize(outTex); 17 | if(uv.x >= size.x || uv.y >= size.y){ 18 | return; 19 | } 20 | int ix = uv.x; 21 | int iy = uv.y; 22 | if(ubo.bFlipX != 0){ 23 | ix = size.x - 1 - ix; 24 | } 25 | if(ubo.bFlipY != 0){ 26 | iy = size.y - 1 - iy; 27 | } 28 | vec4 rgba = imageLoad(inTex,ivec2(ix,iy)); 29 | imageStore(outTex, uv,rgba); 30 | } -------------------------------------------------------------------------------- /glsl/source/gamma.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 2) uniform UBO { 9 | float gamma; 10 | } ubo; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(inTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 color = imageLoad(inTex,uv); 19 | vec4 result =vec4(pow(color.rgb, vec3(ubo.gamma)), color.a); 20 | imageStore(outTex,uv,result); 21 | } -------------------------------------------------------------------------------- /glsl/source/guidedFilter1.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba32f) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba32f) uniform image2D outTex1; 6 | layout (binding = 2, rgba32f) uniform image2D outTex2; 7 | layout (binding = 3, rgba32f) uniform image2D outTex3; 8 | 9 | void main(){ 10 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 11 | ivec2 size = imageSize(inTex); 12 | if(uv.x >= size.x || uv.y >= size.y){ 13 | return; 14 | } 15 | vec4 c = imageLoad(inTex,uv); 16 | //得到Guided filter所需要的矩阵 17 | imageStore(outTex1, uv, vec4(c.rgb*c.a,1.0f)); 18 | imageStore(outTex2, uv, vec4(c.rgb*c.r,1.0f)); 19 | imageStore(outTex3, uv, vec4(vec3(c.g*c.g, c.g*c.b, c.b*c.b),1.0f)); 20 | } -------------------------------------------------------------------------------- /glsl/source/guidedMatting.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba32f) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba32f) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 color = imageLoad(inTex,uv); 15 | vec4 mean = imageLoad(inTex1,uv); 16 | float q = clamp(color.x*mean.x + color.y*mean.y + color.z*mean.z + mean.w, 0.f, 1.f); 17 | imageStore(outTex, uv,vec4(color.rgb,q));//vec4(color.rgb,q) 18 | } -------------------------------------------------------------------------------- /glsl/source/haze.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | // 调整图像的对比度 4 | 5 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 6 | 7 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 8 | layout (binding = 1, rgba8) uniform image2D outTex; 9 | 10 | layout (std140, binding = 2) uniform UBO { 11 | float hazeDistance; 12 | float slope; 13 | } ubo; 14 | 15 | void main(){ 16 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 17 | ivec2 size = imageSize(outTex); 18 | if(uv.x >= size.x || uv.y >= size.y){ 19 | return; 20 | } 21 | vec2 suv = (vec2(uv)+vec2(0.5f))/vec2(size); 22 | float d = suv.y*ubo.slope + ubo.hazeDistance; 23 | vec4 c = imageLoad(inTex,uv); 24 | vec4 color = vec4(1.0); 25 | c = (c-d*color)/(1.0-d); 26 | imageStore(outTex,uv,c); 27 | } -------------------------------------------------------------------------------- /glsl/source/histogramCombin.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 256, local_size_y = 1) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, r32i) uniform readonly iimage2D inTexR; 6 | layout (binding = 1, r32i) uniform readonly iimage2D inTexG; 7 | layout (binding = 2, r32i) uniform readonly iimage2D inTexB; 8 | layout (binding = 3, r32i) uniform readonly iimage2D inTexA; 9 | layout (binding = 4, rgba32i) uniform iimage2D outTex; 10 | 11 | void main(){ 12 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 13 | ivec2 size = imageSize(outTex); 14 | if(uv.x >= size.x || uv.y >= size.y){ 15 | return; 16 | } 17 | int r = imageLoad(inTexR,uv).r; 18 | int g = imageLoad(inTexG,uv).r; 19 | int b = imageLoad(inTexB,uv).r; 20 | int a = imageLoad(inTexA,uv).r; 21 | ivec4 result = ivec4(r,g,b,a); 22 | imageStore(outTex,uv,result); 23 | } -------------------------------------------------------------------------------- /glsl/source/lightenBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 color = imageLoad(inTex,uv); 15 | vec4 color1 = imageLoad(inTex1,uv); 16 | 17 | vec4 result = max(color,color1); 18 | imageStore(outTex,uv,result); 19 | } -------------------------------------------------------------------------------- /glsl/source/linearBurnBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 color = imageLoad(inTex,uv); 15 | vec4 color1 = imageLoad(inTex1,uv); 16 | 17 | vec4 result = vec4(clamp(color.rgb + color1.rgb - vec3(1.0), vec3(0.0), vec3(1.0)), color.a); 18 | imageStore(outTex,uv,result); 19 | } -------------------------------------------------------------------------------- /glsl/source/luminance.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in; 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, r8) uniform image2D outTex; 6 | 7 | const vec3 W = vec3(0.2125, 0.7154, 0.0721); 8 | 9 | void main(){ 10 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 11 | ivec2 size = imageSize(outTex); 12 | if(uv.x >= size.x || uv.y >= size.y){ 13 | return; 14 | } 15 | vec4 rgba = imageLoad(inTex,uv); 16 | float luminance = dot(rgba.rgb, W); 17 | imageStore(outTex, uv,vec4(luminance)); 18 | } -------------------------------------------------------------------------------- /glsl/source/luminanceRange.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in; 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform image2D outTex; 6 | 7 | layout (std140, binding = 2) uniform UBO { 8 | float range; 9 | } ubo; 10 | 11 | const vec3 W = vec3(0.2125, 0.7154, 0.0721); 12 | 13 | void main(){ 14 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 15 | ivec2 size = imageSize(outTex); 16 | if(uv.x >= size.x || uv.y >= size.y){ 17 | return; 18 | } 19 | vec4 rgba = imageLoad(inTex,uv); 20 | float luminance = dot(rgba.rgb, W); 21 | float luminanceRatio = ((0.5 - luminance) * ubo.range); 22 | imageStore(outTex, uv,vec4((rgba.rgb+luminanceRatio),rgba.a)); 23 | } -------------------------------------------------------------------------------- /glsl/source/luminanceThreshold.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in; 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, r8) uniform image2D outTex; 6 | 7 | layout (std140, binding = 2) uniform UBO { 8 | float threshold; 9 | } ubo; 10 | 11 | const vec3 W = vec3(0.2125, 0.7154, 0.0721); 12 | 13 | void main(){ 14 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 15 | ivec2 size = imageSize(outTex); 16 | if(uv.x >= size.x || uv.y >= size.y){ 17 | return; 18 | } 19 | vec4 rgba = imageLoad(inTex,uv); 20 | float luminance = dot(rgba.rgb, W); 21 | float thresholdResult = step(ubo.threshold, luminance); 22 | imageStore(outTex, uv,vec4(thresholdResult)); 23 | } -------------------------------------------------------------------------------- /glsl/source/mapChannel.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform image2D outTex; 6 | 7 | layout (std140, binding = 2) uniform UBO { 8 | // 0 9 | int red; 10 | // 1 11 | int green; 12 | // 2 13 | int blue; 14 | // 3 15 | int alpha; 16 | } ubo; 17 | 18 | void main(){ 19 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 20 | ivec2 size = imageSize(outTex); 21 | if(uv.x >= size.x || uv.y >= size.y){ 22 | return; 23 | } 24 | vec4 rgba = imageLoad(inTex,uv); 25 | vec4 result = vec4(rgba[ubo.red],rgba[ubo.green],rgba[ubo.blue],rgba[ubo.alpha]); 26 | imageStore(outTex, uv,result); 27 | } -------------------------------------------------------------------------------- /glsl/source/mask.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 color = imageLoad(inTex,uv); 15 | vec4 color1 = imageLoad(inTex1,uv); 16 | 17 | float newAlpha = dot(color1.rgb, vec3(.33333334, .33333334, .33333334)) * color1.a; 18 | imageStore(outTex,uv,vec4(color.rgb,newAlpha)); 19 | } -------------------------------------------------------------------------------- /glsl/source/memset.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | // 调整图像的对比度 4 | 5 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 6 | #if CHANNEL_RGBA 7 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 8 | layout (binding = 1, rgba8) uniform image2D outTex; 9 | #elif CHANNEL_R16UI 10 | layout (binding = 0, r16ui) uniform readonly uimage2D inTex; 11 | layout (binding = 1, r16ui) uniform uimage2D outTex; 12 | #endif 13 | 14 | layout (std140, binding = 2) uniform UBO { 15 | float mvalue; 16 | } ubo; 17 | 18 | void main(){ 19 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 20 | ivec2 size = imageSize(inTex); 21 | if(uv.x >= size.x || uv.y >= size.y){ 22 | return; 23 | } 24 | #if CHANNEL_RGBA 25 | imageStore(outTex,uv,vec4(ubo.mvalue)); 26 | #elif CHANNEL_R16UI 27 | imageStore(outTex,uv,uvec4(ubo.mvalue)); 28 | #endif 29 | } -------------------------------------------------------------------------------- /glsl/source/motionDetector.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 textureColor = imageLoad(inTex,uv); 15 | vec4 textureColor2 = imageLoad(inTex1,uv); 16 | 17 | float distColor = distance(textureColor,textureColor2); 18 | float movementThreshold = step(0.2,distColor); 19 | 20 | vec2 suv = (vec2(uv)+vec2(0.5f))/vec2(size); 21 | imageStore(outTex, uv, vec4(suv*movementThreshold,1.0,1.0)); 22 | } -------------------------------------------------------------------------------- /glsl/source/multiplyBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 base = imageLoad(inTex,uv); 15 | vec4 overlay = imageLoad(inTex1,uv); 16 | vec4 result = overlay * base + overlay * (1.0 - base.a) + base * (1.0 - overlay.a); 17 | 18 | imageStore(outTex,uv,result); 19 | } -------------------------------------------------------------------------------- /glsl/source/ncnnUpload.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | #if NCNN_FP16 4 | #extension GL_EXT_shader_16bit_storage: require 5 | #extension GL_EXT_shader_explicit_arithmetic_types_float16: require 6 | #endif 7 | 8 | layout (local_size_x = 16, local_size_y = 16) in; 9 | layout (binding = 0) buffer inBuffer{ 10 | #if NCNN_FP16 11 | float16_t dataIn[]; 12 | #else 13 | float dataIn[]; 14 | #endif 15 | }; 16 | 17 | layout (binding = 1, r8) uniform image2D outTex; 18 | 19 | void main(){ 20 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 21 | ivec2 size = imageSize(outTex); 22 | if(uv.x >= size.x || uv.y >= size.y){ 23 | return; 24 | } 25 | float vaule = float(dataIn[uv.y*size.x + uv.x]); 26 | imageStore(outTex,uv,vec4(vaule)); 27 | } 28 | 29 | -------------------------------------------------------------------------------- /glsl/source/normalBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 c2 = imageLoad(inTex,uv); 15 | vec4 c1 = imageLoad(inTex1,uv); 16 | vec4 outputColor; 17 | 18 | float a = c1.a + c2.a * (1.0 - c1.a); 19 | float alphaDivisor = a + step(a, 0.0); // Protect against a divide-by-zero blacking out things in the output 20 | 21 | outputColor.rgb = (c1.rgb * c1.a+ c2.rgb * c2.a * (1.0 - c1.a))/alphaDivisor; 22 | outputColor.a = a; 23 | imageStore(outTex,uv,outputColor); 24 | } -------------------------------------------------------------------------------- /glsl/source/opacity.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 2) uniform UBO { 9 | float opacity; 10 | } ubo; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(inTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 color = imageLoad(inTex,uv); 19 | color.a = color.a * ubo.opacity; 20 | imageStore(outTex,uv,color); 21 | } -------------------------------------------------------------------------------- /glsl/source/pixellate.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0) uniform sampler2D inSampler; 5 | layout (binding = 1, rgba8) uniform image2D outTex; 6 | 7 | layout (std140, binding = 2) uniform UBO{ 8 | float fractionalWidthOfPixel; 9 | float aspectRatio; 10 | } ubo; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(outTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec2 suv = (vec2(uv)+vec2(0.5f))/vec2(size); 19 | 20 | vec2 sampleDivisor = vec2(ubo.fractionalWidthOfPixel, ubo.fractionalWidthOfPixel / ubo.aspectRatio); 21 | vec2 samplePos = suv - mod(suv, sampleDivisor) + 0.5 * sampleDivisor; 22 | 23 | vec4 color = textureLod(inSampler,samplePos ,0); 24 | imageStore(outTex,uv,color); 25 | } -------------------------------------------------------------------------------- /glsl/source/posterize.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | // 调整图像的对比度 4 | 5 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 6 | 7 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 8 | layout (binding = 1, rgba8) uniform image2D outTex; 9 | 10 | layout (std140, binding = 2) uniform UBO { 11 | int colorLevels; 12 | } ubo; 13 | 14 | void main(){ 15 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 16 | ivec2 size = imageSize(inTex); 17 | if(uv.x >= size.x || uv.y >= size.y){ 18 | return; 19 | } 20 | vec4 color = imageLoad(inTex,uv); 21 | vec4 result = floor((color * ubo.colorLevels) + vec4(0.5)) / ubo.colorLevels; 22 | imageStore(outTex,uv,result); 23 | } -------------------------------------------------------------------------------- /glsl/source/rgb.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | // 调整图像的对比度 4 | 5 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 6 | 7 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 8 | layout (binding = 1, rgba8) uniform image2D outTex; 9 | 10 | layout (std140, binding = 2) uniform UBO { 11 | float red; 12 | float green; 13 | float blue; 14 | } ubo; 15 | 16 | void main(){ 17 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 18 | ivec2 size = imageSize(inTex); 19 | if(uv.x >= size.x || uv.y >= size.y){ 20 | return; 21 | } 22 | vec4 color = imageLoad(inTex,uv); 23 | vec3 adjustment = vec3(ubo.red,ubo.green,ubo.blue); 24 | vec4 result = vec4(color.rgb*adjustment, color.w); 25 | imageStore(outTex,uv,result); 26 | } -------------------------------------------------------------------------------- /glsl/source/saturation.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 2) uniform UBO { 9 | float saturation; 10 | } ubo; 11 | 12 | const vec3 W = vec3(0.2125, 0.7154, 0.0721); 13 | 14 | void main(){ 15 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 16 | ivec2 size = imageSize(inTex); 17 | if(uv.x >= size.x || uv.y >= size.y){ 18 | return; 19 | } 20 | vec4 color = imageLoad(inTex,uv); 21 | float luminance = dot(color.rgb, W); 22 | vec3 result = mix(vec3(luminance), color.rgb, ubo.saturation); 23 | imageStore(outTex,uv,vec4(result,color.w)); 24 | } -------------------------------------------------------------------------------- /glsl/source/screenBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | //逻辑大部分同colorBurnBlend 4 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 7 | layout (binding = 2, rgba8) uniform image2D outTex; 8 | 9 | void main(){ 10 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 11 | ivec2 size = imageSize(inTex); 12 | if(uv.x >= size.x || uv.y >= size.y){ 13 | return; 14 | } 15 | vec4 textureColor = imageLoad(inTex,uv); 16 | vec4 textureColor2 = imageLoad(inTex1,uv); 17 | vec4 whiteColor = vec4(1.0); 18 | 19 | vec4 result = whiteColor - ((whiteColor - textureColor2) * (whiteColor - textureColor)); 20 | imageStore(outTex, uv, result); 21 | } -------------------------------------------------------------------------------- /glsl/source/showRound.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in; 4 | layout (binding = 0, r8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(outTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 color = imageLoad(inTex1,uv); 15 | float alpha = imageLoad(inTex,uv).r; 16 | if(alpha > 0.0f){ 17 | color = vec4(1.0f,0.0f,0.0f,1.0f); 18 | } 19 | imageStore(outTex,uv,color); 20 | } -------------------------------------------------------------------------------- /glsl/source/softLightBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 base = imageLoad(inTex,uv); 15 | vec4 overlay = imageLoad(inTex1,uv); 16 | 17 | float alphaDivisor = base.a + step(base.a, 0.0); // Protect against a divide-by-zero blacking out things in the output 18 | vec4 result = base * (overlay.a * (base / alphaDivisor) + (2.0 * overlay * (1.0 - (base / alphaDivisor)))) + overlay * (1.0 - base.a) + base * (1.0 - overlay.a); 19 | 20 | imageStore(outTex, uv, result); 21 | } -------------------------------------------------------------------------------- /glsl/source/solarize.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | 5 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 6 | layout (binding = 1, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 2) uniform UBO { 9 | float threshold; 10 | } ubo; 11 | 12 | const vec3 W = vec3(0.2125, 0.7154, 0.0721); 13 | 14 | void main(){ 15 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 16 | ivec2 size = imageSize(inTex); 17 | if(uv.x >= size.x || uv.y >= size.y){ 18 | return; 19 | } 20 | vec4 color = imageLoad(inTex,uv); 21 | float luminance = dot(color.rgb, W); 22 | float thresholdResult = step(luminance, ubo.threshold); 23 | vec3 finalColor = abs(thresholdResult - color.rgb); 24 | imageStore(outTex,uv,vec4(finalColor,color.w)); 25 | } -------------------------------------------------------------------------------- /glsl/source/sourceOverBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 textureColor = imageLoad(inTex,uv); 15 | vec4 textureColor2 = imageLoad(inTex1,uv); 16 | vec4 result = mix(textureColor, textureColor2, textureColor2.a); 17 | 18 | imageStore(outTex, uv, result); 19 | } -------------------------------------------------------------------------------- /glsl/source/subtractBlend.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | void main(){ 9 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 10 | ivec2 size = imageSize(inTex); 11 | if(uv.x >= size.x || uv.y >= size.y){ 12 | return; 13 | } 14 | vec4 textureColor = imageLoad(inTex,uv); 15 | vec4 textureColor2 = imageLoad(inTex1,uv); 16 | vec4 result = vec4(textureColor.rgb - textureColor2.rgb, textureColor.a); 17 | 18 | imageStore(outTex, uv, result); 19 | } -------------------------------------------------------------------------------- /glsl/source/transpose.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform image2D outTex; 6 | 7 | layout (std140, binding = 2) uniform UBO { 8 | // 0 9 | int bFlipX; 10 | // 0 11 | int bFlipY; 12 | } ubo; 13 | 14 | void main(){ 15 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 16 | ivec2 size = imageSize(outTex); 17 | if(uv.x >= size.x || uv.y >= size.y){ 18 | return; 19 | } 20 | int ix = uv.y; 21 | int iy = uv.x; 22 | if(ubo.bFlipY != 0){ 23 | ix = size.y - 1 - ix; 24 | } 25 | if(ubo.bFlipX != 0){ 26 | iy = size.x - 1 - iy; 27 | } 28 | vec4 rgba = imageLoad(inTex,ivec2(ix,iy)); 29 | imageStore(outTex, uv,rgba); 30 | } -------------------------------------------------------------------------------- /glsl/source/unsharpMask.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 4 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 5 | layout (binding = 1, rgba8) uniform readonly image2D inTex1; 6 | layout (binding = 2, rgba8) uniform image2D outTex; 7 | 8 | layout (std140, binding = 3) uniform UBO { 9 | float intensity; 10 | } ubo; 11 | 12 | void main(){ 13 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 14 | ivec2 size = imageSize(inTex); 15 | if(uv.x >= size.x || uv.y >= size.y){ 16 | return; 17 | } 18 | vec4 sharpImageColor = imageLoad(inTex,uv); 19 | vec3 blurredImageColor = imageLoad(inTex1,uv).rgb; 20 | vec4 result = vec4(sharpImageColor.rgb * ubo.intensity + blurredImageColor * (1.0 - ubo.intensity), sharpImageColor.a); 21 | 22 | imageStore(outTex, uv, result); 23 | } -------------------------------------------------------------------------------- /glsl/source/vibrance.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | // 调整图像的对比度 4 | 5 | layout (local_size_x = 16, local_size_y = 16) in;// gl_WorkGroupSize 6 | 7 | layout (binding = 0, rgba8) uniform readonly image2D inTex; 8 | layout (binding = 1, rgba8) uniform image2D outTex; 9 | 10 | layout (std140, binding = 2) uniform UBO { 11 | float vibrance; 12 | } ubo; 13 | 14 | void main(){ 15 | ivec2 uv = ivec2(gl_GlobalInvocationID.xy); 16 | ivec2 size = imageSize(inTex); 17 | if(uv.x >= size.x || uv.y >= size.y){ 18 | return; 19 | } 20 | vec4 color = imageLoad(inTex,uv); 21 | float average = (color.r + color.g + color.b) / 3.0; 22 | float mx = max(color.r, max(color.g, color.b)); 23 | float amt = (mx - average) * (-ubo.vibrance * 3.0); 24 | color.rgb = mix(color.rgb, vec3(mx), amt); 25 | imageStore(outTex,uv,color); 26 | } -------------------------------------------------------------------------------- /glsl/target/adaptiveThreshold.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/adaptiveThreshold.comp.spv -------------------------------------------------------------------------------- /glsl/target/addBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/addBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaCombin.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaCombin.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaScaleCombin.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaScaleCombin.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaSeparate.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaSeparate.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaShow.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaShow.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaShowC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaShowC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaShowF1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaShowF1.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaShowF4.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaShowF4.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaShowSI1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaShowSI1.comp.spv -------------------------------------------------------------------------------- /glsl/target/alphaShowSI4.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/alphaShowSI4.comp.spv -------------------------------------------------------------------------------- /glsl/target/averageLuminanceThreshold.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/averageLuminanceThreshold.comp.spv -------------------------------------------------------------------------------- /glsl/target/bilateral.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/bilateral.comp.spv -------------------------------------------------------------------------------- /glsl/target/bilateralC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/bilateralC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/blend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/blend.comp.spv -------------------------------------------------------------------------------- /glsl/target/blurPosition.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/blurPosition.comp.spv -------------------------------------------------------------------------------- /glsl/target/blurSelective.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/blurSelective.comp.spv -------------------------------------------------------------------------------- /glsl/target/brightness.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/brightness.comp.spv -------------------------------------------------------------------------------- /glsl/target/bulgeDistortion.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/bulgeDistortion.comp.spv -------------------------------------------------------------------------------- /glsl/target/canny.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/canny.comp.spv -------------------------------------------------------------------------------- /glsl/target/cgaColorspace.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/cgaColorspace.comp.spv -------------------------------------------------------------------------------- /glsl/target/chromaKey.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/chromaKey.comp.spv -------------------------------------------------------------------------------- /glsl/target/colorBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/colorBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/colorBurnBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/colorBurnBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/colorDodgeBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/colorDodgeBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/colorInvert.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/colorInvert.comp.spv -------------------------------------------------------------------------------- /glsl/target/colorLocalBinaryPattern.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/colorLocalBinaryPattern.comp.spv -------------------------------------------------------------------------------- /glsl/target/colorMatrix.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/colorMatrix.comp.spv -------------------------------------------------------------------------------- /glsl/target/contrast.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/contrast.comp.spv -------------------------------------------------------------------------------- /glsl/target/convertImage.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/convertImage.comp.spv -------------------------------------------------------------------------------- /glsl/target/convertImageF4.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/convertImageF4.comp.spv -------------------------------------------------------------------------------- /glsl/target/copyImage.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/copyImage.comp.spv -------------------------------------------------------------------------------- /glsl/target/cropFilter.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/cropFilter.comp.spv -------------------------------------------------------------------------------- /glsl/target/crosshatch.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/crosshatch.comp.spv -------------------------------------------------------------------------------- /glsl/target/darkenBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/darkenBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/differenceBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/differenceBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/directionalNMS.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/directionalNMS.comp.spv -------------------------------------------------------------------------------- /glsl/target/directionalSobel.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/directionalSobel.comp.spv -------------------------------------------------------------------------------- /glsl/target/dissolveBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/dissolveBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/divideBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/divideBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/drawPointBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/drawPointBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/drawPoints.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/drawPoints.comp.spv -------------------------------------------------------------------------------- /glsl/target/drawRect.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/drawRect.comp.spv -------------------------------------------------------------------------------- /glsl/target/emboss.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/emboss.comp.spv -------------------------------------------------------------------------------- /glsl/target/exclusionBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/exclusionBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/exposure.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/exposure.comp.spv -------------------------------------------------------------------------------- /glsl/target/falseColor.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/falseColor.comp.spv -------------------------------------------------------------------------------- /glsl/target/fastFeatureDetector.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/fastFeatureDetector.comp.spv -------------------------------------------------------------------------------- /glsl/target/filter2D.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filter2D.comp.spv -------------------------------------------------------------------------------- /glsl/target/filter2DC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filter2DC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/filter2DF4.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filter2DF4.comp.spv -------------------------------------------------------------------------------- /glsl/target/filterColumn.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filterColumn.comp.spv -------------------------------------------------------------------------------- /glsl/target/filterColumnC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filterColumnC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/filterColumnF4.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filterColumnF4.comp.spv -------------------------------------------------------------------------------- /glsl/target/filterMat3x3.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filterMat3x3.comp.spv -------------------------------------------------------------------------------- /glsl/target/filterRow.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filterRow.comp.spv -------------------------------------------------------------------------------- /glsl/target/filterRowC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filterRowC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/filterRowF4.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/filterRowF4.comp.spv -------------------------------------------------------------------------------- /glsl/target/flip.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/flip.comp.spv -------------------------------------------------------------------------------- /glsl/target/gamma.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/gamma.comp.spv -------------------------------------------------------------------------------- /glsl/target/glassSphere.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/glassSphere.comp.spv -------------------------------------------------------------------------------- /glsl/target/guidedFilter1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/guidedFilter1.comp.spv -------------------------------------------------------------------------------- /glsl/target/guidedFilter2.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/guidedFilter2.comp.spv -------------------------------------------------------------------------------- /glsl/target/guidedMatting.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/guidedMatting.comp.spv -------------------------------------------------------------------------------- /glsl/target/halftone.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/halftone.comp.spv -------------------------------------------------------------------------------- /glsl/target/hardLightBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/hardLightBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/harrisCornerDetection.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/harrisCornerDetection.comp.spv -------------------------------------------------------------------------------- /glsl/target/haze.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/haze.comp.spv -------------------------------------------------------------------------------- /glsl/target/highlightShadow.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/highlightShadow.comp.spv -------------------------------------------------------------------------------- /glsl/target/highlightShadowTint.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/highlightShadowTint.comp.spv -------------------------------------------------------------------------------- /glsl/target/histogram.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/histogram.comp.spv -------------------------------------------------------------------------------- /glsl/target/histogramC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/histogramC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/histogramCombin.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/histogramCombin.comp.spv -------------------------------------------------------------------------------- /glsl/target/histogramLut.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/histogramLut.comp.spv -------------------------------------------------------------------------------- /glsl/target/histogramLutResult.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/histogramLutResult.comp.spv -------------------------------------------------------------------------------- /glsl/target/histogramLutResultC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/histogramLutResultC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/hue.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/hue.comp.spv -------------------------------------------------------------------------------- /glsl/target/hueBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/hueBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/inputARGB.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/inputARGB.comp.spv -------------------------------------------------------------------------------- /glsl/target/inputBRGA.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/inputBRGA.comp.spv -------------------------------------------------------------------------------- /glsl/target/inputRGB.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/inputRGB.comp.spv -------------------------------------------------------------------------------- /glsl/target/kuwahara.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/kuwahara.comp.spv -------------------------------------------------------------------------------- /glsl/target/levels.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/levels.comp.spv -------------------------------------------------------------------------------- /glsl/target/lightenBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/lightenBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/linearBurnBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/linearBurnBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/lookup.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/lookup.comp.spv -------------------------------------------------------------------------------- /glsl/target/luminance.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/luminance.comp.spv -------------------------------------------------------------------------------- /glsl/target/luminanceRange.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/luminanceRange.comp.spv -------------------------------------------------------------------------------- /glsl/target/luminanceThreshold.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/luminanceThreshold.comp.spv -------------------------------------------------------------------------------- /glsl/target/luminosityBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/luminosityBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/mapChannel.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/mapChannel.comp.spv -------------------------------------------------------------------------------- /glsl/target/mask.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/mask.comp.spv -------------------------------------------------------------------------------- /glsl/target/median.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/median.comp.spv -------------------------------------------------------------------------------- /glsl/target/medianC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/medianC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/medianK3.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/medianK3.comp.spv -------------------------------------------------------------------------------- /glsl/target/medianK3C1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/medianK3C1.comp.spv -------------------------------------------------------------------------------- /glsl/target/memset.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/memset.comp.spv -------------------------------------------------------------------------------- /glsl/target/memsetU1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/memsetU1.comp.spv -------------------------------------------------------------------------------- /glsl/target/monochrome.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/monochrome.comp.spv -------------------------------------------------------------------------------- /glsl/target/morph1_dilation.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/morph1_dilation.comp.spv -------------------------------------------------------------------------------- /glsl/target/morph1_dilationC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/morph1_dilationC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/morph1_erosion.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/morph1_erosion.comp.spv -------------------------------------------------------------------------------- /glsl/target/morph1_erosionC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/morph1_erosionC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/morph2_dilation.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/morph2_dilation.comp.spv -------------------------------------------------------------------------------- /glsl/target/morph2_dilationC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/morph2_dilationC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/morph2_erosion.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/morph2_erosion.comp.spv -------------------------------------------------------------------------------- /glsl/target/morph2_erosionC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/morph2_erosionC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/motionBlur.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/motionBlur.comp.spv -------------------------------------------------------------------------------- /glsl/target/motionDetector.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/motionDetector.comp.spv -------------------------------------------------------------------------------- /glsl/target/multiplyBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/multiplyBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnInCropMatBGR.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnInCropMatBGR.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnInCropMatBGRF16.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnInCropMatBGRF16.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnInCropMatRGB.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnInCropMatRGB.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnInCropMatRGBF16.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnInCropMatRGBF16.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnInMatBGR.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnInMatBGR.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnInMatBGRF16.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnInMatBGRF16.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnInMatRGB.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnInMatRGB.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnInMatRGBF16.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnInMatRGBF16.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnUpload.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnUpload.comp.spv -------------------------------------------------------------------------------- /glsl/target/ncnnUploadF16.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/ncnnUploadF16.comp.spv -------------------------------------------------------------------------------- /glsl/target/nobleCornerDetection.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/nobleCornerDetection.comp.spv -------------------------------------------------------------------------------- /glsl/target/normalBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/normalBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/opacity.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/opacity.comp.spv -------------------------------------------------------------------------------- /glsl/target/operate.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/operate.comp.spv -------------------------------------------------------------------------------- /glsl/target/overlayBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/overlayBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/perlinNoise.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/perlinNoise.comp.spv -------------------------------------------------------------------------------- /glsl/target/pinchDistortion.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/pinchDistortion.comp.spv -------------------------------------------------------------------------------- /glsl/target/pixellate.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/pixellate.comp.spv -------------------------------------------------------------------------------- /glsl/target/pixellatePosition.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/pixellatePosition.comp.spv -------------------------------------------------------------------------------- /glsl/target/poissonBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/poissonBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/polarPixellate.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/polarPixellate.comp.spv -------------------------------------------------------------------------------- /glsl/target/polkaDot.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/polkaDot.comp.spv -------------------------------------------------------------------------------- /glsl/target/posterize.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/posterize.comp.spv -------------------------------------------------------------------------------- /glsl/target/prewittEdge.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/prewittEdge.comp.spv -------------------------------------------------------------------------------- /glsl/target/reduce2_sumF1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/reduce2_sumF1.comp.spv -------------------------------------------------------------------------------- /glsl/target/reduce2_sumF4.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/reduce2_sumF4.comp.spv -------------------------------------------------------------------------------- /glsl/target/reduce_sum.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/reduce_sum.comp.spv -------------------------------------------------------------------------------- /glsl/target/reduce_sumC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/reduce_sumC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/resize.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/resize.comp.spv -------------------------------------------------------------------------------- /glsl/target/resizeC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/resizeC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/resizeF4.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/resizeF4.comp.spv -------------------------------------------------------------------------------- /glsl/target/rgb.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/rgb.comp.spv -------------------------------------------------------------------------------- /glsl/target/rgba2yuvV1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/rgba2yuvV1.comp.spv -------------------------------------------------------------------------------- /glsl/target/rgba2yuvV2.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/rgba2yuvV2.comp.spv -------------------------------------------------------------------------------- /glsl/target/saturation.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/saturation.comp.spv -------------------------------------------------------------------------------- /glsl/target/saturationBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/saturationBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/screenBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/screenBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/sharpen.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sharpen.comp.spv -------------------------------------------------------------------------------- /glsl/target/shiTomasiFeatureDetection.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/shiTomasiFeatureDetection.comp.spv -------------------------------------------------------------------------------- /glsl/target/showRound.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/showRound.comp.spv -------------------------------------------------------------------------------- /glsl/target/sketch.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sketch.comp.spv -------------------------------------------------------------------------------- /glsl/target/sketchThreshold.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sketchThreshold.comp.spv -------------------------------------------------------------------------------- /glsl/target/sketchThresholdC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sketchThresholdC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/skinTone.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/skinTone.comp.spv -------------------------------------------------------------------------------- /glsl/target/sobelEdge.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sobelEdge.comp.spv -------------------------------------------------------------------------------- /glsl/target/sobelThreshold.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sobelThreshold.comp.spv -------------------------------------------------------------------------------- /glsl/target/sobelThresholdC1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sobelThresholdC1.comp.spv -------------------------------------------------------------------------------- /glsl/target/softLightBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/softLightBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/solarize.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/solarize.comp.spv -------------------------------------------------------------------------------- /glsl/target/sourceOverBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sourceOverBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/sphereRefraction.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/sphereRefraction.comp.spv -------------------------------------------------------------------------------- /glsl/target/stretchDisortion.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/stretchDisortion.comp.spv -------------------------------------------------------------------------------- /glsl/target/subtractBlend.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/subtractBlend.comp.spv -------------------------------------------------------------------------------- /glsl/target/swirl.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/swirl.comp.spv -------------------------------------------------------------------------------- /glsl/target/thresholdedNMS.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/thresholdedNMS.comp.spv -------------------------------------------------------------------------------- /glsl/target/tiltShift.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/tiltShift.comp.spv -------------------------------------------------------------------------------- /glsl/target/toon.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/toon.comp.spv -------------------------------------------------------------------------------- /glsl/target/transpose.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/transpose.comp.spv -------------------------------------------------------------------------------- /glsl/target/twoImageBGR.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/twoImageBGR.comp.spv -------------------------------------------------------------------------------- /glsl/target/twoImageColumn.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/twoImageColumn.comp.spv -------------------------------------------------------------------------------- /glsl/target/twoImageRGB.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/twoImageRGB.comp.spv -------------------------------------------------------------------------------- /glsl/target/twoImageRow.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/twoImageRow.comp.spv -------------------------------------------------------------------------------- /glsl/target/unsharpMask.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/unsharpMask.comp.spv -------------------------------------------------------------------------------- /glsl/target/vibrance.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/vibrance.comp.spv -------------------------------------------------------------------------------- /glsl/target/vignette.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/vignette.comp.spv -------------------------------------------------------------------------------- /glsl/target/voronoiConsumer.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/voronoiConsumer.comp.spv -------------------------------------------------------------------------------- /glsl/target/whiteBalance.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/whiteBalance.comp.spv -------------------------------------------------------------------------------- /glsl/target/xyDerivative.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/xyDerivative.comp.spv -------------------------------------------------------------------------------- /glsl/target/yuv2rgbaV1.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/yuv2rgbaV1.comp.spv -------------------------------------------------------------------------------- /glsl/target/yuv2rgbaV2.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/yuv2rgbaV2.comp.spv -------------------------------------------------------------------------------- /glsl/target/zoomBlur.comp.spv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xxxzhou/aoce/c1895d7ecc784354744886fb6db4174f211d81d1/glsl/target/zoomBlur.comp.spv -------------------------------------------------------------------------------- /samples/cudatest/cudatest.cpp: -------------------------------------------------------------------------------- 1 | #include "cudatest.h" 2 | 3 | extern "C" void testFastGuided(); 4 | extern "C" void test10(); 5 | 6 | int main() { 7 | int intBufSize; 8 | nppsIntegralGetBufferSize_32s(1, &intBufSize); 9 | testFastGuided(); 10 | 11 | return 0; 12 | } -------------------------------------------------------------------------------- /samples/mathtest/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | file(GLOB MATH_TEST_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" ) 4 | file(GLOB MATH_TEST_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 5 | 6 | add_executable(math_test ${MATH_TEST_SOURCE} ${MATH_TEST_HEADER}) 7 | 8 | -------------------------------------------------------------------------------- /samples/mathtest/base.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int32_t add(int32_t a, int32_t b); 5 | -------------------------------------------------------------------------------- /samples/vulkanextratest/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(AoceHelper) 2 | 3 | add_definitions(-DAOCE_VULKAN_EXTRA_EXPORT_DEFINE) 4 | if(CMAKE_SYSTEM_NAME STREQUAL "Windows") 5 | # 添加用于不同平台窗口初始化的预编译指令 6 | add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN) 7 | elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") 8 | add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES) 9 | else() 10 | message(FATAL_ERROR "unsupported platform.") 11 | endif() 12 | 13 | file(GLOB AOCE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" ) 14 | file(GLOB AOCE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 15 | 16 | if(WIN32) 17 | add_executable(vulkanextratest WIN32 ${AOCE_SOURCE} ${AOCE_HEADER}) 18 | else() 19 | add_library(vulkanextratest SHARED ${AOCE_SOURCE} ${AOCE_HEADER}) 20 | endif() 21 | 22 | target_link_libraries(vulkanextratest aoce aoce_vulkan aoce_vulkan_extra) 23 | 24 | aoce_output(vulkanextratest) 25 | #install_aoce_module(vulkanextratest FALSE) -------------------------------------------------------------------------------- /swig/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | function(add_swig_definitions def) 2 | if("${SWIG_DEFINITIONS}" STREQUAL "") 3 | string(APPEND SWIG_DEFINITIONS "${def}") 4 | else() 5 | string(APPEND SWIG_DEFINITIONS " " "${def}") 6 | endif() 7 | set(SWIG_DEFINITIONS ${SWIG_DEFINITIONS} PARENT_SCOPE) 8 | endfunction(add_swig_definitions def) 9 | 10 | if (AOCE_INSTALL_AGORA) 11 | # 对应%{...%}代码段里宏定义 12 | add_definitions(-DAOCE_INSTALL_AGORA) 13 | # 对应swig语法中的宏定义 14 | list(APPEND SWIG_DEFINITIONS -DAOCE_INSTALL_AGORA) 15 | endif() 16 | 17 | if (AOCE_INSTALL_NCNN) 18 | add_definitions(-DAOCE_INSTALL_NCNN) 19 | list(APPEND SWIG_DEFINITIONS -DAOCE_INSTALL_NCNN) 20 | endif() 21 | 22 | message(STATUS "swig definitons:" ${SWIG_DEFINITIONS}) 23 | 24 | if(WIN32) 25 | add_subdirectory(CSharp) 26 | elseif(ANDROID) 27 | add_subdirectory(Java) 28 | endif() 29 | 30 | 31 | -------------------------------------------------------------------------------- /swig/talkto.i: -------------------------------------------------------------------------------- 1 | 2 | 3 | %{ 4 | #include "aoce_talkto/Talkto.h" 5 | %} 6 | #define AOCE_TALKTO_EXPORT 7 | %include "aoce_talkto/Talkto.h" --------------------------------------------------------------------------------