看得讓人DT的GLSL

來源:互聯網
上載者:User

GLES2.0封裝到shader和vbo結合的部分, 蒙了

vertex layout(或叫vertex declaration)要一個一個element的綁定到一個shader變數上(GL叫attribute), 也就是相當於HLSL的VS_INPUT結構體吧.

問題是, GLSL裡沒有"semantic", 然後問題就來了

舉個例子:

一個簡單的頂點結構:

struct Vertex<br />{<br /> float3 position;<br /> float3 normal;<br /> float2 uv;<br />}

在DX中可以通過指定vetex declaration來綁定到指定寄存器, HLSL裡通過語義來標明當前輸入變數是對應哪個寄存器的:

struct VS_INPUT<br />{<br /> float3 position : POSITION;<br /> float3 normal : NORMAL;<br /> float2 uv : TEXCOORD;<br />}

但是對於GLSL, 它沒有vertex declaration這麼個東西! 怪不得大家都用CG...無奈手機上用不了CG, 還是要面對這個問題.

起初我是設想的把每種vertex element對應一個固定的attribute名, 如a_position0, a_normal0, a_color1之類, 然後用程式自動綁定. 寫shader的時候只能使用程式裡規定的attribute名字. 寫到glBindAttribLocation時, 問題又來了:

glBindAttribLocation之後要glLinkProgram才有效果~

也就是說, 每個effect(vs + ps)要在link之前把所有參數全部手動綁定一遍. 但對於vertex layout來說不太現實. 難道還要自己用XML定義一下所有參數? 昏倒

想來想去, 好像只有OGRE有用GLSL, 查了一下, 我原本想的沒有錯, 它也是用固定attribute名來綁定element的:

// a builtincustom attrib name<br />// ----------------------------------------------<br />//0 gl_Vertexvertex<br />// 1 n/ablendWeights<br />//2 gl_Normalnormal<br />//3 gl_Colorcolour<br />//4 gl_SecondaryColorsecondary_colour<br />//5 gl_FogCoordfog_coord<br />// 7 n/ablendIndices<br />//8 gl_MultiTexCoord0uv0<br />//9 gl_MultiTexCoord1uv1<br />//10 gl_MultiTexCoord2uv2<br />//11 gl_MultiTexCoord3uv3<br />//12 gl_MultiTexCoord4uv4<br />//13 gl_MultiTexCoord5uv5<br />//14 gl_MultiTexCoord6uv6, tangent<br />//15 gl_MultiTexCoord7uv7, binormal 

 但是它沒有在乎vertexlayout究竟是什麼樣的, 一鼓腦的全綁定上了

這樣的話, glEnableVertexAttribArray的index就需要映射一下了...

嗯...shader裡多聲明幾個不使用的變數冒似沒有什麼問題, 就這麼幹了~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.