fix variant indexing
This commit is contained in:
parent
d321085192
commit
6dfabe9ff3
@ -294,7 +294,7 @@ static bool is_aligned(const glm::vec3& v, float e = 1e-6f) {
|
|||||||
void BlocksRenderer::blockCustomModel(
|
void BlocksRenderer::blockCustomModel(
|
||||||
const glm::ivec3& icoord, const Block& block, blockstate states, bool lights, bool ao
|
const glm::ivec3& icoord, const Block& block, blockstate states, bool lights, bool ao
|
||||||
) {
|
) {
|
||||||
const auto& variant = block.getVariant(states.userbits);
|
const auto& variant = block.getVariantByBits(states.userbits);
|
||||||
glm::vec3 X(1, 0, 0);
|
glm::vec3 X(1, 0, 0);
|
||||||
glm::vec3 Y(0, 1, 0);
|
glm::vec3 Y(0, 1, 0);
|
||||||
glm::vec3 Z(0, 0, 1);
|
glm::vec3 Z(0, 0, 1);
|
||||||
@ -370,7 +370,7 @@ void BlocksRenderer::blockCube(
|
|||||||
bool lights,
|
bool lights,
|
||||||
bool ao
|
bool ao
|
||||||
) {
|
) {
|
||||||
const auto& variant = block.getVariant(states.userbits);
|
const auto& variant = block.getVariantByBits(states.userbits);
|
||||||
glm::ivec3 X(1, 0, 0);
|
glm::ivec3 X(1, 0, 0);
|
||||||
glm::ivec3 Y(0, 1, 0);
|
glm::ivec3 Y(0, 1, 0);
|
||||||
glm::ivec3 Z(0, 0, 1);
|
glm::ivec3 Z(0, 0, 1);
|
||||||
@ -488,8 +488,8 @@ void BlocksRenderer::render(
|
|||||||
blockid_t id = vox.id;
|
blockid_t id = vox.id;
|
||||||
blockstate state = vox.state;
|
blockstate state = vox.state;
|
||||||
const auto& def = *blockDefsCache[id];
|
const auto& def = *blockDefsCache[id];
|
||||||
const auto& variant = def.getVariant(state.userbits);
|
uint8_t variantId = def.getVariantIndex(state.userbits);
|
||||||
uint8_t variantId = state.userbits;
|
const auto& variant = def.getVariant(variantId);
|
||||||
if (id == 0 || variant.drawGroup != drawGroup || state.segment) {
|
if (id == 0 || variant.drawGroup != drawGroup || state.segment) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -561,7 +561,7 @@ SortingMeshData BlocksRenderer::renderTranslucent(
|
|||||||
blockid_t id = vox.id;
|
blockid_t id = vox.id;
|
||||||
blockstate state = vox.state;
|
blockstate state = vox.state;
|
||||||
const auto& def = *blockDefsCache[id];
|
const auto& def = *blockDefsCache[id];
|
||||||
uint8_t variantId = state.userbits;
|
uint8_t variantId = def.getVariantIndex(state.userbits);
|
||||||
const auto& variant = def.getVariant(variantId);
|
const auto& variant = def.getVariant(variantId);
|
||||||
if (id == 0 || variant.drawGroup != drawGroup || state.segment) {
|
if (id == 0 || variant.drawGroup != drawGroup || state.segment) {
|
||||||
continue;
|
continue;
|
||||||
@ -687,7 +687,7 @@ void BlocksRenderer::build(const Chunk* chunk, const Chunks* chunks) {
|
|||||||
const voxel& vox = voxels[i];
|
const voxel& vox = voxels[i];
|
||||||
blockid_t id = vox.id;
|
blockid_t id = vox.id;
|
||||||
const auto& def = *blockDefsCache[id];
|
const auto& def = *blockDefsCache[id];
|
||||||
const auto& variant = def.getVariant(vox.state.userbits);
|
const auto& variant = def.getVariantByBits(vox.state.userbits);
|
||||||
|
|
||||||
if (beginEnds[variant.drawGroup][0] == 0) {
|
if (beginEnds[variant.drawGroup][0] == 0) {
|
||||||
beginEnds[variant.drawGroup][0] = i+1;
|
beginEnds[variant.drawGroup][0] = i+1;
|
||||||
|
|||||||
@ -130,7 +130,7 @@ class BlocksRenderer {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const auto& block = *blockDefsCache[vox.id];
|
const auto& block = *blockDefsCache[vox.id];
|
||||||
const auto& blockVariant = block.getVariant(vox.state.userbits);
|
const auto& blockVariant = block.getVariantByBits(vox.state.userbits);
|
||||||
uint8_t otherDrawGroup = blockVariant.drawGroup;
|
uint8_t otherDrawGroup = blockVariant.drawGroup;
|
||||||
if ((otherDrawGroup && (otherDrawGroup != variant.drawGroup)) || !blockVariant.rt.solid) {
|
if ((otherDrawGroup && (otherDrawGroup != variant.drawGroup)) || !blockVariant.rt.solid) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -294,7 +294,13 @@ public:
|
|||||||
|
|
||||||
void cloneTo(Block& dst);
|
void cloneTo(Block& dst);
|
||||||
|
|
||||||
constexpr const Variant& getVariant(uint8_t userbits) const {
|
constexpr uint8_t getVariantIndex(uint8_t userbits) const {
|
||||||
|
if (variants == nullptr)
|
||||||
|
return 0;
|
||||||
|
return (userbits >> variants->offset) & variants->mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr const Variant& getVariantByBits(uint8_t userbits) const {
|
||||||
if (userbits == 0 || variants == nullptr)
|
if (userbits == 0 || variants == nullptr)
|
||||||
return defaults;
|
return defaults;
|
||||||
return variants->variants[
|
return variants->variants[
|
||||||
@ -302,8 +308,14 @@ public:
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr const Variant& getVariant(uint8_t index) const {
|
||||||
|
if (index == 0)
|
||||||
|
return defaults;
|
||||||
|
return variants->variants[index];
|
||||||
|
}
|
||||||
|
|
||||||
constexpr const BlockModel& getModel(uint8_t bits) const {
|
constexpr const BlockModel& getModel(uint8_t bits) const {
|
||||||
return getVariant(bits).model;
|
return getVariantByBits(bits).model;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isReservedBlockField(std::string_view view);
|
static bool isReservedBlockField(std::string_view view);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user