00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "fltMaterial.h"
00016 #include "fltRecordReader.h"
00017 #include "fltRecordWriter.h"
00018
00019 TypeHandle FltMaterial::_type_handle;
00020
00021
00022
00023
00024
00025
00026 FltMaterial::
00027 FltMaterial(FltHeader *header) : FltRecord(header) {
00028 _material_index = -1;
00029 _flags = 0;
00030 _ambient.set(0.0, 0.0, 0.0);
00031 _diffuse.set(0.0, 0.0, 0.0);
00032 _specular.set(0.0, 0.0, 0.0);
00033 _emissive.set(0.0, 0.0, 0.0);
00034 _shininess = 0.0;
00035 _alpha = 1.0;
00036 }
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 bool FltMaterial::
00047 extract_record(FltRecordReader &reader) {
00048 if (!FltRecord::extract_record(reader)) {
00049 return false;
00050 }
00051
00052 nassertr(reader.get_opcode() == FO_15_material, false);
00053 DatagramIterator &iterator = reader.get_iterator();
00054
00055 _material_index = iterator.get_be_int32();
00056 _material_name = iterator.get_fixed_string(12);
00057 _flags = iterator.get_be_uint32();
00058 _ambient[0] = iterator.get_be_float32();
00059 _ambient[1] = iterator.get_be_float32();
00060 _ambient[2] = iterator.get_be_float32();
00061 _diffuse[0] = iterator.get_be_float32();
00062 _diffuse[1] = iterator.get_be_float32();
00063 _diffuse[2] = iterator.get_be_float32();
00064 _specular[0] = iterator.get_be_float32();
00065 _specular[1] = iterator.get_be_float32();
00066 _specular[2] = iterator.get_be_float32();
00067 _emissive[0] = iterator.get_be_float32();
00068 _emissive[1] = iterator.get_be_float32();
00069 _emissive[2] = iterator.get_be_float32();
00070 _shininess = iterator.get_be_float32();
00071 _alpha = iterator.get_be_float32();
00072 iterator.skip_bytes(4);
00073
00074 check_remaining_size(iterator);
00075 return true;
00076 }
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 bool FltMaterial::
00087 build_record(FltRecordWriter &writer) const {
00088 if (!FltRecord::build_record(writer)) {
00089 return false;
00090 }
00091
00092 writer.set_opcode(FO_15_material);
00093 Datagram &datagram = writer.update_datagram();
00094
00095 datagram.add_be_int32(_material_index);
00096 datagram.add_fixed_string(_material_name, 12);
00097 datagram.add_be_uint32(_flags);
00098 datagram.add_be_float32(_ambient[0]);
00099 datagram.add_be_float32(_ambient[1]);
00100 datagram.add_be_float32(_ambient[2]);
00101 datagram.add_be_float32(_diffuse[0]);
00102 datagram.add_be_float32(_diffuse[1]);
00103 datagram.add_be_float32(_diffuse[2]);
00104 datagram.add_be_float32(_specular[0]);
00105 datagram.add_be_float32(_specular[1]);
00106 datagram.add_be_float32(_specular[2]);
00107 datagram.add_be_float32(_emissive[0]);
00108 datagram.add_be_float32(_emissive[1]);
00109 datagram.add_be_float32(_emissive[2]);
00110 datagram.add_be_float32(_shininess);
00111 datagram.add_be_float32(_alpha);
00112 datagram.pad_bytes(4);
00113
00114 return true;
00115 }
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 bool FltMaterial::
00126 extract_14_record(int index, DatagramIterator &di) {
00127 _material_index = index;
00128
00129 _ambient[0] = di.get_be_float32();
00130 _ambient[1] = di.get_be_float32();
00131 _ambient[2] = di.get_be_float32();
00132 _diffuse[0] = di.get_be_float32();
00133 _diffuse[1] = di.get_be_float32();
00134 _diffuse[2] = di.get_be_float32();
00135 _specular[0] = di.get_be_float32();
00136 _specular[1] = di.get_be_float32();
00137 _specular[2] = di.get_be_float32();
00138 _emissive[0] = di.get_be_float32();
00139 _emissive[1] = di.get_be_float32();
00140 _emissive[2] = di.get_be_float32();
00141 _shininess = di.get_be_float32();
00142 _alpha = di.get_be_float32();
00143 _flags = di.get_be_uint32();
00144 _material_name = di.get_fixed_string(12);
00145 di.skip_bytes(4 * 28);
00146
00147 return true;
00148 }
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 bool FltMaterial::
00159 build_14_record(Datagram &datagram) {
00160 datagram.add_be_float32(_ambient[0]);
00161 datagram.add_be_float32(_ambient[1]);
00162 datagram.add_be_float32(_ambient[2]);
00163 datagram.add_be_float32(_diffuse[0]);
00164 datagram.add_be_float32(_diffuse[1]);
00165 datagram.add_be_float32(_diffuse[2]);
00166 datagram.add_be_float32(_specular[0]);
00167 datagram.add_be_float32(_specular[1]);
00168 datagram.add_be_float32(_specular[2]);
00169 datagram.add_be_float32(_emissive[0]);
00170 datagram.add_be_float32(_emissive[1]);
00171 datagram.add_be_float32(_emissive[2]);
00172 datagram.add_be_float32(_shininess);
00173 datagram.add_be_float32(_alpha);
00174 datagram.add_be_uint32(_flags);
00175 datagram.add_fixed_string(_material_name, 12);
00176 datagram.pad_bytes(4 * 28);
00177
00178 return true;
00179 }