Проблема указателя вершины openGLES - PullRequest
2 голосов
/ 29 июня 2011

Я новичок в openGLES (и в openGL тоже), и у меня проблема ...

У меня есть структурная полоса:

struct Vertex2F
{
    GLfloat x;
    GLfloat y;
};

struct Vertex3F
{
    GLfloat x;
    GLfloat y;
    GLfloat z;
};

struct Color4UB
{
    GLubyte r;
    GLubyte g;
    GLubyte b;
    GLubyte a;
};

struct Vertex
{
    Vertex3F pos;
    Color4UB color;
    Vertex2F tex;
};

struct Strip
{
    Strip() {vertices = 0; count = 0;}
    Strip(int cnt);
    ~Strip();
    void allocate(int cnt);
    void draw();
    Vertex *vertices;
    int count;
};

И я хочу сделать рендер GL_TRIANGLE_STRIP. Вот код:

const int size = sizeof(Vertex);
long stripOffset = (long) &strip_;

int diff = offsetof(Vertex, pos); //diff = 0
glVertexPointer(3, GL_FLOAT, size, (void*)(stripOffset + diff));

Показывает что-то странное после рендеринга с glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);, если вообще показывает. Но этот код работает как положено:

GLfloat ar[4*3];
for (int i = 0; i < 4; ++i)
{
    ar[3*i + 0] = strip_.vertices[i].pos.x;
    ar[3*i + 1] = strip_.vertices[i].pos.y;
    ar[3*i + 2] = strip_.vertices[i].pos.z;
}
glVertexPointer(3, GL_FLOAT, 0, (void*)(ar));

Пожалуйста, объясните мне, что я делаю неправильно в первом случае?

1 Ответ

2 голосов
/ 29 июня 2011

_strip.vertices - указатель.Я предполагаю, что это распределяется динамически.Таким образом, данные в _strip.vertices хранятся не только в начале _strip, но и в другом месте, а _strip.vertices просто указывает туда.Так что просто используйте

long stripOffset = (long) strip_.vertices;

вместо

long stripOffset = (long) &strip_;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...