2012-04-06 1 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); 

Просьба помочь мне.

Edit: Проблема На самом деле проблема: я не могу понять, в чем разница между:

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

Моя ставка будет то, что проблема является sizeof(points) в вызове данных glBufferData: в этом случае он вернет размер указателя , который это слово i.e. 4 байта (или что-то вроде этого). Вы должны передать размер вашего массива real, который будет таким же, как вы вычислили в коде malloc.