Revision: 21496
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21496
Author:   yukishiro
Date:     2009-07-10 19:06:58 +0200 (Fri, 10 Jul 2009)

Log Message:
-----------
add lightenv node exec and add output and file output node preview

Modified Paths:
--------------
    branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_lightenv.h
    branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_node.h
    branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c
    
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
    branches/soc-2009-yukishiro/source/blender/editors/space_node/drawnode.c
    branches/soc-2009-yukishiro/source/blender/nodes/CMakeLists.txt
    branches/soc-2009-yukishiro/source/blender/nodes/SConscript
    
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_lightenv.c
    
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_output.c
    
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_outputFile.c
    branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_util.h

Modified: branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_lightenv.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_lightenv.h        
2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_lightenv.h        
2009-07-10 17:06:58 UTC (rev 21496)
@@ -41,7 +41,7 @@
 void init_def_lightenv(void);
 void free_lightenv(struct LightEnv *env); 
 struct LightEnv* add_lightenv(char *name);
-void save_lightenv(struct LightEnv *env, char *image_name);
+void save_lightenv(struct LightEnv *env, char *image_name, int imtype);
 
 void update_light_func(struct LightEnv *env);
 

Modified: branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_node.h    
2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/BKE_node.h    
2009-07-10 17:06:58 UTC (rev 21496)
@@ -88,7 +88,7 @@
        void (*copystoragefunc)(struct bNode *, struct bNode *);
        
        /* for use with dynamic typedefs */
-       ID *id;
+       struct ID *id;
        void *pynode; /* holds pointer to python script */
        void *pydict; /* holds pointer to python script dictionary (scope)*/
 

Modified: 
branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c     
2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/blenkernel/intern/lightenv.c     
2009-07-10 17:06:58 UTC (rev 21496)
@@ -37,9 +37,11 @@
 #include "BKE_blender.h"
 #include "BKE_displist.h"
 #include "BKE_global.h"
+//#include "BKE_icons.h"
 #include "BKE_image.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
+#include "BKE_node.h"
 
 #include "DNA_lightenv_types.h"
 #include "DNA_world_types.h"
@@ -50,7 +52,25 @@
 
 #include "SH_api.h"
 
+static int convert_imtype_ftype(int imtype)
+{
+       switch (imtype) {
+               case R_RADHDR:
+                       return RADHDR;
+               case R_PNG:
+                       return PNG;
+               case R_RAWTGA:
+                       return RAWTGA;
+               case R_BMP:
+                       return BMP;
+               case R_TARGA:
+                       return TGA;
+               default:
+                       return JPG;
+       }
+}
 
+
 // TODO: simple function to return value for 3 channels. needs improvement
 void def_synthetic(float phi, float theta, float val[3], void *data)
 {
@@ -96,11 +116,16 @@
        SH_computeLightCoefficients(env);
 }
 
-void save_lightenv(LightEnv *env, char *image_name)
+void save_lightenv(LightEnv *env, char *image_name, int imtype)
 {
        ImBuf * ibuf= IMB_allocImBuf(env->output_width, env->output_height, 32, 
IB_rectfloat, 0);
        SH_reconstructLightProbe(env, ibuf);
-       ibuf->ftype |= RADHDR; // must set to the correct file type
+       
+       if (imtype == 0) {
+               ibuf->ftype |= RADHDR; // must set to the correct file type
+       } else {
+               ibuf->ftype |= convert_imtype_ftype(imtype);
+       }
        IMB_saveiff(ibuf, image_name, 0);
        IMB_freeImBuf(ibuf);
 }

Modified: 
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
===================================================================
--- 
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c   
    2009-07-10 17:05:04 UTC (rev 21495)
+++ 
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c   
    2009-07-10 17:06:58 UTC (rev 21496)
@@ -643,7 +643,7 @@
        char str[FILE_MAX];
        
        RNA_string_get(op->ptr, "filename", str);
-       save_lightenv(env, str);
+       save_lightenv(env, str, 0);
 
        return OPERATOR_FINISHED;
 }

Modified: 
branches/soc-2009-yukishiro/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/space_node/drawnode.c    
2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/editors/space_node/drawnode.c    
2009-07-10 17:06:58 UTC (rev 21496)
@@ -58,6 +58,7 @@
 #include "BKE_global.h"
 #include "BKE_image.h"
 #include "BKE_library.h"
+#include "BKE_lightenv.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
 #include "BKE_node.h"
@@ -2473,6 +2474,34 @@
        return 20;
 }
 
+static int node_light_buts_output_file(uiBlock *block, bNodeTree *ntree, bNode 
*node, rctf *butr)
+{
+       if(block) {
+               NodeImageFile *nif= node->storage;
+               uiBut *bt;
+               short x= (short)butr->xmin;
+               short y= (short)butr->ymin;
+               short w= (short)butr->xmax - butr->xmin;
+               char str[320];
+
+               node_imagetype_string(str);
+
+               bt = uiDefIconBut(block, BUT, B_NODE_SETIMAGE, ICON_FILESEL,
+                               x, y+60, 20, 20,
+                               0, 0, 0, 0, 0, "Open Fileselect to select 
image");
+               uiButSetFunc(bt, node_set_image_cb, ntree, node);
+
+               uiDefBut(block, TEX, B_NOP, "",
+                               x+20, y+60, w-20, 20,
+                               nif->name, 0.0f, 240.0f, 0, 0, "");
+
+               uiDefButS(block, MENU, B_NOP, str,
+                               x, y+40, w, 20,
+                               &nif->imtype, 0.0f, 1.0f, 0, 0, "");
+       }
+       return 80;
+}
+
 static void node_light_set_butfunc(bNodeType *ntype)
 {
        switch(ntype->type) {
@@ -2483,10 +2512,12 @@
                        ntype->butfunc= node_light_buts_image;
                        break;
                case LGT_NODE_OUTPUT_FILE:
+                       ntype->butfunc= node_light_buts_output_file;
                        break;
        }
 }
 
+
 /* ******* init draw callbacks for all tree types, only called in 
usiblender.c, once ************* */
 
 void ED_init_node_butfuncs(void)

Modified: branches/soc-2009-yukishiro/source/blender/nodes/CMakeLists.txt
===================================================================
--- branches/soc-2009-yukishiro/source/blender/nodes/CMakeLists.txt     
2009-07-10 17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/nodes/CMakeLists.txt     
2009-07-10 17:06:58 UTC (rev 21496)
@@ -28,7 +28,7 @@
 SET(INC 
   . ../../../intern/guardedalloc ../editors/include ../blenlib ../makesdna
   ../render/extern/include ../../../intern/decimation/extern
-  ../imbuf ../avi ../../../intern/elbeem/extern
+  ../imbuf ../avi ../../../intern/elbeem/extern ../sh
   ../../../intern/iksolver/extern ../blenloader ../quicktime
   ../blenkernel ../../../extern/glew/include ../gpu
   ${SDL_INC}

Modified: branches/soc-2009-yukishiro/source/blender/nodes/SConscript
===================================================================
--- branches/soc-2009-yukishiro/source/blender/nodes/SConscript 2009-07-10 
17:05:04 UTC (rev 21495)
+++ branches/soc-2009-yukishiro/source/blender/nodes/SConscript 2009-07-10 
17:06:58 UTC (rev 21496)
@@ -11,7 +11,7 @@
 incs += '#/intern/guardedalloc ../editors/include ../blenlib ../makesdna'
 incs += ' ../render/extern/include '
 incs += ' ../imbuf ../avi '
-incs += ' ../blenloader'
+incs += ' ../blenloader ../sh'
 incs += ' ../blenkernel ../renderconverter '
 incs += ' ../gpu #/extern/glew/include '
 

Modified: 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_lightenv.c
===================================================================
--- 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_lightenv.c
    2009-07-10 17:05:04 UTC (rev 21495)
+++ 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_lightenv.c
    2009-07-10 17:06:58 UTC (rev 21496)
@@ -36,16 +36,22 @@
 static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
 {
        LightCallData * lcd = (LightCallData *)data;
-       LightEnv * env = (LightEnv *)node->id;
+       LightEnv * env;
        bNodePreview *preview;
 
+       env = (LightEnv *)node->id;
+       if (env == NULL) env = lcd->env;
+
+       /* set output */
+       out[0]->data = env;
+
+       /* preview */
        if(!(node->typeinfo->flag & NODE_PREVIEW))
                return;
 
        init_preview(node);
        preview = node->preview;
 
-       if (env == NULL) env = lcd->env;
        SH_lightProbePreview(env, preview->xsize, preview->ysize,
                         0, 0, preview->xsize, preview->ysize, preview->rect);
 }

Modified: 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_output.c
===================================================================
--- 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_output.c  
    2009-07-10 17:05:04 UTC (rev 21495)
+++ 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_output.c  
    2009-07-10 17:06:58 UTC (rev 21496)
@@ -30,12 +30,27 @@
 #include "../LGT_util.h"
 
 static bNodeSocketType inputs[]= {
-       {       SOCK_RGBA, 1, "Color",          0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 
1.0f},
-       {       -1, 0, ""       }
+       {SOCK_RGBA, 1, "Color",0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+       {-1, 0, ""}
 };
 
 static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
 {
+       LightEnv * env;
+       bNodePreview *preview;
+
+       if (in[0]->data) {
+               env = (LightEnv*)in[0]->data;
+
+               /* preview */
+               if(!(node->typeinfo->flag & NODE_PREVIEW)) return;
+
+               init_preview(node);
+               preview = node->preview;
+
+               SH_lightProbePreview(env, preview->xsize, preview->ysize,
+                               0, 0, preview->xsize, preview->ysize, 
preview->rect);
+       }
 }
 
 bNodeType lgt_node_output= {

Modified: 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_outputFile.c
===================================================================
--- 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_outputFile.c
  2009-07-10 17:05:04 UTC (rev 21495)
+++ 
branches/soc-2009-yukishiro/source/blender/nodes/intern/LGT_nodes/LGT_outputFile.c
  2009-07-10 17:06:58 UTC (rev 21496)
@@ -34,12 +34,71 @@
        {-1, 0, ""}
 };
 
+
+// XXX BKE_add_image_extension requires Scene...
+void add_image_extension(char * base, int imtype)
+{
+       char *extension="";
+
+       if(imtype==R_RADHDR) {
+               if(!BLI_testextensie(base, ".hdr"))
+                       extension= ".hdr";
+       }
+       else if(imtype==R_PNG) {
+               if(!BLI_testextensie(base, ".png"))
+                       extension= ".png";
+       }
+       else if(imtype==R_RAWTGA) {
+               if(!BLI_testextensie(base, ".tga"))
+                       extension= ".tga";
+       }
+       else if(imtype==R_BMP) {
+               if(!BLI_testextensie(base, ".bmp"))
+                       extension= ".bmp";
+       }
+       else if(imtype==R_TARGA) {
+               if(!BLI_testextensie(base, ".tga"))
+                       extension= ".tga";
+       }
+       else { 
+               if(!( BLI_testextensie(base, ".jpg") || BLI_testextensie(base, 
".jpeg")))
+                       extension= ".jpg";
+       }
+
+       strcat(base, extension);
+}
+
 static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
 {
+       if (in[0]->data) {
+               LightEnv *env = (LightEnv*)in[0]->data;
+               NodeImageFile *nif= node->storage;
+               bNodePreview *preview;
+               char filename[256];
+
+               /* save image */
+               if (!BLI_streq(nif->name, "")) {
+                       BLI_strncpy(filename, nif->name, 256);
+                       add_image_extension(filename, nif->imtype);

@@ 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