Проблема рендеринга на разных компьютерах

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

И что на самом деле происходит, так это то, что в то время как все отлично отрисовывается на моей стороне (как на моем mac / xc, ode + windows / visual studio 2012), на стороне моего друга кажется, что геометрия испорчена. Каждый объект на моем экране представлен VBO, который я использую каждый раз для рендеринга в разных местах. Но похоже, что мои VBO имеют всю геометрию, импортированную из всех моделей. (Отсюда и Башня с деревом на стороне.)

Вот результат:

(Мой компьютер)(Компьютер моего друга)

На данный момент мне удалось отладить эту проблему до определенного момента. Я могу сказать, что это не тот способ, которым я импортирую свои модели, потому что я создаю файл debug.txt со всеми векторами, прежде чем отправить их в gpu как VBO, и на обоих компьютерах они выдают одинаковые значения. Так что их векторы не запутались из-за проблем с памятью или чего-то в этом роде. Так что я думаю, может быть, это то, как я настраиваю или рендеринг своих VBO

Больше всего меня поражает то, что на моем компьютере все работает, а на компьютере моих друзей - нет. Одно из отличий, которое я точно знаю, это то, что мой компьютер - это станция разработчика (что бы это ни значило), а компьютер моего друга - нет.

Это моя функция загрузки VBO и функция рисования VBO: я использую glfw для создания своего окна и контекста и включаю заголовки glew, чтобы включить некоторые новые функции opengl.

void               G4::Renderer::LoadObject(
                                           G4::TILE_TYPES   aType,
                                           std::vector<float> &v_data,
                                           std::vector<float> &n_data,
                                           std::vector<float> &t_data,
                                           float scale,
                                           bool has_texture,
                                           unsigned int texture_id
                                           )
{

    unsigned int vertices_id, vertices_size, normals_id, texturecoordinates_id;

    vertices_size   = static_cast<unsigned int>(v_data.size());

    glGenBuffers(1, &vertices_id);
    glGenBuffers(1, &normals_id);

    //::->Vertex array buffer upload.
    glBindBuffer(GL_ARRAY_BUFFER, vertices_id);
    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*v_data.size(), &v_data.front(), GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    //::->Normal Array buffer upload.
    glBindBuffer(GL_ARRAY_BUFFER, normals_id);
    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*n_data.size(), &n_data.front(), GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);



    if (has_texture)
    {
        glGenBuffers(1, &texturecoordinates_id);

        glBindBuffer(GL_ARRAY_BUFFER, texturecoordinates_id);
        glBufferData(GL_ARRAY_BUFFER, sizeof(float)*t_data.size(), &(t_data[0]), GL_STATIC_DRAW);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
    }


    this->vbos[aType].Update(vertices_id, vertices_size, normals_id, texture_id, texturecoordinates_id, scale, has_texture);



}

Нарисуйте код:

void G4::Renderer::DrawUnit(G4::VBO aVBO, bool drawWithColor, float r, float g, float b, float a)
{
    bool model_has_texture = aVBO.HasTexture();

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_NORMAL_ARRAY);

    if (model_has_texture && !drawWithColor)  {
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glEnable(GL_TEXTURE_2D);
    }

    if (drawWithColor)
    {
        glColor4f(r, g, b, a);
    }

    glScalef(aVBO.GetScaleValue(), aVBO.GetScaleValue(), aVBO.GetScaleValue());

    glBindBuffer(GL_ARRAY_BUFFER, aVBO.GetVerticesID());
    glVertexPointer(3, GL_FLOAT, 0, 0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    glBindBuffer(GL_ARRAY_BUFFER, aVBO.GetNormalsID());
    glNormalPointer(GL_FLOAT, 0, 0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);


    if (model_has_texture && !drawWithColor)
    {
        glBindTexture(GL_TEXTURE_2D, aVBO.GetTextureID());
        glBindBuffer(GL_ARRAY_BUFFER, aVBO.GetTextureCoordsID());
        glTexCoordPointer(2, GL_FLOAT, 0, 0);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
    }

    glDrawArrays(GL_TRIANGLES, 0, aVBO.GetVerticesSize());

    if (model_has_texture && !drawWithColor)  {
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
        glDisable(GL_TEXTURE_2D);

    } 

    glDisableClientState(GL_NORMAL_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);

}

У меня нет идей, я надеюсь, что кто-нибудь может подсказать мне, как отлаживать это дальше.

Ответы на вопрос(2)

Ваш ответ на вопрос