[Bf-blender-cvs] [b7355425cd] blender2.8: Eevee: Initial commit
Clément Foucault
noreply at git.blender.org
Sat Mar 18 02:07:40 CET 2017
Commit: b7355425cdff8f3f23e386f2817d5702b46f7bd6
Author: Clément Foucault
Date: Fri Mar 17 00:00:46 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBb7355425cdff8f3f23e386f2817d5702b46f7bd6
Eevee: Initial commit
Basic support for lamps. Only diffuse.
===================================================================
M release/scripts/startup/bl_ui/properties_data_lamp.py
M source/blender/draw/CMakeLists.txt
A source/blender/draw/engines/eevee/eevee.c
A source/blender/draw/engines/eevee/eevee.h
A source/blender/draw/engines/eevee/eevee_lights.c
A source/blender/draw/engines/eevee/eevee_private.h
A source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
A source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
A source/blender/draw/engines/eevee/shaders/tonemap_frag.glsl
M source/blender/draw/intern/draw_manager.c
M source/blender/gpu/GPU_viewport.h
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_data_lamp.py b/release/scripts/startup/bl_ui/properties_data_lamp.py
index 5af7dda857..afc8a47419 100644
--- a/release/scripts/startup/bl_ui/properties_data_lamp.py
+++ b/release/scripts/startup/bl_ui/properties_data_lamp.py
@@ -26,7 +26,7 @@ class LAMP_MT_sunsky_presets(Menu):
bl_label = "Sun & Sky Presets"
preset_subdir = "sunsky"
preset_operator = "script.execute_preset"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
draw = Menu.draw_preset
@@ -44,7 +44,7 @@ class DataButtonsPanel:
class DATA_PT_context_lamp(DataButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -68,7 +68,7 @@ class DATA_PT_context_lamp(DataButtonsPanel, Panel):
class DATA_PT_preview(DataButtonsPanel, Panel):
bl_label = "Preview"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
self.layout.template_preview(context.lamp)
@@ -76,7 +76,7 @@ class DATA_PT_preview(DataButtonsPanel, Panel):
class DATA_PT_lamp(DataButtonsPanel, Panel):
bl_label = "Lamp"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -312,7 +312,7 @@ class DATA_PT_shadow(DataButtonsPanel, Panel):
class DATA_PT_area(DataButtonsPanel, Panel):
bl_label = "Area Shape"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -338,7 +338,7 @@ class DATA_PT_area(DataButtonsPanel, Panel):
class DATA_PT_spot(DataButtonsPanel, Panel):
bl_label = "Spot Shape"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -374,7 +374,7 @@ class DATA_PT_spot(DataButtonsPanel, Panel):
class DATA_PT_falloff_curve(DataButtonsPanel, Panel):
bl_label = "Falloff Curve"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -390,7 +390,7 @@ class DATA_PT_falloff_curve(DataButtonsPanel, Panel):
class DATA_PT_custom_props_lamp(DataButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.Lamp
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index b1027a351b..d9048bae8f 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -27,6 +27,7 @@ set(INC
.
intern
engines/clay
+ engines/eevee
modes
../blenkernel
@@ -56,7 +57,15 @@ set(SRC
intern/draw_cache.c
intern/draw_view.c
intern/draw_armature.c
+
engines/clay/clay.c
+ engines/clay/clay.h
+
+ engines/eevee/eevee.c
+ engines/eevee/eevee_lights.c
+ engines/eevee/eevee.h
+ engines/eevee/eevee_private.h
+
modes/object_mode.c
modes/edit_armature_mode.c
modes/edit_curve_mode.c
@@ -76,7 +85,6 @@ set(SRC
intern/draw_common.h
intern/draw_cache.h
intern/draw_view.h
- engines/clay/clay.h
modes/draw_mode_engines.h
./DRW_engine.h
@@ -91,6 +99,10 @@ data_to_c_simple(engines/clay/shaders/clay_vert.glsl SRC)
data_to_c_simple(engines/clay/shaders/ssao_alchemy.glsl SRC)
data_to_c_simple(engines/clay/shaders/ssao_groundtruth.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lit_surface_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lit_surface_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/tonemap_frag.glsl SRC)
+
data_to_c_simple(modes/shaders/edit_overlay_frag.glsl SRC)
data_to_c_simple(modes/shaders/edit_overlay_vert.glsl SRC)
data_to_c_simple(modes/shaders/edit_overlay_geom_tri.glsl SRC)
diff --git a/source/blender/draw/engines/eevee/eevee.c b/source/blender/draw/engines/eevee/eevee.c
new file mode 100644
index 0000000000..b4b461f583
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee.c
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee.c
+ * \ingroup DNA
+ */
+
+#include "DRW_render.h"
+
+#include "eevee.h"
+#include "eevee_private.h"
+
+#define EEVEE_ENGINE "BLENDER_EEVEE"
+
+/* *********** STATIC *********** */
+static struct {
+ struct GPUShader *default_lit;
+ struct GPUShader *tonemap;
+} e_data = {NULL}; /* Engine data */
+
+static struct {
+ DRWShadingGroup *default_lit_grp;
+ EEVEE_Data *vedata;
+} g_data = {NULL}; /* Transient data */
+
+extern char datatoc_lit_surface_frag_glsl[];
+extern char datatoc_lit_surface_vert_glsl[];
+extern char datatoc_tonemap_frag_glsl[];
+
+/* *********** FUNCTIONS *********** */
+
+static void EEVEE_engine_init(void)
+{
+ g_data.vedata = DRW_viewport_engine_data_get(EEVEE_ENGINE);
+ EEVEE_TextureList *txl = g_data.vedata->txl;
+ EEVEE_FramebufferList *fbl = g_data.vedata->fbl;
+ EEVEE_StorageList *stl = g_data.vedata->stl;
+
+ DRWFboTexture tex = {&txl->color, DRW_BUF_RGBA_32};
+
+ float *viewport_size = DRW_viewport_size_get();
+ DRW_framebuffer_init(&fbl->main,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex, 1);
+
+ if (!e_data.default_lit) {
+ e_data.default_lit = DRW_shader_create(datatoc_lit_surface_vert_glsl, NULL, datatoc_lit_surface_frag_glsl, "#define MAX_LIGHT 128\n");
+ }
+
+ if (!e_data.tonemap) {
+ e_data.tonemap = DRW_shader_create_fullscreen(datatoc_tonemap_frag_glsl, NULL);
+ }
+ UNUSED_VARS(stl);
+
+ if (stl->lights_info == NULL)
+ EEVEE_lights_init(stl);
+
+ // EEVEE_lights_update(stl);
+}
+
+static void EEVEE_cache_init(void)
+{
+ g_data.vedata = DRW_viewport_engine_data_get(EEVEE_ENGINE);
+ EEVEE_PassList *psl = g_data.vedata->psl;
+ EEVEE_TextureList *txl = g_data.vedata->txl;
+ EEVEE_StorageList *stl = g_data.vedata->stl;
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+ psl->pass = DRW_pass_create("Default Light Pass", state);
+
+ g_data.default_lit_grp = DRW_shgroup_create(e_data.default_lit, psl->pass);
+ DRW_shgroup_uniform_block(g_data.default_lit_grp, "light_block", stl->lights_ubo, 0);
+ DRW_shgroup_uniform_int(g_data.default_lit_grp, "light_count", &stl->lights_info->light_count, 1);
+ }
+
+ {
+ /* Final pass : Map HDR color to LDR color.
+ * Write result to the default color buffer */
+ psl->tonemap = DRW_pass_create("Tone Mapping", DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.tonemap, psl->tonemap);
+ DRW_shgroup_uniform_buffer(grp, "hdrColorBuf", &txl->color, 0);
+
+ struct Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRW_shgroup_call_add(grp, geom, NULL);
+ }
+
+ EEVEE_lights_cache_init(stl);
+}
+
+static void EEVEE_cache_populate(Object *ob)
+{
+ EEVEE_StorageList *stl = g_data.vedata->stl;
+
+ if (ob->type == OB_MESH) {
+ struct Batch *geom = DRW_cache_surface_get(ob);
+
+ DRW_shgroup_call_add(g_data.default_lit_grp, geom, ob->obmat);
+ }
+ else if (ob->type == OB_LAMP) {
+ EEVEE_lights_cache_add(stl, ob);
+ }
+}
+
+static void EEVEE_cache_finish(void)
+{
+ EEVEE_StorageList *stl = g_data.vedata->stl;
+
+ EEVEE_lights_cache_finish(stl);
+}
+
+static void EEVEE_draw_scene(void)
+{
+ EEVEE_Data *ved = DRW_viewport_engine_data_get(EEVEE_ENGINE);
+ EEVEE_PassList *psl = ved->psl;
+ EEVEE_FramebufferList *fbl = ved->fbl;
+
+ /* Default framebuffer and texture */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ /* Attach depth to the hdr buffer and bind it */
+ DRW_framebuffer_texture_detach(dtxl->depth);
+ DRW_framebuffer_texture_attach(fbl->main, dtxl->depth, 0);
+ DRW_framebuffer_bind(fbl->main);
+
+ /* Clear Depth */
+ /* TODO do background */
+ float clearcol[4] = {0.0f, 0.0f, 0.0f, 1.0f};
+ DRW_framebuffer_clear(true, true, clearcol, 1.0f);
+
+ DRW_draw_pass(psl->pass);
+
+ /* Restore default framebuffer */
+ DRW_framebuffer_texture_detach(dtxl->depth);
+ DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0);
+ DRW_framebuffer_bind(dfbl->default_fb);
+
+ DRW_draw_pass(psl->tonemap);
+}
+
+static void EEVEE_engine_free(void)
+{
+ if (e_data.default_lit)
+ DRW_shader_free(e_data.default_lit);
+ if (e_data.tonemap)
+ DRW_shader_free(e_data.tonemap);
+}
+
+static void EEVEE_collection_settings_create(RenderEngine *UNUSED(engine), CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "high_quality_sphere_lamps", false);
+}
+
+DrawEngineType draw_engine_eevee_type = {
+ NU
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list