public override void fromMessage(KPMessage msg) { Utils.assert(msg.Length >= 4 * 2); clearData(); MyBinStream stream = new MyBinStream(msg.Data); m_id = stream.readUInt(); m_type = stream.readUInt(); m_source = stream.readString(); stream.close(); }
public void fromStream(MyBinStream stream) { m_id = stream.readUInt(); m_vsId = stream.readUInt(); m_fsId = stream.readUInt(); // m_attributesCount = stream.readInt(); for (int i = 0; i < m_attributesCount; i++) { Var var = m_attributes[i]; var.Location = stream.readInt(); var.Size = stream.readInt(); var.Type = stream.readUInt(); int strLen = stream.readInt(); var.Name = stream.readString(strLen); } // m_uniformsCount = stream.readInt(); for (int i = 0; i < m_uniformsCount; i++) { Var var = m_uniforms[i]; var.Location = stream.readInt(); var.Size = stream.readInt(); var.Type = stream.readUInt(); int strLen = stream.readInt(); var.Name = stream.readString(strLen); int dataLen = stream.readInt(); string res = ""; if (dataLen > 0) { switch (var.Type) { #region FLOAT case gl.GL_FLOAT: { Utils.assert(dataLen % 4 == 0); int count = dataLen / 4; for (int j = 0; j < count; j++) { res += stream.readFloat(); if (j < count - 1) { res += ", "; } } break; } case gl.GL_FLOAT_VEC2: { Utils.assert(dataLen % 8 == 0); int count = dataLen / 8; for (int j = 0; j < count; j++) { res += string.Format("({0}, {1})", stream.readFloat(), stream.readFloat()); if (j < count - 1) { res += ", "; } } break; } case gl.GL_FLOAT_VEC3: { Utils.assert(dataLen % 12 == 0); int count = dataLen / 12; for (int j = 0; j < count; j++) { res += string.Format("({0}, {1}, {2})", stream.readFloat(), stream.readFloat(), stream.readFloat()); if (j < count - 1) { res += ", "; } } break; } case gl.GL_FLOAT_VEC4: { Utils.assert(dataLen % 16 == 0); int count = dataLen / 16; for (int j = 0; j < count; j++) { res += string.Format("({0}, {1}, {2}, {3})", stream.readFloat(), stream.readFloat(), stream.readFloat(), stream.readFloat()); if (j < count - 1) { res += ", "; } } break; } #endregion #region INT, BOOL, SAMPLER case gl.GL_INT: case gl.GL_SAMPLER_2D: case gl.GL_SAMPLER_3D: case gl.GL_SAMPLER_CUBE: case gl.GL_BOOL: { Utils.assert(dataLen % 4 == 0); int count = dataLen / 4; for (int j = 0; j < count; j++) { res += stream.readInt(); if (j < count - 1) { res += ", "; } } break; } case gl.GL_INT_VEC2: case gl.GL_BOOL_VEC2: { Utils.assert(dataLen % 8 == 0); int count = dataLen / 8; for (int j = 0; j < count; j++) { res += string.Format("({0}, {1})", stream.readInt(), stream.readInt()); if (j < count - 1) { res += ", "; } } break; } case gl.GL_INT_VEC3: case gl.GL_BOOL_VEC3: { Utils.assert(dataLen % 12 == 0); int count = dataLen / 12; for (int j = 0; j < count; j++) { res += string.Format("({0}, {1}, {2})", stream.readInt(), stream.readInt(), stream.readInt()); if (j < count - 1) { res += ", "; } } break; } case gl.GL_INT_VEC4: case gl.GL_BOOL_VEC4: { Utils.assert(dataLen % 16 == 0); int count = dataLen / 16; for (int j = 0; j < count; j++) { res += string.Format("({0}, {1}, {2}, {3})", stream.readInt(), stream.readInt(), stream.readInt(), stream.readInt()); if (j < count - 1) { res += ", "; } } break; } #endregion #region MATRIX case gl.GL_FLOAT_MAT2: case gl.GL_FLOAT_MAT3: case gl.GL_FLOAT_MAT4: { int size = (var.Type == gl.GL_FLOAT_MAT2) ? 2 : (var.Type == gl.GL_FLOAT_MAT3 ? 3 : 4); int bytes = size * size * 4; Utils.assert(dataLen % bytes == 0); int count = dataLen / bytes; res = Utils.makeMatrixString(stream, count, size); break; } #endregion default: { Utils.assert(false); break; } } // switch (var.Type) } var.Value = res; } }