00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef GLSL_HPP
00025 #define GLSL_HPP
00026
00027 #include <string>
00028 #include "GlBackend.hpp"
00029 #include "ShBackend.hpp"
00030 #include "ShProgram.hpp"
00031 #include "ShException.hpp"
00032
00033 namespace shgl {
00034
00035 class GlslCodeStrategy : public CodeStrategy {
00036 public:
00037 GlslCodeStrategy(void);
00038
00039 SH::ShBackendCodePtr generate(const std::string& target,
00040 const SH::ShProgramNodeCPtr& shader,
00041 TextureStrategy* textures);
00042 SH::ShBackendSetPtr generate_set(const SH::ShProgramSet& s);
00043 bool use_default_set() const;
00044
00045 void unbind_all();
00046 bool use_default_unbind_all() const;
00047
00048 GlslCodeStrategy* create(void);
00049 };
00050
00051 unsigned int glslTarget(const std::string& unit);
00052
00053 class GlslException : public SH::ShBackendException {
00054 public:
00055 GlslException(const std::string& message);
00056 };
00057
00058 enum GlslProgramType { SH_GLSL_FP, SH_GLSL_VP };
00059
00060 void print_infolog(GLhandleARB obj, std::ostream& out = std::cerr);
00061 void print_shader_source(GLhandleARB shader, std::ostream& out = std::cerr);
00062 std::string glsl_typename(SH::ShValueType type, int size);
00063 }
00064
00065 #endif