Use OBJREF on the wire for generic marshaling functions.
[wine] / dlls / wined3d / wined3d_main.c
1 /*
2  * Direct3D wine internal interface main
3  *
4  * Copyright 2002-2003 The wine-d3d team
5  * Copyright 2002-2003 Raphael Junqueira
6  * Copyright 2004      Jason Edmeades   
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 #include "config.h"
24
25 #include "wined3d_private.h"
26
27 WINE_DEFAULT_DEBUG_CHANNEL(wine_d3d);
28
29 int num_lock = 0;
30 void (*wine_tsx11_lock_ptr)(void) = NULL;
31 void (*wine_tsx11_unlock_ptr)(void) = NULL;
32 int vs_mode = VS_HW;   /* Hardware by default */
33 int ps_mode = PS_NONE; /* Disabled by default */
34
35 IWineD3D* WINAPI WineDirect3DCreate(UINT SDKVersion, UINT dxVersion, IUnknown *parent) {
36     IWineD3DImpl* object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DImpl));
37     object->lpVtbl = &IWineD3D_Vtbl;
38     object->dxVersion = dxVersion;
39     object->ref = 1;
40     object->parent = parent;
41
42     TRACE("Created WineD3D object @ %p for d3d%d support\n", object, dxVersion);
43
44     return (IWineD3D *)object;
45 }
46
47 /* At process attach */
48 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
49 {
50     TRACE("WineD3D DLLMain Reason=%ld\n", fdwReason);
51     if (fdwReason == DLL_PROCESS_ATTACH)
52     {
53        HMODULE mod;
54        char buffer[32];
55        DWORD size = sizeof(buffer);
56        HKEY hkey = 0;
57
58        DisableThreadLibraryCalls(hInstDLL);
59
60        mod = GetModuleHandleA( "x11drv.dll" );
61        if (mod)
62        {
63            wine_tsx11_lock_ptr   = (void *)GetProcAddress( mod, "wine_tsx11_lock" );
64            wine_tsx11_unlock_ptr = (void *)GetProcAddress( mod, "wine_tsx11_unlock" );
65        }
66        if ( !RegOpenKeyA( HKEY_LOCAL_MACHINE, "Software\\Wine\\Direct3D", &hkey) )
67        {
68            if ( !RegQueryValueExA( hkey, "VertexShaderMode", 0, NULL, buffer, &size) )
69            {
70                if (!strcmp(buffer,"none"))
71                {
72                    TRACE("Disable vertex shaders\n");
73                    vs_mode = VS_NONE;
74                }
75                else if (!strcmp(buffer,"emulation"))
76                {
77                    TRACE("Force SW vertex shaders\n");
78                    vs_mode = VS_SW;
79                }
80            }
81            if ( !RegQueryValueExA( hkey, "PixelShaderMode", 0, NULL, buffer, &size) )
82            {
83                if (!strcmp(buffer,"enabled"))
84                {
85                    TRACE("Allow pixel shaders\n");
86                    ps_mode = PS_HW;
87                }
88            }
89        }
90        if (vs_mode == VS_HW)
91            TRACE("Allow HW vertex shaders\n");
92        if (ps_mode == PS_NONE)
93            TRACE("Disable pixel shaders\n");
94     }
95     return TRUE;
96 }