GPUImage原始碼解讀 二

2021-08-21 18:16:13 字數 2502 閱讀 5457

這篇文章主要是閱讀gpuimage框架中的 glprogram、gpuimagecontext 兩個重要類的原始碼。這兩個類是 gpuimage 框架的基礎,裡面涉及的知識也有 opengl es 基礎 和 多執行緒 基礎。以下是原始碼內容:

glprogram

一 glprogram

glprogram專門處理opengl es程式的建立等相關工作。

- (id)initwithvertexshaderstring:(nsstring *)vshaderstring

fragmentshaderstring:(nsstring *)fshaderstring;

- (id)initwithvertexshaderstring:(nsstring *)vshaderstring

fragmentshaderfilename:(nsstring *)fshaderfilename;

- (id)initwithvertexshaderfilename:(nsstring *)vshaderfilename

fragmentshaderfilename:(nsstring *)fshaderfilename;

初始化的過程包含了頂點片源著色器的建立、編譯,著色器程式的建立,頂點片源著色器附著到著色器程式等過程。以檔案初始化方式最後都會呼叫 initwithvertexshaderstring:fragmentshaderstring: 字串的初始化方式,

- (id)initwithvertexshaderstring:(nsstring *)vshaderstring

fragmentshaderstring:(nsstring *)fshaderstring;

// 編譯片源著色器

// create and compile fragment shader

if (![self compileshader:&fragshader

type:gl_fragment_shader

string:fshaderstring])

// 將頂點片源著色器附著到著色器程式

glattachshader(program, vertshader);

glattachshader(program, fragshader);

}return

self;

}

//著色器變數的儲存和讀取

- (void)addattribute:(nsstring *)attributename;

- (gluint)attributeindex:(nsstring *)attributename;

- (gluint)uniformindex:(nsstring *)uniformname;

具體實現:

- (void)addattribute:(nsstring *)attributename

}// end:addattribute

// start:indexmethods

- (gluint)attributeindex:(nsstring *)attributename

- (gluint)uniformindex:(nsstring *)uniformname

//連線 program

-(bool)link;

- (bool)link

if (fragshader)

// 設定初始化成功標識

self

.initialized = yes;

// cfabsolutetime linktime = (cfabsolutetimegetcurrent() - starttime);

// nslog(@"linked in %f ms", linktime * 1000.0);

return

yes;

}

//使用 program

- (void)use;

- (void)use

//取到log string

-(nsstring *)vertexshaderlog;

-(nsstring *)fragmentshaderlog;

-(nsstring *)programlog;

// start:privatelog 列印 log

- (nsstring *)logforopenglobject:(gluint)object

infocallback:(glinfofunction)infofunc

logfunc:(gllogfunction)logfunc

- (void)dealloc

GPUImage原始碼解讀 十五

gpuimagerawdataoutput gpuimagerawdataoutput實現了gpuimageinput協議,它可以將輸入的幀快取轉換為原始資料。id initwithimagesize cgsize newimagesize resultsinbgraformat bool resu...

GPUImage原始碼解讀 五

從cache中獲取乙個gpuimageframebuffer物件,如果獲取失敗,那麼建立乙個新的gpuimageframebuffer物件。param framebuffersize 物件的大小 param textureoptions 紋理的配置資訊 param onlytexture 指示是否只...

go原始碼解讀(二)

solve the 2,3,5 problem print all numbers with 2,3,or 5 as factor using channels.使用通道解決2,3,5問題 以2 3或5為因子列印所有數字 test the solution,silently.測試解決方案。packa...