World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Класс Image

#include <Image.h>

+ Граф наследования:Image:
+ Граф связей класса Image:

Открытые члены

 Image (bool lazy_initialization=true)
 
virtual ~Image ()
 
unsigned int GetWidth ()
 
unsigned int GetHeight ()
 
const voidGetPixels (IMAGE_FORMAT format)
 
IMAGE_FORMAT GetFormat () const
 
bool Release ()
 

Открытые статические члены

static ImageCreate (unsigned int width, unsigned int height, IMAGE_FORMAT format, const void *pixels=nullptr)
 
static ImageCreate (ImageLoader *loader)
 

Защищенные члены

virtual bool LoadImageData ()
 

Защищенные данные

bool lazy_initialization = 0
 
bool initialized = 0
 
ImageLoaderloader = NULL
 
unsigned int width = 0
 
unsigned int height = 0
 
IMAGE_FORMAT native_format = IMAGE_INVALID_FORMAT
 
voidpixels [IMAGE_NUM_FORMATS]
 

Подробное описание

См. определение в файле Image.h строка 19

Конструктор(ы)

◆ Image()

Image::Image ( bool  lazy_initialization = true)
inlineexplicit

См. определение в файле Image.h строка 21

23  initialized(false),
24  loader(nullptr),
25  width(0),
26  height(0),
28  for (unsigned int i = 0; i < IMAGE_NUM_FORMATS; ++i)
29  pixels[i] = nullptr;
30  }

Перекрестные ссылки IMAGE_NUM_FORMATS.

Используется в Create().

+ Граф вызова функции:

◆ ~Image()

virtual Image::~Image ( )
inlinevirtual

См. определение в файле Image.h строка 31

31 {}

Методы

◆ Create() [1/2]

Image * Image::Create ( unsigned int  width,
unsigned int  height,
IMAGE_FORMAT  format,
const void pixels = nullptr 
)
static

См. определение в файле Image.cpp строка 243

244  {
245  if (width == 0 || height == 0) __debugbreak();
246 
247  Image *img = new Image(false);
248  if (img) {
249  img->initialized = true;
250  img->width = width;
251  img->height = height;
252  img->native_format = format;
253  unsigned int num_pixels = img->GetWidth() * img->GetHeight();
254  unsigned int num_pixels_bytes =
255  num_pixels * IMAGE_FORMAT_BytesPerPixel(format);
256  img->pixels[format] = new unsigned char[num_pixels_bytes];
257  if (pixels) {
258  memcpy(img->pixels[format], pixels, num_pixels_bytes);
259  } else {
260  memset(img->pixels[format], 0, num_pixels_bytes);
261  }
262 
263  return img;
264 
265  } else {
266  return nullptr;
267  }
268 }

Перекрестные ссылки __debugbreak(), height, Image(), IMAGE_FORMAT_BytesPerPixel() и width.

Используется в Render::am_Blt_Chroma(), Render::BlendTextures(), Render::DrawMasked(), Render::DrawMonsterPortrait(), DrawSparks(), Render::DrawText(), Render::DrawTextAlpha(), GUIWindow_Load::GUIWindow_Load(), GUIWindow_Save::GUIWindow_Save(), LoadGame(), Render::TakeScreenshot() и Render::TexturePixelRotateDraw().

+ Граф вызовов:
+ Граф вызова функции:

◆ Create() [2/2]

Image * Image::Create ( ImageLoader loader)
static

См. определение в файле Image.cpp строка 194

194  {
195  Image *img = new Image();
196  if (img) {
197  img->loader = loader;
198  }
199 
200  return img;
201 }

Перекрестные ссылки Image() и loader.

+ Граф вызовов:

◆ GetWidth()

unsigned int Image::GetWidth ( )

См. определение в файле Image.cpp строка 217

217  {
218  if (!initialized) {
219  LoadImageData();
220  }
221 
222  if (initialized) {
223  if (width == 0) __debugbreak();
224  return width;
225  }
226 
227  return 0;
228 }

Перекрестные ссылки __debugbreak(), initialized, LoadImageData() и width.

Используется в _42777D_CastSpell_UseWand_ShootArrow(), Render::am_Blt_Chroma(), Render::BlendTextures(), CharacterUI_InventoryTab_Draw(), CreateAwardsScrollBar(), Render::DrawBillboard_Indoor(), DrawBook_Map_sub(), RenderOpenGL::DrawIndoorPolygon(), Render::DrawIndoorPolygon(), Render::DrawIndoorSky(), RenderOpenGL::DrawMasked(), Render::DrawMasked(), Render::DrawMonsterPortrait(), RenderOpenGL::DrawOutdoorSkyD3D(), Render::DrawOutdoorSkyD3D(), DrawPopupWindow(), RenderBase::DrawSpriteObjects_ODM(), RenderOpenGL::DrawTerrainPolygon(), RenderOpenGL::DrawTextureNew(), GameUI_DrawLifeManaBars(), GameUI_DrawMinimap(), GetPixels(), GUIWindow_GameOptions::GUIWindow_GameOptions(), GUIWindow_JournalBook::GUIWindow_JournalBook(), GUIWindow_Load::GUIWindow_Load(), GUIWindow_MainMenu::GUIWindow_MainMenu(), GUIWindow_QuestBook::GUIWindow_QuestBook(), GUIWindow_Save::GUIWindow_Save(), MPlayer::HouseMovieLoop(), LoadGame(), GUIWindow_Spellbook::OpenSpellbook(), Chest::PlaceItemAt(), MPlayer::PlayFullscreenMovie(), IndoorLocation::PrepareActorRenderList_BLV(), OutdoorLocation::PrepareActorsDrawList(), IndoorLocation::PrepareDecorationsRenderList_BLV(), IndoorLocation::PrepareItemsRenderList_BLV(), RenderOpenGL::Present(), Mouse::ReadCursorWithItem(), GUIWindow_CharacterRecord::ToggleRingsOverlay(), RenderBase::TransformBillboard(), UI_Create() и GUIWindow_Chest::Update().

+ Граф вызовов:
+ Граф вызова функции:

◆ GetHeight()

unsigned int Image::GetHeight ( )

См. определение в файле Image.cpp строка 230

230  {
231  if (!initialized) {
232  LoadImageData();
233  }
234 
235  if (initialized) {
236  if (height == 0) __debugbreak();
237  return height;
238  }
239 
240  return 0;
241 }

Перекрестные ссылки __debugbreak(), height, initialized и LoadImageData().

Используется в _42777D_CastSpell_UseWand_ShootArrow(), Render::BlendTextures(), CharacterUI_InventoryTab_Draw(), CreateAwardsScrollBar(), Render::DrawBillboard_Indoor(), RenderOpenGL::DrawIndoorPolygon(), Render::DrawIndoorPolygon(), Render::DrawIndoorSky(), RenderOpenGL::DrawMasked(), Render::DrawMasked(), Render::DrawMonsterPortrait(), RenderOpenGL::DrawOutdoorSkyD3D(), Render::DrawOutdoorSkyD3D(), DrawPopupWindow(), RenderBase::DrawSpriteObjects_ODM(), RenderOpenGL::DrawTextureNew(), Render::DrawTextureNew(), IndoorLocation::ExecDraw_d3d(), GameUI_DrawLifeManaBars(), GetPixels(), GUIWindow_GameOptions::GUIWindow_GameOptions(), GUIWindow_JournalBook::GUIWindow_JournalBook(), GUIWindow_MainMenu::GUIWindow_MainMenu(), MPlayer::HouseMovieLoop(), GUIWindow_Spellbook::OpenSpellbook(), MPlayer::PlayFullscreenMovie(), IndoorLocation::PrepareActorRenderList_BLV(), OutdoorLocation::PrepareActorsDrawList(), IndoorLocation::PrepareDecorationsRenderList_BLV(), Render::PrepareDecorationsRenderList_ODM(), IndoorLocation::PrepareItemsRenderList_BLV(), RenderOpenGL::Present(), Mouse::ReadCursorWithItem(), GUIWindow_CharacterRecord::ToggleRingsOverlay(), RenderBase::TransformBillboard(), UI_Create() и GUICredits::Update().

+ Граф вызовов:
+ Граф вызова функции:

◆ GetPixels()

const void * Image::GetPixels ( IMAGE_FORMAT  format)

См. определение в файле Image.cpp строка 270

270  {
271  if (!initialized) {
272  LoadImageData();
273  }
274 
275  if (initialized) {
276  if (this->pixels[format]) {
277  return this->pixels[format];
278  }
279 
280  auto native_pixels = this->pixels[this->native_format];
281  if (native_pixels) {
282  static ImageFormatConverter
283  converters[IMAGE_NUM_FORMATS][IMAGE_NUM_FORMATS] = {
284  // IMAGE_FORMAT_R5G6B5 ->
285  {
286  nullptr, // IMAGE_FORMAT_R5G6B5
287  nullptr, // IMAGE_FORMAT_A1R5G5B5
288  Image_R5G6B5_to_A8R8G8B8, // IMAGE_FORMAT_A8R8G8B8
289  Image_R5G6B5_to_R8G8B8, // IMAGE_FORMAT_R8G8B8
290  Image_R5G6B5_to_R8G8B8A8, // IMAGE_FORMAT_R8G8B8A8
291  },
292 
293  // IMAGE_FORMAT_A1R5G5B5 ->
294  {
295  nullptr, // IMAGE_FORMAT_R5G6B5
296  nullptr, // IMAGE_FORMAT_A1R5G5B5
297  nullptr, // IMAGE_FORMAT_A8R8G8B8
298  nullptr, // IMAGE_FORMAT_R8G8B8
299  Image_A1R5G5B5_to_R8G8B8A8, // IMAGE_FORMAT_R8G8B8A8
300  },
301 
302  // IMAGE_FORMAT_A8R8G8B8 ->
303  {
304  Image_A8R8G8B8_to_R5G6B5, // IMAGE_FORMAT_R5G6B5
305  Image_A8R8G8B8_to_A1R5G5B5, // IMAGE_FORMAT_A1R5G5B5
306  nullptr, // IMAGE_FORMAT_A8R8G8B8
307  nullptr, // IMAGE_FORMAT_R8G8B8
308  Image_A8R8G8B8_to_R8G8B8A8, // IMAGE_FORMAT_R8G8B8A8
309  },
310  };
311 
312  ImageFormatConverter cvt = converters[this->native_format][format];
313  if (cvt) {
314  unsigned int num_pixels = this->GetWidth() * this->GetHeight();
315 
316  void *cvt_pixels =
317  new unsigned char[num_pixels *
319  if (cvt(width * height, native_pixels, cvt_pixels)) {
320  return this->pixels[format] = cvt_pixels;
321  } else {
322  delete[] cvt_pixels;
323  cvt_pixels = nullptr;
324  }
325  } else {
326  logger->Warning(L"No ImageConverter defined from %s to %s",
328  IMAGE_FORMAT_ToString(format));
329  }
330  }
331  }
332  return nullptr;
333 }

Перекрестные ссылки GetHeight(), GetWidth(), Image_A1R5G5B5_to_R8G8B8A8(), Image_A8R8G8B8_to_A1R5G5B5(), Image_A8R8G8B8_to_R5G6B5(), Image_A8R8G8B8_to_R8G8B8A8(), IMAGE_FORMAT_BytesPerPixel(), IMAGE_FORMAT_ToString(), IMAGE_NUM_FORMATS, Image_R5G6B5_to_A8R8G8B8(), Image_R5G6B5_to_R8G8B8(), Image_R5G6B5_to_R8G8B8A8(), initialized, LoadImageData(), logger, native_format и Log::Warning().

Используется в Render::am_Blt_Chroma(), Render::BlendTextures(), DrawBook_Map_sub(), RenderOpenGL::DrawMasked(), Render::DrawMasked(), Render::DrawMonsterPortrait(), DrawSparks(), Render::DrawText(), Render::DrawTextAlpha(), GameUI_DrawMinimap(), MPlayer::HouseMovieLoop(), ArcomageGame::LoadSprites(), MPlayer::PlayFullscreenMovie(), RenderOpenGL::Present(), SaveGame() и Render::TexturePixelRotateDraw().

+ Граф вызовов:
+ Граф вызова функции:

◆ GetFormat()

IMAGE_FORMAT Image::GetFormat ( ) const
inline

См. определение в файле Image.h строка 40

40 { return native_format; }

Перекрестные ссылки native_format.

◆ Release()

bool Image::Release ( )

См. определение в файле Image.cpp строка 335

335  {
336  if (loader) {
339  }
340 
341  if (initialized) {
342  if (loader) {
343  delete loader;
344  loader = nullptr;
345  }
346 
347  for (unsigned int i = 0; i < IMAGE_NUM_FORMATS; ++i) {
348  if (pixels[i]) {
349  delete[] pixels[i];
350  pixels[i] = nullptr;
351  }
352  }
353 
355  width = 0;
356  height = 0;
357  }
358 
359  delete this;
360  return true;
361 }

Перекрестные ссылки assets, ImageLoader::GetResourceName(), IMAGE_INVALID_FORMAT, IMAGE_NUM_FORMATS, initialized, loader, native_format и AssetsManager::ReleaseImage().

Используется в Render::am_Blt_Chroma(), Render::BlendTextures(), Render::DrawMasked(), Render::DrawMonsterPortrait(), DrawSparks(), Render::DrawText(), Render::DrawTextAlpha(), Application::Game::EventLoop(), HouseDialogPressCloseBtn(), OutdoorLocation::LoadActualSkyFrame(), GUIWindow_MainMenu::Loop(), ArcomageGame::Loop(), Application::Menu::MenuLoop(), OnCloseSpellBook(), MPlayer::PlayFullscreenMovie(), GUIWindow_Book::Release(), GUIWindow_Travel::Release(), GUIWindow_Dialogue::Release(), GUIWindow_Transition::Release(), GUIProgressBar::Release(), GUIWindow_House::Release(), Render::TexturePixelRotateDraw(), GUIWindow_Rest::Update(), GUICredits::~GUICredits(), GUIWindow_MainMenu::~GUIWindow_MainMenu() и GUIWindow_PartyCreation::~GUIWindow_PartyCreation().

+ Граф вызовов:
+ Граф вызова функции:

◆ LoadImageData()

bool Image::LoadImageData ( )
protectedvirtual

Переопределяется в TextureD3D и TextureOpenGL.

См. определение в файле Image.cpp строка 203

203  {
204  if (!initialized) {
205  void *data = nullptr;
209  }
210  }
211 
212  if ((width == 0 || height == 0) && initialized) __debugbreak();
213 
214  return initialized;
215 }

Перекрестные ссылки __debugbreak(), IMAGE_INVALID_FORMAT, initialized, ImageLoader::Load(), loader и native_format.

Используется в GetHeight(), GetPixels() и GetWidth().

+ Граф вызовов:
+ Граф вызова функции:

Данные класса

◆ lazy_initialization

bool Image::lazy_initialization = 0
protected

См. определение в файле Image.h строка 45

◆ initialized

◆ loader

ImageLoader* Image::loader = NULL
protected

См. определение в файле Image.h строка 47

Используется в TextureOpenGL::Create(), TextureD3D::Create(), Create(), TextureOpenGL::LoadImageData(), TextureD3D::LoadImageData(), LoadImageData() и Release().

◆ width

unsigned int Image::width = 0
protected

См. определение в файле Image.h строка 49

Используется в TextureOpenGL::Create(), TextureD3D::Create(), Create() и GetWidth().

◆ height

unsigned int Image::height = 0
protected

См. определение в файле Image.h строка 50

Используется в TextureOpenGL::Create(), TextureD3D::Create(), Create() и GetHeight().

◆ native_format

IMAGE_FORMAT Image::native_format = IMAGE_INVALID_FORMAT
protected

См. определение в файле Image.h строка 51

Используется в GetFormat(), GetPixels(), TextureOpenGL::LoadImageData(), TextureD3D::LoadImageData(), LoadImageData() и Release().

◆ pixels

void* Image::pixels[IMAGE_NUM_FORMATS]
protected

См. определение в файле Image.h строка 52

Используется в TextureOpenGL::LoadImageData() и TextureD3D::LoadImageData().


Объявления и описания членов классов находятся в файлах:
Image_A1R5G5B5_to_R8G8B8A8
bool Image_A1R5G5B5_to_R8G8B8A8(unsigned int num_pixels, const void *src_pixels, void *dst_pixels)
Definition: ImageFormatConverter.h:143
Image::GetHeight
unsigned int GetHeight()
Definition: Image.cpp:230
Image::native_format
IMAGE_FORMAT native_format
Definition: Image.h:51
Image::width
unsigned int width
Definition: Image.h:49
Image::loader
ImageLoader * loader
Definition: Image.h:47
height
EGLSurface EGLint EGLint EGLint EGLint height
Definition: SDL_egl.h:1596
ImageFormatConverter
bool(* ImageFormatConverter)(unsigned int num_pixels, const void *src, void *dst)
Definition: ImageFormatConverter.h:3
IMAGE_FORMAT_BytesPerPixel
unsigned int IMAGE_FORMAT_BytesPerPixel(IMAGE_FORMAT format)
Definition: Image.cpp:46
IMAGE_INVALID_FORMAT
@ IMAGE_INVALID_FORMAT
Definition: Image.h:12
Image_R5G6B5_to_A8R8G8B8
bool Image_R5G6B5_to_A8R8G8B8(unsigned int num_pixels, const void *src_pixels, void *dst_pixels)
Definition: ImageFormatConverter.h:82
Image_R5G6B5_to_R8G8B8A8
bool Image_R5G6B5_to_R8G8B8A8(unsigned int num_pixels, const void *src_pixels, void *dst_pixels)
Definition: ImageFormatConverter.h:94
format
SDL_AudioFormat format
Definition: SDL_audio.h:194
Image::lazy_initialization
bool lazy_initialization
Definition: Image.h:45
Image::GetWidth
unsigned int GetWidth()
Definition: Image.cpp:217
Image_A8R8G8B8_to_R8G8B8A8
bool Image_A8R8G8B8_to_R8G8B8A8(unsigned int num_pixels, const void *src_pixels, void *dst_pixels)
Definition: ImageFormatConverter.h:46
Image
Definition: Image.h:19
IMAGE_FORMAT_ToString
const wchar_t * IMAGE_FORMAT_ToString(IMAGE_FORMAT format)
Definition: Image.cpp:27
Image_A8R8G8B8_to_A1R5G5B5
bool Image_A8R8G8B8_to_A1R5G5B5(unsigned int num_pixels, const void *src_pixels, void *dst_pixels)
Definition: ImageFormatConverter.h:69
Image::LoadImageData
virtual bool LoadImageData()
Definition: Image.cpp:203
width
EGLSurface EGLint EGLint EGLint width
Definition: SDL_egl.h:1596
Log::Warning
void Warning(const wchar_t *pFormat,...)
Definition: Log.cpp:28
Image::height
unsigned int height
Definition: Image.h:50
ImageLoader::GetResourceName
virtual String GetResourceName() const
Definition: ImageLoader.h:15
Image_R5G6B5_to_R8G8B8
bool Image_R5G6B5_to_R8G8B8(unsigned int num_pixels, const void *src_pixels, void *dst_pixels)
Definition: ImageFormatConverter.h:116
Image::Image
Image(bool lazy_initialization=true)
Definition: Image.h:21
Image::initialized
bool initialized
Definition: Image.h:46
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974
AssetsManager::ReleaseImage
bool ReleaseImage(const String &name)
Definition: AssetsManager.cpp:16
Image_A8R8G8B8_to_R5G6B5
bool Image_A8R8G8B8_to_R5G6B5(unsigned int num_pixels, const void *src_pixels, void *dst_pixels)
Definition: ImageFormatConverter.h:57
ImageLoader::Load
virtual bool Load(unsigned int *width, unsigned int *height, void **pixels, IMAGE_FORMAT *format)=0
assets
AssetsManager * assets
Definition: AssetsManager.cpp:12
__debugbreak
void __cdecl __debugbreak(void)
IMAGE_NUM_FORMATS
@ IMAGE_NUM_FORMATS
Definition: Image.h:11
logger
Log * logger
Definition: IocContainer.cpp:47
pixels
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: SDL_opengl.h:1572
img
GLint GLvoid * img
Definition: SDL_opengl.h:1980