Revision: 39818
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39818
Author:   moguri
Date:     2011-08-31 05:51:51 +0000 (Wed, 31 Aug 2011)
Log Message:
-----------
BGE: Adding two new functions to bge.render to allow users to change the 
anisotropic filtering level used by textures:
  * setAnisotropicFiltering(level)
  * getAnisotropicFiltering()

Modified Paths:
--------------
    trunk/blender/doc/python_api/rst/bge.render.rst
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h

Modified: trunk/blender/doc/python_api/rst/bge.render.rst
===================================================================
--- trunk/blender/doc/python_api/rst/bge.render.rst     2011-08-31 05:13:21 UTC 
(rev 39817)
+++ trunk/blender/doc/python_api/rst/bge.render.rst     2011-08-31 05:51:51 UTC 
(rev 39818)
@@ -215,7 +215,19 @@
    :type setting: string (lights, shaders, shadows, ramps, nodes, 
extra_textures)
    :rtype: boolean
 
+.. function:: setAnisotropicFiltering(level)
 
+   Set the anisotropic filtering level for textures.
+   
+   :arg level: The new anisotropic filtering level to use
+   :type level: integer (must be one of 1, 2, 4, 8, 16)
+   
+.. function:: getAnisotropicFiltering()
+
+   Get the anisotropic filtering level used for textures.
+   
+   :rtype: integer (one of 1, 2, 4, 8, 16)
+   
 .. function:: drawLine(fromVec,toVec,color)
 
    Draw a line in the 3D scene.

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp    2011-08-31 
05:13:21 UTC (rev 39817)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp    2011-08-31 
05:51:51 UTC (rev 39818)
@@ -1208,6 +1208,28 @@
        return PyLong_FromSsize_t(flag);
 }
 
+static PyObject* gPySetAnisotropicFiltering(PyObject*, PyObject* args)
+{
+       short level;
+
+       if (!PyArg_ParseTuple(args, "h:setAnisotropicFiltering", &level))
+               return NULL;
+
+       if (level != 1 && level != 2 && level != 4 && level != 8 && level != 
16) {
+               PyErr_SetString(PyExc_ValueError, 
"Rasterizer.setAnisotropicFiltering(level): Expected value of 1, 2, 4, 8, or 16 
for value");
+               return NULL;
+       }
+
+       gp_Rasterizer->SetAnisotropicFiltering(level);
+
+       Py_RETURN_NONE;
+}
+
+static PyObject* gPyGetAnisotropicFiltering(PyObject*, PyObject* args)
+{
+       return PyLong_FromLong(gp_Rasterizer->GetAnisotropicFiltering());
+}
+
 static PyObject* gPyDrawLine(PyObject*, PyObject* args)
 {
        PyObject* ob_from;
@@ -1272,6 +1294,10 @@
    METH_VARARGS, "set the state of a GLSL material setting"},
   {"getGLSLMaterialSetting",(PyCFunction) gPyGetGLSLMaterialSetting,
    METH_VARARGS, "get the state of a GLSL material setting"},
+  {"setAnisotropicFiltering", (PyCFunction) gPySetAnisotropicFiltering,
+  METH_VARARGS, "set the anisotropic filtering level (must be one of 1, 2, 4, 
8, 16)"},
+  {"getAnisotropicFiltering", (PyCFunction) gPyGetAnisotropicFiltering,
+  METH_VARARGS, "get the anisotropic filtering level"},
   {"drawLine", (PyCFunction) gPyDrawLine,
    METH_VARARGS, "draw a line on the screen"},
   { NULL, (PyCFunction) NULL, 0, NULL }

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h        
2011-08-31 05:13:21 UTC (rev 39817)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h        
2011-08-31 05:51:51 UTC (rev 39818)
@@ -417,6 +417,9 @@
 
        virtual void    SetBlendingMode(int blendmode)=0;
        virtual void    SetFrontFace(bool ccw)=0;
+
+       virtual void    SetAnisotropicFiltering(short level)=0;
+       virtual short   GetAnisotropicFiltering()=0;
        
        
 #ifdef WITH_CXX_GUARDEDALLOC

Modified: 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    2011-08-31 05:13:21 UTC (rev 39817)
+++ 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    2011-08-31 05:51:51 UTC (rev 39818)
@@ -99,12 +99,16 @@
                hinterlace_mask[i] = (i&1)*0xFFFFFFFF;
        }
        hinterlace_mask[32] = 0;
+
+       m_prevafvalue = GPU_get_anisotropic();
 }
 
 
 
 RAS_OpenGLRasterizer::~RAS_OpenGLRasterizer()
 {
+       // Restore the previous AF value
+       GPU_set_anisotropic(m_prevafvalue);
 }
 
 bool RAS_OpenGLRasterizer::Init()
@@ -1204,3 +1208,12 @@
        m_last_frontface = ccw;
 }
 
+void RAS_OpenGLRasterizer::SetAnisotropicFiltering(short level)
+{
+       GPU_set_anisotropic((float)level);
+}
+
+short RAS_OpenGLRasterizer::GetAnisotropicFiltering()
+{
+       return (short)GPU_get_anisotropic();
+}

Modified: 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
===================================================================
--- 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
      2011-08-31 05:13:21 UTC (rev 39817)
+++ 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
      2011-08-31 05:51:51 UTC (rev 39818)
@@ -94,6 +94,8 @@
        bool                    m_setfocallength;
        int                             m_noOfScanlines;
 
+       short                   m_prevafvalue;
+
        //motion blur
        int     m_motionblur;
        float   m_motionblurvalue;
@@ -294,7 +296,10 @@
        virtual void    SetBlendingMode(int blendmode);
        virtual void    SetFrontFace(bool ccw);
        
+       virtual void    SetAnisotropicFiltering(short level);
+       virtual short   GetAnisotropicFiltering();
        
+       
 #ifdef WITH_CXX_GUARDEDALLOC
 public:
        void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, 
"GE:RAS_OpenGLRasterizer"); }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to