|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.02.2009, 20:00 | #1 |
Пользователь
Регистрация: 08.10.2008
Сообщений: 17
|
Динамический массив
Столкнулся с небольшой проблемкой.
.... For i := 0 to Size-1 do For j := 0 to Size-1 do begin A [j, i, 0] := GetRValue(bitmap.Canvas.Pixels[j,i]); A [j, i, 1] := GetGValue(bitmap.Canvas.Pixels[j,i]); A [j, i, 2] := GetBValue(bitmap.Canvas.Pixels[j,i]); end; .... glBindTexture( GL_TEXTURE_2D, B[0] ); .... При работе с обычными массивами .... A: Array [0..127,0..127,0..2]of GLubyte; B : Array [0..1] of GLUint; .... Все работает нормально, но если массивы будут динамические то выдает ошибку на строке glBindTexture( GL_TEXTURE_2D, B[0] );, если массив A будет обычным, а B динамическим то ошибка выйдет на строке A [j, i, 0] := GetRValue(bitmap.Canvas.Pixels[j,i]); .... A : Array of Array of Array of GLubyte; B : Array of GLUint; SetLength(A,128,128,2); SetLength(B,1); .... Подскажите плиз, где я допускаю ошибку? |
26.02.2009, 01:02 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
я не телепат, потому
либо приведи текст ошибки либо проверяй размер массива Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
26.02.2009, 10:13 | #3 |
Пользователь
Регистрация: 24.12.2008
Сообщений: 19
|
лично меня смущает запись SetLength(A,128,128,2); что-то, по-моему многовато параметров вы в функцию передаете. Скорее всего,здесь ошибка.
Пока жирафы думают, кролики делают!
|
26.02.2009, 12:09 | #4 |
Пользователь
Регистрация: 08.10.2008
Сообщений: 17
|
Текст ошибки:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0044CB75 in module 'Project1.exe'.Read of address 00000001'. Process stopped. Use Step or Run to continue. SetLength(A,128,128,2); Это задание размера динамического массива. У меня масиив трех мерный, поэтому 4 параметра (сам массив и 3 значения его размера). Так что здесь все должно быть нормально. |
26.02.2009, 19:27 | #5 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
|
26.02.2009, 19:41 | #6 |
Пользователь
Регистрация: 08.10.2008
Сообщений: 17
|
SetLength(B,1);
Это вообще другой (B) массив. Массив A это пиксели текстуры (нужно для загрузки), а B это список текстур. |
26.02.2009, 20:04 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
теббе указывают на то что ты здесь
Код:
а здесь: Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
26.02.2009, 23:24 | #8 |
Пользователь
Регистрация: 08.10.2008
Сообщений: 17
|
Это ничего существенного не меняет. При использовании обычных массивов с не правильными размерами вылаезиет ошибка выходе за границы массива, но не ЭТО. Ошибочка действительно имела место быть, но до нее просто не доходила работа программы.
Надо было вот так SetLength(A,128,128,3);, но это ничего не изменило. Ошибка продолжает вылазить. В массиве B вообще используется только 0й элемент, так что там размер в принципе не важен. Я так думаю что это что то именно OpenGL не нравится. А вообще разрешается ли в OpenGL загружать текстуры при помощи динамических массивов. И еще одно, все это происходит в процедурах отдельного класса и с переменными этого класса. Возможно в этом проблемма. Код:
glBindTexture( GL_TEXTURE_2D, B[0] ); Последний раз редактировалось Ivin; 27.02.2009 в 08:28. |
27.02.2009, 01:02 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Жаль у меня Дельфи здох...постарался бы помочь точнее...
при той ошибке варианта два... либо ты неверно применяешь процедуру либо ошибка в переменных(не задан массив, или неверное значение переменной TexCol) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
27.02.2009, 08:28 | #10 |
Пользователь
Регистрация: 08.10.2008
Сообщений: 17
|
TexCol, вроде правильно, она всегда равна 0.
Значит все же ошибка в динамических массивах. Ведь если массив не динамический то работает отлично, а так отказывается. Жаль. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
динамический массив | Dimon | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 21.03.2008 18:08 |
Динамический массив | _ares_ | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 26.12.2007 23:54 |
динамический массив | Diller | Помощь студентам | 48 | 07.10.2007 16:43 |
Динамический массив. | Mickle | Помощь студентам | 9 | 21.06.2007 20:31 |
Динамический массив | Mickle | Общие вопросы Delphi | 8 | 19.06.2007 06:45 |