OSDN Git Service

directx/dx10/shader.hpp: pass, technique Add. effect::get_technique() Add.
[roast/roast_ex_windows.git] / roast_ex / include / roast / graphics / directx / dx10 / shader.hpp
index c86f5de..81322b1 100644 (file)
@@ -24,7 +24,9 @@ namespace roast
                                        {
                                                exception_codes__head = exception_code_root::shader,
 
-                                               buffer__CreateBuffer_Failed
+                                               buffer__CreateBuffer_Failed,
+                                               get_pass_Failed,
+                                               get_technique_Failed
                                        };
                                protected:
                                        device& m_dev;
@@ -67,12 +69,35 @@ namespace roast
 
                                class pass
                                {
+                               protected:
+                                       d3dpass* m_if;
+                               public:
+                                       pass(d3dpass* pass_in) : m_if(pass_in){}
                                };
 
                                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
                                class technique
                                {
+                               public:
+                                       enum exception_codes
+                                       {
+                                               exception_codes__head = exception_code_root::technique,
+                                               get_pass_Failed
+                                       };
+                               protected:
+                                       d3dtechnique* m_if;
+                               public:
+                                       technique(d3dtechnique* tech) : m_if(tech){}
+                                       /////
+                                       pass get_pass(const char* name){
+                                               d3dpass* ps = m_if->GetPassByName(name);
+                                               if ( ps == NULL ){
+                                                       throw exception(get_pass_Failed,
+                                                               ::std::string("GetPassByName() unknown pass ")+name);
+                                               }
+                                               return pass(ps);
+                                       }
                                };
 
                                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -84,7 +109,8 @@ namespace roast
                                        {
                                                exception_codes__head = exception_code_root::effect,
 
-                                               effect_D3DX10CreateEffectFromFile_Failed
+                                               effect_D3DX10CreateEffectFromFile_Failed,
+                                               get_technique_Failed
                                        };
 
                                        /// Constructor Param //////////////////////////////////////
@@ -217,7 +243,15 @@ namespace roast
 
                                        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-
+                                       technique get_technique(const char* name)
+                                       {
+                                               d3dtechnique* d3dtech = m_if->GetTechniqueByName(name);
+                                               if ( d3dtech == NULL ){
+                                                       throw exception(get_technique_Failed,
+                                                               ::std::string("GetTechniqueByName() unknown technique ")+name);
+                                               }
+                                               return technique(d3dtech);
+                                       }
                                };
                                
                                ///////////////////////////////////////////////////////////////////////////