コード例 #1
0
ファイル: linux_framebuffer.cpp プロジェクト: roeles/icarus2
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;
	}

}