From 608ee3e0734cc307c282a49518c595c674bbb9f0 Mon Sep 17 00:00:00 2001 From: Ulysse Martin Date: Thu, 18 Feb 2016 11:56:25 +0100 Subject: [PATCH] BGE: Allow access to original texture openGL Bind code/Id/Number This patch adds a python method to get openGL bind code of material's texture according to the texture slot. Example: import bge cont = bge.logic.getCurrentController() own = cont.owner bindId = own.meshes[0].materials[0].getTextureBindcode(0) Test file: http://www.pasteall.org/blend/40679 This can be used to play with texture in openGL, for example, remove mipmap on the texture or play with all wrapping or filtering options. And this can be used to learn openGL with Blender. Reviewers: TwisterGE, kupoman, moguri, panzergame Reviewed By: TwisterGE, kupoman, moguri, panzergame Projects: #game_engine Differential Revision: https://developer.blender.org/D1804 --- .../bge_types/bge.types.KX_BlenderMaterial.rst | 9 +++++++++ source/gameengine/Ketsji/KX_BlenderMaterial.cpp | 17 +++++++++++++++++ source/gameengine/Ketsji/KX_BlenderMaterial.h | 1 + 3 files changed, 27 insertions(+) diff --git a/doc/python_api/rst/bge_types/bge.types.KX_BlenderMaterial.rst b/doc/python_api/rst/bge_types/bge.types.KX_BlenderMaterial.rst index 17f54031ec3..ece2a65af71 100644 --- a/doc/python_api/rst/bge_types/bge.types.KX_BlenderMaterial.rst +++ b/doc/python_api/rst/bge_types/bge.types.KX_BlenderMaterial.rst @@ -89,6 +89,15 @@ base class --- :class:`PyObjectPlus` :return: the material's shader :rtype: :class:`BL_Shader` + .. method:: getTextureBindcode(textureslot) + + Returns the material's texture OpenGL bind code/id/number/name. + + :arg textureslot: Specifies the texture slot number + :type textureslot: integer + :return: the material's texture OpenGL bind code/id/number/name + :rtype: integer + .. attribute:: alpha The material's alpha transparency. diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp index 1d185d52dc8..476fbd29b8b 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp @@ -972,6 +972,7 @@ PyMethodDef KX_BlenderMaterial::Methods[] = { KX_PYMETHODTABLE( KX_BlenderMaterial, getShader ), KX_PYMETHODTABLE( KX_BlenderMaterial, getMaterialIndex ), + KX_PYMETHODTABLE( KX_BlenderMaterial, getTextureBindcode ), KX_PYMETHODTABLE( KX_BlenderMaterial, setBlending ), {NULL,NULL} //Sentinel }; @@ -1325,4 +1326,20 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( bge.logic.sr return NULL; } +KX_PYMETHODDEF_DOC(KX_BlenderMaterial, getTextureBindcode, "getTextureBindcode(texslot)") +{ + unsigned int texslot; + if (!PyArg_ParseTuple(args, "i:texslot", &texslot)) { + PyErr_SetString(PyExc_ValueError, "material.getTextureBindcode(texslot): KX_BlenderMaterial, expected an int."); + return NULL; + } + Image *ima = getImage(texslot); + if (ima) { + unsigned int *bindcode = ima->bindcode; + return PyLong_FromLong(*bindcode); + } + PyErr_SetString(PyExc_ValueError, "material.getTextureBindcode(texslot): KX_BlenderMaterial, invalid texture slot."); + return NULL; +} + #endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h index df089cb7f99..a3d10c0a89d 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.h +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h @@ -133,6 +133,7 @@ public: KX_PYMETHOD_DOC(KX_BlenderMaterial, getMaterialIndex); KX_PYMETHOD_DOC(KX_BlenderMaterial, getTexture); KX_PYMETHOD_DOC(KX_BlenderMaterial, setTexture); + KX_PYMETHOD_DOC(KX_BlenderMaterial, getTextureBindcode); KX_PYMETHOD_DOC(KX_BlenderMaterial, setBlending); #endif /* WITH_PYTHON */