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-файл на другой, такого же размера и столько же цветов, то ошибки нет...
понятия не имею, что это может быть. Помогите кто-нибудь, плиз.
Ни у кого не возникало проблем при запуске на радеонах программ, использующих 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-файл на другой, такого же размера и столько же цветов, то ошибки нет...
понятия не имею, что это может быть. Помогите кто-нибудь, плиз.
во первых, в дисплейные листы вызовы функции 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.
это не есть гуд.
такой совет. Если вы делаете glTexImage2D на текстурный юнит iTexID ни в коем случаи нельзя вывзвать её ещё раз или, например glCopyTexImage2D. Эти функии выделяет AGP память, в даннм случаи у вас остаёться старый кусок памяти, не используемый, если на NV проблемм не вознимает, у АТИ проблеммы есть. glDeleteTextures всегда сначало.
Если память выделять не хотите, например коипруете изобржение с экрана, ипользуйте glCopySubTexImage2D. Эта фунция не выделяет AGP память, используя старый кусок. Но при помощи этой функции вы не сможете сделать resize текстуры. То есть придёться удалть и одевать заново. или точно писать текст. коориднаты.