00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027 #include "GlBackend.hpp"
00028 #include "Arb.hpp"
00029 #include "ArbCode.hpp"
00030
00031 namespace shgl {
00032
00033 using namespace SH;
00034
00035 ArbCodeStrategy::ArbCodeStrategy(void)
00036 {
00037 }
00038
00039 ArbCodeStrategy* ArbCodeStrategy::create(void)
00040 {
00041 return new ArbCodeStrategy;
00042 }
00043
00044 ShBackendCodePtr ArbCodeStrategy::generate(const std::string& target,
00045 const ShProgramNodeCPtr& shader,
00046 TextureStrategy* texture)
00047 {
00048 std::string::size_type loc = target.rfind(':');
00049 std::string unit = (loc == std::string::npos ? target : target.substr(loc + 1));
00050 ArbCodePtr code = new ArbCode(shader, unit, texture);
00051 code->generate();
00052 return code;
00053 }
00054
00055 unsigned int arbTarget(const std::string& unit)
00056 {
00057 if (unit == "vertex") return GL_VERTEX_PROGRAM_ARB;
00058 if (unit == "fragment") return GL_FRAGMENT_PROGRAM_ARB;
00059 return 0;
00060 }
00061
00062 ArbException::ArbException(const std::string& message)
00063 : ShBackendException(std::string("ARB error: ") + message)
00064 {
00065 }
00066
00067 }
00068