// init
m_Control_OpenGL = OPENGL_CTL( m_PanelFuncs, m_PanelID, NULL, 640, 480 );
if( m_Control_OpenGL != NULL )
{
CON_SETEVENT( m_Control_OpenGL, UserDrawFunc_Forward, (void *) this );
}
// userdraw (after forwarding)
void CLWPreviewWindow::UserDraw(
DrMode dr_mode )
{
if( dr_mode != DR_ERASE )
{
if( m_Control_OpenGL != NULL )
{
LWValue ival = { LWT_INTEGER };
int width = CON_W( m_Control_OpenGL );
int height = CON_H( m_Control_OpenGL );
if( ( width != GetWidth() ) ||
( height != GetHeight() ) )
{
Resize( width, height );
}
void *buffer;
buffer = GetBuffer();
if( buffer != NULL )
{
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glMatrixMode( GL_TEXTURE );
glLoadIdentity();
GLdouble pos[ 3 ];
pos[ 0 ] = -1.0;
pos[ 1 ] = -1.0;
pos[ 2 ] = 0.0;
glRasterPos3dv( pos );
#if 0
glDrawPixels( GetWidth(), GetHeight(), GL_RGBA, GL_FLOAT, buffer );
#elif 1
float *src_buffer = (float *) buffer;
int buffer_width = GetWidth();
int buffer_height = GetHeight();
unsigned char *temp_buffer;
temp_buffer = new unsigned char[ buffer_width * buffer_height * 4 ];
if( temp_buffer != NULL )
{
int offset = 0;
for( int j = 0; j < buffer_height; j++ )
{
for( int i = 0; i < buffer_width; i++ )
{
temp_buffer[ offset + 0 ] = iclamp( (int) ( src_buffer[ offset + 0 ] * 255.0 ), 0, 255 );
temp_buffer[ offset + 1 ] = iclamp( (int) ( src_buffer[ offset + 1 ] * 255.0 ), 0, 255 );
temp_buffer[ offset + 2 ] = iclamp( (int) ( src_buffer[ offset + 2 ] * 255.0 ), 0, 255 );
temp_buffer[ offset + 3 ] = iclamp( (int) ( src_buffer[ offset + 3 ] * 255.0 ), 0, 255 );
offset += 4;
}
}
glDrawPixels( buffer_width, buffer_height, GL_RGBA, GL_UNSIGNED_BYTE, temp_buffer );
delete [] temp_buffer;
}
#endif
glFlush();
}
}
}
}