我有一个GLKViewController,其实现如下......
#import "game-gl.h"
....
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
renderFrameLine();
}
game-gl.c(我从s = .5开始)
void renderFrameLine() {
printf("Inside Render Line \n");
if(f>1.0f){
f = 0.0f;
}
else{
f = f+.01;
}
glClearColor(f, 0.65f, f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if(s >2.0f){
s = -2.0f;
}
else{
s = s + 0.10f;
}
GLfloat vVertices[] = { s, s, 0.0f, s, -s, 0.0f, -s, s,
0.0f};
GLfloat colors[] = {
1.0f, 0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f};
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 4);
}
当我运行应用程序时,背景会改变颜色但三角形从不显示。知道我做错了吗?
问题似乎是着色器没有编译......
shader = glCreateShader(type);
if (shader == 0){
#ifdef __APPLE__
printf("Shader Failed %d\n", type);
#endif
return 0;
}
打印出着色器失败(type = GL_VERTEX_SHADER)
我评论了这一点,我仍然得到相同的回复,只有其他一切似乎编译好......
更新
我也看到以下警告,我不认为它是相关的,因为编译检查通过了......
/Users/me/Development/test3/test3/game-gl.c:97:46:将'GLbyte [148]'传递给'const char *'类型的参数将指针转换为具有不同符号的整数类型< / p>
但正如我所说,这项检查似乎已经过去了......
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
if (!compiled) {
再次更新
好的,现在我们得到了一些......
programObject = glCreateProgram();
if(programObject == 0){
printf("Invalid program returned \n");
}
打印出程序无效?!?!?!?
再次
所以我改为尝试在.m文件中抓取程序,但它仍然是0。
if(_program == 0){
NSLog(@"Still can not create program");
}
else{
resizeViewport(screenWidth, screenHeight);
InitializeOpenGL(0, 0, _program);
}
答案 0 :(得分:0)
着色器代码在哪里?你在创建片段着色器吗?创建一个程序?链接?如果那不是编译,那那就是你的第一个问题。但是你可以从gl获得有用的错误信息,这将有助于你。
除此之外,您应该在分配数据之前启用属性指针。
此外,请确保您没有剔除顺时针方向的脸(CCW代替)......如果您启用了脸部剔除,那么。
答案 1 :(得分:0)
对于GLKViewController,您显然必须在获取程序之前设置上下文。添加这一行...
[EAGLContext setCurrentContext:self.context];
在初始化GL之前使其工作。