Revision: 15376
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15376
Author:   zaghaghi
Date:     2008-06-28 05:18:11 +0200 (Sat, 28 Jun 2008)

Log Message:
-----------
BGE 2d-filter, custom shaders now can have depth texture and luminance texture

Modified Paths:
--------------
    trunk/blender/source/blender/makesdna/DNA_actuator_types.h
    trunk/blender/source/blender/src/buttons_logic.c
    trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
    trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
    trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
    trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.h
    trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h

Modified: trunk/blender/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_actuator_types.h  2008-06-28 
01:14:26 UTC (rev 15375)
+++ trunk/blender/source/blender/makesdna/DNA_actuator_types.h  2008-06-28 
03:18:11 UTC (rev 15376)
@@ -192,11 +192,13 @@
 } bVisibilityActuator;
 
 typedef struct bTwoDFilterActuator{
-       char pad[4];
-       /* Tells what type of 2D Filter*/
+       char pad[2];
+       /* bitwise flag for enabling or disabling depth(bit 0) and 
luminance(bit 1) */
+       short texture_flag;
+       /* Tells what type of 2D Filter */
        short type;
        /* (flag == 0) means 2D filter is activate and
-          (flag != 0) means 2D filter is inactive*/
+          (flag != 0) means 2D filter is inactive */
        short flag;
        int   int_arg;
        /* a float argument */

Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c    2008-06-28 01:14:26 UTC 
(rev 15375)
+++ trunk/blender/source/blender/src/buttons_logic.c    2008-06-28 03:18:11 UTC 
(rev 15376)
@@ -2382,7 +2382,11 @@
                                break;
                        case ACT_2DFILTER_CUSTOMFILTER:
                                uiDefButI(block, NUM, B_REDR, "Pass Number:", 
xco+30,yco-44,width-60,19,&tdfa->int_arg,0.0,MAX_RENDER_PASS-1,0.0,0.0,"Set 
motion blur value");
-                               uiDefIDPoinBut(block, test_scriptpoin_but, 
ID_SCRIPT, 1, "Script: ", xco+30,yco-64,width-60, 19, &tdfa->text, "");
+                               uiDefIDPoinBut(block, test_scriptpoin_but, 
ID_SCRIPT, 1, "Script: ", xco+30,yco-64,width/2-32, 19, &tdfa->text, "");
+                               uiDefButS(block, TOG|BIT|0, B_REDR, "Depth", 
xco+width/2+2 , yco - 64, width/4-16 , 19,
+                                               &tdfa->texture_flag, 0.0, 0.0, 
0, 0, "Includes Depth Texture (bgl_DepthTexture)");
+                               uiDefButS(block, TOG|BIT|1, B_REDR, 
"Luminance", xco+3*width/4-14 , yco - 64, width/4-16 , 19,
+                                               &tdfa->texture_flag, 0.0, 0.0, 
0, 0, "Includes Luminance Texture (bgl_LuminanceTexture)");
                                break;
                }
                

Modified: 
trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp   
2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp   
2008-06-28 03:18:11 UTC (rev 15376)
@@ -483,9 +483,9 @@
        }
 }
 
-void 
KX_BlenderRenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE 
filtermode, int pass, STR_String& text)
+void 
KX_BlenderRenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE 
filtermode, int pass, STR_String& text, short texture_flag)
 {
-       m_filtermanager.EnableFilter(filtermode, pass, text);
+       m_filtermanager.EnableFilter(filtermode, pass, text, texture_flag);
 }
 
 void KX_BlenderRenderTools::Render2DFilters(RAS_ICanvas* canvas)

Modified: 
trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h     
2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h     
2008-06-28 03:18:11 UTC (rev 15376)
@@ -101,7 +101,7 @@
 
        virtual void MotionBlur(RAS_IRasterizer* rasterizer);
 
-       virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE 
filtermode, int pass, STR_String& text);
+       virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE 
filtermode, int pass, STR_String& text, short texture_flag);
 
        virtual void Render2DFilters(RAS_ICanvas* canvas);
 

Modified: trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp   
2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp   
2008-06-28 03:18:11 UTC (rev 15376)
@@ -944,7 +944,7 @@
                        }
             
                        tmp = new SCA_2DFilterActuator(gameobj, filtermode, 
_2dfilter->flag,
-                               
_2dfilter->float_arg,_2dfilter->int_arg,ketsjiEngine->GetRasterizer(),rendertools);
+                               
_2dfilter->float_arg,_2dfilter->int_arg,_2dfilter->texture_flag,ketsjiEngine->GetRasterizer(),rendertools);
 
                        if (_2dfilter->text)
                        {

Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp  
2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp  
2008-06-28 03:18:11 UTC (rev 15376)
@@ -18,6 +18,7 @@
                short flag,
                float float_arg,
                int int_arg,
+               short texture_flag,
                RAS_IRasterizer* rasterizer,
                RAS_IRenderTools* rendertools,
         PyTypeObject* T)
@@ -25,6 +26,7 @@
      m_type(type),
         m_flag(flag),
         m_int_arg(int_arg),
+        m_texture_flag(texture_flag),
         m_float_arg(float_arg),
         m_rasterizer(rasterizer),
         m_rendertools(rendertools)
@@ -72,7 +74,7 @@
        }
        else if(m_type < RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS)
        {
-               m_rendertools->Update2DFilter(m_type, m_int_arg, m_shaderText);
+               m_rendertools->Update2DFilter(m_type, m_int_arg, m_shaderText, 
m_texture_flag);
        }
     return true;
 }

Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h    
2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h    
2008-06-28 03:18:11 UTC (rev 15376)
@@ -16,6 +16,7 @@
        short m_flag;
        float m_float_arg;
        int   m_int_arg;
+       short m_texture_flag;
        STR_String      m_shaderText;
        RAS_IRasterizer* m_rasterizer;
        RAS_IRenderTools* m_rendertools;
@@ -28,6 +29,7 @@
                short flag,
                float float_arg,
                int int_arg,
+               short texture_flag,
                RAS_IRasterizer* rasterizer,
                RAS_IRenderTools* rendertools,
         PyTypeObject* T=&Type

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp  
2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp  
2008-06-28 03:18:11 UTC (rev 15376)
@@ -54,7 +54,7 @@
 
 
 RAS_2DFilterManager::RAS_2DFilterManager():
-texname(-1), texturewidth(-1), textureheight(-1),
+texturewidth(-1), textureheight(-1),
 canvaswidth(-1), canvasheight(-1),
 numberoffilters(0)
 {
@@ -72,8 +72,9 @@
        {
                m_filters[passindex] = 0;
                m_enabled[passindex] = 0;
+               texflag[passindex] = 0;
        }
-
+       texname[0] = texname[1] = texname[2] = -1;
 }
 
 RAS_2DFilterManager::~RAS_2DFilterManager()
@@ -150,30 +151,54 @@
                return 0;
 }
 
-void RAS_2DFilterManager::StartShaderProgram(unsigned int shaderprogram)
+void RAS_2DFilterManager::StartShaderProgram(int passindex)
 {
        GLint uniformLoc;
-       glUseProgramObjectARB(shaderprogram);
-       uniformLoc = glGetUniformLocationARB(shaderprogram, 
"bgl_RenderedTexture");
+       glUseProgramObjectARB(m_filters[passindex]);
+       uniformLoc = glGetUniformLocationARB(m_filters[passindex], 
"bgl_RenderedTexture");
        glActiveTextureARB(GL_TEXTURE0);
-       //glActiveTexture(GL_TEXTURE0);
-       glBindTexture(GL_TEXTURE_2D, texname);
+       glBindTexture(GL_TEXTURE_2D, texname[0]);
 
     if (uniformLoc != -1)
     {
                glUniform1iARB(uniformLoc, 0);
     }
-       uniformLoc = glGetUniformLocationARB(shaderprogram, 
"bgl_TextureCoordinateOffset");
+
+    /* send depth texture to glsl program if it needs */
+       if(texflag[passindex] & 0x1){
+       uniformLoc = glGetUniformLocationARB(m_filters[passindex], 
"bgl_DepthTexture");
+       glActiveTextureARB(GL_TEXTURE1);
+       glBindTexture(GL_TEXTURE_2D, texname[1]);
+
+       if (uniformLoc != -1)
+       {
+               glUniform1iARB(uniformLoc, 1);
+       }
+    }
+
+    /* send luminance texture to glsl program if it needs */
+       if(texflag[passindex] & 0x1){
+       uniformLoc = glGetUniformLocationARB(m_filters[passindex], 
"bgl_LuminanceTexture");
+       glActiveTextureARB(GL_TEXTURE2);
+       glBindTexture(GL_TEXTURE_2D, texname[2]);
+
+       if (uniformLoc != -1)
+       {
+               glUniform1iARB(uniformLoc, 2);
+       }
+       }
+       
+       uniformLoc = glGetUniformLocationARB(m_filters[passindex], 
"bgl_TextureCoordinateOffset");
     if (uniformLoc != -1)
     {
         glUniform2fvARB(uniformLoc, 9, textureoffsets);
     }
-       uniformLoc = glGetUniformLocationARB(shaderprogram, 
"bgl_RenderedTextureWidth");
+       uniformLoc = glGetUniformLocationARB(m_filters[passindex], 
"bgl_RenderedTextureWidth");
     if (uniformLoc != -1)
     {
                glUniform1fARB(uniformLoc,texturewidth);
     }
-       uniformLoc = glGetUniformLocationARB(shaderprogram, 
"bgl_RenderedTextureHeight");
+       uniformLoc = glGetUniformLocationARB(m_filters[passindex], 
"bgl_RenderedTextureHeight");
     if (uniformLoc != -1)
     {
                glUniform1fARB(uniformLoc,textureheight);
@@ -187,18 +212,37 @@
 
 void RAS_2DFilterManager::SetupTexture()
 {
-       if(texname!=-1)
+       if(texname[0]!=-1 || texname[1]!=-1)
        {
-               glDeleteTextures(1,(const GLuint *)&texname);
+               glDeleteTextures(2, texname);
        }
-       glGenTextures(1, (GLuint *)&texname);
-       glBindTexture(GL_TEXTURE_2D, texname);
+       glGenTextures(3, texname);
+
+       glBindTexture(GL_TEXTURE_2D, texname[0]);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texturewidth, textureheight, 0, 
GL_RGB,
-               GL_UNSIGNED_BYTE, 0);
+                       GL_UNSIGNED_BYTE, 0);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+
+       glBindTexture(GL_TEXTURE_2D, texname[1]);
+       glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, 
texturewidth,textureheight, 0, GL_DEPTH_COMPONENT,
+                       GL_FLOAT,NULL);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE,
+                               GL_NONE);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+       
+       glBindTexture(GL_TEXTURE_2D, texname[2]);
+       glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE16, texturewidth, 
textureheight, 0, GL_LUMINANCE,

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to