+ if( Window->m_fd == -1 )
+ {
+ CSerialiser req;
+ req.WriteU8(IPCMSG_GETWINBUF);
+ req.WriteU16(Window->m_id);
+
+ CDeserialiser response = GetSyncReply(req, IPCMSG_GETWINBUF);
+ unsigned int rspwin = response.ReadU16();
+ if( rspwin != Window->m_id )
+ {
+ _SysDebug("AxWin4_GetWindowBuffer: GETWINBUF reply for different window (%u != %u)", rspwin, Window->m_id);
+ return NULL;
+ }
+
+ uint64_t handle = response.ReadU64();
+ Window->m_fd = _SysUnMarshalFD(handle);
+
+ _SysDebug("AxWin4_GetWindowBuffer: %llx = %i", handle, Window->m_fd);
+ }
+
+ if( !Window->m_buffer )
+ {
+ size_t size = 640*480*4;
+ Window->m_buffer = _SysMMap(NULL, size, MMAP_PROT_WRITE, MMAP_MAP_SHARED, Window->m_fd, 0);
+ }
+
+ return Window->m_buffer;