- //seek(giTerminalFD, 0, SEEK_SET);
- seek(giTerminalFD, 0, 1);
- write(giTerminalFD, gpScreenBuffer, giScreenWidth*giScreenHeight*4);
+ #if 0
+ int ofs = giVideo_FirstDirtyLine*giScreenWidth;
+ int size = (giVideo_LastDirtyLine-giVideo_FirstDirtyLine)*giScreenWidth;
+
+ if( giVideo_LastDirtyLine == 0 ) return;
+
+ _SysDebug("Video_Update - Updating lines %i to %i (0x%x+0x%x px)",
+ giVideo_FirstDirtyLine, giVideo_LastDirtyLine, ofs, size);
+ _SysSeek(giTerminalFD, ofs*4, SEEK_SET);
+ _SysDebug("Video_Update - Sending FD %i %p 0x%x", giTerminalFD, gpScreenBuffer+ofs, size*4);
+ _SysWrite(giTerminalFD, gpScreenBuffer+ofs, size*4);
+ _SysDebug("Video_Update - Done");
+ giVideo_FirstDirtyLine = giScreenHeight;
+ giVideo_LastDirtyLine = 0;
+ #else
+ size_t size = giScreenHeight * giScreenWidth;
+ Video_int_SetBufFmt(PTYBUFFMT_FB);
+ _SysWrite(giTerminalFD, gpScreenBuffer, size*4);
+ #endif
+}
+
+void Video_int_SetBufFmt(int NewFmt)
+{
+ static int current_fmt;
+
+ if( current_fmt == NewFmt )
+ return ;
+
+ struct ptymode mode = {.InputMode = 0, .OutputMode = NewFmt};
+ int rv = _SysIOCtl( giTerminalFD, PTY_IOCTL_SETMODE, &mode );
+ if( rv ) {
+ perror("Can't set PTY to framebuffer mode");
+ exit(-1);
+ }
+
+ current_fmt = NewFmt;