void linux_framebuffer::setcolor(const color & c) { if(m_var.bits_per_pixel == 16) { //printf("R %d %d\n", m_var.red.offset, m_var.red.length); //printf("G %d %d\n", m_var.green.offset, m_var.green.length); //printf("B %d %d\n", m_var.blue.offset, m_var.blue.length); //printf("A %d %d\n", m_var.transp.offset, m_var.transp.length); constexpr size_t sizeof_colorcomponent = sizeof(c.ir()) * 8; const uint16_t r = (c.ir() >> (sizeof_colorcomponent - m_var.red.length)) << m_var.red.offset; const uint16_t g = (c.ig() >> (sizeof_colorcomponent - m_var.green.length)) << m_var.green.offset; const uint16_t b = (c.ib() >> (sizeof_colorcomponent - m_var.blue.length)) << m_var.blue.offset; const uint16_t a = (c.ia() >> (sizeof_colorcomponent - m_var.transp.length)) << m_var.transp.offset; //printf("assign %08x + %08x = %08x\n", m_map, offset, pos); m_col16 = r|g|b|a; } }