// ------------------------------------------------------------------- // Get values for a new 2D vector instance void ObjFileParser::getVector2( std::vector<aiVector2D> &point2d_array ) { float x, y; copyNextWord(m_buffer, BUFFERSIZE); x = (float) fast_atof(m_buffer); copyNextWord(m_buffer, BUFFERSIZE); y = (float) fast_atof(m_buffer); point2d_array.push_back(aiVector2D(x, y)); m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine ); }
// window dimensions int window_width; int window_height; float aspect; //aiColor4D clear_color = (102, 102, 108f, 255); bool fixedPipeline = true; //bool fixedPipeline = false; bool test_quad = false; bool toFile = false; // MultiSample stuff aiVector2D randomVar = aiVector2D(.00001, .51234); int multiSampleAmount = 2; MultiSampleRenderTarget *multiSampleRenderTarget; // end MultiSample stuff GLuint scene_list = 0; // shader things std::vector<Shader*> shaders; // clock stuff float lastGraphicsTime = 0.0; float lastAudioTime = 0.0; // global node array const int num_nodes = 16;
// ------------------------------------------------------------------------------------------------ // read an array of float2 tuples void ParseVectorDataArray(std::vector<aiVector2D>& out, const Element& el) { out.resize( 0 ); const TokenList& tok = el.Tokens(); if(tok.empty()) { ParseError("unexpected empty element",&el); } if(tok[0]->IsBinary()) { const char* data = tok[0]->begin(), *end = tok[0]->end(); char type; uint32_t count; ReadBinaryDataArrayHead(data, end, type, count, el); if(count % 2 != 0) { ParseError("number of floats is not a multiple of two (2) (binary)",&el); } if(!count) { return; } if (type != 'd' && type != 'f') { ParseError("expected float or double array (binary)",&el); } std::vector<char> buff; ReadBinaryDataArray(type, count, data, end, buff, el); ai_assert(data == end); ai_assert(buff.size() == count * (type == 'd' ? 8 : 4)); const uint32_t count2 = count / 2; out.reserve(count2); if (type == 'd') { const double* d = reinterpret_cast<const double*>(&buff[0]); for (unsigned int i = 0; i < count2; ++i, d += 2) { out.push_back(aiVector2D(static_cast<float>(d[0]), static_cast<float>(d[1]))); } } else if (type == 'f') { const float* f = reinterpret_cast<const float*>(&buff[0]); for (unsigned int i = 0; i < count2; ++i, f += 2) { out.push_back(aiVector2D(f[0],f[1])); } } return; } const size_t dim = ParseTokenAsDim(*tok[0]); // see notes in ParseVectorDataArray() above out.reserve(dim); const Scope& scope = GetRequiredScope(el); const Element& a = GetRequiredElement(scope,"a",&el); if (a.Tokens().size() % 2 != 0) { ParseError("number of floats is not a multiple of two (2)",&el); } for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end; ) { aiVector2D v; v.x = ParseTokenAsFloat(**it++); v.y = ParseTokenAsFloat(**it++); out.push_back(v); } }