[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31027] branches/soc-2010-moguri-2/source: Working on interaction between the Python shader and the actual BL_BlenderShader .
Mitchell Stokes
mogurijin at gmail.com
Wed Aug 4 05:49:17 CEST 2010
Revision: 31027
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31027
Author: moguri
Date: 2010-08-04 05:48:50 +0200 (Wed, 04 Aug 2010)
Log Message:
-----------
Working on interaction between the Python shader and the actual BL_BlenderShader. Sources can be get and set, however, the set is still odd. Also, I'm pretty sure I have some memory leak issues to look into.
Modified Paths:
--------------
branches/soc-2010-moguri-2/source/blender/blenkernel/intern/material.c
branches/soc-2010-moguri-2/source/blender/blenloader/intern/readfile.c
branches/soc-2010-moguri-2/source/blender/gpu/GPU_extensions.h
branches/soc-2010-moguri-2/source/blender/gpu/GPU_material.h
branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_codegen.c
branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_codegen.h
branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_extensions.c
branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_material.c
branches/soc-2010-moguri-2/source/blender/makesdna/DNA_material_types.h
branches/soc-2010-moguri-2/source/gameengine/Ketsji/BL_BlenderShader.cpp
branches/soc-2010-moguri-2/source/gameengine/Ketsji/BL_BlenderShader.h
branches/soc-2010-moguri-2/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
branches/soc-2010-moguri-2/source/gameengine/Ketsji/KX_BlenderMaterial.h
branches/soc-2010-moguri-2/source/gameengine/Ketsji/KX_PythonShaders.cpp
branches/soc-2010-moguri-2/source/gameengine/Ketsji/KX_PythonShaders.h
Modified: branches/soc-2010-moguri-2/source/blender/blenkernel/intern/material.c
===================================================================
--- branches/soc-2010-moguri-2/source/blender/blenkernel/intern/material.c 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/blenkernel/intern/material.c 2010-08-04 03:48:50 UTC (rev 31027)
@@ -195,6 +195,7 @@
ma->csi.flag= 0;
ma->csi.geom_in= MA_CS_GEOM_IN_TRIS;
ma->csi.geom_out= MA_CS_GEOM_OUT_TRIANGLE_STRIP;
+ ma->csi.sources = NULL;
}
void init_custom_uniform(CustomUniform *cu)
Modified: branches/soc-2010-moguri-2/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2010-moguri-2/source/blender/blenloader/intern/readfile.c 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/blenloader/intern/readfile.c 2010-08-04 03:48:50 UTC (rev 31027)
@@ -2927,6 +2927,7 @@
direct_link_nodetree(fd, ma->nodetree);
ma->preview = direct_link_preview_image(fd, ma->preview);
+ ma->csi.sources = NULL;
ma->gpumaterial.first = ma->gpumaterial.last = NULL;
}
Modified: branches/soc-2010-moguri-2/source/blender/gpu/GPU_extensions.h
===================================================================
--- branches/soc-2010-moguri-2/source/blender/gpu/GPU_extensions.h 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/gpu/GPU_extensions.h 2010-08-04 03:48:50 UTC (rev 31027)
@@ -167,6 +167,8 @@
int GPU_shader_get_attribute(GPUShader *shader, char *name);
+void GPU_shader_get_sources(GPUShader *shader, char *vertex, char *geometry, char *fragment);
+
/* Vertex attributes for shaders */
#define GPU_MAX_ATTRIB 32
Modified: branches/soc-2010-moguri-2/source/blender/gpu/GPU_material.h
===================================================================
--- branches/soc-2010-moguri-2/source/blender/gpu/GPU_material.h 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/gpu/GPU_material.h 2010-08-04 03:48:50 UTC (rev 31027)
@@ -129,6 +129,7 @@
void GPU_material_unbind(GPUMaterial *material);
void GPU_material_unbind_uniforms(GPUMaterial *material);
int GPU_material_bound(GPUMaterial *material);
+void GPU_material_get_sources(GPUMaterial *material, char *vertex, char *geometry, char *fragment);
void GPU_material_vertex_attributes(GPUMaterial *material,
struct GPUVertexAttribs *attrib);
Modified: branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_codegen.c
===================================================================
--- branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_codegen.c 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_codegen.c 2010-08-04 03:48:50 UTC (rev 31027)
@@ -883,6 +883,11 @@
GPU_shader_unbind(shader);
}
+void GPU_pass_get_sources(GPUPass *pass, char *vertex, char *geometry, char *fragment)
+{
+ GPU_shader_get_sources(pass->shader, vertex, geometry, fragment);
+}
+
/* Node Link Functions */
GPUNodeLink *GPU_node_link_create(int type)
Modified: branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_codegen.h
===================================================================
--- branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_codegen.h 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_codegen.h 2010-08-04 03:48:50 UTC (rev 31027)
@@ -75,6 +75,7 @@
void GPU_pass_bind(GPUPass *pass, double time, int mipmap);
void GPU_pass_update_uniforms(GPUPass *pass);
void GPU_pass_unbind(GPUPass *pass);
+void GPU_pass_get_sources(GPUPass *pass, char *vertex, char *geometry, char *fragment);
void GPU_pass_free(GPUPass *pass);
Modified: branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_extensions.c 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_extensions.c 2010-08-04 03:48:50 UTC (rev 31027)
@@ -1207,6 +1207,14 @@
return index;
}
+void GPU_shader_get_sources(GPUShader *shader, char *vertex, char *geometry, char *fragment)
+{
+ int size;
+ glGetShaderSource(shader->vertex, 64000, &size, vertex);
+ glGetShaderSource(shader->geometry, 64000, &size, geometry);
+ glGetShaderSource(shader->fragment, 64000, &size, fragment);
+}
+
#if 0
/* GPUPixelBuffer */
Modified: branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_material.c 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/gpu/intern/gpu_material.c 2010-08-04 03:48:50 UTC (rev 31027)
@@ -231,8 +231,14 @@
GPUShader *shader;
char *frag=NULL, *vert=NULL, *geom=NULL;
+ if (material->ma->csi.sources)
+ {
+ vert = material->ma->csi.sources[0];
+ geom = material->ma->csi.sources[1];
+ frag = material->ma->csi.sources[2];
+ }
// Gather information on custom shaders
- if (material->ma->csi.flag & MA_CS_USE_EXTERNAL)
+ else if (material->ma->csi.flag & MA_CS_USE_EXTERNAL)
{
// Load files
if (strcmp(material->ma->csi.vertex_shader, ""))
@@ -532,6 +538,11 @@
return material->bound;
}
+void GPU_material_get_sources(GPUMaterial *material, char *vertex, char *geometry, char *fragment)
+{
+ GPU_pass_get_sources(material->pass, vertex, geometry, fragment);
+}
+
void GPU_material_vertex_attributes(GPUMaterial *material, GPUVertexAttribs *attribs)
{
*attribs = material->attribs;
Modified: branches/soc-2010-moguri-2/source/blender/makesdna/DNA_material_types.h
===================================================================
--- branches/soc-2010-moguri-2/source/blender/makesdna/DNA_material_types.h 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/blender/makesdna/DNA_material_types.h 2010-08-04 03:48:50 UTC (rev 31027)
@@ -91,6 +91,9 @@
short flag, geom_in, geom_out;
short actuniform;
+ // These sources are used if set, but are not saved
+ char **sources;
+
ListBase uniforms;
} CustomShaderInfo;
Modified: branches/soc-2010-moguri-2/source/gameengine/Ketsji/BL_BlenderShader.cpp
===================================================================
--- branches/soc-2010-moguri-2/source/gameengine/Ketsji/BL_BlenderShader.cpp 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/gameengine/Ketsji/BL_BlenderShader.cpp 2010-08-04 03:48:50 UTC (rev 31027)
@@ -33,6 +33,13 @@
{
if(mGPUMat)
GPU_material_unbind(mGPUMat);
+ if(mMat && mMat->csi.sources)
+ {
+ mMat->csi.sources = NULL;
+ GPU_material_free(mMat);
+ ReloadMaterial();
+ }
+
}
void BL_BlenderShader::ReloadMaterial()
@@ -148,6 +155,30 @@
mBlendMode = GPU_material_blend_mode(gpumat, obcol);
}
+void BL_BlenderShader::GetSources(char *vertex, char *geometry, char *fragment)
+{
+ GPU_material_get_sources(mGPUMat, vertex, geometry, fragment);
+}
+
+void BL_BlenderShader::SetSources(char *vertex, char *geometry, char *fragment)
+{
+ char vert[64000]="", geom[64000]="", frag[64000]="";
+ GetSources(vert, geom, frag);
+
+ if (!vertex)
+ vertex = vert;
+ if (!geometry)
+ geometry = geom;
+ if (!fragment)
+ fragment = frag;
+
+ char* sources[3] = {vertex, geometry, fragment};
+
+ mMat->csi.sources = sources;
+ GPU_material_free(mMat);
+ ReloadMaterial();
+}
+
int BL_BlenderShader::GetBlendMode()
{
return mBlendMode;
Modified: branches/soc-2010-moguri-2/source/gameengine/Ketsji/BL_BlenderShader.h
===================================================================
--- branches/soc-2010-moguri-2/source/gameengine/Ketsji/BL_BlenderShader.h 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/gameengine/Ketsji/BL_BlenderShader.h 2010-08-04 03:48:50 UTC (rev 31027)
@@ -54,6 +54,8 @@
int GetAttribNum();
void SetAttribs(class RAS_IRasterizer* ras, const BL_Material *mat);
void Update(const class RAS_MeshSlot & ms, class RAS_IRasterizer* rasty);
+ void GetSources(char *vertex, char *geometry, char *fragment);
+ void SetSources(char *vertex=NULL, char *geometry=NULL, char *fragment=NULL);
void ReloadMaterial();
int GetBlendMode();
Modified: branches/soc-2010-moguri-2/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
--- branches/soc-2010-moguri-2/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2010-08-04 00:18:05 UTC (rev 31026)
+++ branches/soc-2010-moguri-2/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2010-08-04 03:48:50 UTC (rev 31027)
@@ -10,6 +10,7 @@
#include "KX_Light.h"
#include "KX_GameObject.h"
#include "KX_MeshProxy.h"
+#include "KX_PythonShaders.h"
#include "MT_Vector3.h"
#include "MT_Vector4.h"
@@ -46,6 +47,7 @@
mBlenderShader(0),
mScene(NULL),
mUserDefBlend(0),
+ mLightLayer(0),
mModified(0),
mConstructed(false),
mPass(0)
@@ -138,6 +140,23 @@
return mMaterial->material;
}
+void KX_BlenderMaterial::SetBlenderShader(BL_BlenderShader *shader)
+{
+ // First get rid of the old one if we have one
+ if( mBlenderShader ) {
+ if(mBlenderShader == mLastBlenderShader) {
+ mBlenderShader->SetProg(false);
+ mLastBlenderShader = NULL;
+ }
+
+ delete mBlenderShader;
+ mBlenderShader = 0;
+ }
+
+ // Now set the new one
+ mBlenderShader = shader;
+}
+
BL_BlenderShader *KX_BlenderMaterial::GetBlenderShader() const
{
return mBlenderShader;
@@ -187,6 +206,7 @@
mBlendFunc[0] =0;
mBlendFunc[1] =0;
+ mLightLayer = layer;
mConstructed = true;
}
@@ -802,7 +822,7 @@
//KX_PYATTRIBUTE_TODO("shader"),
//KX_PYATTRIBUTE_TODO("materialIndex"),
//KX_PYATTRIBUTE_TODO("blending"),
- KX_PYATTRIBUTE_RO_FUNCTION("blender_shader", KX_BlenderMaterial, pyattr_get_blender_shader),
+ KX_PYATTRIBUTE_RW_FUNCTION("blender_shader", KX_BlenderMaterial, pyattr_get_blender_shader, pyattr_set_blender_shader),
{ NULL } //Sentinel
};
@@ -831,14 +851,21 @@
PyObject* KX_BlenderMaterial::pyattr_get_blender_shader(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
- BL_BlenderShader* shader= self->GetBlenderShader();
- if (shader)
- return shader->GetProxy();
+ KX_PythonShader *pyshader = new KX_PythonShader(self);
- Py_RETURN_NONE;
+ return pyshader->NewProxy(true);
}
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list