diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/gameengine/Ketsji/KX_BlenderMaterial.h | 3 | ||||
-rw-r--r-- | source/gameengine/VideoTexture/Exception.cpp | 6 | ||||
-rw-r--r-- | source/gameengine/VideoTexture/Texture.cpp | 18 | ||||
-rw-r--r-- | source/gameengine/VideoTexture/Texture.h | 7 |
4 files changed, 20 insertions, 14 deletions
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h index b858fa3754c..6e5db1b56c1 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.h +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h @@ -70,6 +70,9 @@ public: BL_Texture * getTex (unsigned int idx) { return (idx < MAXTEX) ? mTextures + idx : NULL; } + Image * getImage (unsigned int idx) { + return (idx < MAXTEX && mMaterial) ? mMaterial->img[idx] : NULL; + } // for ipos void UpdateIPO( diff --git a/source/gameengine/VideoTexture/Exception.cpp b/source/gameengine/VideoTexture/Exception.cpp index 3ac8b8e321d..3f939de6bc2 100644 --- a/source/gameengine/VideoTexture/Exception.cpp +++ b/source/gameengine/VideoTexture/Exception.cpp @@ -168,15 +168,15 @@ void Exception::setXptDesc (void) } // add result code // length of result code - const size_t rsltSize = 10; + const size_t rsltSize = 11; // delimit description const char delimRslt[] = ": "; // set text of description char rsltTxt[rsltSize]; std::ostrstream os(rsltTxt, rsltSize); - os << std::hex << m_hRslt << delimRslt; + os << std::hex << m_hRslt << delimRslt << '\0'; // copy result to description - m_desc.insert(0, rsltTxt, rsltSize); + m_desc.insert(0, rsltTxt); // copy exception description to last exception string m_lastError = m_desc; } diff --git a/source/gameengine/VideoTexture/Texture.cpp b/source/gameengine/VideoTexture/Texture.cpp index e922bbd768d..88a26e3c088 100644 --- a/source/gameengine/VideoTexture/Texture.cpp +++ b/source/gameengine/VideoTexture/Texture.cpp @@ -54,9 +54,6 @@ http://www.gnu.org/copyleft/lesser.txt. { exp.report(); } -// are Blender materials used -bool blendMats = false; - // Blender GameObject type BlendType<KX_GameObject> gameObjectType ("KX_GameObject"); @@ -198,15 +195,22 @@ int Texture_init (Texture *self, PyObject *args, PyObject *kwds) if (mat != NULL) { // is it blender material or polygon material - blendMats = (mat->GetFlag() & RAS_BLENDERMAT) != 0; - if (blendMats) + if (mat->GetFlag() & RAS_BLENDERGLSL) + { + self->m_imgTexture = static_cast<KX_BlenderMaterial*>(mat)->getImage(texID); + self->m_useMatTexture = false; + } else if (mat->GetFlag() & RAS_BLENDERMAT) + { // get blender material texture self->m_matTexture = static_cast<KX_BlenderMaterial*>(mat)->getTex(texID); + self->m_useMatTexture = true; + } else { // get texture pointer from polygon material MTFace * tface = static_cast<KX_PolygonMaterial*>(mat)->GetMTFace(); self->m_imgTexture = (Image*)tface->tpage; + self->m_useMatTexture = false; } } // check if texture is available, if not, initialization failed @@ -246,7 +250,7 @@ PyObject * Texture_close(Texture * self) { self->m_orgSaved = false; // restore original texture code - if (blendMats) + if (self->m_useMatTexture) self->m_matTexture->swapTexture(self->m_orgTex); else self->m_imgTexture->bindcode = self->m_orgTex; @@ -292,7 +296,7 @@ PyObject * Texture_refresh (Texture * self, PyObject * args) { self->m_orgSaved = true; // save original image code - if (blendMats) + if (self->m_useMatTexture) self->m_orgTex = self->m_matTexture->swapTexture(self->m_actTex); else { diff --git a/source/gameengine/VideoTexture/Texture.h b/source/gameengine/VideoTexture/Texture.h index 569e34da121..3c371e51537 100644 --- a/source/gameengine/VideoTexture/Texture.h +++ b/source/gameengine/VideoTexture/Texture.h @@ -39,9 +39,11 @@ struct Texture { PyObject_HEAD + // texture is using blender material + bool m_useMatTexture; + // video texture bind code unsigned int m_actTex; - // original texture bind code unsigned int m_orgTex; // original texture saved @@ -70,9 +72,6 @@ struct Texture // Texture type description extern PyTypeObject TextureType; -// usage of Blender materials -extern bool blendMats; - // load texture void loadTexture (unsigned int texId, unsigned int * texture, short * size, bool mipmap = false); |