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:
authorClément Foucault <foucault.clem@gmail.com>2020-08-14 16:20:35 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-08-18 22:30:09 +0300
commit216d78687d2b9468b05fb598d1cef0b8424a40d2 (patch)
treeb6d53ddf17e27c2cc0805c46fe76764004109f81 /source/blender/gpu/opengl/gl_shader.hh
parentdf28d2c27e2bef54e5b4fc33d663125ac5ec83f7 (diff)
GPUShader: GL backend isolation
Diffstat (limited to 'source/blender/gpu/opengl/gl_shader.hh')
-rw-r--r--source/blender/gpu/opengl/gl_shader.hh79
1 files changed, 79 insertions, 0 deletions
diff --git a/source/blender/gpu/opengl/gl_shader.hh b/source/blender/gpu/opengl/gl_shader.hh
new file mode 100644
index 00000000000..3bdc9aa80d5
--- /dev/null
+++ b/source/blender/gpu/opengl/gl_shader.hh
@@ -0,0 +1,79 @@
+/*
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2020 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup gpu
+ *
+ * GPUDrawList is an API to do lots of similar draw-calls very fast using
+ * multi-draw-indirect. There is a fallback if the feature is not supported.
+ */
+
+#pragma once
+
+#include "MEM_guardedalloc.h"
+
+#include "glew-mx.h"
+
+#include "gpu_shader_private.hh"
+
+namespace blender {
+namespace gpu {
+
+class GLShader : public Shader {
+ private:
+ /** Handle for full program (links shader stages below). */
+ GLuint shader_program_ = 0;
+
+ GLuint vert_shader_ = 0;
+ GLuint geom_shader_ = 0;
+ GLuint frag_shader_ = 0;
+
+ eGPUShaderTFBType transform_feedback_type_ = GPU_SHADER_TFB_NONE;
+
+ public:
+ GLShader(const char *name);
+ ~GLShader();
+
+ /* Return true on success. */
+ void vertex_shader_from_glsl(MutableSpan<const char *> sources) override;
+ void geometry_shader_from_glsl(MutableSpan<const char *> sources) override;
+ void fragment_shader_from_glsl(MutableSpan<const char *> sources) override;
+ bool finalize(void) override;
+
+ void transform_feedback_names_set(Span<const char *> name_list,
+ const eGPUShaderTFBType geom_type);
+ bool transform_feedback_enable(GPUVertBuf *buf) override;
+ void transform_feedback_disable(void) override;
+
+ void bind(void) override;
+ void unbind(void) override;
+
+ void uniform_float(int location, int comp_len, int array_size, const float *data) override;
+ void uniform_int(int location, int comp_len, int array_size, const int *data) override;
+
+ private:
+ char *glsl_patch_get(void);
+
+ GLuint create_shader_stage(GLenum gl_stage, MutableSpan<const char *> sources);
+
+ MEM_CXX_CLASS_ALLOC_FUNCS("GLShader");
+};
+
+} // namespace gpu
+} // namespace blender