2 # include <simgear_config.h>
5 #if defined(__CYGWIN__) /* && !defined(USING_X) */
9 #if defined(WIN32) /* MINGW and MSC predefine WIN32 */
16 #include <string.h> // memcpy()
18 #include <simgear/compiler.h>
22 #include "GLBitmaps.h"
24 GlBitmap::GlBitmap( GLenum mode, GLint width, GLint height, GLubyte *bitmap )
25 : m_bytesPerPixel(mode==GL_RGB?3:4), m_width(width), m_height(height), m_bitmap(NULL)
27 m_bitmapSize = m_bytesPerPixel*m_width*m_height;
31 glGetIntegerv( GL_VIEWPORT, vp );
34 m_bitmapSize = m_bytesPerPixel*m_width*m_height;
36 m_bitmap = (GLubyte *)malloc( m_bitmapSize );
37 if ( bitmap ) memcpy( m_bitmap, bitmap, m_bitmapSize );
38 else glReadPixels( 0,0, m_width,m_height, mode, GL_UNSIGNED_BYTE, m_bitmap );
41 GlBitmap::~GlBitmap( )
43 if ( m_bitmap ) free( m_bitmap );
46 GLubyte *GlBitmap::getBitmap()
51 void GlBitmap::copyBitmap( GlBitmap *from, GLint at_x, GLint at_y )
53 GLint newWidth = at_x + from->m_width;
54 GLint newHeight = at_y + from->m_height;
55 if ( newWidth < m_width ) newWidth = m_width;
56 if ( newHeight < m_height ) newHeight = m_height;
57 m_bitmapSize = m_bytesPerPixel*newWidth*newHeight;
58 GLubyte *newBitmap = (GLubyte *)malloc( m_bitmapSize );
60 for ( y=0; y<m_height; y++ )
62 GLubyte *s = m_bitmap + m_bytesPerPixel * (y * m_width);
63 GLubyte *d = newBitmap + m_bytesPerPixel * (y * newWidth);
64 memcpy( d, s, m_bytesPerPixel * m_width );
70 for ( y=0; y<from->m_height; y++ )
72 GLubyte *s = from->m_bitmap + from->m_bytesPerPixel * (y * from->m_width);
73 GLubyte *d = m_bitmap + m_bytesPerPixel * ((at_y+y) * m_width + at_x);
74 for ( x=0; x<from->m_width; x++ )
79 if ( m_bytesPerPixel == 4 )
81 d[3] = (from->m_bytesPerPixel == 4) ? s[3] : 0;
83 s += from->m_bytesPerPixel;