Revision: 56032
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56032
Author:   moguri
Date:     2013-04-14 00:40:24 +0000 (Sun, 14 Apr 2013)
Log Message:
-----------
BGE: Adding mipmapping control to bge.render via bge.render.setMipmapping() and 
bge.render.getMipmapping().

Modified Paths:
--------------
    trunk/blender/doc/python_api/rst/bge.render.rst
    trunk/blender/source/blender/gpu/GPU_draw.h
    trunk/blender/source/blender/gpu/intern/gpu_draw.c
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    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     2013-04-14 00:27:31 UTC 
(rev 56031)
+++ trunk/blender/doc/python_api/rst/bge.render.rst     2013-04-14 00:40:24 UTC 
(rev 56032)
@@ -243,12 +243,28 @@
    :arg level: The new anisotropic filtering level to use
    :type level: integer (must be one of 1, 2, 4, 8, 16)
    
+   .. note:: Changing this value can cause all textures to be recreated, which 
can be slow.
+   
 .. function:: getAnisotropicFiltering()
 
    Get the anisotropic filtering level used for textures.
    
    :rtype: integer (one of 1, 2, 4, 8, 16)
+
+.. function:: setMipmapping(value)
+
+   Change how to use mipmapping.
    
+   :type value: RAS_MIPMAP_NONE, RAS_MIPMAP_NEAREST, RAS_MIPMAP_LINEAR
+   
+   .. note:: Changing this value can cause all textures to be recreated, which 
can be slow.
+
+.. function:: getMipmapping()
+
+   Get the current mipmapping setting.
+   
+   :rtype: RAS_MIPMAP_NONE, RAS_MIPMAP_NEAREST, RAS_MIPMAP_LINEAR
+   
 .. function:: drawLine(fromVec,toVec,color)
 
    Draw a line in the 3D scene.

Modified: trunk/blender/source/blender/gpu/GPU_draw.h
===================================================================
--- trunk/blender/source/blender/gpu/GPU_draw.h 2013-04-14 00:27:31 UTC (rev 
56031)
+++ trunk/blender/source/blender/gpu/GPU_draw.h 2013-04-14 00:40:24 UTC (rev 
56032)
@@ -108,6 +108,7 @@
 void GPU_set_mipmap(int mipmap);
 int GPU_get_mipmap(void);
 void GPU_set_linear_mipmap(int linear);
+int GPU_get_linear_mipmap(void);
 void GPU_paint_set_mipmap(int mipmap);
 
 /* Anisotropic filtering settings

Modified: trunk/blender/source/blender/gpu/intern/gpu_draw.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_draw.c  2013-04-14 00:27:31 UTC 
(rev 56031)
+++ trunk/blender/source/blender/gpu/intern/gpu_draw.c  2013-04-14 00:40:24 UTC 
(rev 56032)
@@ -287,6 +287,11 @@
        return GTS.domipmap && !GTS.texpaint;
 }
 
+int GPU_get_linear_mipmap(void)
+{
+       return GTS.linearmipmap;
+}
+
 static GLenum gpu_get_mipmap_filter(int mag)
 {
        /* linearmipmap is off by default *when mipmapping is off,

Modified: 
trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     
2013-04-14 00:27:31 UTC (rev 56031)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     
2013-04-14 00:40:24 UTC (rev 56032)
@@ -285,13 +285,15 @@
                        canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);
                RAS_IRenderTools* rendertools = new KX_BlenderRenderTools();
                RAS_IRasterizer* rasterizer = NULL;
-               
                //Don't use displaylists with VBOs
                //If auto starts using VBOs, make sure to check for that here
                if (displaylists && startscene->gm.raster_storage != 
RAS_STORE_VBO)
                        rasterizer = new RAS_ListRasterizer(canvas, true, 
startscene->gm.raster_storage);
                else
                        rasterizer = new RAS_OpenGLRasterizer(canvas, 
startscene->gm.raster_storage);
+
+               RAS_IRasterizer::MipmapOption mipmapval = 
rasterizer->GetMipmapping();
+
                
                // create the inputdevices
                KX_BlenderKeyboardDevice* keyboarddevice = new 
KX_BlenderKeyboardDevice();
@@ -618,6 +620,9 @@
                {
                        // set the cursor back to normal
                        canvas->SetMouseState(RAS_ICanvas::MOUSE_NORMAL);
+
+                       // set mipmap setting back to its original value
+                       rasterizer->SetMipmapping(mipmapval);
                }
                
                // clean up some stuff

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp    2013-04-14 
00:27:31 UTC (rev 56031)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp    2013-04-14 
00:40:24 UTC (rev 56032)
@@ -1338,6 +1338,36 @@
        return PyBool_FromLong(gp_Canvas->GetFullScreen());
 }
 
+static PyObject *gPySetMipmapping(PyObject *, PyObject *args)
+{
+       int val = 0;
+
+       if (!PyArg_ParseTuple(args, "i:setMipmapping", &val))
+               return NULL;
+
+       if (val < 0 || val > RAS_IRasterizer::RAS_MIPMAP_MAX) {
+               PyErr_SetString(PyExc_ValueError, 
"Rasterizer.setMipmapping(val): invalid mipmaping option");
+               return NULL;
+       }
+
+       if (!gp_Rasterizer) {
+               PyErr_SetString(PyExc_RuntimeError, 
"Rasterizer.setMipmapping(val): Rasterizer not available");
+               return NULL;
+       }
+
+       gp_Rasterizer->SetMipmapping((RAS_IRasterizer::MipmapOption)val);
+       Py_RETURN_NONE;
+}
+
+static PyObject *gPyGetMipmapping(PyObject *)
+{
+       if (!gp_Rasterizer) {
+               PyErr_SetString(PyExc_RuntimeError, 
"Rasterizer.getMipmapping(): Rasterizer not available");
+               return NULL;
+       }
+       return PyLong_FromLong(gp_Rasterizer->GetMipmapping());
+}
+
 static struct PyMethodDef rasterizer_methods[] = {
        {"getWindowWidth",(PyCFunction) gPyGetWindowWidth,
         METH_VARARGS, "getWindowWidth doc"},
@@ -1381,6 +1411,8 @@
        {"setWindowSize", (PyCFunction) gPySetWindowSize, METH_VARARGS, ""},
        {"setFullScreen", (PyCFunction) gPySetFullScreen, METH_O, ""},
        {"getFullScreen", (PyCFunction) gPyGetFullScreen, METH_NOARGS, ""},
+       {"setMipmapping", (PyCFunction) gPySetMipmapping, METH_VARARGS, ""},
+       {"getMipmapping", (PyCFunction) gPyGetMipmapping, METH_NOARGS, ""},
        { NULL, (PyCFunction) NULL, 0, NULL }
 };
 
@@ -2147,6 +2179,10 @@
        KX_MACRO_addTypesToDict(d, KX_BLENDER_MULTITEX_MATERIAL, 
KX_BLENDER_MULTITEX_MATERIAL);
        KX_MACRO_addTypesToDict(d, KX_BLENDER_GLSL_MATERIAL, 
KX_BLENDER_GLSL_MATERIAL);
 
+       KX_MACRO_addTypesToDict(d, RAS_MIPMAP_NONE, 
RAS_IRasterizer::RAS_MIPMAP_NONE);
+       KX_MACRO_addTypesToDict(d, RAS_MIPMAP_NEAREST, 
RAS_IRasterizer::RAS_MIPMAP_NEAREST);
+       KX_MACRO_addTypesToDict(d, RAS_MIPMAP_LINEAR, 
RAS_IRasterizer::RAS_MIPMAP_LINEAR);
+
        // XXXX Add constants here
 
        // Check for errors

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h        
2013-04-14 00:27:31 UTC (rev 56031)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h        
2013-04-14 00:40:24 UTC (rev 56032)
@@ -151,6 +151,17 @@
        };
 
        /**
+        * Mipmap options
+        */
+       enum MipmapOption {
+               RAS_MIPMAP_NONE,
+               RAS_MIPMAP_NEAREST,
+               RAS_MIPMAP_LINEAR,
+
+               RAS_MIPMAP_MAX, // Should always be last
+       };
+
+       /**
         * SetDepthMask enables or disables writing a fragment's depth value
         * to the Z buffer.
         */
@@ -417,6 +428,9 @@
        virtual void    SetAnisotropicFiltering(short level)=0;
        virtual short   GetAnisotropicFiltering()=0;
 
+       virtual void    SetMipmapping(MipmapOption val)=0;
+       virtual MipmapOption GetMipmapping()=0;
+
        virtual void    SetUsingOverrideShader(bool val)=0;
        virtual bool    GetUsingOverrideShader()=0;
 

Modified: 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    2013-04-14 00:27:31 UTC (rev 56031)
+++ 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    2013-04-14 00:40:24 UTC (rev 56032)
@@ -1064,6 +1064,35 @@
        return (short)GPU_get_anisotropic();
 }
 
+void RAS_OpenGLRasterizer::SetMipmapping(MipmapOption val)
+{
+       if (val == RAS_IRasterizer::RAS_MIPMAP_LINEAR)
+       {
+               GPU_set_linear_mipmap(1);
+               GPU_set_mipmap(1);
+       }
+       else if (val == RAS_IRasterizer::RAS_MIPMAP_NEAREST)
+       {
+               GPU_set_linear_mipmap(0);
+               GPU_set_mipmap(1);
+       }
+       else
+       {
+               GPU_set_linear_mipmap(0);
+               GPU_set_mipmap(0);
+       }
+}
+
+RAS_IRasterizer::MipmapOption RAS_OpenGLRasterizer::GetMipmapping()
+{
+       if (GPU_get_linear_mipmap())
+               return RAS_IRasterizer::RAS_MIPMAP_LINEAR;
+       else if (GPU_get_mipmap())
+               return RAS_IRasterizer::RAS_MIPMAP_NEAREST;
+       else
+               return RAS_IRasterizer::RAS_MIPMAP_NONE;
+}
+
 void RAS_OpenGLRasterizer::SetUsingOverrideShader(bool val)
 {
        m_usingoverrideshader = val;

Modified: 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
===================================================================
--- 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
      2013-04-14 00:27:31 UTC (rev 56031)
+++ 
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
      2013-04-14 00:40:24 UTC (rev 56032)
@@ -324,6 +324,9 @@
        virtual void    SetAnisotropicFiltering(short level);
        virtual short   GetAnisotropicFiltering();
 
+       virtual void    SetMipmapping(MipmapOption val);
+       virtual MipmapOption GetMipmapping();
+
        virtual void    SetUsingOverrideShader(bool val);
        virtual bool    GetUsingOverrideShader();
 

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

Reply via email to