Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Access Violation и DrawIndexedPrimitive 
:(
    Опции темы
sfok3
Дата 3.11.2009, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.7.2009

Репутация: нет
Всего: нет



Рисую по карте высот ландшафт, вылетает ошибка Access Violation помогите разобраться  smile 

Код

rows:=hBitMap.Height;
cols:=hBitMap.Width;
SetLength(Land , rows, cols);

//заполняем двумерный массив значениями высоты
with hBitMap.Canvas do
for col:=0 to cols-1 do
for row:=0  to  rows-1 do
begin
    Land [row,col]:=Pixels[row,  col]/100000;
end;

//строим буфер индексов
index := 0;
row_idx := 0;
next_row_idx := cols;
SetLength(indexes , (rows-1)*(cols-1)*6);
for row:=0 to rows-2 do
begin
for col:=0 to cols-2 do
begin
        next_col := col + 1;

        // tri 1
        indexes[index + 0] := row_idx + col;
        indexes[index + 1] := next_row_idx + col;
        indexes[index + 2] := next_row_idx + next_col;

        // tri 2
        indexes[index + 3] := next_row_idx + next_col;
        indexes[index + 4] := row_idx + next_col;
        indexes[index + 5] := row_idx + col;

        index := index + 6;
end;

    row_idx := row_idx + cols;
    next_row_idx := next_row_idx + cols;
end;

//строим буфер вершин
SetLength(vertices , rows*cols);
row_idx := 0;
for row:=0 to rows-1 do
begin
for col:=0 to cols-1 do
begin
vertices[row_idx+col].x:=col;
vertices[row_idx+col].y:=land[row,col];
vertices[row_idx+col].z:=row;
end;
row_idx:=row_idx+cols;
end;

 // Создаем буфер вершин
  Result := FD3DDevice.CreateVertexBuffer(length(Vertices) * sizeof(TCustomVertex), 0,
    D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, FD3DVertexBuffer, NIL);
  // При невозможности создания завершаем работу
  if FAILED(Result) then EXIT;
  // Блокируем доступ к буферу вершин
  Result := FD3DVertexBuffer.Lock(0, length(Vertices) * sizeof(TCustomVertex),
    pVertices, 0);
  if FAILED(Result) then EXIT;
  try
    // Копируем в буфер данные
    CopyMemory(pVertices, Vertices, length(Vertices) * sizeof(TCustomVertex));
  finally
    // Разблокировка буфера
    FD3DVertexBuffer.Unlock;
  end;
  Result := FD3DDevice.CreateIndexBuffer(Sizeof(indexes), D3DUSAGE_WRITEONLY, D3DFMT_INDEX16,
  D3DPOOL_MANAGED, FD3DIndexBuffer, NIL);
  if FAILED(Result) then EXIT;
  Result :=FD3DIndexBuffer.Lock(0, Sizeof(indexes), pVertices, 0);
  if FAILED(Result) then EXIT;
  try
  CopyMemory(pVertices, Indexes, Sizeof(Indexes));
  finally
  FD3DIndexBuffer.Unlock;
  end;


FD3DDevice.SetIndices(FD3DIndexBuffer);
FD3DDevice.DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, length(indexes), 0, (rows)*(cols)*2); //тут ругается при выполнении "Access Violation"


PM MAIL   Вверх
RomanEEP
Дата 4.11.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 1
Всего: 8



А посмотреть в отладчике религия не позволяет?
PM MAIL   Вверх
Alexeis
Дата 4.11.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



sfok3, после вылета исключения, обычно открывают окно callStack, а в нем видно в какой функции и даже на какой строчке произошло исключение.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sfok3
Дата 4.11.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.7.2009

Репутация: нет
Всего: нет



Код

Tform1.RenderScene
Tform1.ApplicationEvents1Idle(???,???)
Project1


ой это мне так помогло прям ###, мне и до этого было известно где ошибка, вот только не пойму почему она выскакивает в моём случае


2 RomanEEP
а тебе твоя религия не позволяет пройти мимо темы не нагрубив?

Это сообщение отредактировал(а) sfok3 - 4.11.2009, 17:20
PM MAIL   Вверх
Alexeis
Дата 4.11.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



  У меня сильные сомнения что функции RenderScene, ApplicationEvents1Idle являются статическими (class function).


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RomanEEP
  Дата 4.11.2009, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 1
Всего: 8



думаю что нужно
FD3DDevice.DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, length(indexes), 0, (rows - 1)*(cols - 1)*2);

Это сообщение отредактировал(а) RomanEEP - 4.11.2009, 21:25
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.