Fix transparancy check for nodes
The previous method tried to read from meshes which had been freed from memory
This commit is contained in:
parent
b4e66809cb
commit
84cbd5e5c7
|
@ -14,7 +14,7 @@ void SceneNode::setMesh(const Mesh* mesh) {
|
|||
vertexArrayObjectID = cache[mesh];
|
||||
VAOIndexCount = mesh->indices.size();
|
||||
isVertexColored = ! mesh->colors.empty();
|
||||
m_gemoetry = mesh;
|
||||
mesh_has_transparancy = mesh->has_transparancy;
|
||||
}
|
||||
void SceneNode::setTexture(
|
||||
const PNGImage* diffuse,
|
||||
|
@ -28,7 +28,7 @@ void SceneNode::setTexture(
|
|||
isNormalMapped = false;
|
||||
isDisplacementMapped = false;
|
||||
isReflectionMapped = false;
|
||||
t_diffuse = nullptr;
|
||||
tex_has_transparancy = false;
|
||||
}
|
||||
|
||||
if (diffuse) {
|
||||
|
@ -36,7 +36,7 @@ void SceneNode::setTexture(
|
|||
cache[diffuse] = generateTexture(*diffuse);
|
||||
diffuseTextureID = cache[diffuse];
|
||||
isTextured = true;
|
||||
t_diffuse = diffuse;
|
||||
tex_has_transparancy = diffuse->has_transparancy;
|
||||
}
|
||||
|
||||
if (normal) {
|
||||
|
@ -84,9 +84,9 @@ bool SceneNode::has_no_transforms() const {
|
|||
}
|
||||
|
||||
bool SceneNode::has_transparancy() const {
|
||||
return opacity < 1.0
|
||||
|| t_diffuse && t_diffuse->has_transparancy
|
||||
|| m_gemoetry && m_gemoetry->has_transparancy;
|
||||
return mesh_has_transparancy
|
||||
|| tex_has_transparancy
|
||||
|| opacity < 0.98;
|
||||
}
|
||||
|
||||
SceneNode* SceneNode::clone() const {
|
||||
|
|
|
@ -82,9 +82,9 @@ struct SceneNode {
|
|||
float displacementCoefficient = 0.1; // in units
|
||||
uint reflectionTextureID;
|
||||
|
||||
// has_transparancy
|
||||
const Mesh* m_gemoetry = nullptr;
|
||||
const PNGImage* t_diffuse = nullptr;
|
||||
// has_transparancy check
|
||||
bool mesh_has_transparancy = false;
|
||||
bool tex_has_transparancy = false;
|
||||
|
||||
// shader flags
|
||||
bool isTextured = false;
|
||||
|
|
|
@ -175,7 +175,8 @@ SceneNode* loadModelScene(const std::string& dirname, const std::string& filenam
|
|||
aimesh->mTextureCoords[0][i].y,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
mesh.has_transparancy = false;
|
||||
if (aimesh->GetNumColorChannels() >= 1)
|
||||
for (uint i=0; i < aimesh->mNumVertices; i++){
|
||||
mesh.colors.push_back({
|
||||
|
@ -184,6 +185,8 @@ SceneNode* loadModelScene(const std::string& dirname, const std::string& filenam
|
|||
aimesh->mColors[0][i].b,
|
||||
aimesh->mColors[0][i].a,
|
||||
});
|
||||
if (aimesh->mColors[0][i].a < 255)
|
||||
mesh.has_transparancy = true;
|
||||
}
|
||||
|
||||
for (uint i=0; i < aimesh->mNumFaces; i++){
|
||||
|
|
Loading…
Reference in New Issue