Здравствуйте!
Вот, пример простейшего SDL-приложения (вернее тут только фрагмент - функция
инициализации OpenGL и прорисовки экрана), который выводит изображение на
экран влевом нижнем углу в масштабе 1:1.
Сглаживание работает, но при этом откуда-то появляется диагональная линия (такая
же как при методе задания граней GL_TRIANGLE_FAN - но там она ещё
естественна) от левого нижнего угла текстуры, до правого верхнего. Откуда она
берётся (точно не из рисунка - проверил неоднократно "пипеткой" в Gimp)??
И ещё поразила скорость вывода при попытки вывести изображение размером
1024x768 - ужасно долго (секунд 10, наверное проходит до появления картинки)!
При отключении сглаживания - мгновенно. Оно что там не аппаратно что ли
производиться?
static void draw_screen( void )
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-1024.0f/2, -768.0f/2, -768.0f/2);
glBegin(GL_QUADS);
glBindTexture( GL_TEXTURE_2D, texture );
glTexCoord2f( 0.0f, texh);
glVertex2f( 0.0f, 0.0f);
glTexCoord2f( texw, texh);
glVertex2f( texpw, 0.0f);
glTexCoord2f( texw, 0.0f);
glVertex2f( texpw, texph);
glTexCoord2f( 0.0f, 0.0f);
glVertex2f( 0.0f, texph);
glEnd();
SDL_GL_SwapBuffers();
}
static void setup_opengl( int width, int height )
{
glViewport(0,0,width, height);
//Todo: load textures
if (!LoadGLTextures()) {
printf ("Failure to load textures");
exit(1);
}
glEnable(GL_TEXTURE_2D); //enable texture mapping
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //Black Background
glDisable(GL_DEPTH_TEST); //disables depth testing
glDisable(GL_ALPHA_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_POLYGON_SMOOTH);
glHint(GL_POLYGON_SMOOTH_HINT,GL_NICEST);
glShadeModel(GL_SMOOTH); //enables smooth color shading
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); //Reste projection matrix
gluPerspective(90.0f, (GLfloat)width/(GLfloat)height, 1.0f, 1024.0f);
//calculate aspect ratio of the window
glMatrixMode(GL_MODELVIEW);
}