[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20557] branches/bb_dev/source/blender: Added a little helper button in the material panel so visualize the GLSL blender shader .
Benoit Bolsee
benoit.bolsee at online.be
Mon Jun 1 16:57:47 CEST 2009
Revision: 20557
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20557
Author: ben2610
Date: 2009-06-01 16:57:45 +0200 (Mon, 01 Jun 2009)
Log Message:
-----------
Added a little helper button in the material panel so visualize the GLSL blender shader. The fragment shader will be exported as <material_name>.fg and the vertex shader as <material_name>.vx
Modified Paths:
--------------
branches/bb_dev/source/blender/gpu/intern/gpu_codegen.c
branches/bb_dev/source/blender/gpu/intern/gpu_codegen.h
branches/bb_dev/source/blender/gpu/intern/gpu_material.c
branches/bb_dev/source/blender/include/butspace.h
branches/bb_dev/source/blender/makesdna/DNA_material_types.h
branches/bb_dev/source/blender/src/buttons_shading.c
Modified: branches/bb_dev/source/blender/gpu/intern/gpu_codegen.c
===================================================================
--- branches/bb_dev/source/blender/gpu/intern/gpu_codegen.c 2009-06-01 14:08:19 UTC (rev 20556)
+++ branches/bb_dev/source/blender/gpu/intern/gpu_codegen.c 2009-06-01 14:57:45 UTC (rev 20557)
@@ -1391,7 +1391,7 @@
}
}
-GPUPass *GPU_generate_pass(ListBase *nodes, GPUNodeLink *outlink, GPUVertexAttribs *attribs, int *builtins, const char *name)
+GPUPass *GPU_generate_pass(ListBase *nodes, GPUNodeLink *outlink, GPUVertexAttribs *attribs, int *builtins, const char *name, char **fragshader, char **vertexshader)
{
GPUShader *shader;
GPUPass *pass;
@@ -1409,17 +1409,19 @@
gpu_nodes_get_builtin_flag(nodes, builtins);
/* generate code and compile with opengl */
- fragmentcode = code_generate_fragment(nodes, outlink->output, name);
- vertexcode = code_generate_vertex(nodes);
- shader = GPU_shader_create(vertexcode, fragmentcode, datatoc_gpu_shader_material_glsl); /*FUNCTION_LIB);*/
- MEM_freeN(fragmentcode);
- MEM_freeN(vertexcode);
+ *fragshader = code_generate_fragment(nodes, outlink->output, name);
+ *vertexshader = code_generate_vertex(nodes);
+ shader = GPU_shader_create(*vertexshader, *fragshader, datatoc_gpu_shader_material_glsl); /*FUNCTION_LIB);*/
/* failed? */
if (!shader) {
memset(attribs, 0, sizeof(*attribs));
memset(builtins, 0, sizeof(*builtins));
GPU_nodes_free(nodes);
+ MEM_freeN(*fragshader);
+ MEM_freeN(*vertexshader);
+ *fragshader = NULL;
+ *vertexshader = NULL;
return NULL;
}
Modified: branches/bb_dev/source/blender/gpu/intern/gpu_codegen.h
===================================================================
--- branches/bb_dev/source/blender/gpu/intern/gpu_codegen.h 2009-06-01 14:08:19 UTC (rev 20556)
+++ branches/bb_dev/source/blender/gpu/intern/gpu_codegen.h 2009-06-01 14:57:45 UTC (rev 20557)
@@ -67,7 +67,7 @@
typedef struct GPUPass GPUPass;
GPUPass *GPU_generate_pass(ListBase *nodes, struct GPUNodeLink *outlink,
- struct GPUVertexAttribs *attribs, int *builtin, const char *name);
+ struct GPUVertexAttribs *attribs, int *builtin, const char *name, char **fragshader, char **vertexshader);
struct GPUShader *GPU_pass_shader(GPUPass *pass);
Modified: branches/bb_dev/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/bb_dev/source/blender/gpu/intern/gpu_material.c 2009-06-01 14:08:19 UTC (rev 20556)
+++ branches/bb_dev/source/blender/gpu/intern/gpu_material.c 2009-06-01 14:57:45 UTC (rev 20557)
@@ -43,6 +43,7 @@
#include "DNA_texture_types.h"
#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
+#include "DNA_text_types.h"
#include "BKE_anim.h"
#include "BKE_colortools.h"
@@ -53,9 +54,12 @@
#include "BKE_scene.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
+#include "BKE_text.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
+/* for test_scriptpoin_but() */
+#include "butspace.h"
#include "GPU_extensions.h"
#include "GPU_material.h"
@@ -64,6 +68,12 @@
#include <string.h>
+#ifdef WIN32
+#ifndef snprintf
+#define snprintf _snprintf
+#endif
+#endif
+
/* Structs */
typedef enum DynMatProperty {
@@ -193,14 +203,45 @@
if (material->outlink) {
GPUNodeLink *outlink;
GPUShader *shader;
+ char *fragshader, *vertexshader;
outlink = material->outlink;
material->pass = GPU_generate_pass(&material->nodes, outlink,
- &material->attribs, &material->builtins, material->ma->id.name);
+ &material->attribs, &material->builtins, material->ma->id.name, &fragshader, &vertexshader);
if(!material->pass)
return 0;
+ if (material->ma->shade_flag & MA_EXPORT) {
+ Text *text;
+ char name[24];
+
+ if (fragshader) {
+ snprintf(name, 24, "%s.fg", material->ma->id.name+2);
+ test_scriptpoin_but(name, (ID **)&text);
+ if (!text)
+ text = add_empty_text(name);
+ if (text) {
+ txt_sel_all(text);
+ txt_insert_buf(text, fragshader);
+ }
+ }
+ if (vertexshader) {
+ snprintf(name, 24, "%s.vx", material->ma->id.name+2);
+ test_scriptpoin_but(name, (ID **)&text);
+ if (!text)
+ text = add_empty_text(name);
+ if (text) {
+ txt_sel_all(text);
+ txt_insert_buf(text, vertexshader);
+ }
+ }
+ /* export only once */
+ material->ma->shade_flag &= ~MA_EXPORT;
+ }
+ MEM_freeN(fragshader);
+ MEM_freeN(vertexshader);
+
gpu_material_set_attrib_id(material);
shader = GPU_pass_shader(material->pass);
Modified: branches/bb_dev/source/blender/include/butspace.h
===================================================================
--- branches/bb_dev/source/blender/include/butspace.h 2009-06-01 14:08:19 UTC (rev 20556)
+++ branches/bb_dev/source/blender/include/butspace.h 2009-06-01 14:57:45 UTC (rev 20557)
@@ -230,6 +230,8 @@
#define B_MTEXMOVEUP 1226
#define B_MTEXMOVEDOWN 1227
+#define B_EXPORTSHADER 1228
+
/* *********************** */
#define B_TEXBUTS 1400
Modified: branches/bb_dev/source/blender/makesdna/DNA_material_types.h
===================================================================
--- branches/bb_dev/source/blender/makesdna/DNA_material_types.h 2009-06-01 14:08:19 UTC (rev 20556)
+++ branches/bb_dev/source/blender/makesdna/DNA_material_types.h 2009-06-01 14:57:45 UTC (rev 20557)
@@ -206,6 +206,7 @@
/* shade_flag */
#define MA_CUBIC 1
#define MA_OBCOLOR 2
+#define MA_EXPORT 4
/* diff_shader */
#define MA_DIFF_LAMBERT 0
Modified: branches/bb_dev/source/blender/src/buttons_shading.c
===================================================================
--- branches/bb_dev/source/blender/src/buttons_shading.c 2009-06-01 14:08:19 UTC (rev 20556)
+++ branches/bb_dev/source/blender/src/buttons_shading.c 2009-06-01 14:57:45 UTC (rev 20557)
@@ -3081,8 +3081,9 @@
/* ****************** MATERIAL ***************** */
+/* borrow from drawtext.c */
+void redraw_alltext(void);
-
void do_matbuts(unsigned short event)
{
static short mtexcopied=0;
@@ -3167,6 +3168,11 @@
allqueue(REDRAWOOPS, 0);
// BIF_previewdraw(); push/pop!
break;
+ case B_EXPORTSHADER:
+ redraw_alltext();
+ if (ma)
+ ma->shade_flag |= MA_EXPORT;
+ // walk through!
case B_MATPRV:
if(ma) end_render_material(ma); /// temporal... 3d preview
BIF_preview_changed(ID_MA);
@@ -4187,7 +4193,6 @@
return block;
}
-
static void material_panel_material(Material *ma)
{
uiBlock *block;
@@ -4226,6 +4231,11 @@
uiDefButBitI(block, TOG, MA_ENV, B_MATPRV, "Env", 82,146,74,20, &(ma->mode), 0, 0, 0, 0, "Causes faces to render with alpha zero: allows sky/backdrop to show through (only for solid faces)");
uiDefButBitS(block, TOG, MA_OBCOLOR, B_MATPRV, "ObColor", 156,146,60,20, &(ma->shade_flag), 0, 0, 0, 0, "Modulate the result with a per object color");
uiDefButF(block, NUM, B_NOP, "Shad A ", 216,146,87,20, &ma->shad_alpha, 0.001, 1.0f, 10, 2, "Shadow casting alpha, only in use for Irregular Shadowbuffer");
+ if (draw_glsl_material(NULL, G.vd->drawtype)) {
+ // only display option if we are likely to use GLSL shaders
+ uiBlockSetCol(block, TH_AUTO);
+ uiDefBut(block, BUT, B_EXPORTSHADER, "Export GLSL shader", 8,126,148,20, NULL, 0, 0, 0, 0, "Export GLSL shader in text file called <material>.fg and <material>.vx");
+ }
}
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
More information about the Bf-blender-cvs
mailing list