Вот код из одной книги. Работает, проверял.
#pragma pack (push, 1) struct TgaHeader { byte idLength; byte colormapType; byte imageType; uint16 colormapIndex; uint16 colormapLength; byte colormapEntrySize; uint16 xOrigin; uint16 yOrigin; uint16 width; uint16 height; byte pixelSize; byte imageDesc; }; #pragma pack ( pop) bool saveScreenShot ( const char * fileName ) { int width = glutGet ( GLUT_WINDOW_WIDTH ); int height = glutGet ( GLUT_WINDOW_HEIGHT ); byte * ptr = ( byte *) malloc ( 3 * width * height ); if ( ptr == NULL ) return false; // get image from window glReadBuffer ( GL_FRONT ); glReadPixels ( 0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, ptr ); // now save it as 24-bit uncompressed tga TgaHeader hdr; memset ( &hdr, '\0', sizeof ( hdr ) ); hdr.imageType = 2; // unencoded image hdr.width = width; hdr.height = height; hdr.pixelSize = 24; int file = open ( fileName, O_WRONLY | O_BINARY | O_CREAT, S_IWRITE ); if ( file == -1 ) { free ( ptr ); return false; } // write header write ( file, &hdr, sizeof ( hdr ) ); // swap R and B channels int numPixels = width * height; byte * pixel = ptr; byte temp; for ( int i = 0; i < numPixels; i++, pixel += 3 ) { temp = pixel [0]; pixel [0] = pixel [2]; pixel [2] = temp; } // and write it down write ( file, ptr, width * height * 3 ); close ( file ); // cleanup free ( ptr ); return true; }
попробовал вписать вручную-тот же результат , половина черная,половина белая картинки
лучше про него забудь. там очень мало функций и он морально и физически устарел. я использую вот этот http://wiki.delphigl.com/index.php/dglOpenGL.pas/en
там для версии OpenGL 3.2 и все необходимые расширения
а попробуй сделать glFlush как советовал innuendo
спс,сейчас попробую
так,поменял параметры,при удалении старого опенгл из списка модулей-выкидуется ошибка на строку glPixelStorei(GL_PACK_ALIGNMENT,4);, ошибка пишет,мол параметр обращается к нил
pascal.ilya можешь указать компилятор и модули?
чем я компилирую?
Delphi2010 + dglOpengl.pas. Больше никаких модулей не надо. Может у тебя драйвера старые? Другие функции OpenGL нормально работают?
это первое что я делаю с опенгл,насчет других функций поэтому незнаю,прописываю дглопенгл+опенгл,программа возвращает черный экран,оставляю один дглопенгл ошибки на строке glPixelStorei(GL_PACK_ALIGNMENT,4); дальше программа не идет
пишу так же в раде 2010
я понял почему. смотри оставляешь только dglOpengl в модулях. инициализацию делаешь следующим образом:
InitOpenGL;
MyDC := GetDC(Form1.Handle);
MyRC := CreateRenderingContext(MyDC, [opDoubleBuffered], 32, 24, 8, 0, 0, 0);
ActivateRenderingContext(MyDC, MyRC);
и в том месте где у тебя происходит рендер после всех отрисовок добавляешь функцию
SwapBuffers(MyDC);
и все должно заработать.
Правка: Если что типы необходимых переменных
MyDC: HDC;
MyRC: HGLRC;
Спасибо большое,сейчас затесчу
Тема в архиве.