Explorar el Código

Preliminary HLSL support.

aignacio_sf hace 20 años
padre
commit
6a43f6757d
Se han modificado 2 ficheros con 830 adiciones y 49 borrados
  1. 791 48
      panda/src/dxgsg9/dxShaderContext9.cxx
  2. 39 1
      panda/src/dxgsg9/dxShaderContext9.h

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 791 - 48
panda/src/dxgsg9/dxShaderContext9.cxx


+ 39 - 1
panda/src/dxgsg9/dxShaderContext9.h

@@ -39,6 +39,29 @@
 class VertexElementArray;
 class VertexElementArray;
 class CLP(GraphicsStateGuardian);
 class CLP(GraphicsStateGuardian);
 
 
+typedef struct
+{
+  int vertex_shader;
+  int total_constant_descriptions;
+  D3DXCONSTANT_DESC *constant_description_array;
+}
+DX_PARAMETER;
+
+typedef struct
+{
+  int state;
+  union
+  {
+    DIRECT_3D_VERTEX_SHADER direct_3d_vertex_shader;
+    DIRECT_3D_PIXEL_SHADER direct_3d_pixel_shader;
+  };
+  LPD3DXCONSTANTTABLE constant_table;
+  D3DXCONSTANTTABLE_DESC constant_table_description;
+
+  int total_semantics;
+  D3DXSEMANTIC *semantic_array;
+}
+DIRECT_3D_SHADER;
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //       Class : DXShaderContext9
 //       Class : DXShaderContext9
@@ -70,6 +93,7 @@ public:
   string _name;
   string _name;
 
 
   bool _state;
   bool _state;
+  bool _cg_shader;
 
 
 private:
 private:
 
 
@@ -101,10 +125,12 @@ private:
   struct ShaderAutoBind {
   struct ShaderAutoBind {
     CGparameter parameter;
     CGparameter parameter;
     int value;
     int value;
+    DX_PARAMETER *dx_parameter;
   };
   };
   struct ShaderArgBind {
   struct ShaderArgBind {
     CGparameter parameter;
     CGparameter parameter;
     PT(InternalName) name;
     PT(InternalName) name;
+    DX_PARAMETER *dx_parameter;
   };
   };
   struct ShaderTexBind {
   struct ShaderTexBind {
     CGparameter parameter;
     CGparameter parameter;
@@ -112,17 +138,20 @@ private:
     int stage;
     int stage;
     int desiredtype;
     int desiredtype;
     PT(InternalName) suffix;
     PT(InternalName) suffix;
+    DX_PARAMETER *dx_parameter;
   };
   };
   struct ShaderTransBind {
   struct ShaderTransBind {
     CGparameter parameter;
     CGparameter parameter;
     PT(InternalName) src_name;
     PT(InternalName) src_name;
     PT(InternalName) rel_name;
     PT(InternalName) rel_name;
     int trans_piece;
     int trans_piece;
+    DX_PARAMETER *dx_parameter;
   };
   };
   struct ShaderVarying {
   struct ShaderVarying {
     CGparameter parameter;
     CGparameter parameter;
     PT(InternalName) name;
     PT(InternalName) name;
     int append_uv;
     int append_uv;
+    DX_PARAMETER *dx_parameter;
   };
   };
 
 
 //  CGcontext _cg_context;
 //  CGcontext _cg_context;
@@ -147,7 +176,7 @@ private:
   void suggest_cg_profile(const string &vpro, const string &fpro);
   void suggest_cg_profile(const string &vpro, const string &fpro);
   CGprofile parse_cg_profile(const string &id, bool vertex);
   CGprofile parse_cg_profile(const string &id, bool vertex);
   void issue_cg_auto_bind(const ShaderAutoBind &bind, GSG *gsg);
   void issue_cg_auto_bind(const ShaderAutoBind &bind, GSG *gsg);
-  bool compile_cg_parameter(CGparameter p);
+  bool compile_cg_parameter(CGparameter p, DX_PARAMETER *dx_parameter);
   bool errchk_cg_parameter_words(CGparameter p, int len);
   bool errchk_cg_parameter_words(CGparameter p, int len);
   bool errchk_cg_parameter_direction(CGparameter p, CGenum dir);
   bool errchk_cg_parameter_direction(CGparameter p, CGenum dir);
   bool errchk_cg_parameter_variance(CGparameter p, CGenum var);
   bool errchk_cg_parameter_variance(CGparameter p, CGenum var);
@@ -159,6 +188,15 @@ private:
   void print_cg_compile_errors(const string &file, CGcontext ctx);
   void print_cg_compile_errors(const string &file, CGcontext ctx);
 #endif
 #endif
 
 
+public:
+
+  DIRECT_3D_SHADER _direct_3d_vertex_shader;
+  DIRECT_3D_SHADER _direct_3d_pixel_shader;
+  int _total_dx_parameters;
+  DX_PARAMETER *_dx_parameter_array;
+
+private:
+
   void release_resources(void);
   void release_resources(void);
 
 
 public:
 public:

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio