From 9121faed0cf54a08882acf41120cf28fc3a32998 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 27 Mar 2019 22:27:57 +0000 Subject: asy 2.48 sources git-svn-id: svn://tug.org/texlive/trunk@50622 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/utils/asymptote/shaders.cc | 82 +++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 Build/source/utils/asymptote/shaders.cc (limited to 'Build/source/utils/asymptote/shaders.cc') diff --git a/Build/source/utils/asymptote/shaders.cc b/Build/source/utils/asymptote/shaders.cc new file mode 100644 index 00000000000..5d7ea6ad6fb --- /dev/null +++ b/Build/source/utils/asymptote/shaders.cc @@ -0,0 +1,82 @@ +// shader handling +// Author: Supakorn "Jamie" Rassameemasmuang + +#include +#include +#include +#include +#include + +#include + +#include "common.h" +#ifdef HAVE_GL + +#include "shaders.h" + +GLuint createShaders(GLchar const* src, int shaderType) +{ + GLuint shader = glCreateShader(shaderType); + glShaderSource(shader, 1, &src, nullptr); + glCompileShader(shader); + + GLint status; + glGetShaderiv(shader, GL_COMPILE_STATUS, &status); + + if (status != GL_TRUE) + { + GLint length; + + glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length); + + std::vector msg(length); + + glGetShaderInfoLog(shader, length, &length, msg.data()); + + for(GLchar const& cha : msg) + { + std::cerr << cha; + } + + std::cerr << std::endl << "GL Compile error" << std::endl; + std::cerr << src << std::endl; + throw 1; + } + return shader; +} + +GLuint createShaderFile(std::string file, int shaderType, size_t Nlights, + size_t Nmaterials, + std::unordered_set compilerFlags) +{ + std::ifstream shaderFile; + shaderFile.open(file); + std::stringstream shaderSrc; + + shaderSrc << "#version 130" << "\r\n"; + shaderSrc << "#extension GL_ARB_uniform_buffer_object : enable" + << "\r\n"; + shaderSrc << "#extension GL_ARB_shading_language_packing : enable" + << "\r\n"; + + for(std::string const& flag : compilerFlags) + { + shaderSrc << "#define " << flag << "\r\n"; + } + + shaderSrc << "const int Nlights=" << Nlights << ";\r\n"; + shaderSrc << "const int Nmaterials=" << Nmaterials << ";\r\n"; + + if (shaderFile) + { + shaderSrc << shaderFile.rdbuf(); + shaderFile.close(); + } + else + { + throw 1; + } + + return createShaders(shaderSrc.str().data(), shaderType); +} +#endif -- cgit v1.2.3