[Bf-blender-cvs] [5b0209f] compositor-2016: GLSL source code generation

Jeroen Bakker noreply at git.blender.org
Thu Jun 2 20:48:53 CEST 2016


Commit: 5b0209ff8d775a8ed206009f30a6403c150c0fec
Author: Jeroen Bakker
Date:   Thu Jun 2 20:48:31 2016 +0200
Branches: compositor-2016
https://developer.blender.org/rB5b0209ff8d775a8ed206009f30a6403c150c0fec

GLSL source code generation

===================================================================

M	source/blender/compositor/CMakeLists.txt
M	source/blender/compositor/device/device.cpp
M	source/blender/compositor/device/device_glsl.cpp
M	source/blender/compositor/device/device_glsl_compiler.cpp
M	source/blender/compositor/device/device_glsl_compiler.hpp
A	source/blender/compositor/kernel/kernel_fragment_header.glsl
A	source/blender/compositor/kernel/kernel_fragment_main.glsl
A	source/blender/compositor/kernel/kernel_vertex.glsl

===================================================================

diff --git a/source/blender/compositor/CMakeLists.txt b/source/blender/compositor/CMakeLists.txt
index 9a6d4da..04b8454 100644
--- a/source/blender/compositor/CMakeLists.txt
+++ b/source/blender/compositor/CMakeLists.txt
@@ -42,9 +42,12 @@ set(INC
 	../nodes/intern
 	../render/extern/include
 	../render/intern/include
+	../gpu
 	../../../extern/clew/include
 	../../../intern/guardedalloc
 	../../../intern/atomic
+	../../../intern/glew-mx
+
 )
 
 set(INC_SYS
@@ -70,10 +73,9 @@ set(SRC
 )
 
 # Kernels
-data_to_c_simple(kernel/kernel.h SRC)
-data_to_c_simple(kernel/kernel_types.h SRC)
-data_to_c_simple(kernel/kernel_functions.h SRC)
-data_to_c_simple(kernel/kernel_constants.h SRC)
+data_to_c_simple(kernel/kernel_fragment_header.glsl SRC)
+data_to_c_simple(kernel/kernel_fragment_main.glsl SRC)
+data_to_c_simple(kernel/kernel_vertex.glsl SRC)
 
 # CVM Nodes
 data_to_c_simple(kernel/cvm/cvm_node_blur.h SRC)
diff --git a/source/blender/compositor/device/device.cpp b/source/blender/compositor/device/device.cpp
index 8640049..7d2a926 100644
--- a/source/blender/compositor/device/device.cpp
+++ b/source/blender/compositor/device/device.cpp
@@ -57,15 +57,17 @@ namespace Compositor {
     }
 
     // FACTORY methods
-//#define SELECT_DEVICE_GLSL
+#define SELECT_DEVICE_GLSL
 
     Device* Device::create_device(Node* node) {
+      Device *device;
+
 #ifdef SELECT_DEVICE_GLSL
-      Device* device = new DeviceGLSL();
-#else
-      Device* device = new DeviceCPU();
+      device = new DeviceGLSL();
+      device->init(node);
+      destroy_device(device);
 #endif
-
+      device = new DeviceCPU();
       device->init(node);
       return device;
     }
diff --git a/source/blender/compositor/device/device_glsl.cpp b/source/blender/compositor/device/device_glsl.cpp
index ee52b15..1f98fc7 100644
--- a/source/blender/compositor/device/device_glsl.cpp
+++ b/source/blender/compositor/device/device_glsl.cpp
@@ -6,9 +6,16 @@ namespace Compositor {
   namespace Device {
     void DeviceGLSL::init(Compositor::Node* node) {
       set_num_workers(1);
+      std::string glsl_vertex = generate_glsl_vertex_source(node);
+      std::cout << glsl_vertex << "\n";
+      // GLuint vertex_shader = compile_vertex_shader(glsl_vertex);
 
-      std::string glsl_source = generate_glsl_source(node);
-      std::cout << glsl_source << "\n";
+      std::string glsl_fragment = generate_glsl_fragment_source(node);
+      std::cout << glsl_fragment << "\n";
+      // GLuint fragment_shader = compile_fragment_shader(glsl_fragment);
+
+      // glDeleteShader(vertex_shader);
+      // glDeleteShader(fragment_shader);
     }
 
     void DeviceGLSL::execute_task(Task* task) {
diff --git a/source/blender/compositor/device/device_glsl_compiler.cpp b/source/blender/compositor/device/device_glsl_compiler.cpp
index b49c789..469eca8 100644
--- a/source/blender/compositor/device/device_glsl_compiler.cpp
+++ b/source/blender/compositor/device/device_glsl_compiler.cpp
@@ -1,7 +1,28 @@
 #include "device_glsl_compiler.hpp"
+#include <iostream>
+
+
+extern "C" {
+  extern char datatoc_kernel_fragment_header_glsl[];
+  extern char datatoc_kernel_fragment_main_glsl[];
+  extern char datatoc_kernel_vertex_glsl[];
+}
 
 namespace Compositor {
   namespace Device {
+    void build_generic_header(std::stringstream& out, Compositor::Node* node) {
+      out << datatoc_kernel_fragment_header_glsl;
+    }
+
+    void build_headers(std::stringstream& out, Compositor::Node* node) {
+      for (std::list<NodeSocket*>::const_iterator iterator = node->inputs.begin(), end = node->inputs.end(); iterator != end; ++iterator) {
+        NodeSocket* socket = *iterator;
+        build_headers(out, socket->connected_node);
+      }
+
+      out << "function void test();\n";
+    }
+
     void build_source(std::stringstream& out, Compositor::Node* node) {
       for (std::list<NodeSocket*>::const_iterator iterator = node->inputs.begin(), end = node->inputs.end(); iterator != end; ++iterator) {
         NodeSocket* socket = *iterator;
@@ -13,12 +34,39 @@ namespace Compositor {
       out << "// END Node\n";
     }
 
-    std::string generate_glsl_source(Compositor::Node* node) {
+    void build_main(std::stringstream& out) {
+      out << datatoc_kernel_fragment_main_glsl;
+    }
+
+    std::string generate_glsl_vertex_source(Compositor::Node* node) {
+      std::stringstream source;
+      source << datatoc_kernel_vertex_glsl;
+      return source.str();
+    }
+
+    std::string generate_glsl_fragment_source(Compositor::Node* node) {
       std::stringstream source;
+      build_generic_header(source, node);
       source << "// START GLSL Compositor source\n";
-      build_source(source, node);
+      // build_headers(source, node);
+      // build_source(source, node);
+      build_main(source);
       source << "// END GLSL Compositor source\n";
       return source.str();
     }
+
+    GLuint compile_vertex_shader(std::string vertex_source) {
+      // std::cout << "version" << glGetString(GL_VERSION) << "\n";
+      return 0;
+      // GLuint shader = glCreateShader(GL_VERTEX_SHADER);
+      // return shader;
+    }
+
+    GLuint compile_fragment_shader(std::string vertex_source) {
+      // std::cout << "version" << glGetString(GL_VERSION) << "\n";
+      return 0;
+      // GLuint shader = glCreateShader(GL_FRAGMENT_SHADER);
+      // return shader;
+    }
   }
 }
diff --git a/source/blender/compositor/device/device_glsl_compiler.hpp b/source/blender/compositor/device/device_glsl_compiler.hpp
index e69daf9..d72fc21 100644
--- a/source/blender/compositor/device/device_glsl_compiler.hpp
+++ b/source/blender/compositor/device/device_glsl_compiler.hpp
@@ -1,12 +1,17 @@
 #ifndef CMP_DEVICE_DEVICE_GLSL_COMPILER_HPP
 #define CMP_DEVICE_DEVICE_GLSL_COMPILER_HPP
 
+#include "GPU_glew.h"
 #include "cmp_node.hpp"
 #include <sstream>
 
 namespace Compositor {
   namespace Device {
-    std::string generate_glsl_source(Compositor::Node* node);
+    std::string generate_glsl_vertex_source(Compositor::Node* node);
+    std::string generate_glsl_fragment_source(Compositor::Node* node);
+
+    GLuint compile_vertex_shader(std::string vertex_source);
+    GLuint compile_fragment_shader(std::string vertex_source);
   }
 }
 #endif
diff --git a/source/blender/compositor/kernel/kernel_fragment_header.glsl b/source/blender/compositor/kernel/kernel_fragment_header.glsl
new file mode 100644
index 0000000..d395d27
--- /dev/null
+++ b/source/blender/compositor/kernel/kernel_fragment_header.glsl
@@ -0,0 +1,3 @@
+#version 330
+
+out vec4 fragColor;
diff --git a/source/blender/compositor/kernel/kernel_fragment_main.glsl b/source/blender/compositor/kernel/kernel_fragment_main.glsl
new file mode 100644
index 0000000..7a366be
--- /dev/null
+++ b/source/blender/compositor/kernel/kernel_fragment_main.glsl
@@ -0,0 +1,3 @@
+void main () {
+  fragColor = vec4(1.0, 1.0, 0.0, 1.0);
+}
diff --git a/source/blender/compositor/kernel/kernel_vertex.glsl b/source/blender/compositor/kernel/kernel_vertex.glsl
new file mode 100644
index 0000000..722e9e3
--- /dev/null
+++ b/source/blender/compositor/kernel/kernel_vertex.glsl
@@ -0,0 +1,6 @@
+#version 330
+layout(location = 0)in vec4 vert;
+
+void main() {
+  gl_Position = vert;
+}




More information about the Bf-blender-cvs mailing list