@IliaNeverov

Зачем при использовании библиотеки stb_image указывают #define STB_IMAGE_IMPLEMENTATION?

Зачем используется #define STB_IMAGE_IMPLEMENTATION когда код в файле загружает изображение?
файл реализации где это указано

#include "Image.h"


#include <memory>
#include <stdexcept>

#define STB_IMAGE_IMPLEMENTATION
#include <stb_image.h>

Image Image::loadFromFile(const std::string& path)
{
	int x, y, channels;

	std::unique_ptr<stbi_uc> data = std::unique_ptr<stbi_uc>(stbi_load(("res/texture/" + path).c_str(), &x, &y, &channels, 0));
	if (data == nullptr)
	{
		throw std::runtime_error("could not load image: " + path);
	}
	Format format;

	switch (channels)
	{
	case 3:
		format = RGB;
		break;
		
	case 4:
		format = RGBA;
		break;

	default:
		throw std::runtime_error("invalid channel count (" + std::to_string(channels) + ") in file: " + path);
	}

	int size = x * y * channels;
	return Image(x, y, std::vector<char>{data.get(), data.get() + size}, format);
}

  • Вопрос задан
  • 313 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Обычно в библиотеках используют подобный подход, когда один и тот же заголовочный файл используется при компиляции самой библиотеки и при компиляции пользовательских приложений, использующих библиотеку (ваш случай).
Например для микрософтовского компилятора для объявления экспортируемых функций (при компиляции библиотеки) требуется один аттрибут для функции, а для ее импорта из библиотеки (при компиляции приложения) другой. Вот подобные вещи и регулируются этим макросом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы