青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

永遠也不完美的程序

不斷學習,不斷實踐,不斷的重構……

常用鏈接

統計

積分與排名

好友鏈接

最新評論

gles2開發中遇到的問題及解決方法

1.紋理
在gles2中,紋理在glsl中定義的順序,并不是按先后順序來排列的。
例如以下代碼:
1uniform sampler2D Samp0;
2uniform sampler2D Samp1;     
3uniform sampler2D Samp2;     
假如我們以為Samp0是第0個紋理,Samp1是第1個紋理……這樣就錯了。
這里我們要顯式的指定每個Sampler的索引。
下面是取得紋理索引的代碼:
 1for (GLint i = 0; i < nConstantNum; ++i)
 2{
 3    glGetActiveUniform(m_uiProgramObject, i, 256&constant.nLength, &constant.nSize, &constant.glType, constant.szConstantName);
 4    constant.nLocation = glGetUniformLocation(m_uiProgramObject, constant.szConstantName);
 5    constant.nUseType = GPUParameters::GetAutoConstantTypeByName((const char*)constant.szConstantName);
 6
 7        if (constant.glType == GL_SAMPLER_2D || constant.glType == GL_SAMPLER_CUBE)
 8        {
 9            //如果是紋理
10            s32 nUnitIndex = pPixelShader->GetSamplerIndex(constant.szConstantName);   //獲得配置好的紋理的索引
11            if (nUnitIndex >= 0)
12            {
13                m_mapSamplers.insert(std::make_pair(constant.nLocation, nUnitIndex));
14            }

15            else
16            {
17                m_mapSamplers.insert(std::make_pair(constant.nLocation, 0));
18            }

19        }

20        else
21        {
22                //這里處理其他constant變量
23        }

24        
25}


然后在調用該shader前,要開啟紋理索引
1for (AIRMap<s32, s32>::iterator it = m_mapSamplers.begin(); it != m_mapSamplers.end(); ++it)
2{
3 s32 nIndex = it->second;
4 glUniform1i(it->first, nIndex);
5}
這樣才能使設置的紋理生效。

2.頂點定義
在DX下,頂點聲明假如用了position,normal,uv,color,即使shade中其中一項沒用到,只要在C++下把正確的長度傳進去,這樣渲染就會正常。
但glsl下,假如其中一項attribute沒用到,會被過濾掉的,的以C++上傳遞的vertexbuffer的排列方式,必須要嚴格按照glsl里真正用到的attribute。
舉個例子:
attribute mediump vec3 position;
attribute mediump vec3 normal;
attribute mediump vec4 inColor;
attribute mediump vec2 uvCoords;
C++如下定義:

 

1typedef struct tagVertexNormal 
2{
3
4    Vector3Df vPos;
5    Vector3Df normal;
6    CColorValue  color;
7    f32   tu, tv;
8}
VERTEX_NORMAL, *LPVERTEX_NORMAL;

假如glsl代碼里的inColor沒用到,那么按上面的傳遞將會發和錯誤。
要使正常運行,必須把CColorValue color這行去掉。

3.紋理采樣要區分紋理是否含有mipmap
假如紋理沒有mipmap,GL_NEAREST_MIPMAP_NEAREST這類的統一不能用作采樣。

4.頂點屬性的綁定必須在VB的更改后。
如下代碼:
    LPRHWVERTEX pVertex = (LPRHWVERTEX)m_pScreenQuad->m_pVB->Lock();

    //左上角
    pVertex[0].color = color;
    pVertex[0].rhw = 1.0f;
    pVertex[0].tu = 0.0f;
    pVertex[0].tv = 0.0f;
    pVertex[0].x = rectScreen.left - fOffset;
    pVertex[0].y = rectScreen.top - fOffset;
    pVertex[0].z = 1.0f;

    //右上角
    pVertex[1].color = color;
    pVertex[1].rhw = 1.0f;
    pVertex[1].tu = fUVScale;
    pVertex[1].tv = 0.0f;
    pVertex[1].x = rectScreen.right - fOffset;
    pVertex[1].y = rectScreen.top - fOffset;
    pVertex[1].z = 1.0f;

    //右下角
    pVertex[2].color = color;
    pVertex[2].rhw = 1.0f;
    pVertex[2].tu = fUVScale;
    pVertex[2].tv = fUVScale;
    pVertex[2].x = rectScreen.right - fOffset;
    pVertex[2].y = rectScreen.bottom - fOffset;
    pVertex[2].z = 1.0f;

    //左下角
    pVertex[3].color = color;
    pVertex[3].rhw = 1.0f;
    pVertex[3].tu = 0.0f;
    pVertex[3].tv = fUVScale;
    pVertex[3].x = rectScreen.left - fOffset;
    pVertex[3].y = rectScreen.bottom - fOffset;
    pVertex[3].z = 1.0f;
    m_pScreenQuad->m_pVB->Unlock();

    while (!elemLst.IsEnd())
    {
        if (i >= m_vtGPUAttributes.size())
        {
            break;
        }
        GLAttributeInfo& attribInfo = m_vtGPUAttributes[i];
        GLint location = attribInfo.nLocation;
        const VERTEX_ELEMENT& elem = elemLst.GetNext();
        size_t typeSize = CVertexDeclaration::GetTypeSize(elem.m_eType);
        pBufferData = (char*)NULL + elem.m_nOffset;
        GLenum glType = OpenGLES2Mapping::GetGLType(elem.m_eType);
        int subUnitCount = typeSize / 4;

        glEnableVertexAttribArray(location);
        //GL_Check_Error( "OpenGLES2ShaderObject::Apply - glEnableVertexAttribArray" );
        glVertexAttribPointer(location, subUnitCount, glType, GL_FALSE, pVertexDeclaration->GetStride(), pBufferData);
        //GL_Check_Error( "OpenGLES2ShaderObject::Apply - glVertexAttribPointer" );
        glBindAttribLocation( m_uiProgramObject, location, attribInfo.szAttribName );
        //GL_Check_Error( "OpenGLES2ShaderObject::Apply - glBindAttribLocation" );
        pGLES2Renderer->AddVertexAttribValue(location);

        //PrintDebugString( "Enable and bind vertext attrib [%s] at [%d]\n", attribInfo.szAttribName, location );
        ++i;
    }
這里是先寫頂點,再綁定頂點聲明,如果順序不對,就會在DrawXXX的時候崩。具體原因未明。

posted on 2014-02-20 19:33 狂爛球 閱讀(2477) 評論(1)  編輯 收藏 引用 所屬分類: 圖形編程

評論

# re: gles2開發中遇到的問題及解決方法[未登錄] 2014-04-25 23:38 zy

去看看最新的4U tech1.8  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美www| 国产视频久久久久久久| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲一区二区三区高清 | 亚洲欧美日韩天堂| 欧美在线日韩| 欧美大片在线观看一区| 欧美伦理一区二区| 国产精品人人做人人爽人人添| 欧美日韩一区二区视频在线| 亚洲成色最大综合在线| 久久日韩精品| 欧美国产精品人人做人人爱| 欧美国产高潮xxxx1819| 国产精品一区久久久| 韩国精品主播一区二区在线观看| 亚洲福利视频网| 亚洲午夜小视频| 久久综合久久综合久久| 亚洲第一在线综合网站| 亚洲欧美变态国产另类| 牛夜精品久久久久久久99黑人| 欧美私人啪啪vps| 经典三级久久| 亚洲一区制服诱惑| 久久午夜精品一区二区| 亚洲美女在线看| 久久手机免费观看| 亚洲三级免费电影| 欧美综合77777色婷婷| 欧美日韩情趣电影| 激情综合自拍| 欧美一级夜夜爽| 亚洲精品视频一区二区三区| 欧美在线播放一区| 国产精品久久久久国产a级| 亚洲三级国产| 久久综合一区二区三区| 夜夜夜精品看看| 美女久久网站| 伊人色综合久久天天五月婷| 亚洲视频欧美视频| 欧美电影在线观看完整版| 亚洲一区亚洲二区| 国产精品成人国产乱一区| 艳妇臀荡乳欲伦亚洲一区| 亚洲高清久久久| 美女露胸一区二区三区| 国产综合久久久久久鬼色| 欧美影院一区| 亚洲一区二区三区免费观看| 欧美三级网页| 亚洲影院在线观看| 一区二区三区www| 欧美大片免费久久精品三p| 在线观看不卡av| 美女视频一区免费观看| 久久免费精品视频| ●精品国产综合乱码久久久久| 久久久精品网| 久久久久成人精品免费播放动漫| 国产一区自拍视频| 久久综合中文字幕| 久久综合免费视频影院| 亚洲成人在线免费| 欧美激情无毛| 欧美日韩中文字幕精品| 亚洲天堂偷拍| 国产精品一区在线观看| 在线一区观看| 欧美在线短视频| 99在线热播精品免费99热| 久久精品盗摄| 国产一区二区高清不卡| 亚洲欧美卡通另类91av | 久久综合狠狠综合久久综合88| 久久久久免费| 国产欧美一区二区色老头| 亚洲一区欧美激情| 久久夜色精品国产欧美乱| 亚洲性色视频| 美女久久网站| 1000部精品久久久久久久久| 日韩亚洲欧美一区| 久久免费视频在线观看| 老司机免费视频久久| 亚洲综合视频网| 久久精品人人做人人爽电影蜜月 | 亚洲欧美激情视频| 亚洲国产精品成人久久综合一区| 久久riav二区三区| 欧美成人一区二区三区片免费| 亚洲欧洲日本专区| 国产精品亚洲欧美| 久久五月天婷婷| 9i看片成人免费高清| 欧美一区2区视频在线观看| 国产日韩亚洲欧美精品| 欧美成熟视频| 久久久久久网| 美女在线一区二区| 欧美日韩午夜在线| 亚洲美女啪啪| 另类人畜视频在线| 一区二区免费在线播放| 韩国一区二区三区美女美女秀| 欧美日韩久久| 久久综合网色—综合色88| 亚洲色图在线视频| 欧美黑人在线播放| 久久深夜福利免费观看| 欧美一区二区三区四区高清| 一本色道久久综合亚洲精品不| 伊人春色精品| 亚洲国产精品电影| 亚洲精品综合精品自拍| 亚洲国产欧美日韩精品| 激情五月综合色婷婷一区二区| 国产精品另类一区| 欧美视频一区二区三区| 欧美日韩国产综合久久| 欧美成人午夜免费视在线看片 | 99精品视频免费全部在线| 国产欧美日韩在线视频| 欧美午夜片在线免费观看| 久久一区中文字幕| 欧美aaa级| 国产精品极品美女粉嫩高清在线| 欧美国产日韩亚洲一区| 欧美精品v国产精品v日韩精品| 欧美大片免费久久精品三p| 欧美日韩国产专区| 欧美日韩一区二区三区在线看| 久久久久久久久综合| 欧美在线视频导航| 欧美韩日一区二区三区| 亚洲精品中文字幕在线| 亚洲一区3d动漫同人无遮挡| 在线视频亚洲一区| 欧美成人精品激情在线观看 | 久久综合久色欧美综合狠狠| 欧美黑人多人双交| 国产亚洲一区二区三区| 在线播放中文一区| 亚洲永久免费视频| 亚洲欧洲偷拍精品| 久久精品亚洲精品国产欧美kt∨| 玖玖玖免费嫩草在线影院一区| 欧美午夜大胆人体| 99国产精品视频免费观看一公开| 性色av一区二区三区| 亚洲欧洲一区二区三区| 性欧美xxxx视频在线观看| 欧美激情麻豆| 日韩午夜电影av| 狂野欧美一区| 蜜臀a∨国产成人精品| 国产精品久久久一区二区三区| 亚洲高清激情| 欧美黄色网络| 欧美sm重口味系列视频在线观看| 在线播放国产一区中文字幕剧情欧美| 亚洲综合视频网| 欧美一级久久| 国产精品三区www17con| 噜噜噜久久亚洲精品国产品小说| 一本色道**综合亚洲精品蜜桃冫| 国产精品久久久久久久久久久久久| 亚洲综合丁香| 久久久五月婷婷| 99成人精品| 欧美影院在线| 亚洲自拍偷拍网址| 久久国产精品99国产精| 亚洲精品自在在线观看| 亚洲女人小视频在线观看| 亚洲国产99| 久久久噜噜噜久久| 亚洲中午字幕| 欧美国产激情二区三区| 久久爱www.| 国产精品久久久91| 亚洲国产三级在线| 欧美永久精品| 一级日韩一区在线观看| 亚洲欧美综合| 亚洲一区二区少妇| 麻豆国产va免费精品高清在线| 亚洲免费成人av| 狂野欧美激情性xxxx欧美| 欧美伊人久久久久久午夜久久久久| 欧美成人免费全部观看天天性色| 欧美在线不卡| 国产精品美女久久久久久免费| 亚洲三级观看| 亚洲视频1区| 国产精品日韩在线播放| 99re66热这里只有精品4| 亚洲图片在线| 欧美理论电影网|