2012-04-06 51 views
1

我正在使用GLKit绘制一个像素。我可以成功地绘制在(10,10)的像素坐标,如果我有:GLKit:[绘制像素]初始化GLfloat阵列

glClearColor(0.65f, 0.65f, 0.65f, 1.0f); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// Prepare the effect for rendering 
[self.effect prepareToDraw]; 

GLfloat points[] = 
{ 
    10.0f, 10.0f, 
}; 

glClearColor(1.0f, 1.0f, 0.0f, 1.0f); 

GLuint bufferObjectNameArray; 
glGenBuffers(1, &bufferObjectNameArray); 
glBindBuffer(GL_ARRAY_BUFFER, bufferObjectNameArray); 

glBufferData(
      GL_ARRAY_BUFFER, 
      sizeof(points), 
      points, 
      GL_STATIC_DRAW); 

glEnableVertexAttribArray(GLKVertexAttribPosition); 

glVertexAttribPointer(
         GLKVertexAttribPosition, 
         2, 
         GL_FLOAT, 
         GL_FALSE, 
         2*4, 
         NULL); 
glDrawArrays(GL_POINTS, 0, 1); 

但我想在运行时多少决定和正是我想要画的像素,所以我想这一点,但它是借鉴像素在(10,0),这里有什么错误:

glClearColor(0.65f, 0.65f, 0.65f, 1.0f); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// Prepare the effect for rendering 
[self.effect prepareToDraw]; 

GLfloat *points = (GLfloat*)malloc(sizeof(GLfloat) * 2); 
for (int i=0; i<2; i++) { 
    points[i] = 10.0f; 
} 

glClearColor(1.0f, 1.0f, 0.0f, 1.0f); 

GLuint bufferObjectNameArray; 
glGenBuffers(1, &bufferObjectNameArray); 
glBindBuffer(GL_ARRAY_BUFFER, bufferObjectNameArray); 

glBufferData(
      GL_ARRAY_BUFFER, 
      sizeof(points), 
      points, 
      GL_STATIC_DRAW); 

glEnableVertexAttribArray(GLKVertexAttribPosition); 

glVertexAttribPointer(
         GLKVertexAttribPosition, 
         2, 
         GL_FLOAT, 
         GL_FALSE, 
         2*4, 
         NULL); 
glDrawArrays(GL_POINTS, 0, 1); 

请帮助我。

编辑: 问题 其实这个问题是:我无法弄清楚是什么之间的区别:我的选择将是这个问题

GLfloat points[] = 
{ 
    10.0f, 10.0f, 
}; 

GLfloat *points = (GLfloat*)malloc(sizeof(GLfloat) * 2); 
for (int i=0; i<2; i++) { 
    points[i] = 10.0f; 
} 

回答

0

glBufferData数据调用中的sizeof(points):在这种情况下,它将返回指针的大小,其中是一个字,即4个字节(或类似的东西)。您应该通过真实阵列的大小,它与您在malloc代码中计算的大小相同。