-
-// XXX: Don't duplicate this code.
-
-static LRESULT CALLBACK
-WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- MINMAXINFO *pMMI;
- switch (uMsg) {
- case WM_GETMINMAXINFO:
- // Allow to create a window bigger than the desktop
- pMMI = (MINMAXINFO *)lParam;
- pMMI->ptMaxSize.x = 60000;
- pMMI->ptMaxSize.y = 60000;
- pMMI->ptMaxTrackSize.x = 60000;
- pMMI->ptMaxTrackSize.y = 60000;
- break;
- default:
- break;
- }
-
- return DefWindowProc(hWnd, uMsg, wParam, lParam);
-}
-
-
-DEFINE_GUID(GUID_APITRACE,0X7D71CAC9,0X7F58,0X432C,0XA9,0X75,0XA1,0X9F,0XCF,0XCE,0XFD,0X14);
-
-
-static HWND
-createWindow(int width, int height) {
- static bool first = TRUE;
- RECT rect;
-
- if (first) {
- WNDCLASS wc;
- memset(&wc, 0, sizeof wc);
- wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wc.lpfnWndProc = WndProc;
- wc.lpszClassName = "d3dretrace";
- wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
- RegisterClass(&wc);
- first = FALSE;
- }
-
- DWORD dwExStyle;
- DWORD dwStyle;
- HWND hWnd;
-
- dwExStyle = 0;
- dwStyle = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW;
-
- int x = 0, y = 0;
-
- rect.left = x;
- rect.top = y;
- rect.right = rect.left + width;
- rect.bottom = rect.top + height;
-
- AdjustWindowRectEx(&rect, dwStyle, FALSE, dwExStyle);
-
- hWnd = CreateWindowEx(dwExStyle,
- "d3dretrace", /* wc.lpszClassName */
- NULL,
- dwStyle,
- 0, /* x */
- 0, /* y */
- rect.right - rect.left, /* width */
- rect.bottom - rect.top, /* height */
- NULL,
- NULL,
- NULL,
- NULL);
- ShowWindow(hWnd, SW_SHOW);
- return hWnd;
-}
-
-
-
-typedef HRESULT
-(WINAPI *PD3DXASSEMBLESHADER)(
- LPCSTR pSrcData,
- UINT SrcDataLen,
- const D3DXMACRO *pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER *ppShader,
- LPD3DXBUFFER *ppErrorMsgs
-);
-
-DWORD *
-extractShader(LPCSTR pSrcData)
-{
- static BOOL firsttime = TRUE;
- static HMODULE hD3DXModule = NULL;
- static PD3DXASSEMBLESHADER pfnD3DXAssembleShader = NULL;
-
- if (firsttime) {
- if (!hD3DXModule) {
- unsigned release;
- int version;
- for (release = 0; release <= 1; ++release) {
- /* Version 41 corresponds to Mar 2009 version of DirectX Runtime / SDK */
- for (version = 41; version >= 0; --version) {
- char filename[256];
- _snprintf(filename, sizeof(filename),
- "d3dx9%s%s%u.dll", release ? "" : "d", version ? "_" : "", version);
- hD3DXModule = LoadLibraryA(filename);
- if (hD3DXModule)
- goto found;
- }
- }
-found:
- ;
- }
-
- if (hD3DXModule) {
- if (!pfnD3DXAssembleShader) {
- pfnD3DXAssembleShader = (PD3DXASSEMBLESHADER)GetProcAddress(hD3DXModule, "D3DXAssembleShader");
- }
- }
-
- firsttime = FALSE;
- }
-
- if (pfnD3DXAssembleShader) {
- LPD3DXBUFFER pTokens = NULL;
- HRESULT hr;
-
- hr = pfnD3DXAssembleShader(pSrcData, strlen(pSrcData), NULL, NULL, 0, &pTokens, NULL);
- if (SUCCEEDED(hr)) {
- return (DWORD *)pTokens->GetBufferPointer();
- }
-
- // FIXME: Don't leak pTokens
- }
-
- return NULL;
-}