23:38

I'm not dead... yet.
Здравствуйте.

Ни у кого не возникало проблем при запуске на радеонах программ, использующих OpenGL?



например, иногда мои проги на достаточно современных радеонах дико тормозят, иногда вообще не запускается. А на Гефорсе 2 никаких проблем со скоростью не возникает, хотя он медленнее...



еще такой глюк - на видеокарте Radeon 350M возникает Access Violation при следующих действиях:

загружаем текстуру из bmp-файла и засовываем ее в байтовый массив.

вызываем glNewList.

вызываем glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,256, 256,0, GL_RGBA, GL_UNSIGNED_BYTE, @bits256)

рисуем прямоугольник.

вызываем glEndList.



при вызове glEndList и возникает ошибка. Причем, если заменить bmp-файл на другой, такого же размера и столько же цветов, то ошибки нет...

понятия не имею, что это может быть. Помогите кто-нибудь, плиз.

Комментарии
13.05.2005 в 02:10

внимательно читаем документацию, и понимаем, что мы делаем полную хрень.



во первых, в дисплейные листы вызовы функции glTexImage2D и прочее - не компилиться, п этому нк АТИ будут ошибки, и не нужно каждый раз гонять байты из оперативной памйти в APG.

вот простой пример. думаю в будет понятно понятно. Я так понял вы используете дельфи, я напишу на С, т.к паскаль уже н помню. Но думаю суть уловите.



GLuint iTexID = 0;

GLuint iListID = 0;



// initing...



glGenTextures( 1, &iTexID );

glBindTexture( GL_TEXTURE_2D, iTexID );

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );



glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, iImageX, iImageY, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData );

glEnable( GL_TEXTURE_2D );





// somewhere in main loop.



if( iListID == 0 )

{

glNewList( iListID, GL_COMPILE );

glBindTexture( GL_TEXTURE_2D, iTexID );



glBegin( GL_QUADS );

glTexCoord2f( 0.0f, 0.0f );

glVertex2f( 0.0f, 0.0f );



glTexCoord2f( 0.0f, 1.0f );

glVertex2f( 0.0f, 256.0f );



glTexCoord2f( 1.0f, 1.0f );

glVertex2f( 256.0f, 256.0f );



glTexCoord2f( 1.0f, 0.0f );

glVertex2f( 256.0f, 0.0f );



glEnd();



glEndList();

}

glCallList( iListID );



// cut here.



код осуществляет загрузку текстуру и рисвание квадрата размером 256 на 256 с натянутой на неё текстуру.



офтоп: забудь про дисплейные списки - это ацтой.

смотри в сторону VBO.
13.05.2005 в 02:16

И ещё. в вашем коде огромный мемори лик. AGP памяти.

это не есть гуд.

такой совет. Если вы делаете glTexImage2D на текстурный юнит iTexID ни в коем случаи нельзя вывзвать её ещё раз или, например glCopyTexImage2D. Эти функии выделяет AGP память, в даннм случаи у вас остаёться старый кусок памяти, не используемый, если на NV проблемм не вознимает, у АТИ проблеммы есть. glDeleteTextures всегда сначало.

Если память выделять не хотите, например коипруете изобржение с экрана, ипользуйте glCopySubTexImage2D. Эта фунция не выделяет AGP память, используя старый кусок. Но при помощи этой функции вы не сможете сделать resize текстуры. То есть придёться удалть и одевать заново. или точно писать текст. коориднаты.