Thanks Wilfried,
now it's perfect! Here my final source code.
INTEGER FUNCTION SaveOpenGL_Bitmap ()
IMPLICIT NONE
INCLUDE <clearwin.ins>
INCLUDE <opengl.ins>
CHARACTER GIF_FileName*64
GIF_FileName = 'Graphics.gif'
CALL OpenGL_To_GIF (GIF_FileName)
SaveOpengl_Bitmap = 2
RETURN
END FUNCTION SaveOpenGL_Bitmap
SUBROUTINE OpenGL_To_GIF (GIF_FileName)
IMPLICIT NONE
INCLUDE <clearwin.ins>
INCLUDE <opengl.ins>
CHARACTER GIF_FileName*(*)
INTEGER I, J, K, iSizeX, iSizeY, iBit, iErr, iBMP_Handle, Koff, Kount, MA
CHARACTER*1, ALLOCATABLE :: ImageData(:)
CHARACTER*1, ALLOCATABLE :: ImageDIB(:,:,:)
CHARACTER BMP_FileName*32
LOGICAL EXI
iSizeX = clearwin_info@ ('OPENGL_WIDTH')
iSizeY = clearwin_info@ ('OPENGL_DEPTH')
ALLOCATE (ImageData(3*(iSizeX+3)*iSizeY))
ALLOCATE (ImageDIB(3,iSizeX,iSizeY))
ImageData = ' '
ImageDIB = ' '
CALL glReadPixels (0, 0, iSizeX, iSizeY, GL_RGB, GL_UNSIGNED_BYTE, ImageData)
Koff = mod (iSizeX, 4)
Kount = 0
DO J= 1, iSizeY
DO I= 1, iSizeX
DO K= 1, 3
Kount = Kount + 1
ImageDIB(K, I, iSizeY-J+1) = ImageData(Kount)
ENDDO
ENDDO
Kount = Kount + Koff
ENDDO
BMP_FileName = 'OpenglTemp37168.bmp'
INQUIRE (FILE= BMP_FileName, EXIST= EXI)
IF (EXI) CALL ERASE@ (BMP_FileName, iErr)
CALL Put_DIB_Block@ (BMP_FileName, ImageDIB, iSizeX, iSizeY, 0, 0, iSizeX, iSizeY, 24, iErr)
CALL Get_DIB_Size@ (BMP_FileName, iSizeX, iSizeY, iBit, iErr)
iBMP_Handle = Import_BMP@ (BMP_FileName, iErr)
MA = Create_Graphics_Region@ (2L, iSizeX, iSizeY)
MA = Select_Graphics_Object@ (2L)
MA = DIB_Paint@ (0, 0, iBMP_Handle, 0, 0)
MA = Export_Image@ (GIF_FileName)
MA = Delete_Graphics_Region@ (2L)
MA = MA
CALL ERASE@ (BMP_FileName, iErr)
RETURN
END SUBROUTINE OpenGL_To_GIF
Of course, the GIF_FileName has to be set individually.
Erwin