// 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调用到应用程序.