CeGuiString XmlHelper::getAttributeValueAsString(DOMElement* element, const char* const name)
{
	XMLCh* attrName = XMLString::transcode(name);
	CeGuiString rVal(transcodeToString(element->getAttribute(attrName)));
	XMLString::release(&attrName);
	return rVal;
}
Beispiel #2
0
//
// 得到应用程序路径
//
CString WINAPI GetAppPath(BOOL IsDLL, HINSTANCE instance, BOOL IsFullPathName) 
{
	TCHAR sFilename[_MAX_PATH];
	TCHAR sDrive[_MAX_DRIVE];
	TCHAR sDir[_MAX_DIR];
	TCHAR sFname[_MAX_FNAME];
	TCHAR sExt[_MAX_EXT];

	if(IsDLL)
		GetModuleFileName(instance, sFilename, _MAX_PATH);
	else
		GetModuleFileName(AfxGetInstanceHandle(), sFilename, _MAX_PATH);

	if(IsFullPathName)
		return sFilename;

	_tsplitpath(sFilename, sDrive, sDir, sFname, sExt);

	CString rVal(CString(sDrive) + CString(sDir));
	int nLen = rVal.GetLength();

	if (rVal.GetAt(nLen-1) != _T('\\'))
		rVal += _T("\\");

	return rVal;
}
TEST(DirectExecTest, SanityTests)
{
	C4AulScript * pScript = new C4AulScript();
	ASSERT_TRUE(pScript);
	C4Value rVal(pScript->DirectExec(nullptr, "5*8", "unit test script", false, nullptr));
	EXPECT_EQ(rVal, C4Value(5*8));
	delete pScript;
}
std::string XmlHelper::transcodeToStdString(const XMLCh* const string16)
{
    if( string16 == NULL )
        return "";

	char* tmpVal = XMLString::transcode(string16);
	std::string rVal(tmpVal);
	XMLString::release(&tmpVal);
	return rVal;
}
CeGuiString XmlHelper::transcodeToString(const XMLCh* const string16)
{
	unsigned int str16len = XMLString::stringLen(string16);
	if (str16len == 0)
	{
		return CeGuiString();
	}

	initializeTranscoder();

	utf8* tmpVal = transcodeToUtf8(string16);
	CeGuiString rVal(tmpVal);
	delete[] tmpVal;
	return rVal;
}
Beispiel #6
0
//
// 从完整路径中分离出路径
//
CString WINAPI GetPath(TCHAR *sFilename) 
{
	TCHAR sDrive[_MAX_DRIVE];
	TCHAR sDir[_MAX_DIR];
	TCHAR sFname[_MAX_FNAME];
	TCHAR sExt[_MAX_EXT];

	_tsplitpath(sFilename, sDrive, sDir, sFname, sExt);

	CString rVal(CString(sDrive) + CString(sDir));
	int nLen = rVal.GetLength();

	if (rVal.GetAt(nLen-1) != _T('\\'))
		rVal += _T("\\");

	return rVal;
}  
Beispiel #7
0
std::unique_ptr<ModelData> AssimpLoader::LoadData(const std::string& filepath)
{
    std::unique_ptr<ModelData> rVal(std::make_unique<ModelData>());
    Assimp::Importer importer;

    const aiScene* scene = importer.ReadFile(filepath,
                                             aiProcess_GenNormals            |
                                             aiProcess_CalcTangentSpace      |
                                             aiProcess_JoinIdenticalVertices |
                                             //aiProcess_SortByPType           |
                                             aiProcess_Triangulate           |
                                             aiProcess_FlipUVs
                                             );

    if(!scene || scene->mFlags == AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) // if is Not Zero
    {
        std::cout << "ERROR::ASSIMP:: " << importer.GetErrorString() << std::endl;
        return false;
    }

    // Put vertices to data
    for(unsigned int i = 0, offset = 0; i < scene->mNumMeshes; i++)
    {
        aiMesh* curMesh = scene->mMeshes[i];

        // Create new Mesh
        Mesh newMesh;

        // Update its info
        newMesh.dataOffset = offset;

        // Update offset
        offset += curMesh->mNumVertices;

        // Add Data to rVal->data vector
        for(unsigned int j = 0; j < curMesh->mNumVertices; j++)
        {
            // Vertices
            rVal->data.push_back(curMesh->mVertices[j].x);
            rVal->data.push_back(curMesh->mVertices[j].y);
            rVal->data.push_back(curMesh->mVertices[j].z);

            // Normals
            rVal->data.push_back(curMesh->mNormals[j].x);
            rVal->data.push_back(curMesh->mNormals[j].y);
            rVal->data.push_back(curMesh->mNormals[j].z);

            // TexCoords
            if(curMesh->HasTextureCoords(0))
            {
                rVal->data.push_back(curMesh->mTextureCoords[0][j].x);
                rVal->data.push_back(curMesh->mTextureCoords[0][j].y);
                rVal->data.push_back(curMesh->mTextureCoords[0][j].z);
            }
            else
            {
                // TODO: Handle that case
                // rVal->data.push_back(0);
                // rVal->data.push_back(0);
                // rVal->data.push_back(0);
            }
        }

        // Add Indices to vector
        for(GLuint h = 0; h < curMesh->mNumFaces; h++)
        {
            aiFace* face = &(curMesh->mFaces[h]);

            for(GLuint j = 0; j < face->mNumIndices; j++)
                newMesh.indices.push_back(face->mIndices[j] + newMesh.dataOffset);
        }

        // Materials
        if(curMesh->mMaterialIndex >= 0)
        {
            aiMaterial* material = scene->mMaterials[curMesh->mMaterialIndex];

            // Diffuse maps
            std::vector<Texture> diffuseMaps = LoadMaterialTextures(
                material,
                aiTextureType_DIFFUSE,
                SHADER_TEXTURE_DIFFUSE_PREFIX,
                filepath.substr(0, filepath.find_last_of('/')));
            newMesh.textures.insert(newMesh.textures.end(), diffuseMaps.begin(), diffuseMaps.end());

            // Specular maps
            std::vector<Texture> specularMaps = LoadMaterialTextures(
                material,
                aiTextureType_SPECULAR,
                SHADER_TEXTURE_SPECULAR_PREFIX,
                filepath.substr(0, filepath.find_last_of('/')));
            newMesh.textures.insert(newMesh.textures.end(), specularMaps.begin(), specularMaps.end());
        }

        // Add new mesh to vector
        rVal->meshes.push_back(newMesh);
    }

    // Load to gpu
    glGenBuffers(1, &(rVal->vbo));
    glGenVertexArrays(1, &(rVal->vao));

    glBindVertexArray(rVal->vao);
    {
        glBindBuffer(GL_ARRAY_BUFFER, rVal->vbo);
        {
            // Bind data
            glBufferData(
                GL_ARRAY_BUFFER,
                rVal->data.size() * sizeof(GLfloat),
                rVal->data.data(),
                GL_STATIC_DRAW);

            // Vertices
            glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)0);
            glEnableVertexAttribArray(0);

            // Normals
            glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)(3 * sizeof(GLfloat)));
            glEnableVertexAttribArray(1);

            // TexCoords
            glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)(6 * sizeof(GLfloat)));
            glEnableVertexAttribArray(2);
        }
        glBindBuffer(GL_ARRAY_BUFFER, 0);

        for(Mesh& mesh : rVal->meshes)
        {
            glGenBuffers(1, &mesh.ebo);
            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh.ebo);
            glBufferData(
                GL_ELEMENT_ARRAY_BUFFER,
                mesh.indices.size() * sizeof(GLuint),
                mesh.indices.data(),
                GL_STATIC_DRAW);
            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
        }
    }
    glBindVertexArray(0);

    return std::move(rVal);
}
Beispiel #8
0
TEST(DirectExecTest, SanityTests)
{
	C4Value rVal(AulExec.DirectExec(nullptr, "5*8", "unit test script", false, nullptr));
	EXPECT_EQ(rVal, C4Value(5*8));
}