OpenGL, glDrawPixels
type
tsprite =array[0..49,0..49,0..3] of GLUbyte ;
var
Sprite : tsprite;
...
//заполняем массив пикселей
glDrawPixels(50, 50, GL_rgba, GL_UNSIGNED_BYTE, @Sprite); // всё OK
-----------------------
Type
tsprite =packed array of packed array of packed array [0..3] of GLUbyte ;
var
Sprite : tsprite;
...
setlength(Sprite,50,50);
//заполняем массив пикселей
glDrawPixels(50, 50, GL_rgba, GL_UNSIGNED_BYTE, @Sprite); // выдаёт на экран чушь, неизвестно из какой области памяти, иногда access violation.
-----------------------
Если так:
glDrawPixels(50, 50, GL_rgba, GL_UNSIGNED_BYTE, @Sprite[0]); // выдаёт тоже чушь, но уже из нужной области памяти, где картинка находится. access violation нету.
-----------------------
Если второй уровень массива постоянного размера, то работает нормально:
Type
tsprite =packed array of packed array[0..49] of packed array [0..3] of GLUbyte ;
var
Sprite : tsprite;
...
setlength(Sprite,50);
//заполняем массив пикселей
glDrawPixels(50, 50, GL_rgba, GL_UNSIGNED_BYTE, @Sprite[0]); //работает нормально! Но это всё же не динамический массив... точнее наполовину динамический 8)
Естественно пробовал "setlength(Sprite,50,50);" переписать ручками:
var a:integer;
setlength(Sprite,50);
for a:=0 to 49 do setlength(Sprite[a],50);
Тоже самое.
Как решить проблему? Благодарю.
Так еще бы! OpenGL - штука не Борландовская, динамические массивы кушать не умеет.
Цитата:
...@Sprite...
почемуто мне раньше казалось, что динамические массивы являются Pointer и передаются как Sprite^...