Пример #1
0
void CheckBox::DrawElement(C4FacetEx &cgo)
	{
	// left side: check facet (squared)
	int x0 = rcBounds.x + cgo.TargetX;
	int y0 = rcBounds.y + cgo.TargetY;
	GetRes()->fctCheckbox.GetPhase(fChecked + 2*!fEnabled).DrawX(cgo.Surface, x0, y0, rcBounds.Hgt, rcBounds.Hgt);
	// right of it: checkbox text
	CStdFont *pUseFont = pFont ? pFont : &(GetRes()->TextFont);
	int32_t yOff; float fZoom;
	if (pUseFont->GetLineHeight() <= rcBounds.Hgt)
		{
		yOff = Max<int32_t>(rcBounds.Hgt - pUseFont->GetLineHeight(), 0)/2;
		fZoom = 1.0f;
		}
	else
		{
		yOff = 0;
		fZoom = (float) rcBounds.Hgt / Max(pUseFont->GetLineHeight(), 1);
		}
	lpDDraw->TextOut(sCaption.getData(), *pUseFont, fZoom, cgo.Surface, x0 + rcBounds.Hgt + C4GUI_CheckBoxLabelSpacing, y0 + yOff, fEnabled ? dwEnabledClr : dwDisabledClr, ALeft, true);
	// selection marker
	if ((fMouseOn && IsInActiveDlg(false)) || HasDrawFocus())
		{
		lpDDraw->SetBlitMode(C4GFXBLIT_ADDITIVE);
		GetRes()->fctButtonHighlight.DrawX(cgo.Surface, x0+rcBounds.Hgt*1/4, y0+rcBounds.Hgt*1/4, rcBounds.Hgt*1/2, rcBounds.Hgt*1/2);
		lpDDraw->ResetBlitMode();
		}
	}
Пример #2
0
double ummcase0
(
   char pre,                  /* type prefix */
   int M, int N, int K,       /* problem sizes to time */
   int mb, int nb, int kb,    /* 0: variable NB, else fixed cpp macro of NB */
   int lda, int ldb, int ldc, /* leading dims */
   int muladd, int lat,       /* muladd and latency settings */
   int mu, int nu, int ku,    /* unrolling factors */
   char *fnam,                /* file name to compile */
   char *MCC, char *MMFLAGS,  /* NULL : use defaults, else comp to use */
   char *outnam               /* output name */
)
{
   char ln[512];
   int i;
   double mf;

   if (!FileExists(outnam))
   {
      if (pre == 'c' || pre == 'z')
         i = sprintf(ln, "make cmmucase mmrout=../CASES/%s csC=2 ", fnam);
      else i = sprintf(ln, "make mmucase mmrout=../CASES/%s ", fnam);
      if (MCC) i += sprintf(ln+i, "MCC=\"%s\" MMFLAGS=\"%s\" ", MCC, MMFLAGS);
      i += sprintf(ln+i, "casnam=%s ", outnam);
      i += sprintf(ln+i, "pre=%c muladd=%d lat=%d M=%d N=%d K=%d mb=%d nb=%d kb=%d mu=%d nu=%d ku=%d lda=%d ldb=%d ldc=%d ",
                   pre, muladd, lat, M, N, K, mb, nb, kb, mu, nu, ku,
                   lda, ldb, ldc);
      i += sprintf(ln+i, "\n");
      fprintf(stdout, "%s", ln);
      if (system(ln) != 0) return(-1.0);
   }
   mf = GetRes(outnam);
   if (mf == NO_RESULTS) mf = -1.0;
   return(mf);
}
Пример #3
0
void ScrollBar::DrawElement(C4FacetEx &cgo)
	{
	// do scrolling
	// not quite perfect; but there's no OnIdle, and it's be a bit of overkill starting a timer
	if (fTopDown && fScrolling && iScrollPos>0)
		{ --iScrollPos; OnPosChanged(); }
	if (fBottomDown && fScrolling)
		{
		if (iScrollPos < GetMaxScroll()) { ++iScrollPos; OnPosChanged(); }
		}
	// draw bar
	ScrollBarFacets &rUseGfx = pCustomGfx ? *pCustomGfx : GetRes()->sfctScroll;
	DynBarFacet bar = rUseGfx.barScroll;
	if (fTopDown) bar.fctBegin = rUseGfx.fctScrollDTop;
	if (fBottomDown) bar.fctEnd = rUseGfx.fctScrollDBottom;
	if (fHorizontal)
		DrawHBarByVGfx(cgo, bar);
	else
		DrawVBar(cgo, bar);
	// draw scroll pin
	if (fScrolling && HasPin())
		if (fHorizontal)
			rUseGfx.fctScrollPin.Draw(cgo.Surface, cgo.TargetX+rcBounds.x+C4GUI_ScrollArrowWdt+iScrollPos, cgo.TargetY+rcBounds.y);
		else
			rUseGfx.fctScrollPin.Draw(cgo.Surface, cgo.TargetX+rcBounds.x, cgo.TargetY+rcBounds.y+C4GUI_ScrollArrowHgt+iScrollPos);
	}
Пример #4
0
void D3D11Context::Resize() {
	LostBackbuffer();
	int width;
	int height;
	GetRes(hWnd_, width, height);
	swapChain_->ResizeBuffers(0, width, height, DXGI_FORMAT_UNKNOWN, 0);
	GotBackbuffer();
}
Пример #5
0
size_t DuiResProviderFiles::GetRawBufferSize( LPCTSTR strType,UINT uID )
{
    CDuiStringT strPath=GetRes(strType,uID);
    if(strPath.IsEmpty()) return 0;
    WIN32_FIND_DATA wfd;
    HANDLE hf=FindFirstFile(strPath,&wfd);
    if(INVALID_HANDLE_VALUE==hf) return 0;
    FindClose(hf);
    return wfd.nFileSizeLow;
}
Пример #6
0
/*************************************************
	Function: 		main
	Description: 	主函数
	Calls: 			scanf	printf
	Called By:		编译器
	Input: 			无
	Output: 		无
	Return: 		0
*************************************************/
int main(void)
{
	double a, b, c, d, x;
	printf("enter the a,b,c,d:\n");
	scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
	printf("enter the evaluated x:\n");
	scanf("%lf", &x);
	// printf("the result is : %lf", GetRes(-5, 3, 6, 2, 1.5));
	printf("the result is : %lf", GetRes(a, b, c, d, x));
}
Пример #7
0
bool CheckBox::GetStandardCheckBoxSize(int *piWdt, int *piHgt, const char *szForCaptionText, CStdFont *pUseFont)
	{
	// get needed text size
	if (!pUseFont) pUseFont = &(GetRes()->TextFont);
	int32_t iWdt=100, iHgt=32;
	pUseFont->GetTextExtent(szForCaptionText, iWdt, iHgt, true);
	// check box height equals text height
	// add check box plus indent
	if (piWdt) *piWdt = iWdt + iHgt + C4GUI_CheckBoxLabelSpacing;
	if (piHgt) *piHgt = iHgt;
	return true;
	}
Пример #8
0
CDuiImgBase * DuiResProviderFiles::LoadImage( LPCTSTR strType,UINT uID )
{
    if(!HasResource(strType,uID)) return NULL;
    CDuiImgBase * pImg=GetImageDecoder()->CreateDuiImage(strType);
    if(pImg)
    {
        CDuiStringT strPath=GetRes(strType,uID);
        if(!pImg->LoadFromFile(strPath))
        {
            GetImageDecoder()->DestoryDuiImage(pImg);
            pImg=NULL;
        }
    }
    return pImg;
}
Пример #9
0
BOOL DuiResProviderFiles::GetRawBuffer( LPCTSTR strType,UINT uID,LPVOID pBuf,size_t size )
{
    CDuiStringT strPath=GetRes(strType,uID);
    if(strPath.IsEmpty()) return FALSE;
    FILE *f=_tfopen(strPath,_T("rb"));
    if(!f) return FALSE;
    size_t len=_filelength(_fileno(f));
    if(len>size)
    {
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        fclose(f);
        return FALSE;
    }
    BOOL bRet=(len==fread(pBuf,1,len,f));

    fclose(f);
    return bRet;
}
Пример #10
0
bool RCFile::Read()
{
    resFile.Reset();
    resFile.Add(new FileHeader()); // add the 32 byte header into the resource database
    
    Resource *res;
    try
    {
        while (!lexer.AtEof() && (res = GetRes()))
            resFile.Add(res);
    }
    catch (std::runtime_error *e)
    {
        Errors::Error(e->what());
        delete e;
        return false;
    }
    return true;
}
Пример #11
0
void D3D9_Resize(HWND window) {
    // This should only be called from the emu thread.

    int xres, yres;
    GetRes(xres, yres);
    bool w_changed = pp.BackBufferWidth != xres;
    bool h_changed = pp.BackBufferHeight != yres;

    if (device && (w_changed || h_changed)) {
        DX9::fbo_shutdown();

        pp.BackBufferWidth = xres;
        pp.BackBufferHeight = yres;
        HRESULT hr = device->Reset(&pp);
        if (FAILED(hr)) {
            ERROR_LOG_REPORT(G3D, "Unable to reset device: %s", DXGetErrorStringA(hr));
            PanicAlert("Unable to reset D3D9 device: %s", DXGetErrorStringA(hr));
        }
        DX9::fbo_init(d3d);
    }
}
void D3D9Context::Resize() {
	// This should only be called from the emu thread.

	int xres, yres;
	GetRes(hWnd, xres, yres);
	bool w_changed = pp.BackBufferWidth != xres;
	bool h_changed = pp.BackBufferHeight != yres;

	if (device && (w_changed || h_changed)) {
		DX9::fbo_shutdown();

		pp.BackBufferWidth = xres;
		pp.BackBufferHeight = yres;
		HRESULT hr = device->Reset(&pp);
		if (FAILED(hr)) {
      // Had to remove DXGetErrorStringA calls here because dxerr.lib is deprecated and will not link with VS 2015.
			ERROR_LOG_REPORT(G3D, "Unable to reset D3D device");
			PanicAlert("Unable to reset D3D9 device");
		}
		DX9::fbo_init(d3d);
	}
}
Пример #13
0
void Screen::DrawToolTip(const char *szTip, C4FacetEx &cgo, int32_t x, int32_t y)
	{
	CStdFont *pUseFont = &(GetRes()->TooltipFont);
	StdStrBuf sText;
	pUseFont->BreakMessage(szTip, Min<int32_t>(C4GUI_MaxToolTipWdt, Max<int32_t>(cgo.Wdt, 50)), &sText, true);
	// get tooltip rect
	int32_t tWdt,tHgt;
	if (pUseFont->GetTextExtent(sText.getData(), tWdt, tHgt, true))
		{
		tWdt+=6; tHgt+=4;
		int32_t tX, tY;
		if (y < cgo.Y+cgo.TargetY+tHgt+5) tY = Min<int32_t>(y+5, cgo.TargetY+cgo.Hgt-tHgt); else tY = y-tHgt-5;
		tX = BoundBy<int32_t>(x-tWdt/2, cgo.TargetX+cgo.X, cgo.TargetX+cgo.Wdt-tWdt);
		// draw tooltip box 
		lpDDraw->DrawBoxDw(cgo.Surface, tX,tY,tX+tWdt-1,tY+tHgt-2, C4GUI_ToolTipBGColor);
		lpDDraw->DrawFrameDw(cgo.Surface, tX,tY,tX+tWdt-1,tY+tHgt-1, C4GUI_ToolTipFrameColor);
		// draw tooltip
		lpDDraw->TextOut(sText.getData(), *pUseFont, 1.0f, cgo.Surface, tX+3,tY+1, C4GUI_ToolTipColor, ALeft);
		// while there's a tooltip, redraw the bg, because it might overlap
		Game.GraphicsSystem.InvalidateBg();
		}
	}
Пример #14
0
HBITMAP DuiResProviderFiles::LoadBitmap( LPCTSTR strType,UINT uID )
{
    CDuiStringT strPath=GetRes(strType,uID);
    if(strPath.IsEmpty()) return NULL;
    return (HBITMAP)::LoadImage(NULL, strPath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
}
bool D3D9Context::Init(HINSTANCE hInst, HWND wnd, std::string *error_message) {
	bool windowed = true;
	hWnd = wnd;

	DIRECT3DCREATE9EX g_pfnCreate9ex;

	hD3D9 = LoadLibrary(TEXT("d3d9.dll"));
	if (!hD3D9) {
		ELOG("Missing d3d9.dll");
		*error_message = "D3D9.dll missing - try reinstalling DirectX.";
		return false;
	}

	int d3dx_version = LoadD3DX9Dynamic();
	if (!d3dx_version) {
		*error_message = "D3DX DLL not found! Try reinstalling DirectX.";
		return false;
	}

	g_pfnCreate9ex = (DIRECT3DCREATE9EX)GetProcAddress(hD3D9, "Direct3DCreate9Ex");
	has9Ex = (g_pfnCreate9ex != NULL) && IsVistaOrHigher();

	if (has9Ex) {
		HRESULT result = g_pfnCreate9ex(D3D_SDK_VERSION, &d3dEx);
		d3d = d3dEx;
		if (FAILED(result)) {
			FreeLibrary(hD3D9);
			*error_message = "D3D9Ex available but context creation failed. Try reinstalling DirectX.";
			return false;
		}
	} else {
		d3d = Direct3DCreate9(D3D_SDK_VERSION);
		if (!d3d) {
			FreeLibrary(hD3D9);
			*error_message = "Failed to create D3D9 context. Try reinstalling DirectX.";
			return false;
		}
	}

	D3DCAPS9 d3dCaps;

	D3DDISPLAYMODE d3ddm;
	if (FAILED(d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm))) {
		*error_message = "GetAdapterDisplayMode failed";
		d3d->Release();
		return false;
	}

	adapterId = D3DADAPTER_DEFAULT;
	if (FAILED(d3d->GetDeviceCaps(adapterId, D3DDEVTYPE_HAL, &d3dCaps))) {
		*error_message = "GetDeviceCaps failed (???)";
		d3d->Release();
		return false;
	}

	HRESULT hr;
	if (FAILED(hr = d3d->CheckDeviceFormat(D3DADAPTER_DEFAULT,
		D3DDEVTYPE_HAL,
		d3ddm.Format,
		D3DUSAGE_DEPTHSTENCIL,
		D3DRTYPE_SURFACE,
		D3DFMT_D24S8))) {
		if (hr == D3DERR_NOTAVAILABLE) {
			*error_message = "D24S8 depth/stencil not available";
			d3d->Release();
			return false;
		}
	}

	DWORD dwBehaviorFlags = D3DCREATE_MULTITHREADED | D3DCREATE_FPU_PRESERVE;
	if (d3dCaps.VertexProcessingCaps != 0)
		dwBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
	else
		dwBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;

	int xres, yres;
	GetRes(hWnd, xres, yres);

	memset(&pp, 0, sizeof(pp));
	pp.BackBufferWidth = xres;
	pp.BackBufferHeight = yres;
	pp.BackBufferFormat = d3ddm.Format;
	pp.MultiSampleType = D3DMULTISAMPLE_NONE;
	pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
	pp.Windowed = windowed;
	pp.hDeviceWindow = wnd;
	pp.EnableAutoDepthStencil = true;
	pp.AutoDepthStencilFormat = D3DFMT_D24S8;
	pp.PresentationInterval = (g_Config.bVSync) ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE;

	if (has9Ex) {
		if (windowed && IsWin7OrLater()) {
			// This new flip mode gives higher performance.
			// TODO: This makes it slower?
			//pp.BackBufferCount = 2;
			//pp.SwapEffect = D3DSWAPEFFECT_FLIPEX;
		}
		hr = d3dEx->CreateDeviceEx(adapterId, D3DDEVTYPE_HAL, wnd, dwBehaviorFlags, &pp, NULL, &deviceEx);
		device = deviceEx;
	} else {
		hr = d3d->CreateDevice(adapterId, D3DDEVTYPE_HAL, wnd, dwBehaviorFlags, &pp, &device);
	}

	if (FAILED(hr)) {
		*error_message = "Failed to create D3D device";
		d3d->Release();
		return false;
	}

	device->BeginScene();
	DX9::pD3Ddevice = device;
	DX9::pD3DdeviceEx = deviceEx;

	if (!DX9::CompileShaders(*error_message)) {
		*error_message = "Unable to compile shaders: " + *error_message;
		device->EndScene();
		device->Release();
		d3d->Release();
		DX9::pD3Ddevice = nullptr;
		DX9::pD3DdeviceEx = nullptr;
		device = nullptr;
		UnloadD3DXDynamic();
		return false;
	}

	DX9::fbo_init(d3d);

	if (deviceEx && IsWin7OrLater()) {
		// TODO: This makes it slower?
		//deviceEx->SetMaximumFrameLatency(1);
	}

	return true;
}
Пример #16
0
bool D3D11Context::Init(HINSTANCE hInst, HWND wnd, std::string *error_message) {
	hWnd_ = wnd;
	LoadD3D11Error result = LoadD3D11();

	HRESULT hr = E_FAIL;
	std::vector<std::string> adapterNames;
	std::string chosenAdapterName;
	if (result == LoadD3D11Error::SUCCESS) {
		std::vector<IDXGIAdapter *> adapters;
		int chosenAdapter = 0;

		IDXGIFactory * pFactory = nullptr;
		ptr_CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&pFactory);

		IDXGIAdapter *pAdapter;
		for (UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; i++) {
			adapters.push_back(pAdapter);
			DXGI_ADAPTER_DESC desc;
			pAdapter->GetDesc(&desc);
			std::string str = ConvertWStringToUTF8(desc.Description);
			adapterNames.push_back(str);
			if (str == g_Config.sD3D11Device) {
				chosenAdapter = i;
			}
		}

		chosenAdapterName = adapterNames[chosenAdapter];
		hr = CreateTheDevice(adapters[chosenAdapter]);
		for (int i = 0; i < (int)adapters.size(); i++) {
			adapters[i]->Release();
		}
	}

	if (FAILED(hr)) {
		const char *defaultError = "Your GPU does not appear to support Direct3D 11.\n\nWould you like to try again using Direct3D 9 instead?";
		I18NCategory *err = GetI18NCategory("Error");

		std::wstring error;

		if (result == LoadD3D11Error::FAIL_NO_COMPILER) {
			error = ConvertUTF8ToWString(err->T("D3D11CompilerMissing", "D3DCompiler_47.dll not found. Please install. Or press Yes to try again using Direct3D9 instead."));
		} else if (result == LoadD3D11Error::FAIL_NO_D3D11) {
			error = ConvertUTF8ToWString(err->T("D3D11Missing", "Your operating system version does not include D3D11. Please run Windows Update.\n\nPress Yes to try again using Direct3D9 instead."));
		}

		error = ConvertUTF8ToWString(err->T("D3D11NotSupported", defaultError));
		std::wstring title = ConvertUTF8ToWString(err->T("D3D11InitializationError", "Direct3D 11 initialization error"));
		bool yes = IDYES == MessageBox(hWnd_, error.c_str(), title.c_str(), MB_ICONERROR | MB_YESNO);
		if (yes) {
			// Change the config to D3D9 and restart.
			g_Config.iGPUBackend = (int)GPUBackend::DIRECT3D9;
			g_Config.sFailedGPUBackends.clear();
			g_Config.Save("save_d3d9_fallback");

			W32Util::ExitAndRestart();
		}
		return false;
	}

	if (FAILED(device_->QueryInterface(__uuidof (ID3D11Device1), (void **)&device1_))) {
		device1_ = nullptr;
	}

	if (FAILED(context_->QueryInterface(__uuidof (ID3D11DeviceContext1), (void **)&context1_))) {
		context1_ = nullptr;
	}

#ifdef _DEBUG
	if (SUCCEEDED(device_->QueryInterface(__uuidof(ID3D11Debug), (void**)&d3dDebug_))) {
		if (SUCCEEDED(d3dDebug_->QueryInterface(__uuidof(ID3D11InfoQueue), (void**)&d3dInfoQueue_))) {
			d3dInfoQueue_->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_CORRUPTION, true);
			d3dInfoQueue_->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_ERROR, true);
			d3dInfoQueue_->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_WARNING, true);
		}
	}
#endif

	draw_ = Draw::T3DCreateD3D11Context(device_, context_, device1_, context1_, featureLevel_, hWnd_, adapterNames);
	SetGPUBackend(GPUBackend::DIRECT3D11, chosenAdapterName);
	bool success = draw_->CreatePresets();  // If we can run D3D11, there's a compiler installed. I think.
	_assert_msg_(G3D, success, "Failed to compile preset shaders");

	int width;
	int height;
	GetRes(hWnd_, width, height);

	// Obtain DXGI factory from device (since we used nullptr for pAdapter above)
	IDXGIFactory1* dxgiFactory = nullptr;
	IDXGIDevice* dxgiDevice = nullptr;
	IDXGIAdapter* adapter = nullptr;
	hr = device_->QueryInterface(__uuidof(IDXGIDevice), reinterpret_cast<void**>(&dxgiDevice));
	if (SUCCEEDED(hr)) {
		hr = dxgiDevice->GetAdapter(&adapter);
		if (SUCCEEDED(hr)) {
			hr = adapter->GetParent(__uuidof(IDXGIFactory1), reinterpret_cast<void**>(&dxgiFactory));
			DXGI_ADAPTER_DESC desc;
			adapter->GetDesc(&desc);
			adapter->Release();
		}
		dxgiDevice->Release();
	}

	// DirectX 11.0 systems
	DXGI_SWAP_CHAIN_DESC sd;
	ZeroMemory(&sd, sizeof(sd));
	sd.BufferCount = 1;
	sd.BufferDesc.Width = width;
	sd.BufferDesc.Height = height;
	sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
	sd.BufferDesc.RefreshRate.Numerator = 60;
	sd.BufferDesc.RefreshRate.Denominator = 1;
	sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
	sd.OutputWindow = hWnd_;
	sd.SampleDesc.Count = 1;
	sd.SampleDesc.Quality = 0;
	sd.Windowed = TRUE;

	hr = dxgiFactory->CreateSwapChain(device_, &sd, &swapChain_);
	dxgiFactory->MakeWindowAssociation(hWnd_, DXGI_MWA_NO_ALT_ENTER);
	dxgiFactory->Release();

	GotBackbuffer();
	return true;
}
Пример #17
0
HICON DuiResProviderFiles::LoadIcon( LPCTSTR strType,UINT uID ,int cx/*=0*/,int cy/*=0*/)
{
    CDuiStringT strPath=GetRes(strType,uID);
    if(strPath.IsEmpty()) return NULL;
    return (HICON)::LoadImage(NULL, strPath, IMAGE_ICON, cx, cy, LR_LOADFROMFILE);
}