在gpupixel中自定义锐化filter
文章目录基本的结构自定义头文件自定义源文件修改CMakeLists.txt参考基本的结构classCustomFilter:publicFilter{public:staticstd::shared_ptrCustomFilterCreate();boolInit();virtualboolDoRender(boolupdateSinkstrue)override;// Custom parameter settersvoidsetParameter(floatvalue);protected:CustomFilter(){};// Filter parametersfloat_parameter;};自定义头文件sharpen_filter.h#pragmaonce#includegpupixel/filter/nearby_sampling3x3_filter.h#includegpupixel/gpupixel_define.hnamespacegpupixel{classGPUPIXEL_APISharpenFilter:publicNearbySampling3x3Filter{public:staticstd::shared_ptrSharpenFilterCreate();boolInit();virtualboolDoRender(boolupdateSinkstrue)override;// 锐化强度通常 0.0 到 4.00.0 为原图voidsetSharpness(floatsharpness);protected:SharpenFilter(){};floatsharpness_;};}// namespace gpupixel自定义源文件sharpen_filter.cc#includegpupixel/filter/sharpen_filter.h#includecore/gpupixel_context.hnamespacegpupixel{// 锐化 Shader 逻辑中心像素权重增加周围像素权重减少conststd::string kSharpenFragmentShaderStringR( precision mediump float; uniform sampler2D inputImageTexture; uniform float sharpness; varying vec2 textureCoordinate; varying vec2 vLeftTexCoord; varying vec2 vRightTexCoord; varying vec2 vTopTexCoord; varying vec2 vBottomTexCoord; void main() { vec4 centerColor texture2D(inputImageTexture, textureCoordinate); vec3 leftColor texture2D(inputImageTexture, vLeftTexCoord).rgb; vec3 rightColor texture2D(inputImageTexture, vRightTexCoord).rgb; vec3 topColor texture2D(inputImageTexture, vTopTexCoord).rgb; vec3 bottomColor texture2D(inputImageTexture, vBottomTexCoord).rgb; // 计算周围像素的平均值贡献 // 锐化公式Result Center sharpness * (Center - Average(Surrounding)) vec3 sharpenedColor centerColor.rgb * (1.0 4.0 * sharpness) - (leftColor rightColor topColor bottomColor) * sharpness; gl_FragColor vec4(sharpenedColor, centerColor.a); });std::shared_ptrSharpenFilterSharpenFilter::Create(){autoretstd::shared_ptrSharpenFilter(newSharpenFilter());gpupixel::GPUPixelContext::GetInstance()-SyncRunWithContext([]{if(ret!ret-Init()){ret.reset();}});returnret;}boolSharpenFilter::Init(){if(!InitWithFragmentShaderString(kSharpenFragmentShaderString)){returnfalse;}sharpness_0.5;// 默认中等锐化RegisterProperty(sharpness,sharpness_,The sharpness adjustment to apply (0.0 - 4.0),[this](floatsharpness){setSharpness(sharpness);});returntrue;}voidSharpenFilter::setSharpness(floatsharpness){sharpness_sharpness;}boolSharpenFilter::DoRender(boolupdateSinks){filter_program_-SetUniformValue(sharpness,sharpness_);returnNearbySampling3x3Filter::DoRender(updateSinks);}}// namespace gpupixel修改CMakeLists.txt在 common_source_files 列表的 filter 部分建议放在 toon_filter.cc 附近添加你的新文件路径# ... 前面的文件 ...${CMAKE_CURRENT_SOURCE_DIR}/filter/toon_filter.cc${CMAKE_CURRENT_SOURCE_DIR}/filter/sharpen_filter.cc# --- 添加这一行${CMAKE_CURRENT_SOURCE_DIR}/filter/pixellation_filter.cc# ... 后面的文件 ...为了保持项目整洁在下方的 public_filter_header_files 列表中也添加对应的 .h 文件# ...${PROJECT_SOURCE_DIR}/include/gpupixel/filter/toon_filter.h${PROJECT_SOURCE_DIR}/include/gpupixel/filter/sharpen_filter.h# --- 添加这一行${PROJECT_SOURCE_DIR}/include/gpupixel/filter/contrast_filter.h# ...参考https://github.com/pixpark/gpupixel
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2427435.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!