예제 #1
0
//--------------------------------------------------------------------------
VeSurfacePtr VeSurface::CreateRGBSurface(VeUInt32 u32Flags,
	VeInt32 i32Width, VeInt32 i32Height, VeInt32 i32Depth,
	VeUInt32 u32Rmask, VeUInt32 u32Gmask, VeUInt32 u32Bmask,
	VeUInt32 u32Amask) noexcept
{
	VeUInt32 u32Format = VeMasksToPixelFormatEnum(i32Depth, u32Rmask,
		u32Gmask, u32Bmask, u32Amask);
	if (u32Format == VE_PIXELFORMAT_UNKNOWN) return nullptr;

	VeSurfacePtr spSurface = VE_NEW VeSurface();
	VE_ASSERT(spSurface);
	spSurface->m_spFormat = VePixelFormat::Create(u32Format);
	if (!spSurface->m_spFormat) return nullptr;
	
	spSurface->m_i32Width = i32Width;
	spSurface->m_i32Height = i32Height;
	spSurface->m_i32Pitch = spSurface->CalculatePitch();

	if (VE_ISPIXELFORMAT_INDEXED(spSurface->m_spFormat->m_u32Format))
	{
		VePalettePtr spPattle = VE_NEW VePalette((1 << spSurface->m_spFormat->m_u8BitsPerPixel));
		VE_ASSERT(spPattle);
		if (spPattle->m_kColors.size() == 2)
		{
			spPattle->m_kColors[0].r() = 0xFF;
			spPattle->m_kColors[0].g() = 0xFF;
			spPattle->m_kColors[0].b() = 0xFF;
			spPattle->m_kColors[1].r() = 0x00;
			spPattle->m_kColors[1].g() = 0x00;
			spPattle->m_kColors[1].b() = 0x00;
		}
		spSurface->SetPalette(spPattle);
	}

	if (spSurface->m_i32Width && spSurface->m_i32Height)
	{
		VeSizeT stSize = spSurface->m_i32Height * spSurface->m_i32Pitch;
		spSurface->m_spPixels = VE_NEW VeBlob(stSize);
		VeZeroMemory(*spSurface->m_spPixels, stSize);
	}

	return spSurface;
}
예제 #2
0
//--------------------------------------------------------------------------
void VeWindows::_GetDisplayModes(VideoDisplay& kDisplay)
{
	DisplayData* pkData = (DisplayData*)(VeRefObject*)(kDisplay.m_spDriverData);
	DisplayMode kMode;
	for(VeDWord i(0); ; ++i)
	{
		if(!GetDisplayMode(pkData->m_acDeviceName, i, &kMode))
		{
			break;
		}
		if(VE_ISPIXELFORMAT_INDEXED(kMode.m_u32Format))
		{
			continue;
		}
		if(kMode.m_u32Format != VE_PIXELFORMAT_UNKNOWN)
		{
			kDisplay.m_kDisplayModes[kMode.GetValue()] = kMode;
		}
	}
}
예제 #3
0
//--------------------------------------------------------------------------
void WindowsVideoDevice::_GetDisplayModes(VeVideoDisplay* pkDisplay) noexcept
{
	VeDisplayData* data = (VeDisplayData*)pkDisplay->m_spDriverData;
	VeDisplayMode mode;

	for (VeUInt32 i = 0;; ++i)
	{
		if (!GetDisplayMode(data->DeviceName, i, &mode))
		{
			break;
		}
		if (VE_ISPIXELFORMAT_INDEXED(mode.m_u32Format))
		{
			continue;
		}
		if (mode.m_u32Format != VE_PIXELFORMAT_UNKNOWN)
		{
			pkDisplay->m_kDisplayModes.push_back(mode);
		}
	}
}