[Bf-blender-cvs] [d16bfecde1] clay-engine: Removing Bases from clay.c and other fixes
Dalai Felinto
noreply at git.blender.org
Mon Jan 9 17:52:12 CET 2017
Commit: d16bfecde11ff76592b42f7c542627e7caceeadb
Author: Dalai Felinto
Date: Mon Jan 9 17:52:06 2017 +0100
Branches: clay-engine
https://developer.blender.org/rBd16bfecde11ff76592b42f7c542627e7caceeadb
Removing Bases from clay.c and other fixes
Listbase was used wrongly in draw_manager, using LinkData elements now
===================================================================
M source/blender/draw/engines/clay/clay.c
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
M source/blender/editors/space_view3d/drawobject.c
M source/blender/editors/space_view3d/view3d_intern.h
===================================================================
diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index 6203f56fb7..f37858c9e5 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -243,6 +243,7 @@ static void clay_init_view(CLAY_FramebufferList *buffers, CLAY_TextureList *text
static void clay_populate_passes(CLAY_PassList *passes, const struct bContext *C)
{
Scene *scene = CTX_data_scene(C);
+ SceneLayer *sl = CTX_data_scene_layer(C);
Scene *sce_iter;
Base *base;
struct DRWBatch *matcapbatch, *depthbatch;
@@ -280,15 +281,23 @@ static void clay_populate_passes(CLAY_PassList *passes, const struct bContext *C
pop_clay = true;
}
- for (SETLOOPER(scene, sce_iter, base)) {
+ Object *ob;
+ FOREACH_OBJECT(sl, ob)
+ {
/* Create hash table of batch based on material id*/
/* Add everything for now */
- if (pop_clay) DRW_batch_add_surface(matcapbatch, base);
- if (pop_depth) DRW_batch_add_surface(depthbatch, base);
+ if (pop_clay) {
+ DRW_batch_add_surface(matcapbatch, ob);
+ }
+
+ if (pop_depth) {
+ DRW_batch_add_surface(depthbatch, ob);
+ }
/* Free hash table */
}
+ FOREACH_OBJECT_END
}
static void clay_ssao_setup(void)
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 52bc5bc4ed..6ae7d96223 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -29,6 +29,7 @@
#define __DRW_RENDER_H__
#include "BKE_context.h"
+#include "BKE_layer.h"
#include "BKE_scene.h"
#include "BLI_listbase.h"
@@ -38,6 +39,7 @@
#include "BLT_translation.h"
+#include "DNA_object_types.h"
#include "DNA_material_types.h"
#include "DNA_scene_types.h"
@@ -48,6 +50,7 @@
struct GPUFrameBuffer;
struct GPUShader;
struct GPUTexture;
+struct Object;
typedef struct DRWUniform DRWUniform;
typedef struct DRWInterface DRWInterface;
@@ -97,7 +100,8 @@ void DRW_shader_free(struct GPUShader *shader);
/* Batches */
DRWBatch *DRW_batch_create(struct GPUShader *shader, DRWPass *pass);
-void DRW_batch_add_surface(DRWBatch *batch, Base *base);
+void DRW_batch_free(struct DRWBatch *batch);
+void DRW_batch_add_surface(DRWBatch *batch, struct Object *ob);
void DRW_batch_uniform_texture(DRWBatch *batch, const char *name, const struct GPUTexture *tex, int loc);
void DRW_batch_uniform_buffer(DRWBatch *batch, const char *name, const int value, int loc);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index ee4e97bf57..b2226d559e 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -100,9 +100,9 @@ struct DRWPass {
struct DRWBatch {
struct DRWBatch *next, *prev;
- struct GPUShader *shader; // Shader to bind
- struct DRWInterface *interface; // Uniforms values
- ListBase objects; // List with all objects and transform
+ struct GPUShader *shader; /* Shader to bind */
+ struct DRWInterface *interface; /* Uniforms values */
+ ListBase objects; /* (Object *) LinkData->data - List with all objects and transform */
};
/* Render State */
@@ -251,10 +251,21 @@ DRWBatch *DRW_batch_create(struct GPUShader *shader, DRWPass *pass)
return batch;
}
+void DRW_batch_free(struct DRWBatch *batch)
+{
+ for (LinkData *link = batch->objects.first; link; link = link->next) {
+ MEM_freeN(link->data);
+ }
+ BLI_freelistN(&batch->objects);
+
+ BLI_freelistN(&batch->interface->uniforms);
+ MEM_freeN(batch->interface);
+}
+
/* Later use VBO */
-void DRW_batch_add_surface(DRWBatch *batch, Base *base)
+void DRW_batch_add_surface(DRWBatch *batch, Object *ob)
{
- BLI_addtail(&batch->objects, base);
+ BLI_addtail(&batch->objects, BLI_genericNodeN(ob));
}
void DRW_batch_uniform_texture(DRWBatch *batch, const char *name, const GPUTexture *tex, int loc)
@@ -326,8 +337,7 @@ DRWPass *DRW_pass_create(const char *name, DRWState state)
void DRW_pass_free(DRWPass *pass)
{
for (DRWBatch *batch = pass->batches.first; batch; batch = batch->next) {
- BLI_freelistN(&batch->interface->uniforms);
- MEM_freeN(batch->interface);
+ DRW_batch_free(batch);
}
BLI_freelistN(&pass->batches);
MEM_freeN(pass);
@@ -443,23 +453,25 @@ static void draw_batch(DRWBatch *batch, const bool fullscreen)
else {
RegionView3D *rv3d = CTX_wm_region_view3d(DST.context);
- for (Base *base = batch->objects.first; base; base = base->next) {
+ for (LinkData *link = batch->objects.first; link; link = link->next) {
+ Object *ob = link->data;
+
/* Should be really simple */
/* step 1 : bind object dependent matrices */
if (interface->modelviewprojection != -1) {
float mvp[4][4];
- mul_m4_m4m4(mvp, rv3d->persmat, base->object->obmat);
+ mul_m4_m4m4(mvp, rv3d->persmat, ob->obmat);
GPU_shader_uniform_vector(batch->shader, interface->modelviewprojection, 16, 1, (float *)mvp);
}
if (interface->modelview != -1) {
float mv[4][4];
- mul_m4_m4m4(mv, rv3d->viewmat, base->object->obmat);
+ mul_m4_m4m4(mv, rv3d->viewmat, ob->obmat);
GPU_shader_uniform_vector(batch->shader, interface->modelview, 16, 1, (float *)mv);
}
if (interface->normal != -1) {
float mv[4][4];
float n[3][3];
- mul_m4_m4m4(mv, rv3d->viewmat, base->object->obmat);
+ mul_m4_m4m4(mv, rv3d->viewmat, ob->obmat);
copy_m3_m4(n, mv);
invert_m3(n);
transpose_m3(n);
@@ -467,7 +479,8 @@ static void draw_batch(DRWBatch *batch, const bool fullscreen)
}
/* step 2 : bind vertex array & draw */
- draw_mesh(base, DST.context, GPU_shader_get_program(batch->shader));
+ /* we won't use any function that doesn't comply to the new API, this is a short-lived exception TODO */
+ draw_mesh(ob, DST.context, GPU_shader_get_program(batch->shader));
}
}
}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 64276136f1..ecb3914ed1 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -4372,16 +4372,13 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
}
/* Clement : temp solution to draw something simply */
-void draw_mesh(Base *base, const struct bContext *C, unsigned int program)
+void draw_mesh(Object *ob, const struct bContext *C, unsigned int program)
{
- Object *ob = base->object;
- RegionView3D *rv3d = CTX_wm_region_view3d(C);
Scene *scene = CTX_data_scene(C);
- View3D *v3d = CTX_wm_view3d(C);
if (ob->type == OB_MESH) {
Mesh *me = ob->data;
- DerivedMesh *dm = NULL, *edm = NULL;
+ DerivedMesh *dm = NULL;
if (ob->mode & OB_MODE_EDIT) {
dm = editbmesh_get_derived_base(ob, me->edit_btmesh, CD_MASK_BAREMESH);
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 70d8bd97fa..6b1ee8a360 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -142,7 +142,7 @@ void draw_motion_paths_cleanup(View3D *v3d);
/* drawobject.c */
-void draw_mesh(Base *base, const struct bContext *C, unsigned int program);
+void draw_mesh(struct Object *ob, const struct bContext *C, unsigned int program);
void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, const short dflag);
void draw_mesh_object_outline(View3D *v3d, Object *ob, struct DerivedMesh *dm);
More information about the Bf-blender-cvs
mailing list