remove unsupported mipmap and cubemap filtration options

This commit is contained in:
2019-07-23 09:38:32 +07:00
parent 180be22b9e
commit 10496badaa
8 changed files with 12 additions and 75 deletions

View File

@@ -426,11 +426,7 @@ namespace e2d
enum class sampler_min_filter : u8 { enum class sampler_min_filter : u8 {
nearest, nearest,
linear, linear
nearest_mipmap_nearest,
linear_mipmap_nearest,
nearest_mipmap_linear,
linear_mipmap_linear
}; };
enum class sampler_mag_filter : u8 { enum class sampler_mag_filter : u8 {
@@ -585,7 +581,6 @@ namespace e2d
sampler_state& wrap(sampler_wrap st) noexcept; sampler_state& wrap(sampler_wrap st) noexcept;
sampler_state& s_wrap(sampler_wrap s) noexcept; sampler_state& s_wrap(sampler_wrap s) noexcept;
sampler_state& t_wrap(sampler_wrap t) noexcept; sampler_state& t_wrap(sampler_wrap t) noexcept;
sampler_state& r_wrap(sampler_wrap t) noexcept;
sampler_state& filter(sampler_min_filter min, sampler_mag_filter mag) noexcept; sampler_state& filter(sampler_min_filter min, sampler_mag_filter mag) noexcept;
sampler_state& min_filter(sampler_min_filter min) noexcept; sampler_state& min_filter(sampler_min_filter min) noexcept;
@@ -595,7 +590,6 @@ namespace e2d
sampler_wrap s_wrap() const noexcept; sampler_wrap s_wrap() const noexcept;
sampler_wrap t_wrap() const noexcept; sampler_wrap t_wrap() const noexcept;
sampler_wrap r_wrap() const noexcept;
sampler_min_filter min_filter() const noexcept; sampler_min_filter min_filter() const noexcept;
sampler_mag_filter mag_filter() const noexcept; sampler_mag_filter mag_filter() const noexcept;
@@ -603,8 +597,7 @@ namespace e2d
texture_ptr texture_; texture_ptr texture_;
sampler_wrap s_wrap_ = sampler_wrap::repeat; sampler_wrap s_wrap_ = sampler_wrap::repeat;
sampler_wrap t_wrap_ = sampler_wrap::repeat; sampler_wrap t_wrap_ = sampler_wrap::repeat;
sampler_wrap r_wrap_ = sampler_wrap::repeat; sampler_min_filter min_filter_ = sampler_min_filter::linear;
sampler_min_filter min_filter_ = sampler_min_filter::nearest_mipmap_linear;
sampler_mag_filter mag_filter_ = sampler_mag_filter::linear; sampler_mag_filter mag_filter_ = sampler_mag_filter::linear;
}; };

View File

@@ -26,7 +26,7 @@ namespace
{"depth24", 24, false, true, false, pixel_declaration::pixel_type::depth24, false, v2u(1)}, {"depth24", 24, false, true, false, pixel_declaration::pixel_type::depth24, false, v2u(1)},
{"depth32", 32, false, true, false, pixel_declaration::pixel_type::depth32, false, v2u(1)}, {"depth32", 32, false, true, false, pixel_declaration::pixel_type::depth32, false, v2u(1)},
{"depth24_stencil8", 32, false, true, true, pixel_declaration::pixel_type::depth24_stencil8, false, v2u(1)}, {"depth24_stencil8", 32, false, true, true, pixel_declaration::pixel_type::depth24_stencil8, false, v2u(1)},
{"g8", 8, true, false, false, pixel_declaration::pixel_type::g8, false, v2u(1)}, {"g8", 8, true, false, false, pixel_declaration::pixel_type::g8, false, v2u(1)},
{"ga8", 16, true, false, false, pixel_declaration::pixel_type::ga8, false, v2u(1)}, {"ga8", 16, true, false, false, pixel_declaration::pixel_type::ga8, false, v2u(1)},
{"rgb8", 24, true, false, false, pixel_declaration::pixel_type::rgb8, false, v2u(1)}, {"rgb8", 24, true, false, false, pixel_declaration::pixel_type::rgb8, false, v2u(1)},
@@ -163,7 +163,7 @@ namespace e2d
std::size_t pixel_declaration::bits_per_pixel() const noexcept { std::size_t pixel_declaration::bits_per_pixel() const noexcept {
return get_pixel_type_description(type_).bits_per_pixel; return get_pixel_type_description(type_).bits_per_pixel;
} }
v2u pixel_declaration::compressed_block_size() const noexcept { v2u pixel_declaration::compressed_block_size() const noexcept {
return get_pixel_type_description(type_).block_size; return get_pixel_type_description(type_).block_size;
} }
@@ -654,7 +654,6 @@ namespace e2d
render::sampler_state& render::sampler_state::wrap(sampler_wrap st) noexcept { render::sampler_state& render::sampler_state::wrap(sampler_wrap st) noexcept {
s_wrap(st); s_wrap(st);
t_wrap(st); t_wrap(st);
r_wrap(st);
return *this; return *this;
} }
@@ -668,11 +667,6 @@ namespace e2d
return *this; return *this;
} }
render::sampler_state& render::sampler_state::r_wrap(sampler_wrap r) noexcept {
r_wrap_ = r;
return *this;
}
render::sampler_state& render::sampler_state::filter(sampler_min_filter min, sampler_mag_filter mag) noexcept { render::sampler_state& render::sampler_state::filter(sampler_min_filter min, sampler_mag_filter mag) noexcept {
min_filter(min); min_filter(min);
mag_filter(mag); mag_filter(mag);
@@ -701,10 +695,6 @@ namespace e2d
return t_wrap_; return t_wrap_;
} }
render::sampler_wrap render::sampler_state::r_wrap() const noexcept {
return r_wrap_;
}
render::sampler_min_filter render::sampler_state::min_filter() const noexcept { render::sampler_min_filter render::sampler_state::min_filter() const noexcept {
return min_filter_; return min_filter_;
} }
@@ -1239,7 +1229,6 @@ namespace e2d
return l.texture() == r.texture() return l.texture() == r.texture()
&& l.s_wrap() == r.s_wrap() && l.s_wrap() == r.s_wrap()
&& l.t_wrap() == r.t_wrap() && l.t_wrap() == r.t_wrap()
&& l.r_wrap() == r.r_wrap()
&& l.min_filter() == r.min_filter() && l.min_filter() == r.min_filter()
&& l.mag_filter() == r.mag_filter(); && l.mag_filter() == r.mag_filter();
} }

View File

@@ -136,10 +136,6 @@ namespace
texture_id.target(), texture_id.target(),
GL_TEXTURE_WRAP_T, GL_TEXTURE_WRAP_T,
convert_sampler_wrap(sampler.t_wrap()))); convert_sampler_wrap(sampler.t_wrap())));
GL_CHECK_CODE(debug, glTexParameteri(
texture_id.target(),
GL_TEXTURE_WRAP_R,
convert_sampler_wrap(sampler.r_wrap())));
GL_CHECK_CODE(debug, glTexParameteri( GL_CHECK_CODE(debug, glTexParameteri(
texture_id.target(), texture_id.target(),
GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_FILTER,
@@ -544,16 +540,6 @@ namespace e2d
convert_image_data_format_to_external_data_type(image.format()), convert_image_data_format_to_external_data_type(image.format()),
image.data().data())); image.data().data()));
} }
#if E2D_RENDER_MODE == E2D_RENDER_MODE_OPENGL
GL_CHECK_CODE(state_->dbg(), glTexParameteri(
id.target(),
GL_TEXTURE_MAX_LEVEL,
0));
GL_CHECK_CODE(state_->dbg(), glTexParameteri(
id.target(),
GL_TEXTURE_BASE_LEVEL,
0));
#endif
}); });
return std::make_shared<texture>( return std::make_shared<texture>(
@@ -972,7 +958,7 @@ namespace e2d
return *this; return *this;
} }
render& render::update_buffer( render& render::update_buffer(
const index_buffer_ptr& ibuffer, const index_buffer_ptr& ibuffer,
buffer_view indices, buffer_view indices,

View File

@@ -759,7 +759,7 @@ namespace e2d::opengl
DEFINE_CASE(depth24, GL_DEPTH_COMPONENT24); DEFINE_CASE(depth24, GL_DEPTH_COMPONENT24);
DEFINE_CASE(depth32, GL_DEPTH_COMPONENT32); DEFINE_CASE(depth32, GL_DEPTH_COMPONENT32);
DEFINE_CASE(depth24_stencil8, GL_DEPTH24_STENCIL8); DEFINE_CASE(depth24_stencil8, GL_DEPTH24_STENCIL8);
DEFINE_CASE(g8, GL_ALPHA); DEFINE_CASE(g8, GL_ALPHA);
DEFINE_CASE(ga8, GL_LUMINANCE_ALPHA); DEFINE_CASE(ga8, GL_LUMINANCE_ALPHA);
DEFINE_CASE(rgb8, GL_RGB); DEFINE_CASE(rgb8, GL_RGB);
@@ -909,10 +909,6 @@ namespace e2d::opengl
switch ( f ) { switch ( f ) {
DEFINE_CASE(nearest, GL_NEAREST); DEFINE_CASE(nearest, GL_NEAREST);
DEFINE_CASE(linear, GL_LINEAR); DEFINE_CASE(linear, GL_LINEAR);
DEFINE_CASE(nearest_mipmap_nearest, GL_NEAREST_MIPMAP_NEAREST);
DEFINE_CASE(linear_mipmap_nearest, GL_LINEAR_MIPMAP_NEAREST);
DEFINE_CASE(nearest_mipmap_linear, GL_NEAREST_MIPMAP_LINEAR);
DEFINE_CASE(linear_mipmap_linear, GL_LINEAR_MIPMAP_LINEAR);
default: default:
E2D_ASSERT_MSG(false, "unexpected sampler min filter"); E2D_ASSERT_MSG(false, "unexpected sampler min filter");
return 0; return 0;

View File

@@ -179,8 +179,7 @@ namespace
"additionalProperties" : false, "additionalProperties" : false,
"properties" : { "properties" : {
"s" : { "$ref" : "#/definitions/sampler_wrap" }, "s" : { "$ref" : "#/definitions/sampler_wrap" },
"t" : { "$ref" : "#/definitions/sampler_wrap" }, "t" : { "$ref" : "#/definitions/sampler_wrap" }
"r" : { "$ref" : "#/definitions/sampler_wrap" }
} }
}, { }, {
"$ref" : "#/definitions/sampler_wrap" "$ref" : "#/definitions/sampler_wrap"
@@ -333,11 +332,7 @@ namespace
"type" : "string", "type" : "string",
"enum" : [ "enum" : [
"nearest", "nearest",
"linear", "linear"
"nearest_mipmap_nearest",
"linear_mipmap_nearest",
"nearest_mipmap_linear",
"linear_mipmap_linear"
] ]
} }
} }
@@ -471,10 +466,6 @@ namespace
#define DEFINE_IF(x) if ( str == #x ) { filter = render::sampler_min_filter::x; return true; } #define DEFINE_IF(x) if ( str == #x ) { filter = render::sampler_min_filter::x; return true; }
DEFINE_IF(nearest); DEFINE_IF(nearest);
DEFINE_IF(linear); DEFINE_IF(linear);
DEFINE_IF(nearest_mipmap_nearest);
DEFINE_IF(linear_mipmap_nearest);
DEFINE_IF(nearest_mipmap_linear);
DEFINE_IF(linear_mipmap_linear);
#undef DEFINE_IF #undef DEFINE_IF
return false; return false;
} }
@@ -483,10 +474,6 @@ namespace
#define DEFINE_IF(x,y) if ( str == #x ) { filter = render::sampler_mag_filter::y; return true; } #define DEFINE_IF(x,y) if ( str == #x ) { filter = render::sampler_mag_filter::y; return true; }
DEFINE_IF(nearest, nearest); DEFINE_IF(nearest, nearest);
DEFINE_IF(linear, linear); DEFINE_IF(linear, linear);
DEFINE_IF(nearest_mipmap_nearest, nearest);
DEFINE_IF(linear_mipmap_nearest, linear);
DEFINE_IF(nearest_mipmap_linear, nearest);
DEFINE_IF(linear_mipmap_linear, linear);
#undef DEFINE_IF #undef DEFINE_IF
return false; return false;
} }
@@ -555,16 +542,6 @@ namespace
E2D_ASSERT_MSG(false, "unexpected sampler wrap"); E2D_ASSERT_MSG(false, "unexpected sampler wrap");
} }
} }
if ( wrap_json.HasMember("r") ) {
E2D_ASSERT(wrap_json["r"].IsString());
auto wrap = content.r_wrap();
if ( parse_sampler_wrap(wrap_json["r"].GetString(), wrap) ) {
content.r_wrap(wrap);
} else {
E2D_ASSERT_MSG(false, "unexpected sampler wrap");
}
}
} else if ( wrap_json.IsString() ) { } else if ( wrap_json.IsString() ) {
auto wrap = content.s_wrap(); auto wrap = content.s_wrap();
if ( parse_sampler_wrap(wrap_json.GetString(), wrap) ) { if ( parse_sampler_wrap(wrap_json.GetString(), wrap) ) {

View File

@@ -55,11 +55,10 @@
"texture" : "image.png", "texture" : "image.png",
"wrap" : { "wrap" : {
"s" : "clamp", "s" : "clamp",
"t" : "repeat", "t" : "repeat"
"r" : "mirror"
}, },
"filter" : { "filter" : {
"min" : "linear_mipmap_linear", "min" : "linear",
"mag" : "linear" "mag" : "linear"
} }
}], }],

View File

@@ -33,8 +33,7 @@ TEST_CASE("render"){
REQUIRE_FALSE(ss.texture()); REQUIRE_FALSE(ss.texture());
REQUIRE(ss.s_wrap() == render::sampler_wrap::repeat); REQUIRE(ss.s_wrap() == render::sampler_wrap::repeat);
REQUIRE(ss.t_wrap() == render::sampler_wrap::repeat); REQUIRE(ss.t_wrap() == render::sampler_wrap::repeat);
REQUIRE(ss.r_wrap() == render::sampler_wrap::repeat); REQUIRE(ss.min_filter() == render::sampler_min_filter::linear);
REQUIRE(ss.min_filter() == render::sampler_min_filter::nearest_mipmap_linear);
REQUIRE(ss.mag_filter() == render::sampler_mag_filter::linear); REQUIRE(ss.mag_filter() == render::sampler_mag_filter::linear);
} }
{ {
@@ -43,7 +42,6 @@ TEST_CASE("render"){
.filter(render::sampler_min_filter::linear, render::sampler_mag_filter::nearest); .filter(render::sampler_min_filter::linear, render::sampler_mag_filter::nearest);
REQUIRE(ss.s_wrap() == render::sampler_wrap::clamp); REQUIRE(ss.s_wrap() == render::sampler_wrap::clamp);
REQUIRE(ss.t_wrap() == render::sampler_wrap::clamp); REQUIRE(ss.t_wrap() == render::sampler_wrap::clamp);
REQUIRE(ss.r_wrap() == render::sampler_wrap::clamp);
REQUIRE(ss.min_filter() == render::sampler_min_filter::linear); REQUIRE(ss.min_filter() == render::sampler_min_filter::linear);
REQUIRE(ss.mag_filter() == render::sampler_mag_filter::nearest); REQUIRE(ss.mag_filter() == render::sampler_mag_filter::nearest);
} }

View File

@@ -264,8 +264,7 @@ TEST_CASE("library"){
REQUIRE(sampler); REQUIRE(sampler);
REQUIRE(sampler->s_wrap() == render::sampler_wrap::clamp); REQUIRE(sampler->s_wrap() == render::sampler_wrap::clamp);
REQUIRE(sampler->t_wrap() == render::sampler_wrap::repeat); REQUIRE(sampler->t_wrap() == render::sampler_wrap::repeat);
REQUIRE(sampler->r_wrap() == render::sampler_wrap::mirror); REQUIRE(sampler->min_filter() == render::sampler_min_filter::linear);
REQUIRE(sampler->min_filter() == render::sampler_min_filter::linear_mipmap_linear);
REQUIRE(sampler->mag_filter() == render::sampler_mag_filter::linear); REQUIRE(sampler->mag_filter() == render::sampler_mag_filter::linear);
REQUIRE(texture_res->content() == sampler->texture()); REQUIRE(texture_res->content() == sampler->texture());
} }