InstanceObject* InstanceManager::AddInstanceObject(string modelName, vec3 position, vec3 rotation, float instanceScale, Chunk* pOwningChunk, int voxelX, int voxelY, int voxelZ) { InstanceParent* pNewInstanceParent = GetInstanceParent(modelName); if(pNewInstanceParent == NULL) { // Add new instance parent pNewInstanceParent = new InstanceParent(); pNewInstanceParent->m_modelName = modelName; pNewInstanceParent->m_pQubicleBinary = new QubicleBinary(m_pRenderer); pNewInstanceParent->m_pQubicleBinary->Import(modelName.c_str(), true); SetupGLBuffers(pNewInstanceParent); m_vpInstanceParentList.push_back(pNewInstanceParent); } InstanceObject* pInstanceObject = new InstanceObject(); pInstanceObject->m_erase = false; pInstanceObject->m_render = true; pInstanceObject->UpdateMatrix(position, rotation, instanceScale); pInstanceObject->m_pOwningChunk = pOwningChunk; pInstanceObject->m_voxelX = voxelX; pInstanceObject->m_voxelY = voxelY; pInstanceObject->m_voxelZ = voxelZ; pNewInstanceParent->m_vpInstanceObjectList.push_back(pInstanceObject); return pInstanceObject; }
BlockParticleManager::BlockParticleManager(Renderer* pRenderer, ChunkManager* pChunkManager) { m_pRenderer = pRenderer; m_pChunkManager = pChunkManager; m_particleEffectCounter = 0; m_renderWireFrame = false; m_instanceRendering = true; m_vertexArray = -1; m_positionBuffer = -1; m_normalBuffer = -1; m_colourBuffer = -1; m_matrixBuffer = -1; bool shaderLoaded = false; m_instanceShader = -1; shaderLoaded = m_pRenderer->LoadGLSLShader("media/shaders/instance.vertex", "media/shaders/instance.pixel", &m_instanceShader); // Materials m_pRenderer->CreateMaterial(Colour(0.7f, 0.7f, 0.7f, 1.0f), Colour(1.0f, 1.0f, 1.0f, 1.0f), Colour(1.0f, 1.0f, 1.0f, 1.0f), Colour(0.0f, 0.0f, 0.0f, 0.0f), 64, &m_blockMaterialID); SetupGLBuffers(); }