MojErr MojDbKind::update(MojObject* newObj, const MojObject* oldObj, MojDbOp op, MojDbReq& req, bool checkSchema) { MojLogTrace(s_log); MojErr err = checkPermission(op, req); MojErrCheck(err); err = req.curKind(this); MojErrCheck(err); #if defined(TESTDBKIND) MojString s; MojErr e2; if (oldObj) { e2 = oldObj->toJson(s); MojLogInfo(s_log, _T("Kind_Update_OldObj: %s ;\n"), s.data()); } if (newObj) { e2 = newObj->toJson(s); MojLogInfo(s_log, _T("Kind_Update_NewObj: %s ;\n"), s.data()); } #endif if (newObj) { // add the _backup property if not set if (m_backup && !newObj->contains(MojDb::SyncKey)) { err = newObj->putBool(MojDb::SyncKey, true); MojErrCheck(err); } // TEMPORARY!!! This should be done in pre-update to also check parent kinds // warning message comes from preUpdate if(checkSchema) { MojSchema::Result res; err = m_schema.validate(*newObj, res); MojErrCheck(err); if (!res.valid()) { MojErrThrowMsg(MojErrSchemaValidation, _T("schema validation failed for kind '%s': %s"), m_id.data(), res.msg().data()); } } } // update revSets and validate schema err = preUpdate(newObj, oldObj, req); MojErrCheck(err); // update indexes MojVector<MojDbKind*> kindVec; MojInt32 idxcount = 0; err = updateIndexes(newObj, oldObj, req, op, kindVec, idxcount); MojLogInfo(s_log, _T("Kind_UpdateIndexes_End: %s; supers = %zu; indexcount = %zu; updated = %d \n"), this->id().data(), m_supers.size(), m_indexes.size(), idxcount); MojErrCheck(err); return MojErrNone; }
void Chunk::createMesh(void) { std::vector<float> vertexes; std::vector<float> normals; std::vector<float> colours; std::vector<float> textures; GLuint in_Position = glGetAttribLocation(m_ChunkManager->getShaderId(), "in_Position"); GLuint in_Color = glGetAttribLocation(m_ChunkManager->getShaderId(), "in_Color"); GLuint in_Normal = glGetAttribLocation(m_ChunkManager->getShaderId(), "in_Normal"); GLuint in_TexUV = glGetAttribLocation(m_ChunkManager->getShaderId(), "in_TexUV"); #ifndef ELEMENTS for (int x = 0; x < CHUNK_SIZE; x++) { for (int y = 0; y < CHUNK_SIZE; y++) { for (int z = 0; z < CHUNK_SIZE; z++) { if(m_pBlocks[x][y][z].isActive()) { createCube(x, y, z, &vertexes, &normals, &colours, &textures); } } } } m_NumberVertices = vertexes.size() / 3; #endif #ifdef ELEMENTS for (int x = 0; x < CHUNK_SIZE; x++) { for (int y = 0; y < CHUNK_SIZE; y++) { for (int z = 0; z < CHUNK_SIZE; z++) { createCube(x, y, z, &vertexes, &normals, &colours, &textures, true); } } } updateIndexes(); #endif glGenVertexArrays(1, &m_VAO); glBindVertexArray(m_VAO); GLuint vbo[4]; glGenBuffers(4, vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo[0]); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * vertexes.size(), &vertexes[0], GL_STATIC_DRAW); glEnableVertexAttribArray(in_Position); glVertexAttribPointer(in_Position, 3, GL_FLOAT, GL_FALSE, 0, NULL); glBindBuffer(GL_ARRAY_BUFFER, vbo[1]); glBufferData(GL_ARRAY_BUFFER, sizeof(float)* colours.size(), &colours[0], GL_STATIC_DRAW); glEnableVertexAttribArray(in_Color); glVertexAttribPointer(in_Color, 3, GL_FLOAT, GL_FALSE, 0, NULL); glBindBuffer(GL_ARRAY_BUFFER, vbo[2]); glBufferData(GL_ARRAY_BUFFER, sizeof(float)* normals.size(), &normals[0], GL_STATIC_DRAW); glEnableVertexAttribArray(in_Normal); glVertexAttribPointer(in_Normal, 3, GL_FLOAT, GL_FALSE, 0, NULL); glBindBuffer(GL_ARRAY_BUFFER, vbo[2]); glBufferData(GL_ARRAY_BUFFER, sizeof(float)* textures.size(), &textures[0], GL_STATIC_DRAW); glEnableVertexAttribArray(in_TexUV); glVertexAttribPointer(in_TexUV, 2, GL_FLOAT, GL_FALSE, 0, NULL); glBindVertexArray(0); }