dx11ShaderTexture::dx11ShaderTexture(ShaderTexture::Format format,ShaderTexture::Packing packing,int width,int height,const void *data,ShaderTexture::Wrap wrap,ShaderTexture::Filtering filtering)
{
    this->width=width;
    this->height=height;
    this->wrap=wrap;
    this->filter=filter;

    D3D11_TEXTURE2D_DESC tdesc;
    D3D11_SUBRESOURCE_DATA tbsd;

    tdesc.Width = width;
    tdesc.Height = height;
    tdesc.MipLevels = 1;
    tdesc.ArraySize = 1;
    tdesc.SampleDesc.Count = 1;
    tdesc.SampleDesc.Quality = 0;
    tdesc.Usage = D3D11_USAGE_DEFAULT;
    tdesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
    tdesc.CPUAccessFlags = 0;
    tdesc.MiscFlags = 0;
    tdesc.Format = DXGI_FORMAT_UNKNOWN;
    switch (format)
    {
    case FMT_ALPHA:
        tbsd.SysMemPitch = width;
        tdesc.Format = DXGI_FORMAT_A8_UNORM;
        break;
    case FMT_RGB:
        switch (packing)
        {
        //case PK_UBYTE: tbsd.SysMemPitch = width*3; tdesc.Format = DXGI_FORMAT_R8G8B8_UNORM; break;
        case PK_USHORT_565:
            tbsd.SysMemPitch = width*2;
            tdesc.Format = DXGI_FORMAT_B5G6R5_UNORM;
            break;
        }
        break;
    case FMT_RGBA:
        switch (packing)
        {
        case PK_UBYTE:
            tbsd.SysMemPitch = width*4;
            tdesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
            break;
        case PK_USHORT_4444:
            tbsd.SysMemPitch = width*2;
            tdesc.Format = DXGI_FORMAT_B4G4R4A4_UNORM;
            break;
        case PK_USHORT_5551:
            tbsd.SysMemPitch = width*2;
            tdesc.Format = DXGI_FORMAT_B5G5R5A1_UNORM;
            break;
        }
        break;
    }

    tbsd.SysMemSlicePitch = tbsd.SysMemPitch*height; // not needed
    tbsd.pSysMem = data;
    if (tdesc.Format == DXGI_FORMAT_UNKNOWN) {
        glog_w("glTexImage2D: unknown internal format");
        exit(1);
    }

    g_dev->CreateTexture2D(&tdesc,&tbsd,&tex);
    g_dev->CreateShaderResourceView(tex,NULL,&rsv);

//    g_devcon->PSSetShaderResources(0,1,&g_RSV[g_curr_texind]);
}
void ApplicationManager::play(const char *gapp) {
	FILE *fd=fopen(gapp,"rb");
	if (!fd) return; //No file/not openable
	fseek(fd,0,SEEK_END);
	long pksz=ftell(fd);
	if (pksz < 16)
		return; //Invalid file size
	struct {
		uint32_t flistOffset;
		uint32_t version;
		char signature[8];
	} PACKED tlr;
	fseek(fd,pksz - 16,SEEK_SET);
	fread(&tlr,1,16,fd);
	tlr.version = BIGENDIAN4(tlr.version);
	tlr.flistOffset = BIGENDIAN4(tlr.flistOffset);
	if ((!strncmp(tlr.signature, "GiDeRoS", 7)) && (tlr.version == 0)) {
		glog_v("GAPP-ARCH: %s", gapp);
		gvfs_setZipFile(gapp);
		char *buffer = (char *) malloc(pksz - tlr.flistOffset);
		fseek(fd,tlr.flistOffset,SEEK_SET);
		fread(buffer, 1,pksz - tlr.flistOffset,fd);
		int offset = 0;
		while (offset < (pksz - tlr.flistOffset)) {
			int plen = strlen(buffer + offset);
			if (!plen)
				break; //End of list
			uint32_t foffset=PBULONG(buffer + offset + plen + 1);
			uint32_t fsize=PBULONG(buffer + offset + plen + 1+sizeof(uint32_t));
			const char *norm = gpath_normalizeArchivePath(buffer + offset);
			gvfs_addFile(norm, 0, foffset, fsize);
			//glog_d("GAPP-FILE: %s,%d,%d", norm, foffset, fsize);
			offset += (plen + 1 + 2 * sizeof(uint32_t));
		}
		free(buffer);
	} else
		glog_w("GAPP: Invalid signature/version");
	fclose(fd);

	if (running_ == true) {
		Event event(Event::APPLICATION_EXIT);
		GStatus status;
		application_->broadcastEvent(&event, &status);
		running_ = false;
	}

	std::string gappfile=gapp;
	std::string projectName=gappfile.substr(0,gappfile.find_last_of('.')-1);


	const char* documentsDirectory;
	const char* temporaryDirectory;

	std::string dir = "/";

	std::string documents = dir + "documents"+appPath;
	std::string temporary = dir + "temporary";
	_mkdir(documents.c_str());
	_mkdir(temporary.c_str());

	glog_v("documents: %s", documents.c_str());
	glog_v("temporary: %s", temporary.c_str());

	mkdir(documents.c_str(), 0755);
	mkdir(temporary.c_str(), 0755);

	setDocumentsDirectory(documents.c_str());
	setTemporaryDirectory(temporary.c_str());
	setResourceDirectory("");

	loadProperties();
	loadLuaFiles();
}