Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/eevee_next/eevee_shader.hh')
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_shader.hh70
1 files changed, 70 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee_next/eevee_shader.hh b/source/blender/draw/engines/eevee_next/eevee_shader.hh
new file mode 100644
index 00000000000..ba7c97b3b6a
--- /dev/null
+++ b/source/blender/draw/engines/eevee_next/eevee_shader.hh
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright 2021 Blender Foundation.
+ */
+
+/** \file
+ * \ingroup eevee
+ *
+ * Shader module that manage shader libraries, deferred compilation,
+ * and static shader usage.
+ */
+
+#pragma once
+
+#include <array>
+#include <string>
+
+#include "BLI_string_ref.hh"
+#include "DRW_render.h"
+#include "GPU_material.h"
+#include "GPU_shader.h"
+
+#include "eevee_material.hh"
+#include "eevee_sync.hh"
+
+namespace blender::eevee {
+
+/* Keep alphabetical order and clean prefix. */
+enum eShaderType {
+ MAX_SHADER_TYPE = 0,
+};
+
+/**
+ * Shader module. shared between instances.
+ */
+class ShaderModule {
+ private:
+ std::array<GPUShader *, MAX_SHADER_TYPE> shaders_;
+
+ /** Shared shader module accross all engine instances. */
+ static ShaderModule *g_shader_module;
+
+ public:
+ ShaderModule();
+ ~ShaderModule();
+
+ GPUShader *static_shader_get(eShaderType shader_type);
+ GPUMaterial *material_shader_get(::Material *blender_mat,
+ struct bNodeTree *nodetree,
+ eMaterialPipeline pipeline_type,
+ eMaterialGeometry geometry_type,
+ bool deferred_compilation);
+ GPUMaterial *world_shader_get(::World *blender_world, struct bNodeTree *nodetree);
+ GPUMaterial *material_shader_get(const char *name,
+ ListBase &materials,
+ struct bNodeTree *nodetree,
+ eMaterialPipeline pipeline_type,
+ eMaterialGeometry geometry_type,
+ bool is_lookdev);
+
+ void material_create_info_ammend(GPUMaterial *mat, GPUCodegenOutput *codegen);
+
+ /** Only to be used by Instance constructor. */
+ static ShaderModule *module_get();
+ static void module_free();
+
+ private:
+ const char *static_shader_create_info_name_get(eShaderType shader_type);
+};
+
+} // namespace blender::eevee