///----------------------------------------------------------------------------- ///! @brief TODO enter a description ///! @remark ///----------------------------------------------------------------------------- void ForceField::initialise(const ShaderInstance& shaderInstance, bool changeWindingOrder) { UNUSEDPARAM(shaderInstance); Face::CreationParams params; // params.shaderInstance = &shaderInstance; // params.resource = m_resource; params.fillvalue = 0.0f; params.fillx = true; params.changeWindingOrder = changeWindingOrder; params.m_materialParameters = m_materialParameters; //CreatedModel face = Face::CreateFace(params); //m_drawableObject = face.model; //m_active = true; DECLAREANDCREATERESOURCEMESSAGE(createPlaneModel, Face::CreationParams); createPlaneModel.SetData(params); createPlaneModel.SetGameObjectId(static_cast<size_t>(m_nameHash)); //Not super but should work for now GameResourceHelper(m_resource).getWriteableResource().m_messageQueues->getUpdateMessageQueue()->addMessage(createPlaneModel); //Init isnt done here because we are waiting for a response from the render thread //Super::initialise(shaderInstance); }
//----------------------------------------------------------------------------- //! @brief TODO enter a description //! @remark //----------------------------------------------------------------------------- CreatedMeshGroup MeshGroupCreator::CreateMeshGroup(const CreationParams& params) { CreatedMeshGroup meshGroup; VertexBuffer* vb = new VertexBuffer(); IndexBuffer* ib = new IndexBuffer(); unsigned int m_nummultitexcoords = 1; //HACK FIX THIS unsigned int bufferSize = 0; bufferSize += sizeof(float) * 3 * (unsigned int)params.m_vertices.size(); bufferSize += sizeof(float) * 3 * (unsigned int)params.m_normals.size(); bufferSize += sizeof(float) * 2 * m_nummultitexcoords * (unsigned int)params.m_vertices.size();//(unsigned int)params.m_texcoords[0].size(); char* vertexData = new char[bufferSize]; for (unsigned int counter = 0; counter < params.m_vertices.size(); ++counter) { *(float*)vertexData = params.m_vertices[counter].x(); vertexData += sizeof(float); *(float*)vertexData = params.m_vertices[counter].y(); vertexData += sizeof(float); *(float*)vertexData = params.m_vertices[counter].z(); vertexData += sizeof(float); *(float*)vertexData = params.m_normals[counter].x(); vertexData += sizeof(float); *(float*)vertexData = params.m_normals[counter].y(); vertexData += sizeof(float); *(float*)vertexData = params.m_normals[counter].z(); vertexData += sizeof(float); for (unsigned int texCoordCounter = 0; texCoordCounter < m_nummultitexcoords; ++texCoordCounter) { if (params.m_texcoords.size() > 0) { const TexCoords& texCoords = params.m_texcoords[texCoordCounter]; if (texCoords.size() > 0) { *(float*)vertexData = texCoords[counter].x(); vertexData += sizeof(float); *(float*)vertexData = texCoords[counter].y(); vertexData += sizeof(float); } else { *(float*)vertexData = 0.0f; vertexData += sizeof(float); *(float*)vertexData = 0.0f; vertexData += sizeof(float); } } else { *(float*)vertexData = 0.0f; vertexData += sizeof(float); *(float*)vertexData = 0.0f; vertexData += sizeof(float); } } meshGroup.boundingBox.enclose(params.m_vertices[counter]); } std::vector<unsigned int> texCoordDimensions; for (unsigned int texCoordCounter = 0; texCoordCounter < m_nummultitexcoords; ++texCoordCounter) { texCoordDimensions.push_back(2); } vertexData = vertexData - bufferSize; const Technique* technique = params.m_shaderInstance.getMaterial().getEffect()->getTechnique("default"); GameResource& gameResource= GameResourceHelper(params.m_resource).getWritableGameResource(); const VertexShader* shader = gameResource.getShaderCache().getVertexShader(technique->getVertexShader()); assert(shader); vb->createBufferAndLayoutElements(gameResource.getDeviceManager(), bufferSize, vertexData, false, params.m_vertexDeclaration, shader->getShaderBlob()); delete[] vertexData; ib->setNumberOfIndecis((unsigned int)params.m_indices.size()); ib->createBuffer(gameResource.getDeviceManager(), (unsigned int)params.m_indices.size() * sizeof(unsigned int), (void*)¶ms.m_indices[0], false, D3D11_BIND_INDEX_BUFFER); meshGroup.meshGroup = new MeshGroup(vb, ib, params.m_shaderInstance); return meshGroup; }