[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37871] branches/cycles: Cycles: working towards texture workflow design
Brecht Van Lommel
brechtvanlommel at pandora.be
Mon Jun 27 19:10:50 CEST 2011
Revision: 37871
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37871
Author: blendix
Date: 2011-06-27 17:10:50 +0000 (Mon, 27 Jun 2011)
Log Message:
-----------
Cycles: working towards texture workflow design
http://wiki.blender.org/index.php/Dev:2.5/Source/Render/TextureWorkflow
* Added "active texture node" in shading node trees.
* Texture draw mode draw active texture node now, and new Material draw
mode shows GLSL material.
* GLSL materials now match solid draw mode lighting better.
* Texture properties can now texture nodes from material/world/lamp.
Modified Paths:
--------------
branches/cycles/intern/cycles/blender/addon/ui.py
branches/cycles/release/scripts/startup/bl_ui/space_view3d.py
branches/cycles/source/blender/blenkernel/BKE_DerivedMesh.h
branches/cycles/source/blender/blenkernel/BKE_node.h
branches/cycles/source/blender/blenkernel/BKE_scene.h
branches/cycles/source/blender/blenkernel/intern/DerivedMesh.c
branches/cycles/source/blender/blenkernel/intern/cdderivedmesh.c
branches/cycles/source/blender/blenkernel/intern/material.c
branches/cycles/source/blender/blenkernel/intern/node.c
branches/cycles/source/blender/blenkernel/intern/scene.c
branches/cycles/source/blender/blenkernel/intern/subsurf_ccg.c
branches/cycles/source/blender/blenloader/intern/readfile.c
branches/cycles/source/blender/editors/include/ED_node.h
branches/cycles/source/blender/editors/include/UI_interface.h
branches/cycles/source/blender/editors/interface/interface_node.c
branches/cycles/source/blender/editors/interface/interface_templates.c
branches/cycles/source/blender/editors/interface/interface_widgets.c
branches/cycles/source/blender/editors/space_buttons/buttons_context.c
branches/cycles/source/blender/editors/space_buttons/buttons_intern.h
branches/cycles/source/blender/editors/space_buttons/buttons_texture.c
branches/cycles/source/blender/editors/space_node/CMakeLists.txt
branches/cycles/source/blender/editors/space_node/SConscript
branches/cycles/source/blender/editors/space_node/node_edit.c
branches/cycles/source/blender/editors/space_node/node_intern.h
branches/cycles/source/blender/editors/space_node/node_select.c
branches/cycles/source/blender/editors/space_view3d/drawmesh.c
branches/cycles/source/blender/editors/space_view3d/drawobject.c
branches/cycles/source/blender/editors/space_view3d/view3d_draw.c
branches/cycles/source/blender/gpu/GPU_extensions.h
branches/cycles/source/blender/gpu/GPU_material.h
branches/cycles/source/blender/gpu/intern/gpu_draw.c
branches/cycles/source/blender/gpu/intern/gpu_material.c
branches/cycles/source/blender/gpu/intern/gpu_shader_material.glsl
branches/cycles/source/blender/gpu/intern/gpu_shader_material.glsl.c
branches/cycles/source/blender/makesdna/DNA_node_types.h
branches/cycles/source/blender/makesdna/DNA_object_types.h
branches/cycles/source/blender/makesdna/DNA_view3d_types.h
branches/cycles/source/blender/makesrna/intern/rna_nodetree.c
branches/cycles/source/blender/makesrna/intern/rna_space.c
branches/cycles/source/blender/makesrna/intern/rna_ui_api.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_blend.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_clouds.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_distnoise.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_environment.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_image.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_magic.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_marble.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_musgrave.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_noise.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_sky.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_stucci.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_voronoi.c
branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_wood.c
branches/cycles/source/blender/nodes/intern/SHD_util.h
branches/cycles/source/gameengine/Ketsji/BL_BlenderShader.cpp
branches/cycles/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
Modified: branches/cycles/intern/cycles/blender/addon/ui.py
===================================================================
--- branches/cycles/intern/cycles/blender/addon/ui.py 2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/intern/cycles/blender/addon/ui.py 2011-06-27 17:10:50 UTC (rev 37871)
@@ -233,7 +233,7 @@
layout.label(text="No output node.")
else:
input = find_node_input(node, input_name)
- layout.template_node_view(id, ntree, node, input);
+ layout.template_node_view(ntree, node, input);
class CyclesLamp_PT_lamp(CyclesButtonsPanel, bpy.types.Panel):
bl_label = "Surface"
@@ -354,31 +354,34 @@
pin_id = space.pin_id
use_pin_id = space.use_pin_id;
user = context.texture_user
+ node = context.texture_node
if not use_pin_id or not isinstance(pin_id, bpy.types.Texture):
pin_id = None
if not pin_id:
layout.template_texture_user()
+
+ if user:
layout.separator()
- split = layout.split(percentage=0.65)
- col = split.column()
+ split = layout.split(percentage=0.65)
+ col = split.column()
- if pin_id:
- col.template_ID(space, "pin_id")
- elif user:
- col.template_ID(user, "texture", new="texture.new")
-
- if tex:
- row = split.row()
- row.prop(tex, "use_nodes", icon="NODETREE", text="")
- row.label()
+ if pin_id:
+ col.template_ID(space, "pin_id")
+ elif user:
+ col.template_ID(user, "texture", new="texture.new")
+
+ if tex:
+ row = split.row()
+ row.prop(tex, "use_nodes", icon="NODETREE", text="")
+ row.label()
- if not tex.use_nodes:
- split = layout.split(percentage=0.2)
- split.label(text="Type:")
- split.prop(tex, "type", text="")
+ if not tex.use_nodes:
+ split = layout.split(percentage=0.2)
+ split.label(text="Type:")
+ split.prop(tex, "type", text="")
class CyclesTexture_PT_nodes(CyclesButtonsPanel, bpy.types.Panel):
bl_label = "Nodes"
@@ -395,6 +398,22 @@
tex = context.texture
panel_node_draw(layout, tex, 'OUTPUT_TEXTURE', 'Color')
+class CyclesTexture_PT_node(CyclesButtonsPanel, bpy.types.Panel):
+ bl_label = "Node"
+ bl_context = "texture"
+
+ @classmethod
+ def poll(cls, context):
+ node = context.texture_node
+ return node and CyclesButtonsPanel.poll(context)
+
+ def draw(self, context):
+ layout = self.layout
+
+ node = context.texture_node
+ ntree = node.id_data
+ layout.template_node_view(ntree, node, None)
+
class CyclesTexture_PT_mapping(CyclesButtonsPanel, bpy.types.Panel):
bl_label = "Mapping"
bl_context = "texture"
@@ -402,7 +421,8 @@
@classmethod
def poll(cls, context):
tex = context.texture
- return (tex and tex.use_nodes) and CyclesButtonsPanel.poll(context)
+ node = context.texture_node
+ return (node or (tex and tex.use_nodes)) and CyclesButtonsPanel.poll(context)
def draw(self, context):
layout = self.layout
@@ -416,7 +436,8 @@
@classmethod
def poll(cls, context):
tex = context.texture
- return (tex and tex.use_nodes) and CyclesButtonsPanel.poll(context)
+ node = context.texture_node
+ return (node or (tex and tex.use_nodes)) and CyclesButtonsPanel.poll(context)
def draw(self, context):
layout = self.layout
Modified: branches/cycles/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- branches/cycles/release/scripts/startup/bl_ui/space_view3d.py 2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/release/scripts/startup/bl_ui/space_view3d.py 2011-06-27 17:10:50 UTC (rev 37871)
@@ -2127,7 +2127,6 @@
col = layout.column()
col.label(text="Shading:")
col.prop(gs, "material_mode", text="")
- col.prop(view, "show_textured_solid")
layout.separator()
Modified: branches/cycles/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/cycles/source/blender/blenkernel/BKE_DerivedMesh.h 2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/source/blender/blenkernel/BKE_DerivedMesh.h 2011-06-27 17:10:50 UTC (rev 37871)
@@ -325,6 +325,14 @@
float t),
void *userData);
+ /* Draw all faces with materials
+ * o setMaterial is called for every different material nr
+ * o setFace is called to verify if a face must be hidden
+ */
+ void (*drawMappedFacesMat)(DerivedMesh *dm,
+ void (*setMaterial)(void *userData, int, void *attribs),
+ int (*setFace)(void *userData, int index), void *userData);
+
/* Release reference to the DerivedMesh. This function decides internally
* if the DerivedMesh will be freed, or cached for later use. */
void (*release)(DerivedMesh *dm);
@@ -526,7 +534,7 @@
typedef struct DMVertexAttribs {
struct {
struct MTFace *array;
- int emOffset, glIndex;
+ int emOffset, glIndex, glTexco;
} tface[MAX_MTFACE];
struct {
@@ -541,7 +549,7 @@
struct {
float (*array)[3];
- int emOffset, glIndex;
+ int emOffset, glIndex, glTexco;
} orco;
int tottface, totmcol, tottang, totorco;
Modified: branches/cycles/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/cycles/source/blender/blenkernel/BKE_node.h 2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/source/blender/blenkernel/BKE_node.h 2011-06-27 17:10:50 UTC (rev 37871)
@@ -201,6 +201,7 @@
struct bNode *nodeGetActiveID(struct bNodeTree *ntree, short idtype);
int nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id);
void nodeClearActiveID(struct bNodeTree *ntree, short idtype);
+struct bNode *nodeGetActiveTexture(struct bNodeTree *ntree);
void NodeTagChanged(struct bNodeTree *ntree, struct bNode *node);
int NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id);
Modified: branches/cycles/source/blender/blenkernel/BKE_scene.h
===================================================================
--- branches/cycles/source/blender/blenkernel/BKE_scene.h 2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/source/blender/blenkernel/BKE_scene.h 2011-06-27 17:10:50 UTC (rev 37871)
@@ -102,6 +102,8 @@
int get_render_shadow_samples(struct RenderData *r, int samples);
float get_render_aosss_error(struct RenderData *r, float error);
+int scene_use_new_shading_system(struct Scene *scene);
+
#ifdef __cplusplus
}
#endif
Modified: branches/cycles/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/cycles/source/blender/blenkernel/intern/DerivedMesh.c 2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/source/blender/blenkernel/intern/DerivedMesh.c 2011-06-27 17:10:50 UTC (rev 37871)
@@ -1050,6 +1050,7 @@
glEnd();
}
}
+#undef PASSATTRIB
}
static void emDM_drawFacesGLSL(DerivedMesh *dm,
@@ -1058,6 +1059,140 @@
dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
}
+static void emDM_drawMappedFacesMat(DerivedMesh *dm,
+ void (*setMaterial)(void *userData, int, void *attribs),
+ int (*setFace)(void *userData, int index), void *userData)
+{
+ EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
+ EditMesh *em= emdm->em;
+ float (*vertexCos)[3]= emdm->vertexCos;
+ float (*vertexNos)[3]= emdm->vertexNos;
+ EditVert *eve;
+ EditFace *efa;
+ DMVertexAttribs attribs= {{{0}}};
+ GPUVertexAttribs gattribs;
+ int i, b, matnr, new_matnr;
+
+ matnr = -1;
+
+ /* always use smooth shading even for flat faces, else vertex colors wont interpolate */
+ glShadeModel(GL_SMOOTH);
+
+ for (i=0,eve=em->verts.first; eve; eve= eve->next)
+ eve->tmp.l = (intptr_t) i++;
+
+#define PASSATTRIB(efa, eve, vert) { \
+ if(attribs.totorco) { \
+ float *orco = attribs.orco.array[eve->tmp.l]; \
+ if(attribs.orco.glTexco) \
+ glTexCoord3fv(orco); \
+ else \
+ glVertexAttrib3fvARB(attribs.orco.glIndex, orco); \
+ } \
+ for(b = 0; b < attribs.tottface; b++) { \
+ MTFace *_tf = (MTFace*)((char*)efa->data + attribs.tface[b].emOffset); \
+ if(attribs.tface[b].glTexco) \
+ glTexCoord2fv(_tf->uv[vert]); \
+ else \
+ glVertexAttrib2fvARB(attribs.tface[b].glIndex, _tf->uv[vert]); \
+ } \
+ for(b = 0; b < attribs.totmcol; b++) { \
+ MCol *cp = (MCol*)((char*)efa->data + attribs.mcol[b].emOffset); \
+ GLubyte col[4]; \
+ col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \
+ } \
+ if(attribs.tottang) { \
+ float *tang = attribs.tang.array[i*4 + vert]; \
+ glVertexAttrib4fvARB(attribs.tang.glIndex, tang); \
+ } \
+}
+
+ for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
+ int drawSmooth= (efa->flag & ME_SMOOTH);
+
+ /* face hiding */
+ if(setFace && !setFace(userData, i))
+ continue;
+
+ /* material */
+ new_matnr = efa->mat_nr + 1;
+ if(new_matnr != matnr) {
+ setMaterial(userData, matnr = new_matnr, &gattribs);
+ DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
+ }
+
+ /* face */
+ glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
+ if (!drawSmooth) {
+ if(vertexCos) glNormal3fv(emdm->faceNos[i]);
+ else glNormal3fv(efa->n);
+
+ PASSATTRIB(efa, efa->v1, 0);
+ if(vertexCos) glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
+ else glVertex3fv(efa->v1->co);
+
+ PASSATTRIB(efa, efa->v2, 1);
+ if(vertexCos) glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
+ else glVertex3fv(efa->v2->co);
+
+ PASSATTRIB(efa, efa->v3, 2);
+ if(vertexCos) glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
+ else glVertex3fv(efa->v3->co);
+
+ if(efa->v4) {
+ PASSATTRIB(efa, efa->v4, 3);
+ if(vertexCos) glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
+ else glVertex3fv(efa->v4->co);
+ }
+ } else {
+ PASSATTRIB(efa, efa->v1, 0);
+ if(vertexCos) {
+ glNormal3fv(vertexNos[(int) efa->v1->tmp.l]);
+ glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
+ }
+ else {
+ glNormal3fv(efa->v1->no);
+ glVertex3fv(efa->v1->co);
+ }
+
+ PASSATTRIB(efa, efa->v2, 1);
+ if(vertexCos) {
+ glNormal3fv(vertexNos[(int) efa->v2->tmp.l]);
+ glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
+ }
+ else {
+ glNormal3fv(efa->v2->no);
+ glVertex3fv(efa->v2->co);
+ }
+
+ PASSATTRIB(efa, efa->v3, 2);
+ if(vertexCos) {
+ glNormal3fv(vertexNos[(int) efa->v3->tmp.l]);
+ glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
+ }
+ else {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list