|
@@ -12,27 +12,22 @@ import KingfisherWebP
|
|
import UIKit
|
|
import UIKit
|
|
|
|
|
|
open class PQImageFilter: PQBaseFilter {
|
|
open class PQImageFilter: PQBaseFilter {
|
|
- var widthOfImage: Int32!
|
|
|
|
- var heightOfImage: Int32!
|
|
|
|
-
|
|
|
|
// 图片纹理
|
|
// 图片纹理
|
|
var imageTexture: GLuint = 0
|
|
var imageTexture: GLuint = 0
|
|
|
|
|
|
var mSticker: PQEditVisionTrackMaterialsModel?
|
|
var mSticker: PQEditVisionTrackMaterialsModel?
|
|
-
|
|
|
|
var newImage: UIImage?
|
|
var newImage: UIImage?
|
|
-
|
|
|
|
deinit {
|
|
deinit {
|
|
BFLog(message: "image filter deinit 析构掉~")
|
|
BFLog(message: "image filter deinit 析构掉~")
|
|
newImage = nil
|
|
newImage = nil
|
|
-
|
|
|
|
- if(imageTexture != 0){
|
|
|
|
- glDeleteTextures(1,&imageTexture)
|
|
|
|
|
|
+
|
|
|
|
+ if imageTexture != 0 {
|
|
|
|
+ glDeleteTextures(1, &imageTexture)
|
|
imageTexture = 0
|
|
imageTexture = 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- init(sticker: PQEditVisionTrackMaterialsModel) {
|
|
|
|
|
|
+ init(sticker: PQEditVisionTrackMaterialsModel, isExport: Bool = false, showUISize: CGSize = .zero) {
|
|
super.init(fragmentShader: PassthroughFragmentShader, numberOfInputs: 1)
|
|
super.init(fragmentShader: PassthroughFragmentShader, numberOfInputs: 1)
|
|
|
|
|
|
mSticker = sticker
|
|
mSticker = sticker
|
|
@@ -46,18 +41,34 @@ open class PQImageFilter: PQBaseFilter {
|
|
|
|
|
|
newImage = UIImage(contentsOfFile: documensDirectory + sticker.locationPath)
|
|
newImage = UIImage(contentsOfFile: documensDirectory + sticker.locationPath)
|
|
|
|
|
|
|
|
+ // 如果是预览时 对原图进行缩放处理
|
|
|
|
+ if !isExport {
|
|
|
|
+ var maxLength = max(showUISize.width, showUISize.height)
|
|
|
|
+
|
|
|
|
+ maxLength = maxLength + 10
|
|
|
|
+ newImage = newImage?.nx_scaleWithMaxLength(maxLength: CGFloat(maxLength * UIScreen.main.scale))
|
|
|
|
+
|
|
|
|
+ BFLog(message: "newImage is \(newImage?.size.width ?? 0) \(newImage?.size.height ?? 0)")
|
|
|
|
+
|
|
|
|
+ if newImage!.size.width > 1000 || newImage!.size.height > 1000 {
|
|
|
|
+ BFLog(message: "sssssssss")
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
// 保证是16的公倍数
|
|
// 保证是16的公倍数
|
|
- // let aptImageSize = NXAVUtil.aptSize(newImage!.size)
|
|
|
|
- // if (!__CGSizeEqualToSize(aptImageSize, newImage!.size))
|
|
|
|
- // {
|
|
|
|
- //
|
|
|
|
- // FilterLog(message: "原图大小宽度不是16的倍数 \(newImage!.size)")
|
|
|
|
- //
|
|
|
|
- // newImage = newImage?.nx_scaleToSize(size: aptImageSize)
|
|
|
|
- //
|
|
|
|
- // FilterLog(message: "归16后大小 \(newImage!.size)")
|
|
|
|
- //
|
|
|
|
- // }
|
|
|
|
|
|
+// let aptImageSize = NXAVUtil.aptSize(newImage!.size)
|
|
|
|
+// if (!__CGSizeEqualToSize(aptImageSize, newImage!.size))
|
|
|
|
+// {
|
|
|
|
+//
|
|
|
|
+// FilterLog(message: "原图大小宽度不是16的倍数 \(newImage!.size)")
|
|
|
|
+//
|
|
|
|
+// newImage = newImage?.nx_scaleToSize(size: aptImageSize)
|
|
|
|
+//
|
|
|
|
+// FilterLog(message: "归16后大小 \(newImage!.size)")
|
|
|
|
+//
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+//
|
|
autoreleasepool {
|
|
autoreleasepool {
|
|
if newImage == nil {
|
|
if newImage == nil {
|
|
let filePath = documensDirectory + (mSticker?.locationPath ?? "")
|
|
let filePath = documensDirectory + (mSticker?.locationPath ?? "")
|
|
@@ -73,7 +84,7 @@ open class PQImageFilter: PQBaseFilter {
|
|
|
|
|
|
if newImage?.cgImage != nil {
|
|
if newImage?.cgImage != nil {
|
|
BFLog(message: "提前加载图片。。。。timelineIn : \(String(describing: mSticker?.timelineIn)) timelineOut :\(String(describing: mSticker?.timelineOut)) \(String(describing: mSticker?.locationPath))")
|
|
BFLog(message: "提前加载图片。。。。timelineIn : \(String(describing: mSticker?.timelineIn)) timelineOut :\(String(describing: mSticker?.timelineOut)) \(String(describing: mSticker?.locationPath))")
|
|
-
|
|
|
|
|
|
+
|
|
// imageTexture = PQGPUImageTools.setupTexture(image: newImage!.cgImage!)
|
|
// imageTexture = PQGPUImageTools.setupTexture(image: newImage!.cgImage!)
|
|
|
|
|
|
} else { FilterLog(message: "image filter init error image data is nil!") }
|
|
} else { FilterLog(message: "image filter init error image data is nil!") }
|
|
@@ -82,16 +93,16 @@ open class PQImageFilter: PQBaseFilter {
|
|
// override public func newFramebufferAvailable(_ framebuffer: Framebuffer, fromSourceIndex: UInt) {
|
|
// override public func newFramebufferAvailable(_ framebuffer: Framebuffer, fromSourceIndex: UInt) {
|
|
// super.newFramebufferAvailable(framebuffer, fromSourceIndex: fromSourceIndex)
|
|
// super.newFramebufferAvailable(framebuffer, fromSourceIndex: fromSourceIndex)
|
|
//
|
|
//
|
|
-//// let currTime = CMTimeGetSeconds(CMTime(value: framebuffer.timingStyle.timestamp!.value, timescale: framebuffer.timingStyle.timestamp!.timescale))
|
|
|
|
-////
|
|
|
|
-//// if mSticker!.timelineIn != 0, currTime >= mSticker!.timelineIn, currTime <= mSticker!.timelineOut, imageTexture == 0 {
|
|
|
|
-//// if newImage != nil {
|
|
|
|
-////// imageTexture = PQGPUImageTools.setupTexture(image: newImage!.cgImage!)
|
|
|
|
-//// } else { BFLog(message: "image filter init error image data is nil!") }
|
|
|
|
-//// }
|
|
|
|
|
|
+ //// let currTime = CMTimeGetSeconds(CMTime(value: framebuffer.timingStyle.timestamp!.value, timescale: framebuffer.timingStyle.timestamp!.timescale))
|
|
|
|
+ ////
|
|
|
|
+ //// if mSticker!.timelineIn != 0, currTime >= mSticker!.timelineIn, currTime <= mSticker!.timelineOut, imageTexture == 0 {
|
|
|
|
+ //// if newImage != nil {
|
|
|
|
+ ////// imageTexture = PQGPUImageTools.setupTexture(image: newImage!.cgImage!)
|
|
|
|
+ //// } else { BFLog(message: "image filter init error image data is nil!") }
|
|
|
|
+ //// }
|
|
// }
|
|
// }
|
|
|
|
|
|
- override open func renderFrame() {
|
|
|
|
|
|
+ open override func renderFrame() {
|
|
let inputFramebuffer: Framebuffer = inputFramebuffers[0]!
|
|
let inputFramebuffer: Framebuffer = inputFramebuffers[0]!
|
|
let inputSize = inputFramebuffer.sizeForTargetOrientation(.portrait)
|
|
let inputSize = inputFramebuffer.sizeForTargetOrientation(.portrait)
|
|
|
|
|
|
@@ -118,27 +129,26 @@ open class PQImageFilter: PQBaseFilter {
|
|
FilterLog(message: " image filter 当前时间: \(currTime) \(newImage!.size)")
|
|
FilterLog(message: " image filter 当前时间: \(currTime) \(newImage!.size)")
|
|
|
|
|
|
// if currTime >= mSticker!.timelineIn && currTime <= mSticker!.timelineOut {
|
|
// if currTime >= mSticker!.timelineIn && currTime <= mSticker!.timelineOut {
|
|
- FilterLog(message: " 显示图片当前时间: \(currTime) 开始时间:\(mSticker!.timelineIn) 结束时间:\(mSticker!.timelineOut) \(String(describing: newImage?.size))")
|
|
|
|
- // 取纹理坐标
|
|
|
|
- let textureCoordinates = PQGPUImageTools.getTextureCoordinates(sticker: mSticker!, textureSize: newImage!.size, cannvasSize: inputSize)
|
|
|
|
-
|
|
|
|
- FilterLog(message: "textureCoordinates is \(textureCoordinates)")
|
|
|
|
-
|
|
|
|
- //imageTexture 有可能被析构导致黑屏
|
|
|
|
- if(imageTexture == 0 && newImage?.cgImage != nil){
|
|
|
|
- FilterLog(message: "imageTexture is error !!!!!重新创建")
|
|
|
|
- imageTexture = PQGPUImageTools.setupTexture(image: newImage!.cgImage!)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- let texturePropertiesimagetwo = InputTextureProperties(textureCoordinates: textureCoordinates, texture: imageTexture)
|
|
|
|
|
|
+ FilterLog(message: " 显示图片当前时间: \(currTime) 开始时间:\(mSticker!.timelineIn) 结束时间:\(mSticker!.timelineOut) \(String(describing: newImage?.size))")
|
|
|
|
+ // 取纹理坐标
|
|
|
|
+ let textureCoordinates = PQGPUImageTools.getTextureCoordinates(sticker: mSticker!, textureSize: newImage!.size, cannvasSize: inputSize)
|
|
|
|
+
|
|
|
|
+ FilterLog(message: "textureCoordinates is \(textureCoordinates)")
|
|
|
|
|
|
- let verticesPoint: [GLfloat] = PQGPUImageTools.getVerticesPoint(sticker: mSticker!, textureSize: newImage!.size, cannvasSize: inputSize)
|
|
|
|
- renderQuadWithShader(shader,
|
|
|
|
- uniformSettings: uniformSettings,
|
|
|
|
- vertexBufferObject: PQGPUImageTools.NXGenerateVBO(for: verticesPoint),
|
|
|
|
|
|
+ // imageTexture 有可能被析构导致黑屏
|
|
|
|
+ if imageTexture == 0 && newImage?.cgImage != nil {
|
|
|
|
+ FilterLog(message: "imageTexture is error !!!!!重新创建")
|
|
|
|
+ imageTexture = PQGPUImageTools.setupTexture(image: newImage!.cgImage!)
|
|
|
|
+ }
|
|
|
|
|
|
- inputTextures: [texturePropertiesimagetwo])
|
|
|
|
- releaseIncomingFramebuffers()
|
|
|
|
-
|
|
|
|
|
|
+ let texturePropertiesimagetwo = InputTextureProperties(textureCoordinates: textureCoordinates, texture: imageTexture)
|
|
|
|
+
|
|
|
|
+ let verticesPoint: [GLfloat] = PQGPUImageTools.getVerticesPoint(sticker: mSticker!, textureSize: newImage!.size, cannvasSize: inputSize)
|
|
|
|
+ renderQuadWithShader(shader,
|
|
|
|
+ uniformSettings: uniformSettings,
|
|
|
|
+ vertexBufferObject: PQGPUImageTools.NXGenerateVBO(for: verticesPoint),
|
|
|
|
+
|
|
|
|
+ inputTextures: [texturePropertiesimagetwo])
|
|
|
|
+ releaseIncomingFramebuffers()
|
|
}
|
|
}
|
|
}
|
|
}
|