//-------------------------------------------------------------------------- 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; }
//-------------------------------------------------------------------------- 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; } } }
//-------------------------------------------------------------------------- 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); } } }