Конференция "Игры" » Выделение буфера VBO для координат объекта [Delphi]
 
  • Xan (21.01.09 08:27) [0]
    Всем привет.

    Подскажите пожалуйста, почему при использовании статического массива для передачи координат объекта всё нормально

    Пример:


    var
     VertexCoord:array [0..1] of GLSingle;
    //-----------------------------------------
             glBindBuffer(GL_ARRAY_BUFFER, 1);
             glBufferData(GL_ARRAY_BUFFER, Sizeof (VertexCoord), @VertexCoord, GL_STATIC_DRAW);



    но стоит перейти на динамический, VBO буфер не биндится

    пример:


    var
     VertexCoord:array of GLSingle;
    //---------------------------------------
             glBindBuffer(GL_ARRAY_BUFFER, 1);
             glBufferData(GL_ARRAY_BUFFER, Sizeof (VertexCoord[0])*Length(VertexCoord), @VertexCoord[0], GL_STATIC_DRAW);

  • @!!ex © (21.01.09 10:01) [1]
    Какая ошибка(glGetError)?
  • Xan (21.01.09 13:15) [2]

    > Какая ошибка(glGetError)?


    Вообще то пусто, что на ATI, что на nVidia.
    На nVidia просто предупреждение о компиляции шейдера, типа
    WARNING: 0:18: implicit cast from int to float,
    но ето ещё до бинда буфера и вне зависимости от типа массива.
  • @!!ex © (21.01.09 15:20) [3]
    > [2] Xan   (21.01.09 13:15)

    Меня терзают смутные сомнения... ощущение, что вы неправильно заполняете массив..
  • Xan (22.01.09 07:33) [4]

    > неправильно заполняете массив


    Какие есть предложения поповоду заполнения?
  • @!!ex © (22.01.09 13:29) [5]
    > [4] Xan   (22.01.09 07:33)

    код покажите.
  • Xan (22.01.09 18:18) [6]
    Массив заполняю стандартно, ничего особенного:


    SetLength(VertexCoord, 2);
    //Задание координат шариков
    VertexCoord[0]:=Random/2-Random/2;
    VertexCoord[1]:=Random/2-Random/2;

  • @!!ex © (22.01.09 20:06) [7]
    не вижу в чем может быть проблема.
    два совета:
    1) проверить аккуратно, все ли в порядке с памятью. Если где-то поломанный указатель он может так "неудачно" ломать память. Ломанные указатели могут привожить к самому неожиданноу поведению программы.
    2) используйте glGenBuffers всеже. Константа 1 - не самое лучше решение и потенциальное место для глюков.
  • Xan (23.01.09 14:34) [8]

    > проверить аккуратно, все ли в порядке с памятью


    Вот в этом то и есть вся проблема, что стоит динамику заменить на статику, ваще всё бес проблем. Я даже в дебаге (Watches) просматривал и указатель, и типизировал массив, и даже через GetMem пробовал ваще не канает, а как только статичный всё проблем нет.


    > используйте glGenBuffers


    В данном случае привёл для примера, что биндю под первый буфер.
  • Xan (23.01.09 14:38) [9]
    Мош есть какая особенность в хранении статичного массива в памяти, недавно статейку прочёл, что статический массив в три раза быстрее обрабатывается.

    Ну или на кройняк мош чё с OpenGL, мошь какие дополнительные команды надо использовать???????????
 
Конференция "Игры" » Выделение буфера VBO для координат объекта [Delphi]
Есть новые Нет новых   [134430   +3][b:0][p:0.001]