Unity渲染iOS中的NV12格式數(shù)據(jù)---(下)

上一篇中我們提到先在iOS端將NV12先轉(zhuǎn)換成YUV褒繁,再傳入Unity中轉(zhuǎn)換成RGB,由于在iOS端轉(zhuǎn)換過程是在CPU中進行的馍忽,效率較慢棒坏,一幀圖像數(shù)據(jù)大概消耗20ms左右。因為Unity的shader轉(zhuǎn)換是在GPU中進行舵匾,效率高俊抵,所以考慮將這一步驟也挪到Unity中進行。

需要更改的有兩個步驟:

  • 將數(shù)據(jù)拷貝到顯存
// 將數(shù)據(jù)拷貝到顯存
glBindTexture(GL_TEXTURE_2D, tex[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, w, h, 0, GL_ALPHA, GL_UNSIGNED_BYTE, pData0);

glBindTexture(GL_TEXTURE_2D, tex[1]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, w/2, h/2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, pData1);

注意GL_LUMINANCE_ALPHA參數(shù)坐梯,我們先來看看百度對于glTexImage2D方法的介紹徽诲。

這是一個OpenGL函數(shù)(以下敘述以OpenGL ES2.0為例)。
函數(shù)原型:
GL_APICALL void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels);
參數(shù)說明:
target 指定目標紋理,這個值必須是GL_TEXTURE_2D谎替。
level 執(zhí)行細節(jié)級別偷溺。0是最基本的圖像級別,n表示第N級貼圖細化級別钱贯。
internalformat 指定紋理中的顏色組件挫掏。可選的值有GL_ALPHA,GL_RGB,GL_RGBA,GL_LUMINANCE, GL_LUMINANCE_ALPHA 等幾種秩命。
width 指定紋理圖像的寬度尉共,必須是2的n次方。紋理圖片至少要支持64個材質(zhì)元素的寬度
height 指定紋理圖像的高度弃锐,必須是2的m次方袄友。紋理圖片至少要支持64個材質(zhì)元素的高度
border 指定邊框的寬度。必須為0霹菊。
format 像素數(shù)據(jù)的顏色格式, 不需要和internalformatt取值必須相同剧蚣。可選的值參考internalformat旋廷。
type 指定像素數(shù)據(jù)的數(shù)據(jù)類型鸠按。可以使用的值有GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4,GL_UNSIGNED_SHORT_5_5_5_1饶碘。
pixels 指定內(nèi)存中指向圖像數(shù)據(jù)的指針

internalformat 指定紋理中的顏色組件目尖。因為在上一篇中我們每個數(shù)據(jù)只包含Y、U熊镣、V中的一個方向的分量卑雁,所以我們使用GL_ALPHA募书,同理在shader中取值時也是通過alpha通道取值绪囱。這一次NV12格式的數(shù)據(jù)UV方向分量在一起,所以我們使用GL_LUMINANCE_ALPHA莹捡,灰度值和Alpha值鬼吵,將U、V分別存入RGB和A中篮赢。

  • 使用shader將NV12轉(zhuǎn)換為RGB
fixed4 yuv;
yuv.x = tex2D(_MainTexU, i.uv).a;
yuv.y = tex2D(_MainTexUV, i.uv).rgb - 0.5;  
yuv.z = tex2D(_MainTexUV, i.uv).a - 0.5;
c.r = yuv.x + 1.403*yuv.z;
c.g = yuv.x - 0.344*yuv.y - 0.714*yuv.z;
c.b = yuv.x + 1.770*yuv.y;

注意在取值時從rgb通道取出U方向分量齿椅,alpha通道取出V方向分量。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末启泣,一起剝皮案震驚了整個濱河市涣脚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寥茫,老刑警劉巖遣蚀,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡芭梯,警方通過查閱死者的電腦和手機险耀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玖喘,“玉大人甩牺,你說我怎么就攤上這事±勰危” “怎么了贬派?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澎媒。 經(jīng)常有香客問我赠群,道長,這世上最難降的妖魔是什么旱幼? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任查描,我火速辦了婚禮,結(jié)果婚禮上柏卤,老公的妹妹穿的比我還像新娘冬三。我一直安慰自己,他們只是感情好缘缚,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布勾笆。 她就那樣靜靜地躺著,像睡著了一般桥滨。 火紅的嫁衣襯著肌膚如雪窝爪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天齐媒,我揣著相機與錄音蒲每,去河邊找鬼。 笑死喻括,一個胖子當著我的面吹牛邀杏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唬血,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼望蜡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拷恨?” 一聲冷哼從身側(cè)響起脖律,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腕侄,沒想到半個月后小泉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勒叠,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年膏孟,在試婚紗的時候發(fā)現(xiàn)自己被綠了眯分。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡柒桑,死狀恐怖弊决,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情魁淳,我是刑警寧澤飘诗,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站界逛,受9級特大地震影響昆稿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜息拜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一溉潭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧少欺,春花似錦喳瓣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仿滔,卻和暖如春惠毁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崎页。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工鞠绰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人实昨。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓洞豁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荒给。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容