void CSurface::DrawScanline(unsigned int row, unsigned int x_ofs, unsigned int w, const void* data)
{
- _SysDebug("DrawScanline(%i,%i,%i,%p)", row, x_ofs, w, data);
+ //_SysDebug("DrawScanline(%i,%i,%i,%p)", row, x_ofs, w, data);
if( row >= m_rect.m_h )
throw ::std::out_of_range("CSurface::DrawScanline row");
if( x_ofs >= m_rect.m_w )
if( w > m_rect.m_w )
throw ::std::out_of_range("CSurface::DrawScanline width");
- _SysDebug(" memcpy(%p, %p, %i)", &m_data[row*m_rect.m_w + x_ofs], data, w*4 );
::memcpy( &m_data[row*m_rect.m_w + x_ofs], data, w*4 );
}
void CCompositor::Redraw()
{
+ _SysDebug("CCompositor::Redraw");
// Redraw the screen and clear damage rects
if( m_damageRects.empty() )
return ;
// For all windows, check for intersection with damage rects
for( auto rect : m_damageRects )
{
+ _SysDebug("rect=(%i,%i) %ix%i", rect.m_x, rect.m_y, rect.m_w, rect.m_h);
// window list should be sorted by draw order (lowest first)
for( auto window : m_windows )
{
throw AxWin::InitFailure("Terminal not capable of graphics");
}
+ _SysDebug("m_width=%i, m_height=%i", m_width, m_height);
SetCursorBitmap();
SetCursorPos( m_width/2, m_height/2 );
SetBufFormat(PTYBUFFMT_FB);
+ uint32_t data[m_width];
+ for( unsigned int i = 0; i < m_height; i ++ )
+ BlitLine(data, i, 0, m_width);
}
void CVideo::GetDims(unsigned int& w, unsigned int& h)
void CVideo::BlitLine(const uint32_t* src, unsigned int dst_y, unsigned int dst_x, unsigned int width)
{
+ //_SysDebug("CVideo::BlitLine (%p, %i, %i, %i)", src, dst_y, dst_x, width);
+ size_t cmdlen = sizeof(struct ptycmd_senddata)/4 + width;
+ //_SysDebug(" - Offset = %i, cmdlen = %i", (dst_y * m_width + dst_x) * 4, cmdlen);
+ struct ptycmd_senddata cmd = {
+ {PTY2D_CMD_SEND, cmdlen & 0xFF, cmdlen>>8},
+ (dst_y * m_width + dst_x)
+ };
+ SetBufFormat(PTYBUFFMT_2DCMD);
+ _SysWrite(m_fd, &cmd, sizeof(cmd));
+ _SysWrite(m_fd, src, width*4);
+
+ //SetBufFormat(PTYBUFFMT_FB);
//_SysWriteAt(m_fd, (dst_y * m_width + dst_x) * 4, width * 4, src);
- SetBufFormat(PTYBUFFMT_FB);
- _SysSeek(m_fd, (dst_y * m_width + dst_x) * 4, SEEK_SET);
- _SysWrite(m_fd, src, width * 4);
+ //_SysSeek(m_fd, (dst_y * m_width + dst_x) * 4, SEEK_SET);
+ //_SysWrite(m_fd, src, width * 4);
}
void CVideo::Flush()
//AxWin4_SetWindowFlags(bgwin, AXWIN4_WNDFLAG_NODECORATE|AXWIN4_WNDFLAG_KEEPBELOW);
// Load image
- char *image = malloc(640*480*4);
- AxWin4_DrawBitmap(bgwin, 0, 0, 640, 480, image);
+ //char *image = malloc(640*480*4);
+ //AxWin4_DrawBitmap(bgwin, 0, 0, 640, 480, image);
_SysDebug("Beginning queue");