[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