remove image_file_format::unknown and image_data_format::unknown

This commit is contained in:
2018-10-18 19:36:16 +07:00
parent 58ff58b416
commit da29a9e456
4 changed files with 16 additions and 47 deletions

View File

@@ -20,9 +20,7 @@ namespace e2d
jpg, jpg,
png, png,
pvr, pvr,
tga, tga
unknown
}; };
enum class image_data_format : u8 { enum class image_data_format : u8 {
@@ -39,9 +37,7 @@ namespace e2d
rgb_pvrtc4, rgb_pvrtc4,
rgba_pvrtc2, rgba_pvrtc2,
rgba_pvrtc4, rgba_pvrtc4
unknown
}; };
class bad_image_access final : public exception { class bad_image_access final : public exception {
@@ -94,7 +90,7 @@ namespace e2d
private: private:
buffer data_; buffer data_;
v2u size_; v2u size_;
image_data_format format_ = image_data_format::unknown; image_data_format format_ = image_data_format::rgba8;
}; };
void swap(image& l, image& r) noexcept; void swap(image& l, image& r) noexcept;

View File

@@ -32,9 +32,7 @@ namespace
{8, 2, image_data_format::rgb_pvrtc2, true, true, true}, {8, 2, image_data_format::rgb_pvrtc2, true, true, true},
{8, 4, image_data_format::rgb_pvrtc4, true, true, true}, {8, 4, image_data_format::rgb_pvrtc4, true, true, true},
{8, 2, image_data_format::rgba_pvrtc2, true, true, true}, {8, 2, image_data_format::rgba_pvrtc2, true, true, true},
{8, 4, image_data_format::rgba_pvrtc4, true, true, true}, {8, 4, image_data_format::rgba_pvrtc4, true, true, true}
{0, 0, image_data_format::unknown, false, false, false}
}; };
const data_format_description& get_data_format_description(image_data_format format) noexcept { const data_format_description& get_data_format_description(image_data_format format) noexcept {
@@ -67,8 +65,7 @@ namespace
} }
bool check_image_format(const v2u& size, image_data_format format) noexcept { bool check_image_format(const v2u& size, image_data_format format) noexcept {
return size == adjust_image_size(size, format) return size == adjust_image_size(size, format);
&& (format != image_data_format::unknown || size == v2u::zero());
} }
bool check_image_format(const v2u& size, image_data_format format, const buffer& data) noexcept { bool check_image_format(const v2u& size, image_data_format format, const buffer& data) noexcept {
@@ -164,7 +161,7 @@ namespace e2d
void image::clear() noexcept { void image::clear() noexcept {
data_.clear(); data_.clear();
size_ = v2u::zero(); size_ = v2u::zero();
format_ = image_data_format::unknown; format_ = image_data_format::rgba8;
} }
bool image::empty() const noexcept { bool image::empty() const noexcept {
@@ -183,9 +180,7 @@ namespace e2d
const data_format_description& format_desc = const data_format_description& format_desc =
get_data_format_description(format_); get_data_format_description(format_);
if ( empty() || u >= size_.x || v >= size_.y ) { if ( empty() || u >= size_.x || v >= size_.y || format_desc.compressed ) {
throw bad_image_access();
} else if ( format_desc.format == image_data_format::unknown || format_desc.compressed ) {
throw bad_image_access(); throw bad_image_access();
} }
@@ -303,8 +298,6 @@ namespace e2d { namespace images
return impl::try_save_image_pvr(src, dst); return impl::try_save_image_pvr(src, dst);
case image_file_format::tga: case image_file_format::tga:
return impl::try_save_image_tga(src, dst); return impl::try_save_image_tga(src, dst);
case image_file_format::unknown:
return false;
default: default:
E2D_ASSERT_MSG(false, "unexpected image file format"); E2D_ASSERT_MSG(false, "unexpected image file format");
return false; return false;

View File

@@ -48,11 +48,13 @@ namespace
image_data_format image_format_from_stb_channels(u32 channels) noexcept { image_data_format image_format_from_stb_channels(u32 channels) noexcept {
switch ( channels ) { switch ( channels ) {
case 1: return image_data_format::g8; case 1: return image_data_format::g8;
case 2: return image_data_format::ga8; case 2: return image_data_format::ga8;
case 3: return image_data_format::rgb8; case 3: return image_data_format::rgb8;
case 4: return image_data_format::rgba8; case 4: return image_data_format::rgba8;
default: return image_data_format::unknown; default:
E2D_ASSERT_MSG(false, "unexpected stb channel count");
return image_data_format::rgba8;
} }
} }
@@ -61,7 +63,7 @@ namespace
{ {
try { try {
const image_data_format img_format = image_format_from_stb_channels(img_channels); const image_data_format img_format = image_format_from_stb_channels(img_channels);
if ( img && img_size.x > 0 && img_size.y > 0 && img_format != image_data_format::unknown ) { if ( img && img_size.x > 0 && img_size.y > 0 ) {
buffer img_buffer( buffer img_buffer(
img.get(), img.get(),
math::numeric_cast<std::size_t>(img_size.x * img_size.y * img_channels)); math::numeric_cast<std::size_t>(img_size.x * img_size.y * img_channels));

View File

@@ -11,29 +11,7 @@ TEST_CASE("images") {
{ {
image i; image i;
REQUIRE(i.size() == v2u::zero()); REQUIRE(i.size() == v2u::zero());
REQUIRE(i.format() == image_data_format::unknown); REQUIRE(i.format() == image_data_format::rgba8);
REQUIRE(i.data().empty());
REQUIRE(i.empty());
}
{
image i(v2u::zero(), image_data_format::unknown);
REQUIRE(i.size() == v2u::zero());
REQUIRE(i.format() == image_data_format::unknown);
REQUIRE(i.data().empty());
REQUIRE(i.empty());
}
{
image i(v2u::zero(), image_data_format::unknown, buffer());
REQUIRE(i.size() == v2u::zero());
REQUIRE(i.format() == image_data_format::unknown);
REQUIRE(i.data().empty());
REQUIRE(i.empty());
}
{
const buffer b{};
image i(v2u::zero(), image_data_format::unknown, b);
REQUIRE(i.size() == v2u::zero());
REQUIRE(i.format() == image_data_format::unknown);
REQUIRE(i.data().empty()); REQUIRE(i.data().empty());
REQUIRE(i.empty()); REQUIRE(i.empty());
} }