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(); }