include/rays/shader.h in rays-0.1.28 vs include/rays/shader.h in rays-0.1.29

- old
+ new

@@ -2,31 +2,40 @@ #pragma once #ifndef __RAYS_SHADER_H__ #define __RAYS_SHADER_H__ +#include <vector> #include <xot/pimpl.h> #include <rays/defs.h> #include <rays/coord.h> namespace Rays { class Image; + class ShaderEnv; class Shader { typedef Shader This; public: - Shader (const char* source = NULL); + Shader ( + const char* fragment_shader_source = NULL, + const char* vertex_shader_source = NULL); + Shader ( + const char* fragment_shader_source, + const char* vertex_shader_source, + ShaderEnv env); + ~Shader (); void set_uniform (const char* name, int arg1); void set_uniform (const char* name, int arg1, int arg2); @@ -53,10 +62,14 @@ void set_uniform (const char* name, const Coord4& vec4); void set_uniform (const char* name, const Image& texture); + const char* vertex_shader_source () const; + + const char* fragment_shader_source () const; + operator bool () const; bool operator ! () const; friend bool operator == (const This& lhs, const This& rhs); @@ -66,9 +79,43 @@ struct Data; Xot::PSharedImpl<Data> self; };// Shader + + + class ShaderEnv + { + + public: + + typedef std::vector<String> NameList; + + enum Flags + { + IGNORE_NO_UNIFORM_LOCATION_ERROR = 0x1 << 0, + }; + + ShaderEnv ( + const NameList& attribute_position_names = {}, + const NameList& attribute_texcoord_names = {}, + const NameList& attribute_color_names = {}, + const char* varying_position_name = NULL, + const char* varying_texcoord_name = NULL, + const char* varying_color_name = NULL, + const NameList& uniform_position_matrix_names = {}, + const NameList& uniform_texcoord_matrix_names = {}, + const NameList& uniform_texcoord_min_names = {}, + const NameList& uniform_texcoord_max_names = {}, + const NameList& uniform_texcoord_offset_names = {}, + const NameList& uniform_texture_names = {}, + uint flags = 0); + + struct Data; + + Xot::PSharedImpl<Data> self; + + };// ShaderEnv }// Rays