void Explorerplusplus::SaveDialogStatesToXML(IXMLDOMDocument *pXMLDom,
IXMLDOMElement *pRoot)
{
	IXMLDOMElement	*pe = NULL;
	BSTR					bstr = NULL;
	BSTR					bstr_wsnt = SysAllocString(L"\n\t");

	NXMLSettings::AddWhiteSpaceToNode(pXMLDom,bstr_wsnt,pRoot);

	bstr = SysAllocString(DIALOGS_XML_KEY);
	pXMLDom->createElement(bstr,&pe);
	SysFreeString(bstr);
	bstr = NULL;

	for(CDialogSettings *ds : DIALOG_SETTINGS)
	{
		ds->SaveXMLSettings(pXMLDom, pe);
	}

	NXMLSettings::AddWhiteSpaceToNode(pXMLDom,bstr_wsnt,pe);

	NXMLSettings::AppendChildToParent(pe,pRoot);
	pe->Release();
	pe = NULL;
}
// GetRoot
COpcXmlElement COpcXmlDocument::GetRoot() const
{
    COpcXmlElement cElement;

    // check if document exists.
    if (m_ipDocument == NULL)
    {
        return cElement;
    }

    IXMLDOMElement* ipRoot = NULL;

    HRESULT hResult = m_ipDocument->get_documentElement(&ipRoot);

    if (FAILED(hResult))
    {
        return cElement;
    }

    cElement = ipRoot;

    if (ipRoot != NULL)
    {
        ipRoot->Release();
    }

    return cElement;
}
// FindElement
COpcXmlElement COpcXmlDocument::FindElement(const COpcString& cXPath)
{
    COpcXmlElement cElement;

    // check if document exists.
    if (m_ipDocument == NULL)
    {
        return cElement;
    }

    // serach for single node.
    IXMLDOMElement* ipElement = NULL;
    BSTR bstrQuery = SysAllocString(cXPath);
    HRESULT hResult = m_ipDocument->selectSingleNode(bstrQuery, (IXMLDOMNode**)&ipElement);
    SysFreeString(bstrQuery);

    if (FAILED(hResult))
    {
        return cElement;
    }

    // return result.
    cElement = ipElement;

    if (ipElement != NULL)
    {
        ipElement->Release();
    }

    return cElement;
}
CXmlElement* CXmlElement::AddElement(LPWSTR pwszName)
{
    HRESULT         hr = S_OK;
    CXmlElement     *pElement = NULL;
    IXMLDOMElement  *pIElement = NULL;
    BSTR            bstrName = ::SysAllocString(pwszName);

    if (NULL != m_pIDoc)
    {       
        hr = m_pIDoc->createElement(bstrName, &pIElement);
        if (SUCCEEDED(hr))
        {
            IXMLDOMNode *pNewNode = NULL;

            hr = m_pIElement->appendChild(pIElement, &pNewNode);
            if (SUCCEEDED(hr))
            {
                pElement = new CXmlElement(m_pIDoc, pIElement);

                pNewNode->Release();
                pNewNode = NULL;
            }

            pIElement->Release();
            pIElement = NULL;
        }
    }

    ::SysFreeString(bstrName);

    return pElement;
}
Beispiel #5
0
STDMETHODIMP CTangramNode::get_OuterXml(BSTR* pVal)
{
	IXMLDOMElement* pElement = NULL;
	m_TangramDocNode.elem.QueryInterface<IXMLDOMElement>(&pElement);
	if (pElement != NULL)
	{
		pElement->get_xml(pVal);
		pElement->Release();
	}
	return S_OK;
}
Beispiel #6
0
STDMETHODIMP CTangramNode::put_Attribute(BSTR bstrKey, BSTR bstrVal)
{
	IXMLDOMElement* ele = NULL;
	m_ObjItem.elem.QueryInterface<IXMLDOMElement>(&ele);
	if (ele != NULL)
	{
		ele->setAttribute(bstrKey,CComVariant(bstrVal));
		ele->Release();
	}
	return S_OK;
}
Beispiel #7
0
STDMETHODIMP CTangramNode::get_XML(BSTR* pVal)
{
	IXMLDOMElement* ele = NULL;
	m_ObjItem.elem.QueryInterface<IXMLDOMElement>(&ele);
	if (ele != NULL)
	{
		ele->get_xml(pVal);
		ele->Release();
	}

	return S_OK;
}
void CPageEvents::OnDeleteItemEventsList(NMHDR* pNMHDR, LRESULT* pResult) 
{
  // Typecast the specified notification structure
  NM_LISTVIEW* pLV = reinterpret_cast<NM_LISTVIEW*>(pNMHDR);
  
  // Typecast the item's param as an XML element pointer
  IXMLDOMElement* pElement =
    reinterpret_cast<IXMLDOMElement*>(pLV->lParam);

  // Release the XML element pointer associated with the item
  if (pElement)
    pElement->Release();

  // Clear the result
  *pResult = 0;
}
Beispiel #9
0
STDMETHODIMP CTangramNode::get_Attribute(BSTR bstrKey, BSTR* pVal)
{
	IXMLDOMElement* ele = NULL;
	m_ObjItem.elem.QueryInterface<IXMLDOMElement>(&ele);
	if (ele != NULL)
	{
		VARIANT var;
		ele->getAttribute(bstrKey,&var);		
		ele->Release();

		if (var.vt == VT_BSTR)
		{
			*pVal = var.bstrVal;
		}
	}
	return S_OK;
}
Beispiel #10
0
HRESULT COFSNcDlg2::GetNodeAttribute(IXMLDOMNode *pNode, BSTR bsAttrName, CComBSTR &strAttrValue)
{
	HRESULT hr = S_OK;
	IXMLDOMElement *pEle = NULL;
	
	if(pNode == NULL)
		return E_INVALIDARG;
	
	hr = pNode->QueryInterface(IID_IXMLDOMElement, (void**)&pEle);
	if(pEle)
	{
		CComVariant var;
		hr = pEle->getAttribute(bsAttrName, &var);
		strAttrValue = var.bstrVal;
		pEle->Release();
	}
	return hr;
}
Beispiel #11
0
STDMETHODIMP CTangramNode::put_Caption(BSTR bstrCaption)
{
	CString str(bstrCaption);

	m_strCaption = str;

	if (m_pParentObj != NULL && m_pParentObj->m_pHostWnd != NULL)
	{
		m_pParentObj->m_pHostWnd->SendMessage(WM_TGM_SET_CAPTION,m_nCol,(LPARAM)str.GetBuffer());
	}

	IXMLDOMElement* ele = NULL;
	m_ObjItem.elem.QueryInterface<IXMLDOMElement>(&ele);

	if (ele != NULL)
	{
		ele->setAttribute(L"caption",CComVariant(str));
		ele->Release();
	}
	return S_OK;
}
///////////////////////////////////////////////////////
// RADEventsXML::ConstructEventParentNodeTree
//
// Creates an XMLEvent node for the root of the XML document.
// The root node is named "IR",
// the Events container node is a child of "IR":
// <?xml version="1.0" ?>
//	<IR>
//		<Events>
//		</Events>
//	<IR>
//
//
// Returns:
//	IXMLDOMElement: the constructed IR/Eevents node,
//	or a NULL pointer if processing failed.
//
///////////////////////////////////////////////////////
IXMLDOMElement* RADEventsXML::ConstructEventParentNodeTree()
{
	IXMLDOMNode *pIXMLDOMNode = NULL;
	IXMLDOMElement *pIR = NULL;
	IXMLDOMElement *pEvents = NULL;
	IXMLDOMProcessingInstruction *pi=NULL;

	_bstr_t bstr1;
	_bstr_t bstr2;
	HRESULT hr;

	// Create a processing instruction element. <?xml version="1.0" ?>
	bstr1 = "xml";
	bstr2 = "version='1.0'";
	HRCALL(m_pXMLDom->createProcessingInstruction(
		bstr1,bstr2, &pi),
		"createProcessingInstruction:");
	m_pXMLDom->appendChild(pi, &pIXMLDOMNode);  // put it first

	// construct <IR><Events></Events></IR>
	bstr1 = "Events";
	HRCALL(m_pXMLDom->createElement(bstr1,&pEvents),"create <Events> ");

	bstr1 = "IR";
	HRCALL(m_pXMLDom->createElement(bstr1,&pIR),"create <IR>");

	HRCALL(pIR->appendChild(pEvents, &pIXMLDOMNode), ""); 
	AddWhiteSpaceToNode(bstr_wsnt, pIR);

	m_pXMLDom->appendChild(pIR, &pIXMLDOMNode);   // attach to DOM

clean: 
	if (pi)
		pi->Release();
	if (pIR)
		pIR->Release();
	return pEvents;
}
HRESULT CKADmerge::GetRootElement(IXMLDOMDocument * pXMLDoc, IXMLDOMNode ** pXMLNode)
{
    IXMLDOMElement * pXMLElem = NULL;

    HRESULT hRes = 0;

    if(!pXMLDoc)
    {
        hRes = S_FALSE;
    }
    else
    {
        hRes = pXMLDoc->get_documentElement(&pXMLElem);
        if(pXMLElem)
        {
            hRes = pXMLElem->QueryInterface(IID_IXMLDOMNode, (void**)pXMLNode);
        }
    }

    if(pXMLElem)
        pXMLElem->Release();

    return hRes;
}
Beispiel #14
0
bool COpenGL::SetShadersGLSL(const TCHAR *glslFileName)
{
	char *fragment=NULL, *vertex=NULL;
	IXMLDOMDocument * pXMLDoc = NULL;
	IXMLDOMElement * pXDE = NULL;
	IXMLDOMNode * pXDN = NULL;
	HRESULT hr;
	BSTR queryString, nodeContent;

	TCHAR errorMsg[MAX_PATH + 50];

	if(fragmentShader) {
		glDetachShader(shaderProgram,fragmentShader);
		glDeleteShader(fragmentShader);
		fragmentShader = 0;
	}
	if(vertexShader) {
		glDetachShader(shaderProgram,vertexShader);
		glDeleteShader(vertexShader);
		vertexShader = 0;
	}
	if(shaderProgram) {
		glUseProgram(0);
		glDeleteProgram(shaderProgram);
		shaderProgram = 0;
	}

	if(glslFileName==NULL || *glslFileName==TEXT('\0'))
		return true;

	if(!LoadShaderFunctions()) {
        MessageBox(NULL, TEXT("Unable to load OpenGL shader functions"), TEXT("Shader Loading Error"),
			MB_OK|MB_ICONEXCLAMATION);
        return false;
    }

	hr = CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pXMLDoc));

	if(FAILED(hr)) {
		MessageBox(NULL, TEXT("Error creating XML Parser"), TEXT("Shader Loading Error"),
			MB_OK|MB_ICONEXCLAMATION);
		return false;
	}

	VARIANT fileName;
	VARIANT_BOOL ret;
	fileName.vt = VT_BSTR;
#ifdef UNICODE
	fileName.bstrVal = SysAllocString(glslFileName);
#else
	wchar_t tempfilename[MAX_PATH];
	MultiByteToWideChar(CP_UTF8,0,glslFileName,-1,tempfilename,MAX_PATH);
	fileName.bstrVal = SysAllocString(tempfilename);
#endif
	hr = pXMLDoc->load(fileName,&ret);
	SysFreeString(fileName.bstrVal);

	if(FAILED(hr) || hr==S_FALSE) {
		_stprintf(errorMsg,TEXT("Error loading GLSL shader file:\n%s"),glslFileName);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"), MB_OK|MB_ICONEXCLAMATION);
		pXMLDoc->Release();
		return false;
	}

	VARIANT attributeValue;
	BSTR attributeName;

	hr = pXMLDoc->get_documentElement(&pXDE);
	if(FAILED(hr) || hr==S_FALSE) {
		_stprintf(errorMsg,TEXT("Error loading root element from file:\n%s"),glslFileName);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"), MB_OK|MB_ICONEXCLAMATION);
		pXMLDoc->Release();
		return false;
	}

	attributeName=SysAllocString(L"language");
	pXDE->getAttribute(attributeName,&attributeValue);
	SysFreeString(attributeName);
	pXDE->Release();

	if(attributeValue.vt!=VT_BSTR || lstrcmpiW(attributeValue.bstrVal,L"glsl")) {
		_stprintf(errorMsg,TEXT("Shader language is <%s>, expected <GLSL> in file:\n%s"),attributeValue.bstrVal,glslFileName);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"), MB_OK|MB_ICONEXCLAMATION);
		if(attributeValue.vt==VT_BSTR) SysFreeString(attributeValue.bstrVal);
		pXMLDoc->Release();
		return false;
	}
	if(attributeValue.vt==VT_BSTR) SysFreeString(attributeValue.bstrVal);

	queryString=SysAllocString(L"/shader/fragment");
	hr = pXMLDoc->selectSingleNode(queryString,&pXDN);
	SysFreeString(queryString);

	if(hr == S_OK) {
		hr = pXDN->get_text(&nodeContent);
		if(hr == S_OK) {
			int requiredChars = WideCharToMultiByte(CP_ACP,0,nodeContent,-1,fragment,0,NULL,NULL);
			fragment = new char[requiredChars];
			WideCharToMultiByte(CP_UTF8,0,nodeContent,-1,fragment,requiredChars,NULL,NULL);
		}
		SysFreeString(nodeContent);
		pXDN->Release();
		pXDN = NULL;
	}

	queryString=SysAllocString(L"/shader/vertex");
	hr = pXMLDoc->selectSingleNode(queryString,&pXDN);
	SysFreeString(queryString);

	if(hr == S_OK) {
		hr = pXDN->get_text(&nodeContent);
		if(hr == S_OK) {
			int requiredChars = WideCharToMultiByte(CP_ACP,0,nodeContent,-1,vertex,0,NULL,NULL);
			vertex = new char[requiredChars];
			WideCharToMultiByte(CP_UTF8,0,nodeContent,-1,vertex,requiredChars,NULL,NULL);
		}
		SysFreeString(nodeContent);
		pXDN->Release();
		pXDN = NULL;
	}

	pXMLDoc->Release();

	if(!fragment && !vertex) {
		_stprintf(errorMsg,TEXT("No vertex or fragment program in file:\n%s"),glslFileName);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"), MB_OK|MB_ICONEXCLAMATION);
		return false;
	}

    shaderProgram = glCreateProgram ();
	if(vertex) {
		vertexShader = glCreateShader (GL_VERTEX_SHADER);
		glShaderSource(vertexShader, 1, (const GLchar **)&vertex, NULL);
		glCompileShader(vertexShader);
		glAttachShader(shaderProgram, vertexShader);
		delete[] vertex;
	}
	if(fragment) {
		fragmentShader = glCreateShader (GL_FRAGMENT_SHADER);
		glShaderSource(fragmentShader, 1, (const GLchar **)&fragment, NULL);    
		glCompileShader(fragmentShader);    
		glAttachShader(shaderProgram, fragmentShader);
		delete[] fragment;
	}

    glLinkProgram(shaderProgram);
    glUseProgram(shaderProgram);

	shader_type = OGL_SHADER_GLSL;

    return true;
}
// New
bool COpcXmlDocument::New(const COpcString& cRoot, const COpcString& cDefaultNamespace)
{
    HRESULT hResult = S_OK;

    IXMLDOMElement* ipRoot   = NULL;
    IXMLDOMNode*    ipResult = NULL;

    BSTR bstrRoot = SysAllocString((LPCWSTR)cRoot);

    TRY
    {
        // create new document instance.
        if (!New())
        {
            THROW_(hResult, E_FAIL);
        }

        // create root element.
        VARIANT vNodeType;
        vNodeType.vt   = VT_I4;
        vNodeType.lVal = NODE_ELEMENT;

        BSTR bstrNamespace = SysAllocString(cDefaultNamespace);
        hResult = m_ipDocument->createNode(vNodeType, bstrRoot, bstrNamespace, (IXMLDOMNode**)&ipRoot);
        SysFreeString(bstrNamespace);

        if (FAILED(hResult))
        {
            THROW();
        }

        // add root element to document.
        hResult = m_ipDocument->appendChild(ipRoot, &ipResult);

        if (FAILED(hResult))
        {
            THROW();
        }

        if (ipResult != NULL)
        {
            ipResult->Release();
            ipResult = NULL;
        }

        // declare element as the document element.
        hResult = m_ipDocument->putref_documentElement(ipRoot);

        if (FAILED(hResult))
        {
            THROW();
        }

        // add predefined namespaces
        AddNamespace(TAG_XSD, OPCXML_NS_SCHEMA);
        AddNamespace(TAG_XSI, OPCXML_NS_SCHEMA_INSTANCE);
    }

    CATCH
    {
        Clear();
    }

    FINALLY
    {
        // release memory.
        if (ipRoot != NULL) ipRoot->Release();
        if (ipResult != NULL) ipResult->Release();

        SysFreeString(bstrRoot);
    }

    return SUCCEEDED(hResult);
}
// New
bool COpcXmlDocument::New(IXMLDOMElement* ipElement)
{
    HRESULT hResult = S_OK;

    IXMLDOMElement* ipClone  = NULL;
    IXMLDOMNode*    ipParent = NULL;
    IXMLDOMNode*    ipResult = NULL;

    TRY
    {
        // create new document instance.
        if (!New())
        {
            THROW_(hResult, E_FAIL);
        }

        // clone the element.
        hResult = ipElement->cloneNode(VARIANT_TRUE, (IXMLDOMNode**)&ipClone);

        if (FAILED(hResult))
        {
            THROW();
        }

        // remove clone from parent.
        hResult = ipClone->get_parentNode(&ipParent);

        if (FAILED(hResult))
        {
            THROW();
        }

        if (ipParent != NULL)
        {
            hResult = ipParent->removeChild(ipClone, &ipResult);

            if (FAILED(hResult))
            {
                THROW();
            }

            if (ipResult != NULL)
            {
                ipResult->Release();
                ipResult = NULL;
            }
        }

        // add root element to document.
        hResult = m_ipDocument->appendChild(ipClone, &ipResult);

        if (FAILED(hResult))
        {
            THROW();
        }

        if (ipResult != NULL)
        {
            ipResult->Release();
            ipResult = NULL;
        }

        // declare element as the document element.
        hResult = m_ipDocument->putref_documentElement(ipClone);

        if (FAILED(hResult))
        {
            THROW();
        }

        // add predefined namespaces
        AddNamespace(TAG_XSD, OPCXML_NS_SCHEMA);
        AddNamespace(TAG_XSI, OPCXML_NS_SCHEMA_INSTANCE);
    }

    CATCH
    {
        Clear();
    }

    FINALLY
    {
        // release memory.
        if (ipClone != NULL)  ipClone->Release();
        if (ipParent != NULL) ipParent->Release();
        if (ipResult != NULL) ipResult->Release();
    }

    return SUCCEEDED(hResult);
}
Beispiel #17
0
bool CDirect3D::SetShaderHLSL(const TCHAR *file)
{
	//MUDLORD: the guts
	//Compiles a shader from files on disc
	//Sets LUT textures to texture files in PNG format.

	TCHAR folder[MAX_PATH];
	TCHAR rubyLUTfileName[MAX_PATH];
	TCHAR *slash;
	char *shaderText = NULL;

	TCHAR errorMsg[MAX_PATH + 50];

	IXMLDOMDocument * pXMLDoc = NULL;
	IXMLDOMElement * pXDE = NULL;
	IXMLDOMNode * pXDN = NULL;
	BSTR queryString, nodeContent;

	HRESULT hr;

	shaderTimer = 1.0f;
	shaderTimeStart = 0;
	shaderTimeElapsed = 0;

	if(effect) {
		effect->Release();
		effect = NULL;
	}
	for(int i = 0; i < MAX_SHADER_TEXTURES; i++) {
		if (rubyLUT[i] != NULL) {
			rubyLUT[i]->Release();
			rubyLUT[i] = NULL;
		}
	}
	if (file == NULL || *file==TEXT('\0'))
		return true;

	hr = CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pXMLDoc));

	if(FAILED(hr)) {
		MessageBox(NULL, TEXT("Error creating XML Parser"), TEXT("Shader Loading Error"),
			MB_OK|MB_ICONEXCLAMATION);
		return false;
	}

	VARIANT fileName;
	VARIANT_BOOL ret;
	fileName.vt = VT_BSTR;
#ifdef UNICODE
	fileName.bstrVal = SysAllocString(file);
#else
	wchar_t tempfilename[MAX_PATH];
	MultiByteToWideChar(CP_UTF8,0,file,-1,tempfilename,MAX_PATH);
	fileName.bstrVal = SysAllocString(tempfilename);
#endif
	hr = pXMLDoc->load(fileName,&ret);
	SysFreeString(fileName.bstrVal);

	if(FAILED(hr) || hr==S_FALSE) {
		_stprintf(errorMsg,TEXT("Error loading HLSL shader file:\n%s"),file);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"), MB_OK|MB_ICONEXCLAMATION);
		pXMLDoc->Release();
		return false;
	}

	VARIANT attributeValue;
	BSTR attributeName;

	hr = pXMLDoc->get_documentElement(&pXDE);
	if(FAILED(hr) || hr==S_FALSE) {
		_stprintf(errorMsg,TEXT("Error loading root element from file:\n%s"),file);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"), MB_OK|MB_ICONEXCLAMATION);
		pXMLDoc->Release();
		return false;
	}

	attributeName=SysAllocString(L"language");
	pXDE->getAttribute(attributeName,&attributeValue);
	SysFreeString(attributeName);
	pXDE->Release();

	if(attributeValue.vt!=VT_BSTR || lstrcmpiW(attributeValue.bstrVal,L"hlsl")) {
		_stprintf(errorMsg,TEXT("Shader language is <%s>, expected <HLSL> in file:\n%s"),attributeValue.bstrVal,file);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"), MB_OK|MB_ICONEXCLAMATION);
		if(attributeValue.vt==VT_BSTR) SysFreeString(attributeValue.bstrVal);
		pXMLDoc->Release();
		return false;
	}
	if(attributeValue.vt==VT_BSTR) SysFreeString(attributeValue.bstrVal);

	queryString=SysAllocString(L"/shader/source");
	hr = pXMLDoc->selectSingleNode(queryString,&pXDN);
	SysFreeString(queryString);

	if(hr == S_OK) {
		hr = pXDN->get_text(&nodeContent);
		if(hr == S_OK) {
			int requiredChars = WideCharToMultiByte(CP_ACP,0,nodeContent,-1,shaderText,0,NULL,NULL);
			shaderText = new char[requiredChars];
			WideCharToMultiByte(CP_UTF8,0,nodeContent,-1,shaderText,requiredChars,NULL,NULL);
		}
		SysFreeString(nodeContent);
		pXDN->Release();
		pXDN = NULL;
	}

	pXMLDoc->Release();

	if(!shaderText) {
		_stprintf(errorMsg,TEXT("No HLSL shader program in file:\n%s"),file);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"),
			MB_OK|MB_ICONEXCLAMATION);
		return false;
	}

	LPD3DXBUFFER pBufferErrors = NULL;
	hr = D3DXCreateEffect( pDevice,shaderText,strlen(shaderText),NULL, NULL,
		D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY, NULL, &effect, 
		&pBufferErrors );
	delete[] shaderText;
	if( FAILED(hr) ) {
		_stprintf(errorMsg,TEXT("Error parsing HLSL shader file:\n%s"),file);
		MessageBox(NULL, errorMsg, TEXT("Shader Loading Error"), MB_OK|MB_ICONEXCLAMATION);
		if(pBufferErrors) {
			LPVOID pCompilErrors = pBufferErrors->GetBufferPointer();
			MessageBox(NULL, (const TCHAR*)pCompilErrors, TEXT("FX Compile Error"),
				MB_OK|MB_ICONEXCLAMATION);
		}
		return false;
	}

	lstrcpy(folder,file);
	slash = _tcsrchr(folder,TEXT('\\'));
	if(slash)
		*(slash+1)=TEXT('\0');
	else
		*folder=TEXT('\0');
	SetCurrentDirectory(S9xGetDirectoryT(DEFAULT_DIR));

	for(int i = 0; i < MAX_SHADER_TEXTURES; i++) {		
		_stprintf(rubyLUTfileName, TEXT("%srubyLUT%d.png"), folder, i);
		hr = D3DXCreateTextureFromFile(pDevice,rubyLUTfileName,&rubyLUT[i]);
		if FAILED(hr){
			rubyLUT[i] = NULL;
		}
	}

	D3DXHANDLE hTech;
	effect->FindNextValidTechnique(NULL,&hTech);
	effect->SetTechnique( hTech );
	shader_type = D3D_SHADER_HLSL;
	return true;
}
HRESULT CKADmerge::Merge(string sAddOnFileName, BOOL bOverwrite, string sLogFile)
{
    HRESULT hRes = 0;

	IXMLDOMDocument * pXMLAddOn = NULL;

    if(sLogFile != "")
    {
        // open log file
        OpenLog(sLogFile, sDescription + " " + m_sFileName + " with " + sAddOnFileName);
    }

    try
	{
        // load AddOn file
        hRes = LoadXMLFile(sAddOnFileName, &pXMLAddOn);

        IXMLDOMElement * pKadRoot = NULL;
        hRes = GetRootElement(m_pXMLKad, &pKadRoot);
        if(hRes == S_FALSE)
        {
            // create root element
            hRes = GetRootElement(pXMLAddOn, &pKadRoot);
            if(hRes == S_FALSE)
            {
                throw string("ERROR: could not get addon kad root element: " + sAddOnFileName);
            }

            _bstr_t bTagName(GetName(pKadRoot).c_str());
            hRes = m_pXMLKad->createElement(bTagName, &pKadRoot);
            hRes = m_pXMLKad->putref_documentElement(pKadRoot);

            // log changes
            Log("Create Root-Element: " + GetName(pKadRoot) );

            m_bIsDirty = TRUE;
        }

        if(pKadRoot)
            pKadRoot->Release();

	    IXMLDOMNode * pXMLKadNode = NULL;
	    IXMLDOMNode * pXMLAddOnNode = NULL;

        hRes = GetRootElement(m_pXMLKad, &pXMLKadNode);
        hRes = GetRootElement(pXMLAddOn, &pXMLAddOnNode);

        // copy nodes
        hRes = CopyNode(&pXMLKadNode, &pXMLAddOnNode, bOverwrite, "");

	    if(pXMLKadNode != NULL)
		    pXMLKadNode->Release();
	    if(pXMLAddOnNode != NULL)
		    pXMLAddOnNode->Release();

        if(m_bIsDirty)
        {
            hRes = SaveXMLFile(m_sFileName, m_pXMLKad);
            m_bIsDirty = FALSE;
        }
	}
	catch(string str)
	{
        Log(str);
        hRes = S_FALSE;
	}

	if(pXMLAddOn != NULL)
		pXMLAddOn->Release();

    // close log file
    CloseLog();

    return hRes;
}