diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 38fd1768..a56eca6c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,12 +13,18 @@ jobs: fail-fast: false matrix: toolchain: - - { name: 'MSVC', shell: 'sh', setup-cmake: true, setup-ninja: true, setup-msvc: true } - # TODO: Add back eventually, but exclude 3rdparty code from warnings as errors - - { name: 'msys2 mingw32', shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, clang-tidy: true, werror: true, no-dx5-libs: true } - # - { name: 'msys2 clang32', shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686, clang-tidy: true, werror: true, no-dx5-libs: true } + - { name: 'MSVC (32-bit)', shell: 'sh', setup-cmake: true, setup-ninja: true, setup-msvc: true, vc-arch: 'amd64_x86', dx5-libs: true, d3drm-from-wine: false } + - { name: 'MSVC (64-bit)', shell: 'sh', setup-cmake: true, setup-ninja: true, setup-msvc: true, vc-arch: 'amd64', dx5-libs: false, d3drm-from-wine: true } + - { name: 'msys2 mingw32', shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, clang-tidy: true, werror: true, dx5-libs: false, d3drm-from-wine: true } + - { name: 'msys2 mingw64', shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, clang-tidy: true, werror: true, dx5-libs: false, d3drm-from-wine: true } + # - { name: 'msys2 clang32', shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686, clang-tidy: true, werror: true, dx5-libs: true, d3drm-from-wine: true } steps: + - name: Setup vcvars + if: matrix.toolchain.setup-msvc + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.toolchain.vc-arch }} # Figure out how to build for 32-bit arch # - name: Set up SDL # id: sdl @@ -45,12 +51,6 @@ jobs: if: matrix.toolchain.setup-ninja uses: ashutoshvarma/setup-ninja@master - - name: Setup vcvars - if: matrix.toolchain.setup-msvc - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: amd64_x86 # Use the 64-bit x64-native cross tools to build 32-bit x86 code - - uses: actions/checkout@v4 with: submodules: true @@ -60,7 +60,8 @@ jobs: run: | cmake -S . -B build -GNinja \ -DCMAKE_BUILD_TYPE=Debug \ - -DISLE_USE_DX5_LIBS=${{ !matrix.toolchain.no-dx5-libs }} \ + -DISLE_USE_DX5=${{ matrix.toolchain.dx5-libs }} \ + -DISLE_D3DRM_FROM_WINE=${{ matrix.toolchain.d3drm-from-wine }} \ -DENABLE_CLANG_TIDY=${{ !!matrix.toolchain.clang-tidy }} \ -DISLE_WERROR=${{ !!matrix.toolchain.werror }} \ -Werror=dev diff --git a/3rdparty/d3drm/CMakeLists.txt b/3rdparty/d3drm/CMakeLists.txt index 76cf1be3..3ef12866 100644 --- a/3rdparty/d3drm/CMakeLists.txt +++ b/3rdparty/d3drm/CMakeLists.txt @@ -2,7 +2,35 @@ project(wine_d3drm LANGUAGES C) set(CMAKE_C_CLANG_TIDY) -add_library(d3drm-wine SHARED EXCLUDE_FROM_ALL +if(MSVC) + # FIXME: this is wrong. + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(def "${CMAKE_CURRENT_SOURCE_DIR}/d3dxof32.def") + else() + set(def "${CMAKE_CURRENT_SOURCE_DIR}/d3dxof64.def") + endif() + set(imp "${CMAKE_CURRENT_BINARY_DIR}/d3dxof.lib") + set(exp "${CMAKE_CURRENT_BINARY_DIR}/d3dxof.exp") + add_custom_command(OUTPUT "${imp}" "${exp}" + COMMAND "${CMAKE_AR}" "${CMAKE_STATIC_LINKER_FLAGS}" "/NOLOGO" "/DEF:${def}" "/OUT:${imp}" + DEPENDS "${def}" + ) + add_custom_target(d3dxof-implib DEPENDS "${imp}") + target_sources(d3dxof-implib PRIVATE "${def}") + add_library(d3dxof INTERFACE) + target_link_libraries(d3dxof INTERFACE "${imp}") + add_dependencies(d3dxof "d3dxof-implib") + + add_library(d3drm_guid STATIC d3drm_guid.c) + target_include_directories(d3drm_guid PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include") +else() + set(d3drm_guid) + add_library(d3drm_guid INTERFACE) +endif() + +option(WINE_D3DRM_DYNAMIC_D3DXOF "Dynamic d3dxof" ON) + +add_library(d3drm-wine SHARED d3drm.c d3drm_main.c d3drm_private.h @@ -17,11 +45,22 @@ add_library(d3drm-wine SHARED EXCLUDE_FROM_ALL texture.c version.rc viewport.c - - d3drm.def ) -target_include_directories(d3drm-wine SYSTEM INTERFACE "${CMAKE_CURRENT_LIST_DIR}/include") -target_link_libraries(d3drm-wine PRIVATE d3dxof ddraw) +if(CMAKE_SIZEOF_VOID_P EQUAL 4) + target_sources(d3drm-wine PRIVATE d3drm32.def) +else() + target_sources(d3drm-wine PRIVATE d3drm64.def) +endif() +if(WINE_D3DRM_DYNAMIC_D3DXOF) + target_sources(d3drm-wine PRIVATE dyn_d3dxof.c dyn_d3dxof.h) + target_compile_definitions(d3drm-wine PRIVATE DYNAMIC_D3DXOF) +endif() + +target_include_directories(d3drm-wine SYSTEM PUBLIC "${CMAKE_CURRENT_LIST_DIR}/include") +if(NOT WINE_D3DRM_DYNAMIC_D3DXOF) + target_link_libraries(d3drm-wine PRIVATE d3dxof) +endif() +target_link_libraries(d3drm-wine PRIVATE ddraw) set_property(TARGET d3drm-wine PROPERTY PREFIX "") set_property(TARGET d3drm-wine PROPERTY OUTPUT_NAME "d3drm") target_compile_definitions(d3drm-wine PRIVATE "__WINESRC__") diff --git a/3rdparty/d3drm/d3drm.c b/3rdparty/d3drm/d3drm.c index 393016a4..a8d08169 100644 --- a/3rdparty/d3drm/d3drm.c +++ b/3rdparty/d3drm/d3drm.c @@ -2145,7 +2145,11 @@ static HRESULT WINAPI d3drm3_Load(IDirect3DRM3 *iface, void *source, void *objec return E_NOTIMPL; } +#ifdef DYNAMIC_D3DXOF + hr = DynamicDirectXFileCreate(&file); +#else hr = DirectXFileCreate(&file); +#endif if (hr != DXFILE_OK) goto end; @@ -2328,9 +2332,21 @@ HRESULT WINAPI Direct3DRMCreate(IDirect3DRM **d3drm) if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRM_iface.lpVtbl = &d3drm1_vtbl; object->IDirect3DRM2_iface.lpVtbl = &d3drm2_vtbl; object->IDirect3DRM3_iface.lpVtbl = &d3drm3_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->ref1 = 1; object->iface_count = 1; diff --git a/3rdparty/d3drm/d3drm.def b/3rdparty/d3drm/d3drm32.def similarity index 100% rename from 3rdparty/d3drm/d3drm.def rename to 3rdparty/d3drm/d3drm32.def diff --git a/3rdparty/d3drm/d3drm64.def b/3rdparty/d3drm/d3drm64.def new file mode 100644 index 00000000..31aec2dc --- /dev/null +++ b/3rdparty/d3drm/d3drm64.def @@ -0,0 +1,22 @@ +EXPORTS + D3DRMColorGetAlpha + D3DRMColorGetBlue + D3DRMColorGetGreen + D3DRMColorGetRed + D3DRMCreateColorRGB + D3DRMCreateColorRGBA + D3DRMMatrixFromQuaternion + D3DRMQuaternionFromRotation + D3DRMQuaternionMultiply + D3DRMQuaternionSlerp + D3DRMVectorAdd + D3DRMVectorCrossProduct + D3DRMVectorDotProduct + D3DRMVectorModulus + D3DRMVectorNormalize + D3DRMVectorRandom + D3DRMVectorReflect + D3DRMVectorRotate + D3DRMVectorScale + D3DRMVectorSubtract + Direct3DRMCreate diff --git a/3rdparty/d3drm/d3drm_guid.c b/3rdparty/d3drm/d3drm_guid.c new file mode 100644 index 00000000..5ec9f82f --- /dev/null +++ b/3rdparty/d3drm/d3drm_guid.c @@ -0,0 +1,3 @@ +#define INITGUID +#include <d3drm.h> +#include <d3drmwin.h> diff --git a/3rdparty/d3drm/d3drm_private.h b/3rdparty/d3drm/d3drm_private.h index e07efa1c..ee7c91c3 100644 --- a/3rdparty/d3drm/d3drm_private.h +++ b/3rdparty/d3drm/d3drm_private.h @@ -30,6 +30,10 @@ #include "wine/debug.h" #include "wine/list.h" +#ifdef DYNAMIC_D3DXOF +#include "dyn_d3dxof.h" +#endif + struct d3drm_matrix { float _11, _12, _13, _14; @@ -46,7 +50,7 @@ static inline struct d3drm_matrix *d3drm_matrix(D3DRMMATRIX4D m) struct d3drm_object { LONG ref; - DWORD appdata; + LPVOID appdata; struct list destroy_callbacks; const char *classname; char *name; diff --git a/3rdparty/d3drm/d3drmwin.h b/3rdparty/d3drm/d3drmwin.h index bd3a40d8..269420aa 100644 --- a/3rdparty/d3drm/d3drmwin.h +++ b/3rdparty/d3drm/d3drmwin.h @@ -49,8 +49,8 @@ DECLARE_INTERFACE_(IDirect3DRMWinDevice,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; diff --git a/3rdparty/d3drm/d3dxof32.def b/3rdparty/d3drm/d3dxof32.def new file mode 100644 index 00000000..b377b3bf --- /dev/null +++ b/3rdparty/d3drm/d3dxof32.def @@ -0,0 +1,4 @@ +LIBRARY d3dxof.dll + +EXPORTS + DirectXFileCreate@4 diff --git a/3rdparty/d3drm/d3dxof64.def b/3rdparty/d3drm/d3dxof64.def new file mode 100644 index 00000000..35cb8e5f --- /dev/null +++ b/3rdparty/d3drm/d3dxof64.def @@ -0,0 +1,4 @@ +LIBRARY d3dxof.dll + +EXPORTS + DirectXFileCreate diff --git a/3rdparty/d3drm/device.c b/3rdparty/d3drm/device.c index 1a433746..a8ef3c4e 100644 --- a/3rdparty/d3drm/device.c +++ b/3rdparty/d3drm/device.c @@ -471,7 +471,7 @@ static HRESULT WINAPI d3drm_device1_DeleteDestroyCallback(IDirect3DRMDevice *ifa return d3drm_device3_DeleteDestroyCallback(&device->IDirect3DRMDevice3_iface, cb, ctx); } -static HRESULT WINAPI d3drm_device3_SetAppData(IDirect3DRMDevice3 *iface, DWORD data) +static HRESULT WINAPI d3drm_device3_SetAppData(IDirect3DRMDevice3 *iface, LPVOID data) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -482,7 +482,7 @@ static HRESULT WINAPI d3drm_device3_SetAppData(IDirect3DRMDevice3 *iface, DWORD return D3DRM_OK; } -static HRESULT WINAPI d3drm_device2_SetAppData(IDirect3DRMDevice2 *iface, DWORD data) +static HRESULT WINAPI d3drm_device2_SetAppData(IDirect3DRMDevice2 *iface, LPVOID data) { struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); @@ -491,7 +491,7 @@ static HRESULT WINAPI d3drm_device2_SetAppData(IDirect3DRMDevice2 *iface, DWORD return d3drm_device3_SetAppData(&device->IDirect3DRMDevice3_iface, data); } -static HRESULT WINAPI d3drm_device1_SetAppData(IDirect3DRMDevice *iface, DWORD data) +static HRESULT WINAPI d3drm_device1_SetAppData(IDirect3DRMDevice *iface, LPVOID data) { struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); @@ -500,7 +500,7 @@ static HRESULT WINAPI d3drm_device1_SetAppData(IDirect3DRMDevice *iface, DWORD d return d3drm_device3_SetAppData(&device->IDirect3DRMDevice3_iface, data); } -static DWORD WINAPI d3drm_device3_GetAppData(IDirect3DRMDevice3 *iface) +static LPVOID WINAPI d3drm_device3_GetAppData(IDirect3DRMDevice3 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -509,7 +509,7 @@ static DWORD WINAPI d3drm_device3_GetAppData(IDirect3DRMDevice3 *iface) return device->obj.appdata; } -static DWORD WINAPI d3drm_device2_GetAppData(IDirect3DRMDevice2 *iface) +static LPVOID WINAPI d3drm_device2_GetAppData(IDirect3DRMDevice2 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); @@ -518,7 +518,7 @@ static DWORD WINAPI d3drm_device2_GetAppData(IDirect3DRMDevice2 *iface) return d3drm_device3_GetAppData(&device->IDirect3DRMDevice3_iface); } -static DWORD WINAPI d3drm_device1_GetAppData(IDirect3DRMDevice *iface) +static LPVOID WINAPI d3drm_device1_GetAppData(IDirect3DRMDevice *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); @@ -1568,7 +1568,7 @@ static HRESULT WINAPI d3drm_device_win_DeleteDestroyCallback(IDirect3DRMWinDevic return E_NOTIMPL; } -static HRESULT WINAPI d3drm_device_win_SetAppData(IDirect3DRMWinDevice *iface, DWORD data) +static HRESULT WINAPI d3drm_device_win_SetAppData(IDirect3DRMWinDevice *iface, LPVOID data) { struct d3drm_device *device = impl_from_IDirect3DRMWinDevice(iface); @@ -1577,7 +1577,7 @@ static HRESULT WINAPI d3drm_device_win_SetAppData(IDirect3DRMWinDevice *iface, D return d3drm_device3_SetAppData(&device->IDirect3DRMDevice3_iface, data); } -static DWORD WINAPI d3drm_device_win_GetAppData(IDirect3DRMWinDevice *iface) +static LPVOID WINAPI d3drm_device_win_GetAppData(IDirect3DRMWinDevice *iface) { struct d3drm_device *device = impl_from_IDirect3DRMWinDevice(iface); @@ -1663,10 +1663,22 @@ HRESULT d3drm_device_create(struct d3drm_device **device, IDirect3DRM *d3drm) if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMDevice_iface.lpVtbl = &d3drm_device1_vtbl; object->IDirect3DRMDevice2_iface.lpVtbl = &d3drm_device2_vtbl; object->IDirect3DRMDevice3_iface.lpVtbl = &d3drm_device3_vtbl; object->IDirect3DRMWinDevice_iface.lpVtbl = &d3drm_device_win_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->d3drm = d3drm; d3drm_object_init(&object->obj, classname); diff --git a/3rdparty/d3drm/dyn_d3dxof.c b/3rdparty/d3drm/dyn_d3dxof.c new file mode 100644 index 00000000..375d81bd --- /dev/null +++ b/3rdparty/d3drm/dyn_d3dxof.c @@ -0,0 +1,32 @@ +#include "dyn_d3dxof.h" + +static enum { + DYN_D3DXOF_INIT = 0, + DYN_D3DXOF_SUCCESS = 1, +} g_dyn_d3dxof_state = DYN_D3DXOF_INIT; +static HMODULE g_d3dxof; +static HRESULT (STDAPICALLTYPE * g_DynamicDirectXFileCreate)(LPDIRECTXFILE *lplpDirectXFile); + +static void init_dyn_d3d(void) { + if (g_dyn_d3dxof_state == DYN_D3DXOF_SUCCESS) { + return; + } + g_d3dxof = LoadLibraryA("d3dxof.dll"); + if (g_d3dxof == NULL) { + MessageBoxA(NULL, "Cannot find d3dxof.dll", "Cannot find d3dxof.dll", MB_ICONERROR); + abort(); + } + g_DynamicDirectXFileCreate = (void*)GetProcAddress(g_d3dxof, "DirectXFileCreate"); + if (g_d3dxof == NULL) { + MessageBoxA(NULL, "Missing symbols", "d3dxof.dll misses DirectXFileCreate", MB_ICONERROR); + abort(); + } + g_dyn_d3dxof_state = DYN_D3DXOF_SUCCESS; +} + + +STDAPI DynamicDirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile) +{ + init_dyn_d3d(); + return g_DynamicDirectXFileCreate(lplpDirectXFile); +} diff --git a/3rdparty/d3drm/dyn_d3dxof.h b/3rdparty/d3drm/dyn_d3dxof.h new file mode 100644 index 00000000..2ed75e34 --- /dev/null +++ b/3rdparty/d3drm/dyn_d3dxof.h @@ -0,0 +1,8 @@ +#ifndef __DYN_D3DXOF_H__ +#define __DYN_D3DXOF_H__ + +#include <dxfile.h> + +STDAPI DynamicDirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile); + +#endif /* __DYN_D3DXOF_H__ */ diff --git a/3rdparty/d3drm/face.c b/3rdparty/d3drm/face.c index 34810894..72a03d82 100644 --- a/3rdparty/d3drm/face.c +++ b/3rdparty/d3drm/face.c @@ -113,7 +113,7 @@ static HRESULT WINAPI d3drm_face1_DeleteDestroyCallback(IDirect3DRMFace *iface, return IDirect3DRMFace2_DeleteDestroyCallback(&face->IDirect3DRMFace2_iface, cb, ctx); } -static HRESULT WINAPI d3drm_face2_SetAppData(IDirect3DRMFace2 *iface, DWORD data) +static HRESULT WINAPI d3drm_face2_SetAppData(IDirect3DRMFace2 *iface, LPVOID data) { struct d3drm_face *face = impl_from_IDirect3DRMFace2(iface); @@ -124,7 +124,7 @@ static HRESULT WINAPI d3drm_face2_SetAppData(IDirect3DRMFace2 *iface, DWORD data return D3DRM_OK; } -static HRESULT WINAPI d3drm_face1_SetAppData(IDirect3DRMFace *iface, DWORD data) +static HRESULT WINAPI d3drm_face1_SetAppData(IDirect3DRMFace *iface, LPVOID data) { struct d3drm_face *face = impl_from_IDirect3DRMFace(iface); @@ -133,7 +133,7 @@ static HRESULT WINAPI d3drm_face1_SetAppData(IDirect3DRMFace *iface, DWORD data) return d3drm_face2_SetAppData(&face->IDirect3DRMFace2_iface, data); } -static DWORD WINAPI d3drm_face2_GetAppData(IDirect3DRMFace2 *iface) +static LPVOID WINAPI d3drm_face2_GetAppData(IDirect3DRMFace2 *iface) { struct d3drm_face *face = impl_from_IDirect3DRMFace2(iface); @@ -142,7 +142,7 @@ static DWORD WINAPI d3drm_face2_GetAppData(IDirect3DRMFace2 *iface) return face->obj.appdata; } -static DWORD WINAPI d3drm_face1_GetAppData(IDirect3DRMFace *iface) +static LPVOID WINAPI d3drm_face1_GetAppData(IDirect3DRMFace *iface) { struct d3drm_face *face = impl_from_IDirect3DRMFace(iface); @@ -627,8 +627,20 @@ HRESULT d3drm_face_create(struct d3drm_face **face) if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMFace_iface.lpVtbl = &d3drm_face1_vtbl; object->IDirect3DRMFace2_iface.lpVtbl = &d3drm_face2_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->ref = 1; d3drm_object_init(&object->obj, classname); diff --git a/3rdparty/d3drm/frame.c b/3rdparty/d3drm/frame.c index 7a5bd18c..2f6e0275 100644 --- a/3rdparty/d3drm/frame.c +++ b/3rdparty/d3drm/frame.c @@ -261,7 +261,19 @@ static struct d3drm_frame_array *d3drm_frame_array_create(unsigned int frame_cou if (!(array = calloc(1, sizeof(*array)))) return NULL; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif array->IDirect3DRMFrameArray_iface.lpVtbl = &d3drm_frame_array_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif array->ref = 1; array->size = frame_count; @@ -379,7 +391,19 @@ static struct d3drm_visual_array *d3drm_visual_array_create(unsigned int visual_ if (!(array = calloc(1, sizeof(*array)))) return NULL; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif array->IDirect3DRMVisualArray_iface.lpVtbl = &d3drm_visual_array_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif array->ref = 1; array->size = visual_count; @@ -498,7 +522,19 @@ static struct d3drm_light_array *d3drm_light_array_create(unsigned int light_cou if (!(array = calloc(1, sizeof(*array)))) return NULL; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif array->IDirect3DRMLightArray_iface.lpVtbl = &d3drm_light_array_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif array->ref = 1; array->size = light_count; @@ -733,7 +769,7 @@ static HRESULT WINAPI d3drm_frame1_DeleteDestroyCallback(IDirect3DRMFrame *iface return IDirect3DRMFrame3_DeleteDestroyCallback(&frame->IDirect3DRMFrame3_iface, cb, ctx); } -static HRESULT WINAPI d3drm_frame3_SetAppData(IDirect3DRMFrame3 *iface, DWORD data) +static HRESULT WINAPI d3drm_frame3_SetAppData(IDirect3DRMFrame3 *iface, LPVOID data) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -744,7 +780,7 @@ static HRESULT WINAPI d3drm_frame3_SetAppData(IDirect3DRMFrame3 *iface, DWORD da return D3DRM_OK; } -static HRESULT WINAPI d3drm_frame2_SetAppData(IDirect3DRMFrame2 *iface, DWORD data) +static HRESULT WINAPI d3drm_frame2_SetAppData(IDirect3DRMFrame2 *iface, LPVOID data) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); @@ -753,7 +789,7 @@ static HRESULT WINAPI d3drm_frame2_SetAppData(IDirect3DRMFrame2 *iface, DWORD da return d3drm_frame3_SetAppData(&frame->IDirect3DRMFrame3_iface, data); } -static HRESULT WINAPI d3drm_frame1_SetAppData(IDirect3DRMFrame *iface, DWORD data) +static HRESULT WINAPI d3drm_frame1_SetAppData(IDirect3DRMFrame *iface, LPVOID data) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); @@ -762,7 +798,7 @@ static HRESULT WINAPI d3drm_frame1_SetAppData(IDirect3DRMFrame *iface, DWORD dat return d3drm_frame3_SetAppData(&frame->IDirect3DRMFrame3_iface, data); } -static DWORD WINAPI d3drm_frame3_GetAppData(IDirect3DRMFrame3 *iface) +static LPVOID WINAPI d3drm_frame3_GetAppData(IDirect3DRMFrame3 *iface) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -771,7 +807,7 @@ static DWORD WINAPI d3drm_frame3_GetAppData(IDirect3DRMFrame3 *iface) return frame->obj.appdata; } -static DWORD WINAPI d3drm_frame2_GetAppData(IDirect3DRMFrame2 *iface) +static LPVOID WINAPI d3drm_frame2_GetAppData(IDirect3DRMFrame2 *iface) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); @@ -780,7 +816,7 @@ static DWORD WINAPI d3drm_frame2_GetAppData(IDirect3DRMFrame2 *iface) return d3drm_frame3_GetAppData(&frame->IDirect3DRMFrame3_iface); } -static DWORD WINAPI d3drm_frame1_GetAppData(IDirect3DRMFrame *iface) +static LPVOID WINAPI d3drm_frame1_GetAppData(IDirect3DRMFrame *iface) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); @@ -3137,9 +3173,21 @@ HRESULT d3drm_frame_create(struct d3drm_frame **frame, IUnknown *parent_frame, I if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMFrame_iface.lpVtbl = &d3drm_frame1_vtbl; object->IDirect3DRMFrame2_iface.lpVtbl = &d3drm_frame2_vtbl; object->IDirect3DRMFrame3_iface.lpVtbl = &d3drm_frame3_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->d3drm = d3drm; object->ref = 1; d3drm_set_color(&object->scenebackground, 0.0f, 0.0f, 0.0f, 1.0f); @@ -3302,7 +3350,7 @@ static HRESULT WINAPI d3drm_animation1_DeleteDestroyCallback(IDirect3DRMAnimatio return IDirect3DRMAnimation2_DeleteDestroyCallback(&animation->IDirect3DRMAnimation2_iface, cb, ctx); } -static HRESULT WINAPI d3drm_animation2_SetAppData(IDirect3DRMAnimation2 *iface, DWORD data) +static HRESULT WINAPI d3drm_animation2_SetAppData(IDirect3DRMAnimation2 *iface, LPVOID data) { struct d3drm_animation *animation = impl_from_IDirect3DRMAnimation2(iface); @@ -3313,7 +3361,7 @@ static HRESULT WINAPI d3drm_animation2_SetAppData(IDirect3DRMAnimation2 *iface, return D3DRM_OK; } -static HRESULT WINAPI d3drm_animation1_SetAppData(IDirect3DRMAnimation *iface, DWORD data) +static HRESULT WINAPI d3drm_animation1_SetAppData(IDirect3DRMAnimation *iface, LPVOID data) { struct d3drm_animation *animation = impl_from_IDirect3DRMAnimation(iface); @@ -3322,7 +3370,7 @@ static HRESULT WINAPI d3drm_animation1_SetAppData(IDirect3DRMAnimation *iface, D return d3drm_animation2_SetAppData(&animation->IDirect3DRMAnimation2_iface, data); } -static DWORD WINAPI d3drm_animation2_GetAppData(IDirect3DRMAnimation2 *iface) +static LPVOID WINAPI d3drm_animation2_GetAppData(IDirect3DRMAnimation2 *iface) { struct d3drm_animation *animation = impl_from_IDirect3DRMAnimation2(iface); @@ -3331,7 +3379,7 @@ static DWORD WINAPI d3drm_animation2_GetAppData(IDirect3DRMAnimation2 *iface) return animation->obj.appdata; } -static DWORD WINAPI d3drm_animation1_GetAppData(IDirect3DRMAnimation *iface) +static LPVOID WINAPI d3drm_animation1_GetAppData(IDirect3DRMAnimation *iface) { struct d3drm_animation *animation = impl_from_IDirect3DRMAnimation(iface); @@ -3889,8 +3937,20 @@ HRESULT d3drm_animation_create(struct d3drm_animation **animation, IDirect3DRM * if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMAnimation_iface.lpVtbl = &d3drm_animation1_vtbl; object->IDirect3DRMAnimation2_iface.lpVtbl = &d3drm_animation2_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->d3drm = d3drm; object->ref = 1; object->options = D3DRMANIMATION_CLOSED | D3DRMANIMATION_LINEARPOSITION; diff --git a/3rdparty/d3drm/include/d3drmdef.h b/3rdparty/d3drm/include/d3drmdef.h index aa77c2c5..859df046 100644 --- a/3rdparty/d3drm/include/d3drmdef.h +++ b/3rdparty/d3drm/include/d3drmdef.h @@ -28,6 +28,10 @@ extern "C" { #endif +#ifndef __MSABI_LONG +#define __MSABI_LONG(X) (X) +#endif + typedef struct _D3DRMVECTOR4D { D3DVALUE x; diff --git a/3rdparty/d3drm/include/d3drmobj.h b/3rdparty/d3drm/include/d3drmobj.h index 7e48d989..4ff8c853 100644 --- a/3rdparty/d3drm/include/d3drmobj.h +++ b/3rdparty/d3drm/include/d3drmobj.h @@ -29,6 +29,10 @@ extern "C" { #endif +#ifdef INTERFACE +#undef INTERFACE +#endif + /* Direct3DRM object CLSIDs */ DEFINE_GUID(CLSID_CDirect3DRMDevice, 0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1); @@ -205,8 +209,8 @@ DECLARE_INTERFACE_(IDirect3DRMObject,IUnknown) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -315,8 +319,8 @@ DECLARE_INTERFACE_(IDirect3DRMVisual,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -370,8 +374,8 @@ DECLARE_INTERFACE_(IDirect3DRMDevice,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -497,8 +501,8 @@ DECLARE_INTERFACE_(IDirect3DRMDevice2,IDirect3DRMDevice) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -642,8 +646,8 @@ DECLARE_INTERFACE_(IDirect3DRMDevice3,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -802,8 +806,8 @@ DECLARE_INTERFACE_(IDirect3DRMViewport,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -942,8 +946,8 @@ DECLARE_INTERFACE_(IDirect3DRMViewport2,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -1090,8 +1094,8 @@ DECLARE_INTERFACE_(IDirect3DRMFrame,IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -1323,8 +1327,8 @@ DECLARE_INTERFACE_(IDirect3DRMFrame2,IDirect3DRMFrame) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -1605,8 +1609,8 @@ DECLARE_INTERFACE_(IDirect3DRMFrame3,IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -1903,8 +1907,8 @@ DECLARE_INTERFACE_(IDirect3DRMMesh,IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -2018,8 +2022,8 @@ DECLARE_INTERFACE_(IDirect3DRMProgressiveMesh,IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -2128,8 +2132,8 @@ DECLARE_INTERFACE_(IDirect3DRMShadow,IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -2187,8 +2191,8 @@ DECLARE_INTERFACE_(IDirect3DRMShadow2,IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -2275,8 +2279,8 @@ DECLARE_INTERFACE_(IDirect3DRMFace,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -2385,8 +2389,8 @@ DECLARE_INTERFACE_(IDirect3DRMFace2,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -2495,8 +2499,8 @@ DECLARE_INTERFACE_(IDirect3DRMMeshBuilder,IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -2667,8 +2671,8 @@ DECLARE_INTERFACE_(IDirect3DRMMeshBuilder2,IDirect3DRMMeshBuilder) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -2848,8 +2852,8 @@ DECLARE_INTERFACE_(IDirect3DRMMeshBuilder3,IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3085,8 +3089,8 @@ DECLARE_INTERFACE_(IDirect3DRMLight,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3197,8 +3201,8 @@ DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3309,8 +3313,8 @@ DECLARE_INTERFACE_(IDirect3DRMTexture2, IDirect3DRMTexture) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3433,8 +3437,8 @@ DECLARE_INTERFACE_(IDirect3DRMTexture3, IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3569,8 +3573,8 @@ DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3635,8 +3639,8 @@ DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3708,8 +3712,8 @@ DECLARE_INTERFACE_(IDirect3DRMMaterial2, IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3787,8 +3791,8 @@ DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3866,8 +3870,8 @@ DECLARE_INTERFACE_(IDirect3DRMAnimation2, IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -3960,8 +3964,8 @@ DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -4028,8 +4032,8 @@ DECLARE_INTERFACE_(IDirect3DRMAnimationSet2, IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -4099,8 +4103,8 @@ DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -4560,8 +4564,8 @@ DECLARE_INTERFACE_(IDirect3DRMInterpolator, IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; @@ -4633,8 +4637,8 @@ DECLARE_INTERFACE_(IDirect3DRMClippedVisual, IDirect3DRMVisual) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; diff --git a/3rdparty/d3drm/include/d3drmwin.h b/3rdparty/d3drm/include/d3drmwin.h index bd3a40d8..269420aa 100644 --- a/3rdparty/d3drm/include/d3drmwin.h +++ b/3rdparty/d3drm/include/d3drmwin.h @@ -49,8 +49,8 @@ DECLARE_INTERFACE_(IDirect3DRMWinDevice,IDirect3DRMObject) STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE; STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE; - STDMETHOD(SetAppData)(THIS_ DWORD data) PURE; - STDMETHOD_(DWORD, GetAppData)(THIS) PURE; + STDMETHOD(SetAppData)(THIS_ LPVOID data) PURE; + STDMETHOD_(LPVOID, GetAppData)(THIS) PURE; STDMETHOD(SetName)(THIS_ const char *name) PURE; STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE; STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE; diff --git a/3rdparty/d3drm/include/dxfile.h b/3rdparty/d3drm/include/dxfile.h new file mode 100644 index 00000000..57028756 --- /dev/null +++ b/3rdparty/d3drm/include/dxfile.h @@ -0,0 +1,303 @@ +/* + * Copyright 2004 Christian Costa + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_DXFILE_H +#define __WINE_DXFILE_H + +#include <objbase.h> +//#include <winnt.h> + +#ifdef INTERFACE +#undef INTERFACE +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +typedef DWORD DXFILEFORMAT; + +#define DXFILEFORMAT_BINARY 0 +#define DXFILEFORMAT_TEXT 1 +#define DXFILEFORMAT_COMPRESSED 2 + +typedef DWORD DXFILELOADOPTIONS; + +#define DXFILELOAD_FROMFILE __MSABI_LONG(0x00) +#define DXFILELOAD_FROMRESOURCE __MSABI_LONG(0x01) +#define DXFILELOAD_FROMMEMORY __MSABI_LONG(0x02) +#define DXFILELOAD_FROMSTREAM __MSABI_LONG(0x04) +#define DXFILELOAD_FROMURL __MSABI_LONG(0x08) + +typedef struct _DXFILELOADRESOURCE { + HMODULE hModule; + LPCSTR /*LPCTSTR*/ lpName; + LPCSTR /*LPCTSTR*/ lpType; +} DXFILELOADRESOURCE, *LPDXFILELOADRESOURCE; + +typedef struct _DXFILELOADMEMORY { + LPVOID lpMemory; + DWORD dSize; +} DXFILELOADMEMORY, *LPDXFILELOADMEMORY; + +typedef struct IDirectXFile *LPDIRECTXFILE; +typedef struct IDirectXFileEnumObject *LPDIRECTXFILEENUMOBJECT; +typedef struct IDirectXFileSaveObject *LPDIRECTXFILESAVEOBJECT; +typedef struct IDirectXFileObject *LPDIRECTXFILEOBJECT; +typedef struct IDirectXFileData *LPDIRECTXFILEDATA; +typedef struct IDirectXFileDataReference *LPDIRECTXFILEDATAREFERENCE; +typedef struct IDirectXFileBinary *LPDIRECTXFILEBINARY; + +STDAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile); + +#define INTERFACE IDirectXFile +DECLARE_INTERFACE_(IDirectXFile,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IDirectXFile methods ***/ + STDMETHOD(CreateEnumObject) (THIS_ LPVOID, DXFILELOADOPTIONS, LPDIRECTXFILEENUMOBJECT *) PURE; + STDMETHOD(CreateSaveObject) (THIS_ LPCSTR, DXFILEFORMAT, LPDIRECTXFILESAVEOBJECT *) PURE; + STDMETHOD(RegisterTemplates) (THIS_ LPVOID, DWORD) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) + /*** IUnknown methods ***/ +#define IDirectXFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFile_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFile_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFile methods ***/ +#define IDirectXFile_CreateEnumObject(p,a,b,c) (p)->lpVtbl->CreateEnumObject(p,a,b,c) +#define IDirectXFile_CreateSaveObject(p,a,b,c) (p)->lpVtbl->CreateSaveObject(p,a,b,c) +#define IDirectXFile_RegisterTemplates(p,a,b) (p)->lpVtbl->RegisterTemplates(p,a,b) +#endif + +#define INTERFACE IDirectXFileEnumObject +DECLARE_INTERFACE_(IDirectXFileEnumObject,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IDirectXFileEnumObject methods ***/ + STDMETHOD(GetNextDataObject) (THIS_ LPDIRECTXFILEDATA *) PURE; + STDMETHOD(GetDataObjectById) (THIS_ REFGUID, LPDIRECTXFILEDATA *) PURE; + STDMETHOD(GetDataObjectByName) (THIS_ LPCSTR, LPDIRECTXFILEDATA *) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) + /*** IUnknown methods ***/ +#define IDirectXFileEnumObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileEnumObject_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileEnumObject_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileEnumObject methods ***/ +#define IDirectXFileEnumObject_GetNextDataObject(p,a) (p)->lpVtbl->GetNextDataObject(p,a) +#define IDirectXFileEnumObject_GetDataObjectById(p,a,b) (p)->lpVtbl->GetDataObjectById(p,a,b) +#define IDirectXFileEnumObject_GetDataObjectByName(p,a,b) (p)->lpVtbl->GetDataObjectByName(p,a,b) +#endif + +#define INTERFACE IDirectXFileSaveObject +DECLARE_INTERFACE_(IDirectXFileSaveObject,IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IDirectXFileSaveObject methods ***/ + STDMETHOD(SaveTemplates) (THIS_ DWORD, const GUID **) PURE; + STDMETHOD(CreateDataObject) (THIS_ REFGUID, LPCSTR, const GUID *, DWORD, LPVOID, LPDIRECTXFILEDATA *) PURE; + STDMETHOD(SaveData) (THIS_ LPDIRECTXFILEDATA) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) + /*** IUnknown methods ***/ +#define IDirectXFileSaveObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileSaveObject_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileSaveObject_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileSaveObject methods ***/ +#define IDirectXFileSaveObject_SaveTemplates(p,a,b) (p)->lpVtbl->SaveTemplates(p,a,b) +#define IDirectXFileSaveObject_CreateDataObject(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDataObject(p,a,b,c,d,e,f) +#define IDirectXFileSaveObject_SaveData(p,a) (p)->lpVtbl->SaveData(p,a) +#endif + +#define IUNKNOWN_METHODS(kind) \ + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) kind; \ + STDMETHOD_(ULONG,AddRef)(THIS) kind; \ + STDMETHOD_(ULONG,Release)(THIS) kind + +#define IDIRECTXFILEOBJECT_METHODS(kind) \ + STDMETHOD(GetName) (THIS_ LPSTR, LPDWORD) kind; \ + STDMETHOD(GetId) (THIS_ LPGUID) kind + +#define INTERFACE IDirectXFileObject +DECLARE_INTERFACE_(IDirectXFileObject,IUnknown) +{ + IUNKNOWN_METHODS(PURE); + IDIRECTXFILEOBJECT_METHODS(PURE); +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) + /*** IUnknown methods ***/ +#define IDirectXFileObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileObject_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileObject_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileObject methods ***/ +#define IDirectXFileObject_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) +#define IDirectXFileObject_GetId(p,a) (p)->lpVtbl->GetId(p,a) +#endif + +#define INTERFACE IDirectXFileData +DECLARE_INTERFACE_(IDirectXFileData,IDirectXFileObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECTXFILEOBJECT_METHODS(PURE); + /*** IDirectXFileData methods ***/ + STDMETHOD(GetData) (THIS_ LPCSTR, DWORD *, void **) PURE; + STDMETHOD(GetType) (THIS_ const GUID **) PURE; + STDMETHOD(GetNextObject) (THIS_ LPDIRECTXFILEOBJECT *) PURE; + STDMETHOD(AddDataObject) (THIS_ LPDIRECTXFILEDATA) PURE; + STDMETHOD(AddDataReference) (THIS_ LPCSTR, const GUID *) PURE; + STDMETHOD(AddBinaryObject) (THIS_ LPCSTR, const GUID *, LPCSTR, LPVOID, DWORD) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) + /*** IUnknown methods ***/ +#define IDirectXFileData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileData_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileData_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileObject methods ***/ +#define IDirectXFileData_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) +#define IDirectXFileData_GetId(p,a) (p)->lpVtbl->GetId(p,a) + /*** IDirectXFileData methods ***/ +#define IDirectXFileData_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c) +#define IDirectXFileData_GetType(p,a) (p)->lpVtbl->GetType(p,a) +#define IDirectXFileData_GetNextObject(p,a) (p)->lpVtbl->GetNextObject(p,a) +#define IDirectXFileData_AddDataObject(p,a) (p)->lpVtbl->AddDataObject(p,a) +#define IDirectXFileData_AddDataReference(p,a,b) (p)->lpVtbl->AddDataReference(p,a,b) +#define IDirectXFileData_AddBinaryObject(p,a,b,c,d,e) (p)->lpVtbl->AddBinaryObject(p,a,b,c,d,e) +#endif + +#define INTERFACE IDirectXFileDataReference +DECLARE_INTERFACE_(IDirectXFileDataReference,IDirectXFileObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECTXFILEOBJECT_METHODS(PURE); + /*** IDirectXFileDataReference methods ***/ + STDMETHOD(Resolve) (THIS_ LPDIRECTXFILEDATA *) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) + /*** IUnknown methods ***/ +#define IDirectXFileDataReference_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileDataReference_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileDataReference_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileObject methods ***/ +#define IDirectXFileDataReference_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) +#define IDirectXFileDataReference_GetId(p,a) (p)->lpVtbl->GetId(p,a) + /*** IDirectXFileDataReference methods ***/ +#define IDirectXFileDataReference_Resolve(p,a) (p)->lpVtbl->Resolve(p,a) +#endif + +#define INTERFACE IDirectXFileBinary +DECLARE_INTERFACE_(IDirectXFileBinary,IDirectXFileObject) +{ + IUNKNOWN_METHODS(PURE); + IDIRECTXFILEOBJECT_METHODS(PURE); + /*** IDirectXFileBinary methods ***/ + STDMETHOD(GetSize) (THIS_ DWORD *) PURE; + STDMETHOD(GetMimeType) (THIS_ LPCSTR *) PURE; + STDMETHOD(Read) (THIS_ LPVOID, DWORD, LPDWORD) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) + /*** IUnknown methods ***/ +#define IDirectXFileBinary_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileBinary_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileBinary_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileObject methods ***/ +#define IDirectXFileBinary_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) +#define IDirectXFileBinary_GetId(p,a) (p)->lpVtbl->GetId(p,a) + /*** IDirectXFileBinary methods ***/ +#define IDirectXFileBinary_GetSize(p,a) (p)->lpVtbl->GetSize(p,a) +#define IDirectXFileBinary_GetMimeType(p,a) (p)->lpVtbl->GetMimeType(p,a) +#define IDirectXFileBinary_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c) +#endif + +/* DirectXFile Object CLSID */ +DEFINE_GUID(CLSID_CDirectXFile, 0x4516ec43, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); + +/* DirectX File Interface GUIDs */ +DEFINE_GUID(IID_IDirectXFile, 0x3d82ab40, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileEnumObject, 0x3d82ab41, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileSaveObject, 0x3d82ab42, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileObject, 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileData, 0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileDataReference, 0x3d82ab45, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileBinary, 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); + +/* DirectX File Header template's GUID */ +DEFINE_GUID(TID_DXFILEHeader, 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); + +/* DirectX File errors */ +#define _FACDD 0x876 +#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) + +#define DXFILE_OK 0 + +#define DXFILEERR_BADOBJECT MAKE_DDHRESULT(850) +#define DXFILEERR_BADVALUE MAKE_DDHRESULT(851) +#define DXFILEERR_BADTYPE MAKE_DDHRESULT(852) +#define DXFILEERR_BADSTREAMHANDLE MAKE_DDHRESULT(853) +#define DXFILEERR_BADALLOC MAKE_DDHRESULT(854) +#define DXFILEERR_NOTFOUND MAKE_DDHRESULT(855) +#define DXFILEERR_NOTDONEYET MAKE_DDHRESULT(856) +#define DXFILEERR_FILENOTFOUND MAKE_DDHRESULT(857) +#define DXFILEERR_RESOURCENOTFOUND MAKE_DDHRESULT(858) +#define DXFILEERR_URLNOTFOUND MAKE_DDHRESULT(859) +#define DXFILEERR_BADRESOURCE MAKE_DDHRESULT(860) +#define DXFILEERR_BADFILETYPE MAKE_DDHRESULT(861) +#define DXFILEERR_BADFILEVERSION MAKE_DDHRESULT(862) +#define DXFILEERR_BADFILEFLOATSIZE MAKE_DDHRESULT(863) +#define DXFILEERR_BADFILECOMPRESSIONTYPE MAKE_DDHRESULT(864) +#define DXFILEERR_BADFILE MAKE_DDHRESULT(865) +#define DXFILEERR_PARSEERROR MAKE_DDHRESULT(866) +#define DXFILEERR_NOTEMPLATE MAKE_DDHRESULT(867) +#define DXFILEERR_BADARRAYSIZE MAKE_DDHRESULT(868) +#define DXFILEERR_BADDATAREFERENCE MAKE_DDHRESULT(869) +#define DXFILEERR_INTERNALERROR MAKE_DDHRESULT(870) +#define DXFILEERR_NOMOREOBJECTS MAKE_DDHRESULT(871) +#define DXFILEERR_BADINTRINSICS MAKE_DDHRESULT(872) +#define DXFILEERR_NOMORESTREAMHANDLES MAKE_DDHRESULT(873) +#define DXFILEERR_NOMOREDATA MAKE_DDHRESULT(874) +#define DXFILEERR_BADCACHEFILE MAKE_DDHRESULT(875) +#define DXFILEERR_NOINTERNET MAKE_DDHRESULT(876) + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* __WINE_DXFILE_H */ diff --git a/3rdparty/d3drm/light.c b/3rdparty/d3drm/light.c index 704c11c0..66b255ce 100644 --- a/3rdparty/d3drm/light.c +++ b/3rdparty/d3drm/light.c @@ -101,7 +101,7 @@ static HRESULT WINAPI d3drm_light_DeleteDestroyCallback(IDirect3DRMLight *iface, return d3drm_object_delete_destroy_callback(&light->obj, cb, ctx); } -static HRESULT WINAPI d3drm_light_SetAppData(IDirect3DRMLight *iface, DWORD data) +static HRESULT WINAPI d3drm_light_SetAppData(IDirect3DRMLight *iface, LPVOID data) { struct d3drm_light *light = impl_from_IDirect3DRMLight(iface); @@ -112,7 +112,7 @@ static HRESULT WINAPI d3drm_light_SetAppData(IDirect3DRMLight *iface, DWORD data return D3DRM_OK; } -static DWORD WINAPI d3drm_light_GetAppData(IDirect3DRMLight *iface) +static LPVOID WINAPI d3drm_light_GetAppData(IDirect3DRMLight *iface) { struct d3drm_light *light = impl_from_IDirect3DRMLight(iface); @@ -378,7 +378,19 @@ HRESULT d3drm_light_create(struct d3drm_light **light, IDirect3DRM *d3drm) if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMLight_iface.lpVtbl = &d3drm_light_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->ref = 1; object->d3drm = d3drm; IDirect3DRM_AddRef(object->d3drm); diff --git a/3rdparty/d3drm/material.c b/3rdparty/d3drm/material.c index 726768fa..ed2e40ca 100644 --- a/3rdparty/d3drm/material.c +++ b/3rdparty/d3drm/material.c @@ -102,7 +102,7 @@ static HRESULT WINAPI d3drm_material_DeleteDestroyCallback(IDirect3DRMMaterial2 return d3drm_object_delete_destroy_callback(&material->obj, cb, ctx); } -static HRESULT WINAPI d3drm_material_SetAppData(IDirect3DRMMaterial2 *iface, DWORD data) +static HRESULT WINAPI d3drm_material_SetAppData(IDirect3DRMMaterial2 *iface, LPVOID data) { struct d3drm_material *material = impl_from_IDirect3DRMMaterial2(iface); @@ -113,7 +113,7 @@ static HRESULT WINAPI d3drm_material_SetAppData(IDirect3DRMMaterial2 *iface, DWO return D3DRM_OK; } -static DWORD WINAPI d3drm_material_GetAppData(IDirect3DRMMaterial2 *iface) +static LPVOID WINAPI d3drm_material_GetAppData(IDirect3DRMMaterial2 *iface) { struct d3drm_material *material = impl_from_IDirect3DRMMaterial2(iface); @@ -286,7 +286,19 @@ HRESULT d3drm_material_create(struct d3drm_material **material, IDirect3DRM *d3d if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMMaterial2_iface.lpVtbl = &d3drm_material_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->ref = 1; object->d3drm = d3drm; IDirect3DRM_AddRef(object->d3drm); diff --git a/3rdparty/d3drm/meshbuilder.c b/3rdparty/d3drm/meshbuilder.c index 27e76c1c..45ddaa53 100644 --- a/3rdparty/d3drm/meshbuilder.c +++ b/3rdparty/d3drm/meshbuilder.c @@ -427,7 +427,7 @@ static HRESULT WINAPI d3drm_mesh_builder2_DeleteDestroyCallback(IDirect3DRMMeshB return IDirect3DRMMeshBuilder3_DeleteDestroyCallback(&mesh_builder->IDirect3DRMMeshBuilder3_iface, cb, ctx); } -static HRESULT WINAPI d3drm_mesh_builder3_SetAppData(IDirect3DRMMeshBuilder3 *iface, DWORD data) +static HRESULT WINAPI d3drm_mesh_builder3_SetAppData(IDirect3DRMMeshBuilder3 *iface, LPVOID data) { struct d3drm_mesh_builder *mesh_builder = impl_from_IDirect3DRMMeshBuilder3(iface); @@ -438,7 +438,7 @@ static HRESULT WINAPI d3drm_mesh_builder3_SetAppData(IDirect3DRMMeshBuilder3 *if return D3DRM_OK; } -static HRESULT WINAPI d3drm_mesh_builder2_SetAppData(IDirect3DRMMeshBuilder2 *iface, DWORD data) +static HRESULT WINAPI d3drm_mesh_builder2_SetAppData(IDirect3DRMMeshBuilder2 *iface, LPVOID data) { struct d3drm_mesh_builder *mesh_builder = impl_from_IDirect3DRMMeshBuilder2(iface); @@ -447,7 +447,7 @@ static HRESULT WINAPI d3drm_mesh_builder2_SetAppData(IDirect3DRMMeshBuilder2 *if return d3drm_mesh_builder3_SetAppData(&mesh_builder->IDirect3DRMMeshBuilder3_iface, data); } -static DWORD WINAPI d3drm_mesh_builder3_GetAppData(IDirect3DRMMeshBuilder3 *iface) +static LPVOID WINAPI d3drm_mesh_builder3_GetAppData(IDirect3DRMMeshBuilder3 *iface) { struct d3drm_mesh_builder *mesh_builder = impl_from_IDirect3DRMMeshBuilder3(iface); @@ -456,7 +456,7 @@ static DWORD WINAPI d3drm_mesh_builder3_GetAppData(IDirect3DRMMeshBuilder3 *ifac return mesh_builder->obj.appdata; } -static DWORD WINAPI d3drm_mesh_builder2_GetAppData(IDirect3DRMMeshBuilder2 *iface) +static LPVOID WINAPI d3drm_mesh_builder2_GetAppData(IDirect3DRMMeshBuilder2 *iface) { struct d3drm_mesh_builder *mesh_builder = impl_from_IDirect3DRMMeshBuilder2(iface); @@ -1483,7 +1483,11 @@ static HRESULT WINAPI d3drm_mesh_builder3_Load(IDirect3DRMMeshBuilder3 *iface, v clean_mesh_builder_data(mesh_builder); +#ifdef DYNAMIC_D3DXOF + hr = DynamicDirectXFileCreate(&dxfile); +#else hr = DirectXFileCreate(&dxfile); +#endif if (hr != DXFILE_OK) goto end; @@ -2343,8 +2347,20 @@ HRESULT d3drm_mesh_builder_create(struct d3drm_mesh_builder **mesh_builder, IDir if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMMeshBuilder2_iface.lpVtbl = &d3drm_mesh_builder2_vtbl; object->IDirect3DRMMeshBuilder3_iface.lpVtbl = &d3drm_mesh_builder3_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->ref = 1; object->d3drm = d3drm; object->quality = D3DRMRENDER_GOURAUD; @@ -2444,7 +2460,7 @@ static HRESULT WINAPI d3drm_mesh_DeleteDestroyCallback(IDirect3DRMMesh *iface, return d3drm_object_delete_destroy_callback(&mesh->obj, cb, ctx); } -static HRESULT WINAPI d3drm_mesh_SetAppData(IDirect3DRMMesh *iface, DWORD data) +static HRESULT WINAPI d3drm_mesh_SetAppData(IDirect3DRMMesh *iface, LPVOID data) { struct d3drm_mesh *mesh = impl_from_IDirect3DRMMesh(iface); @@ -2455,7 +2471,7 @@ static HRESULT WINAPI d3drm_mesh_SetAppData(IDirect3DRMMesh *iface, DWORD data) return D3DRM_OK; } -static DWORD WINAPI d3drm_mesh_GetAppData(IDirect3DRMMesh *iface) +static LPVOID WINAPI d3drm_mesh_GetAppData(IDirect3DRMMesh *iface) { struct d3drm_mesh *mesh = impl_from_IDirect3DRMMesh(iface); @@ -2843,7 +2859,19 @@ HRESULT d3drm_mesh_create(struct d3drm_mesh **mesh, IDirect3DRM *d3drm) if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMMesh_iface.lpVtbl = &d3drm_mesh_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->ref = 1; object->d3drm = d3drm; IDirect3DRM_AddRef(object->d3drm); @@ -2928,7 +2956,7 @@ static HRESULT WINAPI d3drm_wrap_DeleteDestroyCallback(IDirect3DRMWrap *iface, return d3drm_object_delete_destroy_callback(&wrap->obj, cb, ctx); } -static HRESULT WINAPI d3drm_wrap_SetAppData(IDirect3DRMWrap *iface, DWORD data) +static HRESULT WINAPI d3drm_wrap_SetAppData(IDirect3DRMWrap *iface, LPVOID data) { struct d3drm_wrap *wrap = impl_from_IDirect3DRMWrap(iface); @@ -2939,7 +2967,7 @@ static HRESULT WINAPI d3drm_wrap_SetAppData(IDirect3DRMWrap *iface, DWORD data) return D3DRM_OK; } -static DWORD WINAPI d3drm_wrap_GetAppData(IDirect3DRMWrap *iface) +static LPVOID WINAPI d3drm_wrap_GetAppData(IDirect3DRMWrap *iface) { struct d3drm_wrap *wrap = impl_from_IDirect3DRMWrap(iface); @@ -3029,7 +3057,19 @@ HRESULT d3drm_wrap_create(struct d3drm_wrap **wrap, IDirect3DRM *d3drm) if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMWrap_iface.lpVtbl = &d3drm_wrap_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->ref = 1; d3drm_object_init(&object->obj, classname); diff --git a/3rdparty/d3drm/texture.c b/3rdparty/d3drm/texture.c index 09228372..f967dbae 100644 --- a/3rdparty/d3drm/texture.c +++ b/3rdparty/d3drm/texture.c @@ -421,7 +421,7 @@ static HRESULT WINAPI d3drm_texture1_DeleteDestroyCallback(IDirect3DRMTexture *i return IDirect3DRMTexture3_DeleteDestroyCallback(&texture->IDirect3DRMTexture3_iface, cb, ctx); } -static HRESULT WINAPI d3drm_texture1_SetAppData(IDirect3DRMTexture *iface, DWORD data) +static HRESULT WINAPI d3drm_texture1_SetAppData(IDirect3DRMTexture *iface, LPVOID data) { struct d3drm_texture *texture = impl_from_IDirect3DRMTexture(iface); @@ -430,7 +430,7 @@ static HRESULT WINAPI d3drm_texture1_SetAppData(IDirect3DRMTexture *iface, DWORD return IDirect3DRMTexture3_SetAppData(&texture->IDirect3DRMTexture3_iface, data); } -static DWORD WINAPI d3drm_texture1_GetAppData(IDirect3DRMTexture *iface) +static LPVOID WINAPI d3drm_texture1_GetAppData(IDirect3DRMTexture *iface) { struct d3drm_texture *texture = impl_from_IDirect3DRMTexture(iface); @@ -730,7 +730,7 @@ static HRESULT WINAPI d3drm_texture2_DeleteDestroyCallback(IDirect3DRMTexture2 * return IDirect3DRMTexture3_DeleteDestroyCallback(&texture->IDirect3DRMTexture3_iface, cb, ctx); } -static HRESULT WINAPI d3drm_texture2_SetAppData(IDirect3DRMTexture2 *iface, DWORD data) +static HRESULT WINAPI d3drm_texture2_SetAppData(IDirect3DRMTexture2 *iface, LPVOID data) { struct d3drm_texture *texture = impl_from_IDirect3DRMTexture2(iface); @@ -739,7 +739,7 @@ static HRESULT WINAPI d3drm_texture2_SetAppData(IDirect3DRMTexture2 *iface, DWOR return IDirect3DRMTexture3_SetAppData(&texture->IDirect3DRMTexture3_iface, data); } -static DWORD WINAPI d3drm_texture2_GetAppData(IDirect3DRMTexture2 *iface) +static LPVOID WINAPI d3drm_texture2_GetAppData(IDirect3DRMTexture2 *iface) { struct d3drm_texture *texture = impl_from_IDirect3DRMTexture2(iface); @@ -1090,7 +1090,7 @@ static HRESULT WINAPI d3drm_texture3_DeleteDestroyCallback(IDirect3DRMTexture3 * return d3drm_object_delete_destroy_callback(&texture->obj, cb, ctx); } -static HRESULT WINAPI d3drm_texture3_SetAppData(IDirect3DRMTexture3 *iface, DWORD data) +static HRESULT WINAPI d3drm_texture3_SetAppData(IDirect3DRMTexture3 *iface, LPVOID data) { struct d3drm_texture *texture = impl_from_IDirect3DRMTexture3(iface); @@ -1101,7 +1101,7 @@ static HRESULT WINAPI d3drm_texture3_SetAppData(IDirect3DRMTexture3 *iface, DWOR return D3DRM_OK; } -static DWORD WINAPI d3drm_texture3_GetAppData(IDirect3DRMTexture3 *iface) +static LPVOID WINAPI d3drm_texture3_GetAppData(IDirect3DRMTexture3 *iface) { struct d3drm_texture *texture = impl_from_IDirect3DRMTexture3(iface); @@ -1467,9 +1467,21 @@ HRESULT d3drm_texture_create(struct d3drm_texture **texture, IDirect3DRM *d3drm) if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMTexture_iface.lpVtbl = &d3drm_texture1_vtbl; object->IDirect3DRMTexture2_iface.lpVtbl = &d3drm_texture2_vtbl; object->IDirect3DRMTexture3_iface.lpVtbl = &d3drm_texture3_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->d3drm = d3drm; object->max_colors = 8; object->max_shades = 16; diff --git a/3rdparty/d3drm/viewport.c b/3rdparty/d3drm/viewport.c index 821eb1ff..420e2f18 100644 --- a/3rdparty/d3drm/viewport.c +++ b/3rdparty/d3drm/viewport.c @@ -209,7 +209,7 @@ static HRESULT WINAPI d3drm_viewport1_DeleteDestroyCallback(IDirect3DRMViewport return d3drm_viewport2_DeleteDestroyCallback(&viewport->IDirect3DRMViewport2_iface, cb, ctx); } -static HRESULT WINAPI d3drm_viewport2_SetAppData(IDirect3DRMViewport2 *iface, DWORD data) +static HRESULT WINAPI d3drm_viewport2_SetAppData(IDirect3DRMViewport2 *iface, LPVOID data) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -219,7 +219,7 @@ static HRESULT WINAPI d3drm_viewport2_SetAppData(IDirect3DRMViewport2 *iface, DW return S_OK; } -static HRESULT WINAPI d3drm_viewport1_SetAppData(IDirect3DRMViewport *iface, DWORD data) +static HRESULT WINAPI d3drm_viewport1_SetAppData(IDirect3DRMViewport *iface, LPVOID data) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); @@ -228,7 +228,7 @@ static HRESULT WINAPI d3drm_viewport1_SetAppData(IDirect3DRMViewport *iface, DWO return d3drm_viewport2_SetAppData(&viewport->IDirect3DRMViewport2_iface, data); } -static DWORD WINAPI d3drm_viewport2_GetAppData(IDirect3DRMViewport2 *iface) +static LPVOID WINAPI d3drm_viewport2_GetAppData(IDirect3DRMViewport2 *iface) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -237,7 +237,7 @@ static DWORD WINAPI d3drm_viewport2_GetAppData(IDirect3DRMViewport2 *iface) return viewport->obj.appdata; } -static DWORD WINAPI d3drm_viewport1_GetAppData(IDirect3DRMViewport *iface) +static LPVOID WINAPI d3drm_viewport1_GetAppData(IDirect3DRMViewport *iface) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); @@ -1136,8 +1136,20 @@ HRESULT d3drm_viewport_create(struct d3drm_viewport **viewport, IDirect3DRM *d3d if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" +#elif defined(_MSC_VER) +#pragma warning( push ) +#pragma warning( disable : 4090 ) /* different 'const' qualifiers */ +#endif object->IDirect3DRMViewport_iface.lpVtbl = &d3drm_viewport1_vtbl; object->IDirect3DRMViewport2_iface.lpVtbl = &d3drm_viewport2_vtbl; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning( pop ) +#endif object->d3drm = d3drm; d3drm_object_init(&object->obj, classname); diff --git a/3rdparty/d3drm/wine/debug.h b/3rdparty/d3drm/wine/debug.h index 910fab79..41cf8fb0 100644 --- a/3rdparty/d3drm/wine/debug.h +++ b/3rdparty/d3drm/wine/debug.h @@ -123,7 +123,7 @@ extern DECLSPEC_EXPORT int __cdecl __wine_dbg_header( enum __wine_debug_class cl quotes. The string will be valid for some time, but not indefinitely as strings are re-used. */ -#if (defined(__x86_64__) || (defined(__aarch64__) && __has_attribute(ms_abi))) && defined(__GNUC__) && defined(__WINE_USE_MSVCRT) +#if 0//(defined(__x86_64__) || (defined(__aarch64__) && __has_attribute(ms_abi))) && defined(__GNUC__) && defined(__WINE_USE_MSVCRT) # define __wine_dbg_cdecl __cdecl #else # define __wine_dbg_cdecl diff --git a/CMakeLists.txt b/CMakeLists.txt index 16b416d7..9d2fd5c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,10 @@ else() # to add search paths. find_package(SDL3 CONFIG REQUIRED) - find_package(iniparser REQUIRED COMPONENTS static) + find_package(iniparser CONFIG COMPONENTS static) + if(NOT TARGET iniparser-static) + find_package(iniparser REQUIRED MODULE COMPONENTS static) + endif() endif() include(CheckCXXSourceCompiles) @@ -57,12 +60,6 @@ if (ENABLE_CLANG_TIDY) set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_BIN}") endif() -math(EXPR bits "8 * ${CMAKE_SIZEOF_VOID_P}") -message(STATUS "Building ${bits}-bit LEGO Island") -if (NOT bits EQUAL 32) - message(WARNING "Only 32-bit executables are supported") -endif() - set(MSVC_FOR_DECOMP FALSE) if (MSVC) # Visual C++ 4.2 -> cl version 10.2.0 @@ -122,11 +119,9 @@ add_cxx_warning(parentheses) add_library(DirectX5::DirectX5 INTERFACE IMPORTED) target_include_directories(DirectX5::DirectX5 INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/inc") -if(ISLE_USE_DX5) - target_link_directories(DirectX5::DirectX5 INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/lib") -endif() +target_link_directories(DirectX5::DirectX5 INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/lib") -add_subdirectory(3rdparty/d3drm) +add_subdirectory(3rdparty/d3drm EXCLUDE_FROM_ALL) add_library(Vec::Vec INTERFACE IMPORTED) target_include_directories(Vec::Vec INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/vec") @@ -452,7 +447,11 @@ if (MINGW) endif() if (MSVC) - target_sources(lego1 PRIVATE LEGO1/LegoOmni.def) + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + target_sources(lego1 PRIVATE LEGO1/LegoOmni.def) + else() + target_sources(lego1 PRIVATE LEGO1/LegoOmni64.def) + endif() else() target_sources(lego1 PRIVATE LEGO1/LegoOmni.mingw.def) endif() @@ -465,9 +464,10 @@ target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include/actions") # Link libraries -target_link_libraries(lego1 PRIVATE tglrl viewmanager realtime mxdirectx roi geom anim Vec::Vec dxguid misc 3dmanager miniaudio omni) +target_link_libraries(lego1 PRIVATE tglrl viewmanager realtime mxdirectx roi geom anim Vec::Vec dxguid d3drm_guid misc 3dmanager miniaudio omni) foreach(tgt IN LISTS lego1_targets) + target_include_directories(${tgt} PRIVATE $<$<BOOL:${ISLE_D3DRM_FROM_WINE}>:$<TARGET_PROPERTY:d3drm-wine,INTERFACE_INCLUDE_DIRECTORIES>>) target_link_libraries(${tgt} PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5> SDL3::SDL3) target_compile_definitions(${tgt} PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DIRECTX5_SDK>) endforeach() @@ -494,6 +494,8 @@ if (ISLE_BUILD_APP) # Link DSOUND, WINMM, and LEGO1 target_link_libraries(isle PRIVATE winmm lego1) + target_include_directories(isle PRIVATE $<$<BOOL:${ISLE_D3DRM_FROM_WINE}>:$<TARGET_PROPERTY:d3drm-wine,INTERFACE_INCLUDE_DIRECTORIES>>) + # Make sure filenames are ALL CAPS set_property(TARGET isle PROPERTY OUTPUT_NAME ISLE) set_property(TARGET isle PROPERTY SUFFIX ".EXE") diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index d70878ed..b6c62300 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -385,10 +385,11 @@ int SDL_AppEvent(void* appstate, const SDL_Event* event) break; } + // FIXME: use g_userEvent instead of SDL_EVENT_USER if (event->type >= SDL_EVENT_USER && event->type <= SDL_EVENT_LAST - 1) { switch (event->user.code) { case WM_ISLE_SETCURSOR: - g_isle->SetupCursor((Cursor) (MxS32) event->user.data1); + g_isle->SetupCursor((Cursor) (uintptr_t) event->user.data1); break; } } diff --git a/LEGO1/LegoOmni.def b/LEGO1/LegoOmni.def index 26c9e6b6..2807bea9 100644 --- a/LEGO1/LegoOmni.def +++ b/LEGO1/LegoOmni.def @@ -1,6 +1,6 @@ ; LegoOmni.def : Declares the module paarameters for the LEGO1.DLL. -DESCRIPTION "Lego OMNI Windows Dynamic Link Library" +; DESCRIPTION "Lego OMNI Windows Dynamic Link Library" EXPORTS diff --git a/LEGO1/LegoOmni64.def b/LEGO1/LegoOmni64.def new file mode 100644 index 00000000..e0717e35 --- /dev/null +++ b/LEGO1/LegoOmni64.def @@ -0,0 +1,64 @@ +; LegoOmni64.def : Declares the module paarameters for the LEGO1.DLL. + +; DESCRIPTION "Lego OMNI Windows Dynamic Link Library" + +EXPORTS + +; EXPORTs really required only. + +?SetCD@MxOmni@@SAXPEBD@Z +?VariableTable@@YAPEAVMxVariableTable@@XZ +?SetVariable@MxVariableTable@@QEAAXPEBD0@Z +?CreateInstance@LegoOmni@@SAXXZ +?TickleManager@@YAPEAVMxTickleManager@@XZ +??1MxVideoParam@@QEAA@XZ +?configureLegoModelPresenter@LegoModelPresenter@@SAXH@Z +?SetHD@MxOmni@@SAXPEBD@Z +?QueueEvent@LegoInputManager@@QEAAXW4NotificationId@@EJJE@Z +?TransitionManager@@YAPEAVMxTransitionManager@@XZ +??1MxString@@UEAA@XZ +??0MxOmniCreateParam@@QEAA@PEBDPEAUHWND__@@AEAVMxVideoParam@@VMxOmniCreateFlags@@@Z +?configureLegoAnimationManager@LegoAnimationManager@@SAXH@Z +?GetCD@MxOmni@@SAPEBDXZ +?configureLegoWorldPresenter@LegoWorldPresenter@@SAXH@Z +?GameState@@YAPEAVLegoGameState@@XZ +?Streamer@@YAPEAVMxStreamer@@XZ +??1MxOmniCreateParam@@UEAA@XZ +?configureLegoROI@LegoROI@@SAXH@Z +?Lego@@YAPEAVLegoOmni@@XZ +??0MxVideoParamFlags@@QEAA@XZ +??0MxDSAction@@QEAA@XZ +?VideoManager@@YAPEAVLegoVideoManager@@XZ +?Timer@@YAPEAVMxTimer@@XZ +?RemoveAll@ViewManager@@QEAAXPEAVViewROI@@@Z +??4MxAtomId@@QEAAAEAV0@AEBV0@@Z +?Enable@MxBackgroundAudioManager@@QEAAXE@Z +?SetDeviceName@MxVideoParam@@QEAAXPEAD@Z +??0MxVideoParam@@QEAA@XZ +?SetSavePath@LegoGameState@@QEAAXPEAD@Z +?MoveCursor@LegoVideoManager@@QEAAXHH@Z +?SetWaitIndicator@MxTransitionManager@@QEAAXPEAVMxVideoPresenter@@@Z +?Save@LegoGameState@@QEAAJK@Z +??1MxDSAction@@UEAA@XZ +?RemoveWorld@LegoOmni@@QEAAXAEBVMxAtomId@@J@Z +?GetPrimaryBitDepth@MxDirectDraw@@SAHXZ +?CreateBackgroundAudio@LegoOmni@@QEAAXXZ +?SerializePlayersInfo@LegoGameState@@QEAAXF@Z +?GetInstance@LegoOmni@@SAPEAV1@XZ +?BackgroundAudioManager@@YAPEAVMxBackgroundAudioManager@@XZ +?configureLegoPartPresenter@LegoPartPresenter@@SAXHH@Z +?EnableRMDevice@LegoVideoManager@@QEAAHXZ +?GetRealTime@MxTimer@@QEAAJXZ +?SetAtomId@MxDSObject@@UEAAXVMxAtomId@@@Z +?DestroyInstance@MxOmni@@SAXXZ +?InputManager@@YAPEAVLegoInputManager@@XZ +?Open@MxStreamer@@QEAAPEAVMxStreamController@@PEBDG@Z +?Start@@YAJPEAVMxDSAction@@@Z +??4MxVideoParam@@QEAAAEAV0@AEBV0@@Z +?EnableFullScreenMovie@LegoVideoManager@@QEAAXEE@Z +?configureLegoBuildingManager@LegoBuildingManager@@SAXH@Z +?SerializeScoreHistory@LegoGameState@@QEAAXF@Z +?Close@MxStreamer@@QEAAJPEBD@Z +??0MxOmniCreateFlags@@QEAA@XZ +??1MxAtomId@@QEAA@XZ +?SetSound3D@MxOmni@@SAXE@Z diff --git a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp index f5abb3c8..fa136321 100644 --- a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -2954,7 +2954,7 @@ MxResult AnimState::Serialize(LegoFile* p_file) MxBool AnimState::SetFlag() { if (m_unk0x10 != NULL) { - m_extraCharacterId = NULL; + m_extraCharacterId = 0; for (MxS32 i = 0; i < m_unk0x0c; i++) { m_unk0x10[i] = 0; diff --git a/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp b/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp index 51775a03..d141dd8c 100644 --- a/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp +++ b/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp @@ -127,7 +127,7 @@ LegoTextureInfo* LegoTextureInfo::Create(const char* p_name, LegoTexture* p_text goto done; } - textureInfo->m_texture->SetAppData((DWORD) textureInfo); + textureInfo->m_texture->SetAppData((LPD3DRM_APPDATA) textureInfo); return textureInfo; done: diff --git a/LEGO1/lego/legoomni/src/main/legomain.cpp b/LEGO1/lego/legoomni/src/main/legomain.cpp index 62a927ff..5f9d5157 100644 --- a/LEGO1/lego/legoomni/src/main/legomain.cpp +++ b/LEGO1/lego/legoomni/src/main/legomain.cpp @@ -501,7 +501,8 @@ MxAtomId* LegoOmni::GetWorldAtom(MxU32 p_id) MxS32 LegoOmni::GetWorldId(const char* p_key) { for (MxS32 i = 0; i < 19; i++) { - if ((MxS32) &m_worlds[i] != -4 && !strcmpi(m_worlds[i].GetKey(), p_key)) { + // FIXME: this looks very fishy. Is this guarding against out-of-bounds access? + if ((MxS32*) &m_worlds[i] != (MxS32*) -4 && !strcmpi(m_worlds[i].GetKey(), p_key)) { return m_worlds[i].GetId(); } } diff --git a/LEGO1/lego/sources/misc/legocontainer.cpp b/LEGO1/lego/sources/misc/legocontainer.cpp index d9bdc0eb..34dccc26 100644 --- a/LEGO1/lego/sources/misc/legocontainer.cpp +++ b/LEGO1/lego/sources/misc/legocontainer.cpp @@ -92,7 +92,7 @@ LegoTextureInfo* LegoTextureContainer::GetCached(LegoTextureInfo* p_textureInfo) return NULL; } else { - textureInfo->m_texture->SetAppData((DWORD) textureInfo); + textureInfo->m_texture->SetAppData((LPD3DRM_APPDATA) textureInfo); m_cached.push_back(LegoCachedTexture(textureInfo, TRUE)); textureInfo->m_texture->AddRef(); diff --git a/LEGO1/mxdirectx/mxdirect3d.cpp b/LEGO1/mxdirectx/mxdirect3d.cpp index 8e4a94e8..d1f23abd 100644 --- a/LEGO1/mxdirectx/mxdirect3d.cpp +++ b/LEGO1/mxdirectx/mxdirect3d.cpp @@ -1014,6 +1014,7 @@ int MxDeviceEnumerate::SupportsMMX() } int supports_mmx; #ifdef _MSC_VER +#if defined(_M_IX86) __asm { mov eax, 0x0 ; EAX=0: Highest Function Parameter and Manufacturer ID #if _MSC_VER > 1100 @@ -1034,6 +1035,11 @@ int MxDeviceEnumerate::SupportsMMX() adc eax, eax ; Add with carry: EAX = EAX + EAX + CF = CF mov supports_mmx, eax ; Save eax into C variable } +#elif defined(_M_IX64) + supports_mmx = 1; +#else + supports_mmx = 0; +#endif #else __asm__("movl $0x0, %%eax\n\t" // EAX=0: Highest Function Parameter and Manufacturer ID "cpuid\n\t" // Run CPUID\n" diff --git a/LEGO1/omni/src/stream/mxdsbuffer.cpp b/LEGO1/omni/src/stream/mxdsbuffer.cpp index e5e69c55..b1f4e92e 100644 --- a/LEGO1/omni/src/stream/mxdsbuffer.cpp +++ b/LEGO1/omni/src/stream/mxdsbuffer.cpp @@ -353,7 +353,7 @@ MxU8* MxDSBuffer::SkipToData() case FOURCC('M', 'x', 'O', 'b'): case FOURCC('M', 'x', 'C', 'h'): result = m_pIntoBuffer; - m_pIntoBuffer = (MxU8*) ((ptr[1] & 1) + ptr[1] + (MxU32) ptr); + m_pIntoBuffer = (MxU8*) ptr + ((ptr[1] & 1) + ptr[1]); m_pIntoBuffer = (MxU8*) ((MxU32*) m_pIntoBuffer + 2); if (m_pBuffer + (m_writeOffset - 8) < m_pIntoBuffer) { m_pIntoBuffer2 = result; @@ -366,7 +366,7 @@ MxU8* MxDSBuffer::SkipToData() m_pIntoBuffer = (MxU8*) (ptr + 2); break; case FOURCC('M', 'x', 'H', 'd'): - m_pIntoBuffer = (MxU8*) ((MxU32) ptr + ptr[1] + 8); + m_pIntoBuffer = (MxU8*) ptr + (ptr[1] + 8); break; default: m_pIntoBuffer = NULL; @@ -460,7 +460,7 @@ MxU8* MxDSBuffer::FUN_100c6fa0(MxU8* p_data) if (current != p_data) { return current; } - current = ((MxU32) current & 1) + current; + current += ((uintptr_t) current) & 1; current += 8; break; case FOURCC('M', 'x', 'H', 'd'):