// Fragment and vertex shaders code
const char* pszFragShader = "/
uniform sampler2D sampler2d;/
varying mediump vec2 myTexCoord;/
void main (void)/
{/
gl_FragColor = texture2D(sampler2d,myTexCoord);/
}";
const char* pszVertShader = "/
attribute highp vec4 myVertex;/
attribute mediump vec4 myUV;/
uniform mediump mat4 myPMVMatrix;/
varying mediump vec2 myTexCoord;/
void main(void)/
{/
gl_Position = myPMVMatrix * myVertex;/
myTexCoord = myUV.st;/
}";
1. 頂點數據格式爲pos + uv
在link Program object之前需要綁定attribute
// Create the shader program
m_uiProgramObject = glCreateProgram();
// Attach the fragment and vertex shaders to it
glAttachShader(m_uiProgramObject, m_uiFragShader);
glAttachShader(m_uiProgramObject, m_uiVertexShader);
// Bind the custom vertex attribute "myVertex" to location VERTEX_ARRAY
glBindAttribLocation(m_uiProgramObject, VERTEX_ARRAY, "myVertex");
// Bind the custom vertex attribute "myUV" to location TEXCOORD_ARRAY
glBindAttribLocation(m_uiProgramObject, TEXCOORD_ARRAY, "myUV");
// Link the program
glLinkProgram(m_uiProgramObject);
2. 設置使用level 0的圖片
// Actually use the created program
glUseProgram(m_uiProgramObject);
// Sets the sampler2D variable to the first texture unit
glUniform1i(glGetUniformLocation(m_uiProgramObject, "sampler2d"), 0);
3. gen texture, gen vbo
4. render loop:
傳matrix, pos, uv給shader
about shell:
PowerVR對跨平臺進行的封裝。
入口程序在PVRShellOS.cpp裏面,在windows下面是winmain,它會調用到PVRShellInit,這個是在PVRShellAPI.cpp中的.
應用程序需要繼承PVRShell,實現Init/Release App/view,和RenderScene,另外就是一個Shell的NewDemo方法。
ShellOS會先New一個Shell,然後傳遞給ShellInit,進行初始化,之後將透過ShellInit中的API調用到應用程序.
2 Texture && PRVShell
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.