e(program[i].vert));
//读取片元着色器程序
char *fsrc = readFile(pathForResource(program[i].frag));
NSString *vsrcStr = [[NSString alloc] initWithBytes:vsrc length:strlen(vsrc)-1 encoding:NSUTF8StringEncoding];
NSString *fsrcStr = [[NSString alloc] initWithBytes:fsrc length:strlen(fsrc)-1 encoding:NSUTF8StringEncoding];
NSLog(@"vsrcStr------%@", vsrcStr);
NSLog(@"fsrcStr------%@", fsrcStr);
GLsizei attribCt = 0;
GLchar *attribUsed[NUM_ATTRIBS];
GLint attrib[NUM_ATTRIBS];
GLchar *attribName[NUM_ATTRIBS] = {
"inVertex"
};
const char *uniformName[NUM_UNIFORMS] = {
"MVP","pointSize","vertexColor", "texture"
};
for (int j = 0; j < NUM_ATTRIBS; j++) {
if (strstr(vsrc, attribName[j])) {
attrib[attribCt] = j;
attribUsed[attribCt++] = attribName[j];
}
}
//program处理:创建、链接、生成
glueCreateProgram(vsrc, fsrc, attribCt, (const char **)&attribUsed[0], attrib, NUM_UNIFORMS, &uniformName[0], program[i].uniform, &program[i].id);
free(vsrc);
free(fsrc);
if (i == PROGRAME_POINT) {
glUseProgram(program[PROGRAME_POINT].id);
//为当前程序指定uniform变量
glUniform1i(program[PROGRAME_POINT].uniform[UNIFORM_TEXTURE], 0);
//设置正射投影矩阵
GLKMatrix4 projectionMatrix = GLKMatrix4MakeOrtho(0, backingWidth, 0, backingHeight, -1, 1);
//创建模型视图矩阵:单元矩阵
GLKMatrix4 modelViewMatrix = GLKMatrix4Identity;
//正射投影矩阵与模型视图矩阵相乘,结果保存在MVPMatrix矩阵中
GLKMatrix4 MVPMatrix = GLKMatrix4Multiply(projectionMatrix, modelViewMatrix);
/*为当前程序指定Uniform变量值
参数:指明要更改的Uniform变量的位置、将要被修改的矩阵的数量、矩阵值被载入变量时是否要对举证进行变换(如转置)、将要用于更新uniform变量MVP的数组指针
*/
glUniformMatrix4fv(program[PROGRAME_POINT].uniform[UNIFORM_MVP], 1, GL_FALSE, MVPMatrix.m);
//为当前程序对象Uniform变量的pointSize赋值
glUniform1f(program[PROGRAME_POINT].uniform[UNIFORM_POINT_SIZE], brushTexture.width/kBrushScale);
//为当前程序对象Uniform变量顶点颜色赋值
glUniform4fv(program[PROGRAME_POINT].uniform[UNIFORM_VERTEX_COLOR], 1, brushColor);
}
}
glError();
}
三、效果图
GitHub
|