예제 #1
0
파일: MojDbKind.cpp 프로젝트: webOS101/db8
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;
}
예제 #2
0
파일: Chunk.cpp 프로젝트: zeno15/Vox
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);
}