日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

insta经典滤镜下载

發布時間:2025/7/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 insta经典滤镜下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  好不容易找到的Insta的經典濾鏡源碼,貼出來幫大家學習。

// // IFImageFilter.m // InstaFilters // // Created by Di Wu on 2/28/12. // Copyright (c) 2012 twitter:@diwup. All rights reserved. // #import "IFImageFilter.h"@interface IFImageFilter () {GLint filterPositionAttribute, filterTextureCoordinateAttribute;GLint filterInputTextureUniform, filterInputTextureUniform2, filterInputTextureUniform3, filterInputTextureUniform4, filterInputTextureUniform5, filterInputTextureUniform6;GLuint filterFramebuffer; }@end@implementation IFImageFilter- (id)initWithFragmentShaderFromString:(NSString *)fragmentShaderString; {if (!(self = [super init])){return nil;}[GPUImageOpenGLESContext useImageProcessingContext];filterProgram = [[GLProgram alloc] initWithVertexShaderString:kGPUImageVertexShaderString fragmentShaderString:fragmentShaderString];[filterProgram addAttribute:@"position"];[filterProgram addAttribute:@"inputTextureCoordinate"];if (![filterProgram link]){NSString *progLog = [filterProgram programLog];NSLog(@"Program link log: %@", progLog); NSString *fragLog = [filterProgram fragmentShaderLog];NSLog(@"Fragment shader compile log: %@", fragLog);NSString *vertLog = [filterProgram vertexShaderLog];NSLog(@"Vertex shader compile log: %@", vertLog);filterProgram = nil;NSAssert(NO, @"Filter shader link failed");}filterPositionAttribute = [filterProgram attributeIndex:@"position"];filterTextureCoordinateAttribute = [filterProgram attributeIndex:@"inputTextureCoordinate"];filterInputTextureUniform = [filterProgram uniformIndex:@"inputImageTexture"]; // This does assume a name of "inputImageTexture" for the fragment shaderfilterInputTextureUniform2 = [filterProgram uniformIndex:@"inputImageTexture2"]; // This does assume a name of "inputImageTexture2" for second input texture in the fragment shaderfilterInputTextureUniform3 = [filterProgram uniformIndex:@"inputImageTexture3"]; // This does assume a name of "inputImageTexture3" for second input texture in the fragment shaderfilterInputTextureUniform4 = [filterProgram uniformIndex:@"inputImageTexture4"]; // This does assume a name of "inputImageTexture4" for second input texture in the fragment shaderfilterInputTextureUniform5 = [filterProgram uniformIndex:@"inputImageTexture5"]; // This does assume a name of "inputImageTexture5" for second input texture in the fragment shaderfilterInputTextureUniform6 = [filterProgram uniformIndex:@"inputImageTexture6"]; // This does assume a name of "inputImageTexture6" for second input texture in the fragment shader [filterProgram use]; glEnableVertexAttribArray(filterPositionAttribute);glEnableVertexAttribArray(filterTextureCoordinateAttribute);NSLog(@".0.0.0%@",NSStringFromCGSize(inputTextureSize));return self; }- (void)renderToTextureWithVertices:(const GLfloat *)vertices textureCoordinates:(const GLfloat *)textureCoordinates; {NSLog(@".0.0.0%@",NSStringFromCGSize(inputTextureSize));[GPUImageOpenGLESContext useImageProcessingContext];[self setFilterFBO];[filterProgram use];glClearColor(0.0f, 0.0f, 0.0f, 1.0f);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glActiveTexture(GL_TEXTURE2);glBindTexture(GL_TEXTURE_2D, filterSourceTexture);glUniform1i(filterInputTextureUniform, 2); if (filterSourceTexture2 != 0){glActiveTexture(GL_TEXTURE3);glBindTexture(GL_TEXTURE_2D, filterSourceTexture2);glUniform1i(filterInputTextureUniform2, 3); }if (filterSourceTexture3 != 0){glActiveTexture(GL_TEXTURE4);glBindTexture(GL_TEXTURE_2D, filterSourceTexture3);glUniform1i(filterInputTextureUniform3, 4); }if (filterSourceTexture4 != 0){glActiveTexture(GL_TEXTURE5);glBindTexture(GL_TEXTURE_2D, filterSourceTexture4);glUniform1i(filterInputTextureUniform4, 5); }if (filterSourceTexture5 != 0){glActiveTexture(GL_TEXTURE6);glBindTexture(GL_TEXTURE_2D, filterSourceTexture5);glUniform1i(filterInputTextureUniform5, 6); }if (filterSourceTexture6 != 0){glActiveTexture(GL_TEXTURE7);glBindTexture(GL_TEXTURE_2D, filterSourceTexture6);glUniform1i(filterInputTextureUniform6, 7); }glVertexAttribPointer(filterPositionAttribute, 2, GL_FLOAT, 0, 0, vertices);glVertexAttribPointer(filterTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, textureCoordinates);glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);for (id<GPUImageInput> currentTarget in targets){[currentTarget setInputSize:inputTextureSize];[currentTarget newFrameReady];} }- (void)setFilterFBO; {if (!filterFramebuffer){[self createFilterFBO];}glBindFramebuffer(GL_FRAMEBUFFER, filterFramebuffer);CGSize currentFBOSize = [self sizeOfFBO];glViewport(0, 0, (int)currentFBOSize.width, (int)currentFBOSize.height); }- (void)createFilterFBO; {glActiveTexture(GL_TEXTURE1);glGenFramebuffers(1, &filterFramebuffer);glBindFramebuffer(GL_FRAMEBUFFER, filterFramebuffer);NSLog(@".0.0.0%@",NSStringFromCGSize(inputTextureSize));CGSize currentFBOSize = [self sizeOfFBO];// NSLog(@"Filter size: %f, %f", currentFBOSize.width, currentFBOSize.height); glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8_OES, (int)currentFBOSize.width, (int)currentFBOSize.height);glBindTexture(GL_TEXTURE_2D, outputTexture);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (int)currentFBOSize.width, (int)currentFBOSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, outputTexture, 0);GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);NSAssert(status == GL_FRAMEBUFFER_COMPLETE, @"Incomplete filter FBO: %d", status); }- (CGSize)sizeOfFBO; {CGSize outputSize = [self maximumOutputSize];if ( (CGSizeEqualToSize(outputSize, CGSizeZero)) || (inputTextureSize.width < outputSize.width) ){return inputTextureSize;}else{return outputSize;} }- (void)setInputTexture:(GLuint)newInputTexture atIndex:(NSInteger)textureIndex; {if (textureIndex == 0){filterSourceTexture = newInputTexture;}else if (filterSourceTexture2 == 0){filterSourceTexture2 = newInputTexture;} else if (filterSourceTexture3 == 0) {filterSourceTexture3 = newInputTexture;}else if (filterSourceTexture4 == 0) {filterSourceTexture4 = newInputTexture;}else if (filterSourceTexture5 == 0) {filterSourceTexture5 = newInputTexture;}else if (filterSourceTexture6 == 0) {filterSourceTexture6 = newInputTexture;}}@end View Code

?

效果圖

?

?

百度網盤下載http://pan.baidu.com/s/1c04sFTY

總結

以上是生活随笔為你收集整理的insta经典滤镜下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。