ReactOS 0.4.17-dev-966-gf06eace
d3drm_private.h File Reference
#include <assert.h>
#include <math.h>
#include "dxfile.h"
#include "d3drmwin.h"
#include "rmxfguid.h"
#include "wine/debug.h"
#include "wine/list.h"
Include dependency graph for d3drm_private.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  d3drm_matrix
 
struct  d3drm_object
 
struct  d3drm_texture
 
struct  d3drm_frame
 
struct  d3drm_box
 
struct  d3drm_viewport
 
struct  d3drm_device
 
struct  d3drm_face
 
struct  d3drm_mesh_builder
 
struct  mesh_group
 
struct  d3drm_mesh
 
struct  d3drm_light
 
struct  color_rgb
 
struct  d3drm_material
 
struct  d3drm_animation_key
 
struct  d3drm_animation_keys
 
struct  d3drm_animation
 
struct  d3drm_wrap
 
struct  d3drm_file_header
 

Macros

#define COBJMACROS
 

Functions

static struct d3drm_matrix * d3drm_matrix (D3DRMMATRIX4D m)
 
HRESULT d3drm_device_create (struct d3drm_device **device, IDirect3DRM *d3drm)
 
HRESULT d3drm_device_create_surfaces_from_clipper (struct d3drm_device *object, IDirectDraw *ddraw, IDirectDrawClipper *clipper, int width, int height, IDirectDrawSurface **surface)
 
void d3drm_device_destroy (struct d3drm_device *device)
 
HRESULT d3drm_device_init (struct d3drm_device *device, UINT version, IDirectDraw *ddraw, IDirectDrawSurface *surface, BOOL create_z_surface)
 
void d3drm_object_init (struct d3drm_object *object, const char *classname)
 
HRESULT d3drm_object_add_destroy_callback (struct d3drm_object *object, D3DRMOBJECTCALLBACK cb, void *ctx)
 
HRESULT d3drm_object_delete_destroy_callback (struct d3drm_object *object, D3DRMOBJECTCALLBACK cb, void *ctx)
 
HRESULT d3drm_object_get_class_name (struct d3drm_object *object, DWORD *size, char *name)
 
HRESULT d3drm_object_get_name (struct d3drm_object *object, DWORD *size, char *name)
 
HRESULT d3drm_object_set_name (struct d3drm_object *object, const char *name)
 
void d3drm_object_cleanup (IDirect3DRMObject *iface, struct d3drm_object *object)
 
struct d3drm_frame * unsafe_impl_from_IDirect3DRMFrame (IDirect3DRMFrame *iface)
 
struct d3drm_frame * unsafe_impl_from_IDirect3DRMFrame3 (IDirect3DRMFrame3 *iface)
 
struct d3drm_device * unsafe_impl_from_IDirect3DRMDevice3 (IDirect3DRMDevice3 *iface)
 
HRESULT d3drm_texture_create (struct d3drm_texture **texture, IDirect3DRM *d3drm)
 
HRESULT d3drm_frame_create (struct d3drm_frame **frame, IUnknown *parent_frame, IDirect3DRM *d3drm)
 
HRESULT d3drm_face_create (struct d3drm_face **face)
 
HRESULT d3drm_viewport_create (struct d3drm_viewport **viewport, IDirect3DRM *d3drm)
 
HRESULT d3drm_mesh_builder_create (struct d3drm_mesh_builder **mesh_builder, IDirect3DRM *d3drm)
 
HRESULT d3drm_light_create (struct d3drm_light **light, IDirect3DRM *d3drm)
 
HRESULT d3drm_material_create (struct d3drm_material **material, IDirect3DRM *d3drm)
 
HRESULT d3drm_mesh_create (struct d3drm_mesh **mesh, IDirect3DRM *d3drm)
 
HRESULT d3drm_animation_create (struct d3drm_animation **animation, IDirect3DRM *d3drm)
 
HRESULT d3drm_wrap_create (struct d3drm_wrap **wrap, IDirect3DRM *d3drm)
 
HRESULT load_mesh_data (IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *data, D3DRMLOADTEXTURECALLBACK load_texture_proc, void *arg)
 
static BYTE d3drm_color_component (float c)
 
static void d3drm_set_color (D3DCOLOR *color, float r, float g, float b, float a)
 
BOOL d3drm_array_reserve (void **elements, SIZE_T *capacity, SIZE_T element_count, SIZE_T element_size)
 

Variables

char templates []
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 24 of file d3drm_private.h.

Function Documentation

◆ d3drm_animation_create()

HRESULT d3drm_animation_create ( struct d3drm_animation **  animation,
IDirect3DRM *  d3drm 
)

Definition at line 3881 of file frame.c.

3882{
3883 static const char classname[] = "Animation";
3884 struct d3drm_animation *object;
3886
3887 TRACE("animation %p, d3drm %p.\n", animation, d3drm);
3888
3889 if (!(object = calloc(1, sizeof(*object))))
3890 return E_OUTOFMEMORY;
3891
3892 object->IDirect3DRMAnimation_iface.lpVtbl = &d3drm_animation1_vtbl;
3893 object->IDirect3DRMAnimation2_iface.lpVtbl = &d3drm_animation2_vtbl;
3894 object->d3drm = d3drm;
3895 object->ref = 1;
3897
3899
3900 IDirect3DRM_AddRef(object->d3drm);
3901
3902 *animation = object;
3903
3904 return hr;
3905}
#define D3DRM_OK
Definition: d3drm.h:486
#define IDirect3DRM_AddRef(p)
Definition: d3drm.h:110
void d3drm_object_init(struct d3drm_object *object, const char *classname)
Definition: d3drm_main.c:41
#define D3DRMANIMATION_LINEARPOSITION
Definition: d3drmdef.h:325
#define D3DRMANIMATION_CLOSED
Definition: d3drmdef.h:324
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT hr
Definition: delayimp.cpp:582
static const struct IDirect3DRMAnimationVtbl d3drm_animation1_vtbl
Definition: frame.c:3830
static const struct IDirect3DRMAnimation2Vtbl d3drm_animation2_vtbl
Definition: frame.c:3853
WCHAR classname[128]
Definition: startup.c:15
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
IDirect3DRM * d3drm
Definition: d3drm.c:189

Referenced by d3drm1_CreateAnimation(), d3drm3_CreateAnimation(), and d3drm_create_animation_object().

◆ d3drm_array_reserve()

BOOL d3drm_array_reserve ( void **  elements,
SIZE_T *  capacity,
SIZE_T  element_count,
SIZE_T  element_size 
)

Definition at line 260 of file meshbuilder.c.

261{
262 SIZE_T new_capacity, max_capacity;
263 void *new_elements;
264
265 if (element_count <= *capacity)
266 return TRUE;
267
268 max_capacity = ~(SIZE_T)0 / element_size;
269 if (max_capacity < element_count)
270 return FALSE;
271
272 new_capacity = max(*capacity, 4);
273 while (new_capacity < element_count && new_capacity <= max_capacity / 2)
274 new_capacity *= 2;
275
276 if (new_capacity < element_count)
277 new_capacity = max_capacity;
278
279 if (!(new_elements = realloc(*elements, new_capacity * element_size)))
280 return FALSE;
281
282 *elements = new_elements;
283 *capacity = new_capacity;
284 return TRUE;
285}
size_t const element_size
Definition: debug_heap.cpp:510
#define realloc
Definition: debug_ros.c:6
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static ULONG ** element_count
Definition: exception.c:124
#define max(a, b)
Definition: svc.c:63
ULONG_PTR SIZE_T
Definition: typedefs.h:80

Referenced by d3drm_animation2_AddKey(), d3drm_frame3_AddChild(), d3drm_frame3_AddLight(), d3drm_frame3_AddVisual(), d3drm_mesh_AddGroup(), d3drm_mesh_builder3_AddNormal(), d3drm_mesh_builder3_AddVertex(), and load_mesh_data().

◆ d3drm_color_component()

static BYTE d3drm_color_component ( float  c)
inlinestatic

Definition at line 316 of file d3drm_private.h.

317{
318 if (c <= 0.0f)
319 return 0u;
320 if (c >= 1.0f)
321 return 0xffu;
322 return floor(c * 255.0f);
323}
_ACRTIMP double __cdecl floor(double)
Definition: floor.c:18
const GLubyte * c
Definition: glext.h:8905
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240

Referenced by d3drm_set_color().

◆ d3drm_device_create()

HRESULT d3drm_device_create ( struct d3drm_device **  device,
IDirect3DRM *  d3drm 
)

Definition at line 1656 of file device.c.

1657{
1658 static const char classname[] = "Device";
1659 struct d3drm_device *object;
1660
1661 TRACE("device %p, d3drm %p.\n", device, d3drm);
1662
1663 if (!(object = calloc(1, sizeof(*object))))
1664 return E_OUTOFMEMORY;
1665
1666 object->IDirect3DRMDevice_iface.lpVtbl = &d3drm_device1_vtbl;
1667 object->IDirect3DRMDevice2_iface.lpVtbl = &d3drm_device2_vtbl;
1668 object->IDirect3DRMDevice3_iface.lpVtbl = &d3drm_device3_vtbl;
1669 object->IDirect3DRMWinDevice_iface.lpVtbl = &d3drm_device_win_vtbl;
1670 object->d3drm = d3drm;
1672
1673 *device = object;
1674
1675 return D3DRM_OK;
1676}
static const struct IDirect3DRMDevice2Vtbl d3drm_device2_vtbl
Definition: device.c:1437
static const struct IDirect3DRMDevice3Vtbl d3drm_device3_vtbl
Definition: device.c:1389
static const struct IDirect3DRMWinDeviceVtbl d3drm_device_win_vtbl
Definition: device.c:1630
static const struct IDirect3DRMDeviceVtbl d3drm_device1_vtbl
Definition: device.c:1480
IDirect3DRM * d3drm
Definition: devices.h:37

Referenced by d3drm1_CreateDeviceFromClipper(), d3drm1_CreateDeviceFromD3D(), d3drm1_CreateDeviceFromSurface(), d3drm3_CreateDeviceFromClipper(), d3drm3_CreateDeviceFromD3D(), d3drm3_CreateDeviceFromSurface(), and d3drm_create_device_object().

◆ d3drm_device_create_surfaces_from_clipper()

HRESULT d3drm_device_create_surfaces_from_clipper ( struct d3drm_device *  object,
IDirectDraw *  ddraw,
IDirectDrawClipper *  clipper,
int  width,
int  height,
IDirectDrawSurface **  surface 
)

Definition at line 69 of file device.c.

70{
71 DDSURFACEDESC surface_desc;
72 IDirectDrawSurface *primary_surface, *render_target;
74 HRESULT hr;
75
76 hr = IDirectDrawClipper_GetHWnd(clipper, &window);
77 if (FAILED(hr))
78 return hr;
79
80 hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
81 if (FAILED(hr))
82 return hr;
83
84 memset(&surface_desc, 0, sizeof(surface_desc));
85 surface_desc.dwSize = sizeof(surface_desc);
86 surface_desc.dwFlags = DDSD_CAPS;
87 surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
88 hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &primary_surface, NULL);
89 if (FAILED(hr))
90 return hr;
91 hr = IDirectDrawSurface_SetClipper(primary_surface, clipper);
92 if (FAILED(hr))
93 {
94 IDirectDrawSurface_Release(primary_surface);
95 return hr;
96 }
97
98 memset(&surface_desc, 0, sizeof(surface_desc));
99 surface_desc.dwSize = sizeof(surface_desc);
100 surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
101 surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
102 surface_desc.dwWidth = width;
103 surface_desc.dwHeight = height;
104
105 hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &render_target, NULL);
106 if (FAILED(hr))
107 {
108 IDirectDrawSurface_Release(primary_surface);
109 return hr;
110 }
111
112 object->primary_surface = primary_surface;
113 object->clipper = clipper;
114 IDirectDrawClipper_AddRef(clipper);
115 *surface = render_target;
116
117 return D3DRM_OK;
118}
#define NULL
Definition: types.h:112
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
#define FAILED(hr)
Definition: intsafe.h:51
static IHTMLWindow2 * window
Definition: events.c:77
#define DDSD_WIDTH
Definition: ddraw.h:212
#define DDSCL_NORMAL
Definition: ddraw.h:537
#define DDSD_HEIGHT
Definition: ddraw.h:211
#define DDSCAPS_PRIMARYSURFACE
Definition: ddraw.h:260
#define DDSCAPS_OFFSCREENPLAIN
Definition: ddraw.h:257
#define DDSCAPS_3DDEVICE
Definition: ddraw.h:265
#define DDSD_CAPS
Definition: ddraw.h:210
#define memset(x, y, z)
Definition: compat.h:39

Referenced by d3drm1_CreateDeviceFromClipper(), and d3drm3_CreateDeviceFromClipper().

◆ d3drm_device_destroy()

void d3drm_device_destroy ( struct d3drm_device *  device)

Definition at line 40 of file device.c.

41{
42 d3drm_object_cleanup((IDirect3DRMObject *)&device->IDirect3DRMDevice_iface, &device->obj);
43 if (device->device)
44 {
45 TRACE("Releasing attached ddraw interfaces.\n");
47 }
48 if (device->render_target)
49 IDirectDrawSurface_Release(device->render_target);
50 if (device->primary_surface)
51 {
52 TRACE("Releasing primary surface and attached clipper.\n");
53 IDirectDrawSurface_Release(device->primary_surface);
54 IDirectDrawClipper_Release(device->clipper);
55 }
56 if (device->ddraw)
57 {
58 IDirectDraw_Release(device->ddraw);
60 }
61 free(device);
62}
#define IDirect3DDevice_Release(p)
Definition: d3d.h:966
#define IDirect3DRM_Release(p)
Definition: d3drm.h:111
void d3drm_object_cleanup(IDirect3DRMObject *iface, struct d3drm_object *object)
Definition: d3drm_main.c:155
#define free
Definition: debug_ros.c:5

Referenced by d3drm1_CreateDeviceFromClipper(), d3drm1_CreateDeviceFromD3D(), d3drm1_CreateDeviceFromSurface(), d3drm3_CreateDeviceFromClipper(), d3drm3_CreateDeviceFromD3D(), d3drm3_CreateDeviceFromSurface(), and d3drm_device3_Release().

◆ d3drm_device_init()

HRESULT d3drm_device_init ( struct d3drm_device *  device,
UINT  version,
IDirectDraw *  ddraw,
IDirectDrawSurface *  surface,
BOOL  create_z_surface 
)

Definition at line 120 of file device.c.

122{
123 DDSCAPS caps = { DDSCAPS_ZBUFFER };
124 IDirectDrawSurface *ds = NULL;
125 IDirect3DDevice *device1 = NULL;
126 IDirect3DDevice2 *device2 = NULL;
127 IDirect3DDevice3 *device3 = NULL;
128 IDirect3D2 *d3d2 = NULL;
129 IDirect3D3 *d3d3 = NULL;
130 DDSURFACEDESC desc, surface_desc;
131 HRESULT hr;
132
133 device->ddraw = ddraw;
134 IDirectDraw_AddRef(ddraw);
136 device->render_target = surface;
137 IDirectDrawSurface_AddRef(surface);
138
139 desc.dwSize = sizeof(desc);
140 hr = IDirectDrawSurface_GetSurfaceDesc(surface, &desc);
141 if (FAILED(hr))
142 return hr;
143
144 if (!(desc.ddsCaps.dwCaps & DDSCAPS_3DDEVICE))
145 return DDERR_INVALIDCAPS;
146
147 hr = IDirectDrawSurface_GetAttachedSurface(surface, &caps, &ds);
148 if (SUCCEEDED(hr))
149 {
150 create_z_surface = FALSE;
151 IDirectDrawSurface_Release(ds);
152 ds = NULL;
153 }
154
155 if (create_z_surface)
156 {
157 memset(&surface_desc, 0, sizeof(surface_desc));
158 surface_desc.dwSize = sizeof(surface_desc);
159 surface_desc.dwFlags = DDSD_CAPS | DDSD_ZBUFFERBITDEPTH | DDSD_WIDTH | DDSD_HEIGHT;
160 surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER;
161 surface_desc.dwZBufferBitDepth = 16;
162 surface_desc.dwWidth = desc.dwWidth;
163 surface_desc.dwHeight = desc.dwHeight;
164 hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &ds, NULL);
165 if (FAILED(hr))
166 return hr;
167
168 hr = IDirectDrawSurface_AddAttachedSurface(surface, ds);
169 IDirectDrawSurface_Release(ds);
170 if (FAILED(hr))
171 return hr;
172 }
173
174 if (version == 1)
175 hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirect3DRGBDevice, (void **)&device1);
176 else if (version == 2)
177 {
178 IDirectDraw_QueryInterface(ddraw, &IID_IDirect3D2, (void**)&d3d2);
179 hr = IDirect3D2_CreateDevice(d3d2, &IID_IDirect3DRGBDevice, surface, &device2);
180 IDirect3D2_Release(d3d2);
181 }
182 else
183 {
184 IDirectDrawSurface4 *surface4 = NULL;
185
186 IDirectDrawSurface_QueryInterface(surface, &IID_IDirectDrawSurface4, (void**)&surface4);
187 IDirectDraw_QueryInterface(ddraw, &IID_IDirect3D3, (void**)&d3d3);
188 hr = IDirect3D3_CreateDevice(d3d3, &IID_IDirect3DRGBDevice, surface4, &device3, NULL);
189 IDirectDrawSurface4_Release(surface4);
190 IDirect3D3_Release(d3d3);
191 }
192 if (FAILED(hr))
193 {
194 IDirectDrawSurface_DeleteAttachedSurface(surface, 0, ds);
195 return hr;
196 }
197
198 if (version == 2)
199 {
200 hr = IDirect3DDevice2_QueryInterface(device2, &IID_IDirect3DDevice, (void**)&device1);
202 if (FAILED(hr))
203 {
204 IDirectDrawSurface_DeleteAttachedSurface(surface, 0, ds);
205 return hr;
206 }
207 }
208 else if (version == 3)
209 {
210 hr = IDirect3DDevice3_QueryInterface(device3, &IID_IDirect3DDevice, (void**)&device1);
212 if (FAILED(hr))
213 {
214 IDirectDrawSurface_DeleteAttachedSurface(surface, 0, ds);
215 return hr;
216 }
217 }
218 device->device = device1;
219 device->width = desc.dwWidth;
220 device->height = desc.dwHeight;
221
222 return hr;
223}
#define IDirect3D2_CreateDevice(p, a, b, c)
Definition: d3d.h:287
#define IDirect3DDevice2_QueryInterface(p, a, b)
Definition: d3d.h:1062
#define IDirect3DDevice3_QueryInterface(p, a, b)
Definition: d3d.h:1190
#define IDirect3DDevice3_Release(p)
Definition: d3d.h:1192
#define IDirect3D3_Release(p)
Definition: d3d.h:330
#define IDirect3D3_CreateDevice(p, a, b, c, d)
Definition: d3d.h:337
#define IDirect3D2_Release(p)
Definition: d3d.h:280
#define IDirect3DDevice2_Release(p)
Definition: d3d.h:1064
static const WCHAR version[]
Definition: asmname.c:66
#define ds
Definition: i386-dis.c:443
#define SUCCEEDED(hr)
Definition: intsafe.h:50
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
#define DDSCAPS_ZBUFFER
Definition: ddraw.h:269
#define DDSD_ZBUFFERBITDEPTH
Definition: ddraw.h:215
#define DDERR_INVALIDCAPS
Definition: ddraw.h:77

Referenced by d3drm1_CreateDeviceFromClipper(), d3drm1_CreateDeviceFromSurface(), d3drm3_CreateDeviceFromClipper(), and d3drm3_CreateDeviceFromSurface().

◆ d3drm_face_create()

HRESULT d3drm_face_create ( struct d3drm_face **  face)

Definition at line 620 of file face.c.

621{
622 static const char classname[] = "Face";
623 struct d3drm_face *object;
624
625 TRACE("face %p.\n", face);
626
627 if (!(object = calloc(1, sizeof(*object))))
628 return E_OUTOFMEMORY;
629
630 object->IDirect3DRMFace_iface.lpVtbl = &d3drm_face1_vtbl;
631 object->IDirect3DRMFace2_iface.lpVtbl = &d3drm_face2_vtbl;
632 object->ref = 1;
633
635
636 *face = object;
637
638 return S_OK;
639}
static const struct IDirect3DRMFace2Vtbl d3drm_face2_vtbl
Definition: face.c:586
static const struct IDirect3DRMFaceVtbl d3drm_face1_vtbl
Definition: face.c:376
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
#define S_OK
Definition: intsafe.h:52

Referenced by d3drm1_CreateFace(), d3drm_create_face_object(), d3drm_mesh_builder2_CreateFace(), and d3drm_mesh_builder3_CreateFace().

◆ d3drm_frame_create()

HRESULT d3drm_frame_create ( struct d3drm_frame **  frame,
IUnknown *  parent_frame,
IDirect3DRM *  d3drm 
)

Definition at line 3129 of file frame.c.

3130{
3131 static const char classname[] = "Frame";
3132 struct d3drm_frame *object;
3134
3135 TRACE("frame %p, parent_frame %p, d3drm %p.\n", frame, parent_frame, d3drm);
3136
3137 if (!(object = calloc(1, sizeof(*object))))
3138 return E_OUTOFMEMORY;
3139
3140 object->IDirect3DRMFrame_iface.lpVtbl = &d3drm_frame1_vtbl;
3141 object->IDirect3DRMFrame2_iface.lpVtbl = &d3drm_frame2_vtbl;
3142 object->IDirect3DRMFrame3_iface.lpVtbl = &d3drm_frame3_vtbl;
3143 object->d3drm = d3drm;
3144 object->ref = 1;
3145 d3drm_set_color(&object->scenebackground, 0.0f, 0.0f, 0.0f, 1.0f);
3146 object->traversal_options = D3DRMFRAME_RENDERENABLE | D3DRMFRAME_PICKENABLE;
3147
3149
3150 object->transform = identity;
3151
3152 if (parent_frame)
3153 {
3154 IDirect3DRMFrame3 *p;
3155
3156 if (FAILED(hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&p)))
3157 {
3158 free(object);
3159 return hr;
3160 }
3161 IDirect3DRMFrame_Release(parent_frame);
3162 IDirect3DRMFrame3_AddChild(p, &object->IDirect3DRMFrame3_iface);
3163 }
3164
3165 IDirect3DRM_AddRef(object->d3drm);
3166
3167 *frame = object;
3168
3169 return hr;
3170}
static void d3drm_set_color(D3DCOLOR *color, float r, float g, float b, float a)
#define D3DRMFRAME_PICKENABLE
Definition: d3drmdef.h:320
#define D3DRMFRAME_RENDERENABLE
Definition: d3drmdef.h:319
#define IDirect3DRMFrame_Release(p)
Definition: d3drmobj.h:1168
#define IDirect3DRMFrame3_AddChild(p, a)
Definition: d3drmobj.h:1719
#define IDirect3DRMFrame_QueryInterface(p, a, b)
Definition: d3drmobj.h:1166
static const struct IDirect3DRMFrame2Vtbl d3drm_frame2_vtbl
Definition: frame.c:2958
static const struct d3drm_matrix identity
Definition: frame.c:26
static const struct IDirect3DRMFrame3Vtbl d3drm_frame3_vtbl
Definition: frame.c:2865
static const struct IDirect3DRMFrameVtbl d3drm_frame1_vtbl
Definition: frame.c:3038
GLfloat GLfloat p
Definition: glext.h:8902
IDirect3DRM * d3drm
Definition: d3drm_private.h:79

Referenced by d3drm1_CreateFrame(), d3drm2_CreateFrame(), d3drm3_CreateFrame(), and d3drm_create_frame_object().

◆ d3drm_light_create()

HRESULT d3drm_light_create ( struct d3drm_light **  light,
IDirect3DRM *  d3drm 
)

Definition at line 371 of file light.c.

372{
373 static const char classname[] = "Light";
374 struct d3drm_light *object;
375
376 TRACE("light %p.\n", light);
377
378 if (!(object = calloc(1, sizeof(*object))))
379 return E_OUTOFMEMORY;
380
381 object->IDirect3DRMLight_iface.lpVtbl = &d3drm_light_vtbl;
382 object->ref = 1;
383 object->d3drm = d3drm;
385
387
388 *light = object;
389
390 return S_OK;
391}
static const struct IDirect3DRMLightVtbl d3drm_light_vtbl
Definition: light.c:337
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum light
Definition: glfuncs.h:170
IDirect3DRM * d3drm

Referenced by d3drm3_CreateLight(), d3drm3_CreateLightRGB(), and d3drm_create_light_object().

◆ d3drm_material_create()

HRESULT d3drm_material_create ( struct d3drm_material **  material,
IDirect3DRM *  d3drm 
)

Definition at line 279 of file material.c.

280{
281 static const char classname[] = "Material";
282 struct d3drm_material *object;
283
284 TRACE("material %p, d3drm %p.\n", material, d3drm);
285
286 if (!(object = calloc(1, sizeof(*object))))
287 return E_OUTOFMEMORY;
288
289 object->IDirect3DRMMaterial2_iface.lpVtbl = &d3drm_material_vtbl;
290 object->ref = 1;
291 object->d3drm = d3drm;
293
294 object->specular.r = 1.0f;
295 object->specular.g = 1.0f;
296 object->specular.b = 1.0f;
297
299
300 *material = object;
301
302 return S_OK;
303}
static const struct IDirect3DRMMaterial2Vtbl d3drm_material_vtbl
Definition: material.c:256
IDirect3DRM * d3drm

Referenced by d3drm3_CreateMaterial(), d3drm_create_material_object(), and load_mesh_data().

◆ d3drm_matrix()

static struct d3drm_matrix * d3drm_matrix ( D3DRMMATRIX4D  m)
inlinestatic

Definition at line 41 of file d3drm_private.h.

42{
43 return (struct d3drm_matrix *)m;
44}
const GLfloat * m
Definition: glext.h:10848

◆ d3drm_mesh_builder_create()

HRESULT d3drm_mesh_builder_create ( struct d3drm_mesh_builder **  mesh_builder,
IDirect3DRM *  d3drm 
)

Definition at line 2336 of file meshbuilder.c.

2337{
2338 static const char classname[] = "Builder";
2339 struct d3drm_mesh_builder *object;
2340
2341 TRACE("mesh_builder %p.\n", mesh_builder);
2342
2343 if (!(object = calloc(1, sizeof(*object))))
2344 return E_OUTOFMEMORY;
2345
2346 object->IDirect3DRMMeshBuilder2_iface.lpVtbl = &d3drm_mesh_builder2_vtbl;
2347 object->IDirect3DRMMeshBuilder3_iface.lpVtbl = &d3drm_mesh_builder3_vtbl;
2348 object->ref = 1;
2349 object->d3drm = d3drm;
2350 object->quality = D3DRMRENDER_GOURAUD;
2351 IDirect3DRM_AddRef(object->d3drm);
2352
2354
2356
2357 return S_OK;
2358}
#define D3DRMRENDER_GOURAUD
Definition: d3drmdef.h:94
static const struct IDirect3DRMMeshBuilder3Vtbl d3drm_mesh_builder3_vtbl
Definition: meshbuilder.c:2262
static const struct IDirect3DRMMeshBuilder2Vtbl d3drm_mesh_builder2_vtbl
Definition: meshbuilder.c:883
IDirect3DRMMeshBuilder * mesh_builder
Definition: d3drm.c:3491
IDirect3DRM * d3drm

Referenced by d3drm2_CreateMeshBuilder(), d3drm3_CreateMeshBuilder(), and d3drm_create_mesh_builder_object().

◆ d3drm_mesh_create()

HRESULT d3drm_mesh_create ( struct d3drm_mesh **  mesh,
IDirect3DRM *  d3drm 
)

Definition at line 2836 of file meshbuilder.c.

2837{
2838 static const char classname[] = "Mesh";
2839 struct d3drm_mesh *object;
2840
2841 TRACE("mesh %p, d3drm %p.\n", mesh, d3drm);
2842
2843 if (!(object = calloc(1, sizeof(*object))))
2844 return E_OUTOFMEMORY;
2845
2846 object->IDirect3DRMMesh_iface.lpVtbl = &d3drm_mesh_vtbl;
2847 object->ref = 1;
2848 object->d3drm = d3drm;
2849 IDirect3DRM_AddRef(object->d3drm);
2850
2852
2853 *mesh = object;
2854
2855 return S_OK;
2856}
static const struct IDirect3DRMMeshVtbl d3drm_mesh_vtbl
Definition: meshbuilder.c:2802
IDirect3DRM * d3drm
Definition: mesh.c:189

Referenced by d3drm3_CreateMesh(), and d3drm_create_mesh_object().

◆ d3drm_object_add_destroy_callback()

HRESULT d3drm_object_add_destroy_callback ( struct d3drm_object *  object,
D3DRMOBJECTCALLBACK  cb,
void *  ctx 
)

Definition at line 57 of file d3drm_main.c.

58{
60
61 if (!cb)
62 return D3DRMERR_BADVALUE;
63
64 if (!(callback = malloc(sizeof(*callback))))
65 return E_OUTOFMEMORY;
66
67 callback->cb = cb;
68 callback->ctx = ctx;
69
70 list_add_head(&object->destroy_callbacks, &callback->entry);
71 return D3DRM_OK;
72}
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
#define D3DRMERR_BADVALUE
Definition: d3drm.h:496
#define malloc
Definition: debug_ros.c:4
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
static IPrintDialogCallback callback
Definition: printdlg.c:325

Referenced by d3drm_animation2_AddDestroyCallback(), d3drm_device3_AddDestroyCallback(), d3drm_face2_AddDestroyCallback(), d3drm_frame3_AddDestroyCallback(), d3drm_light_AddDestroyCallback(), d3drm_material_AddDestroyCallback(), d3drm_mesh_AddDestroyCallback(), d3drm_mesh_builder3_AddDestroyCallback(), d3drm_texture3_AddDestroyCallback(), d3drm_viewport2_AddDestroyCallback(), and d3drm_wrap_AddDestroyCallback().

◆ d3drm_object_cleanup()

void d3drm_object_cleanup ( IDirect3DRMObject *  iface,
struct d3drm_object *  object 
)

Definition at line 155 of file d3drm_main.c.

156{
157 struct destroy_callback *callback, *callback2;
158
159 LIST_FOR_EACH_ENTRY_SAFE(callback, callback2, &object->destroy_callbacks, struct destroy_callback, entry)
160 {
161 callback->cb(iface, callback->ctx);
162 list_remove(&callback->entry);
163 free(callback);
164 }
165
166 free(object->name);
167 object->name = NULL;
168}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
uint32_t entry
Definition: isohybrid.c:63
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242

Referenced by d3drm_animation2_Release(), d3drm_device_destroy(), d3drm_face1_Release(), d3drm_frame3_Release(), d3drm_light_Release(), d3drm_material_Release(), d3drm_mesh_builder2_Release(), d3drm_mesh_Release(), d3drm_texture_destroy(), d3drm_viewport_destroy(), and d3drm_wrap_Release().

◆ d3drm_object_delete_destroy_callback()

◆ d3drm_object_get_class_name()

HRESULT d3drm_object_get_class_name ( struct d3drm_object *  object,
DWORD *  size,
char *  name 
)

Definition at line 94 of file d3drm_main.c.

95{
96 DWORD req_size;
97
98 if (!size)
99 return E_INVALIDARG;
100
101 req_size = strlen(object->classname) + 1;
102 if (name && *size < req_size)
103 return E_INVALIDARG;
104
105 *size = req_size;
106
107 if (name)
108 memcpy(name, object->classname, req_size);
109
110 return D3DRM_OK;
111}
#define E_INVALIDARG
Definition: ddrawi.h:101
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: name.c:39

Referenced by d3drm_animation2_GetClassName(), d3drm_device3_GetClassName(), d3drm_face2_GetClassName(), d3drm_frame3_GetClassName(), d3drm_light_GetClassName(), d3drm_material_GetClassName(), d3drm_mesh_builder3_GetClassName(), d3drm_mesh_GetClassName(), d3drm_texture3_GetClassName(), d3drm_viewport2_GetClassName(), and d3drm_wrap_GetClassName().

◆ d3drm_object_get_name()

HRESULT d3drm_object_get_name ( struct d3drm_object *  object,
DWORD *  size,
char *  name 
)

Definition at line 113 of file d3drm_main.c.

114{
115 DWORD req_size;
116
117 if (!size)
118 return E_INVALIDARG;
119
120 req_size = object->name ? strlen(object->name) + 1 : 0;
121 if (name && *size < req_size)
122 return E_INVALIDARG;
123
124 if (name)
125 {
126 if (object->name)
127 memcpy(name, object->name, req_size);
128 else if (*size)
129 *name = 0;
130 }
131
132 *size = req_size;
133
134 return D3DRM_OK;
135}
char * name
Definition: wpp.c:52

Referenced by d3drm_animation2_GetName(), d3drm_device3_GetName(), d3drm_face2_GetName(), d3drm_frame3_GetName(), d3drm_light_GetName(), d3drm_material_GetName(), d3drm_mesh_builder3_GetName(), d3drm_mesh_GetName(), d3drm_texture3_GetName(), d3drm_viewport2_GetName(), and d3drm_wrap_GetName().

◆ d3drm_object_init()

void d3drm_object_init ( struct d3drm_object *  object,
const char *  classname 
)

Definition at line 41 of file d3drm_main.c.

42{
43 object->ref = 1;
44 object->appdata = 0;
45 list_init(&object->destroy_callbacks);
46 object->classname = classname;
47 object->name = NULL;
48}
static void list_init(struct list_entry *head)
Definition: list.h:51

Referenced by d3drm_animation_create(), d3drm_device_create(), d3drm_face_create(), d3drm_frame_create(), d3drm_light_create(), d3drm_material_create(), d3drm_mesh_builder_create(), d3drm_mesh_create(), d3drm_texture_create(), d3drm_viewport_create(), and d3drm_wrap_create().

◆ d3drm_object_set_name()

HRESULT d3drm_object_set_name ( struct d3drm_object *  object,
const char *  name 
)

Definition at line 137 of file d3drm_main.c.

138{
139 DWORD req_size;
140
141 free(object->name);
142 object->name = NULL;
143
144 if (name)
145 {
146 req_size = strlen(name) + 1;
147 if (!(object->name = malloc(req_size)))
148 return E_OUTOFMEMORY;
149 memcpy(object->name, name, req_size);
150 }
151
152 return D3DRM_OK;
153}

Referenced by d3drm_animation2_SetName(), d3drm_device3_SetName(), d3drm_face2_SetName(), d3drm_frame3_SetName(), d3drm_light_SetName(), d3drm_material_SetName(), d3drm_mesh_builder3_SetName(), d3drm_mesh_SetName(), d3drm_texture3_SetName(), d3drm_viewport2_SetName(), and d3drm_wrap_SetName().

◆ d3drm_set_color()

static void d3drm_set_color ( D3DCOLOR *  color,
float  r,
float  g,
float  b,
float  a 
)
inlinestatic

Definition at line 325 of file d3drm_private.h.

326{
329}
static BYTE d3drm_color_component(float c)
#define RGBA_MAKE
Definition: dx7todx8.h:6
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLuint color
Definition: glext.h:6243
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean g
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204

Referenced by d3drm_face2_SetColorRGB(), d3drm_frame3_SetSceneBackgroundRGB(), d3drm_frame_create(), d3drm_light_SetColorRGB(), d3drm_mesh_builder3_SetColorRGB(), d3drm_mesh_SetGroupColorRGB(), D3DRMCreateColorRGBA(), and load_mesh_data().

◆ d3drm_texture_create()

HRESULT d3drm_texture_create ( struct d3drm_texture **  texture,
IDirect3DRM *  d3drm 
)

Definition at line 1460 of file texture.c.

1461{
1462 static const char classname[] = "Texture";
1463 struct d3drm_texture *object;
1464
1465 TRACE("texture %p.\n", texture);
1466
1467 if (!(object = calloc(1, sizeof(*object))))
1468 return E_OUTOFMEMORY;
1469
1470 object->IDirect3DRMTexture_iface.lpVtbl = &d3drm_texture1_vtbl;
1471 object->IDirect3DRMTexture2_iface.lpVtbl = &d3drm_texture2_vtbl;
1472 object->IDirect3DRMTexture3_iface.lpVtbl = &d3drm_texture3_vtbl;
1473 object->d3drm = d3drm;
1474 object->max_colors = 8;
1475 object->max_shades = 16;
1476 object->transparency = FALSE;
1477 object->decal_width = 1.0f;
1478 object->decal_height = 1.0f;
1479
1481
1482 *texture = object;
1483
1484 return D3DRM_OK;
1485}
static const struct IDirect3DRMTexture2Vtbl d3drm_texture2_vtbl
Definition: texture.c:973
static const struct IDirect3DRMTextureVtbl d3drm_texture1_vtbl
Definition: texture.c:642
static const struct IDirect3DRMTexture3Vtbl d3drm_texture3_vtbl
Definition: texture.c:1418
GLenum GLuint texture
Definition: glext.h:6295
IDirect3DRM * d3drm
Definition: d3drm_private.h:61

Referenced by d3drm1_LoadTexture(), d3drm1_LoadTextureFromResource(), d3drm2_LoadTextureFromResource(), d3drm3_CreateTexture(), d3drm3_CreateTextureFromSurface(), d3drm3_LoadTexture(), d3drm3_LoadTextureFromResource(), d3drm_create_texture_object(), and load_mesh_data().

◆ d3drm_viewport_create()

HRESULT d3drm_viewport_create ( struct d3drm_viewport **  viewport,
IDirect3DRM *  d3drm 
)

Definition at line 1129 of file viewport.c.

1130{
1131 static const char classname[] = "Viewport";
1132 struct d3drm_viewport *object;
1133
1134 TRACE("viewport %p, d3drm %p.\n", viewport, d3drm);
1135
1136 if (!(object = calloc(1, sizeof(*object))))
1137 return E_OUTOFMEMORY;
1138
1139 object->IDirect3DRMViewport_iface.lpVtbl = &d3drm_viewport1_vtbl;
1140 object->IDirect3DRMViewport2_iface.lpVtbl = &d3drm_viewport2_vtbl;
1141 object->d3drm = d3drm;
1143
1144 *viewport = object;
1145
1146 return S_OK;
1147}
static const struct IDirect3DRMViewportVtbl d3drm_viewport1_vtbl
Definition: viewport.c:1086
static const struct IDirect3DRMViewport2Vtbl d3drm_viewport2_vtbl
Definition: viewport.c:1041
IDirect3DRM * d3drm

Referenced by d3drm3_CreateViewport(), and d3drm_create_viewport_object().

◆ d3drm_wrap_create()

HRESULT d3drm_wrap_create ( struct d3drm_wrap **  wrap,
IDirect3DRM *  d3drm 
)

Definition at line 3022 of file meshbuilder.c.

3023{
3024 static const char classname[] = "";
3025 struct d3drm_wrap *object;
3026
3027 TRACE("wrap %p, d3drm %p.\n", wrap, d3drm);
3028
3029 if (!(object = calloc(1, sizeof(*object))))
3030 return E_OUTOFMEMORY;
3031
3032 object->IDirect3DRMWrap_iface.lpVtbl = &d3drm_wrap_vtbl;
3033 object->ref = 1;
3034
3036
3037 *wrap = object;
3038
3039 return S_OK;
3040}
#define wrap(journal, var)
Definition: recovery.c:207
static const struct IDirect3DRMWrapVtbl d3drm_wrap_vtbl
Definition: meshbuilder.c:3004

Referenced by d3drm1_CreateWrap(), d3drm3_CreateWrap(), and d3drm_create_wrap_object().

◆ load_mesh_data()

HRESULT load_mesh_data ( IDirect3DRMMeshBuilder3 *  iface,
IDirectXFileData *  data,
D3DRMLOADTEXTURECALLBACK  load_texture_proc,
void *  arg 
)

Definition at line 1022 of file meshbuilder.c.

1024{
1026 IDirectXFileData *pData2 = NULL;
1027 const GUID* guid;
1028 DWORD size;
1029 BYTE *ptr;
1030 HRESULT hr;
1032 DWORD* faces_vertex_idx_data = NULL;
1033 DWORD* faces_vertex_idx_ptr;
1034 DWORD faces_vertex_idx_size;
1035 DWORD* faces_normal_idx_data = NULL;
1036 DWORD* faces_normal_idx_ptr = NULL;
1037 DWORD* faces_data_ptr;
1038 DWORD faces_data_size = 0;
1039 DWORD i;
1040
1041 TRACE("(%p)->(%p)\n", mesh_builder, pData);
1042
1044 if (hr != DXFILE_OK)
1045 return hr;
1046 if (size)
1047 {
1048 char *name;
1049
1050 if (!(name = malloc(size)))
1051 return E_OUTOFMEMORY;
1052
1055 free(name);
1056 if (hr != DXFILE_OK)
1057 return hr;
1058 }
1059
1060 TRACE("Mesh name is %s\n", debugstr_a(mesh_builder->obj.name));
1061
1062 mesh_builder->nb_normals = 0;
1063
1064 hr = IDirectXFileData_GetData(pData, NULL, &size, (void**)&ptr);
1065 if (hr != DXFILE_OK)
1066 goto end;
1067
1068 mesh_builder->nb_vertices = *(DWORD*)ptr;
1069 mesh_builder->nb_faces = *(DWORD*)(ptr + sizeof(DWORD) + mesh_builder->nb_vertices * sizeof(D3DVECTOR));
1070 faces_vertex_idx_size = size - sizeof(DWORD) - mesh_builder->nb_vertices * sizeof(D3DVECTOR) - sizeof(DWORD);
1071
1072 TRACE("Mesh: nb_vertices = %Iu, nb_faces = %ld, faces_vertex_idx_size = %ld\n", mesh_builder->nb_vertices,
1073 mesh_builder->nb_faces, faces_vertex_idx_size);
1074
1075 if (!d3drm_array_reserve((void **)&mesh_builder->vertices, &mesh_builder->vertices_size, mesh_builder->nb_vertices,
1076 sizeof(*mesh_builder->vertices)))
1077 {
1078 hr = E_OUTOFMEMORY;
1079 goto end;
1080 }
1081 memcpy(mesh_builder->vertices, ptr + sizeof(DWORD), mesh_builder->nb_vertices * sizeof(D3DVECTOR));
1082
1083 faces_vertex_idx_ptr = faces_vertex_idx_data = malloc(faces_vertex_idx_size);
1084 memcpy(faces_vertex_idx_data, ptr + sizeof(DWORD) + mesh_builder->nb_vertices * sizeof(D3DVECTOR) + sizeof(DWORD),
1085 faces_vertex_idx_size);
1086
1087 /* Each vertex index will have its normal index counterpart so just allocate twice the size */
1088 mesh_builder->pFaceData = malloc(faces_vertex_idx_size * 2);
1089 faces_data_ptr = (DWORD*)mesh_builder->pFaceData;
1090
1091 while (1)
1092 {
1093 IDirectXFileObject *object;
1094
1097 {
1098 TRACE("No more object\n");
1099 break;
1100 }
1101 if (hr != DXFILE_OK)
1102 goto end;
1103
1104 hr = IDirectXFileObject_QueryInterface(object, &IID_IDirectXFileData, (void**)&pData2);
1106 if (hr != DXFILE_OK)
1107 goto end;
1108
1109 hr = IDirectXFileData_GetType(pData2, &guid);
1110 if (hr != DXFILE_OK)
1111 goto end;
1112
1113 TRACE("Found object type whose GUID = %s\n", debugstr_guid(guid));
1114
1115 if (IsEqualGUID(guid, &TID_D3DRMMeshNormals))
1116 {
1117 DWORD nb_faces_normals;
1118 DWORD faces_normal_idx_size;
1119
1120 hr = IDirectXFileData_GetData(pData2, NULL, &size, (void**)&ptr);
1121 if (hr != DXFILE_OK)
1122 goto end;
1123
1124 mesh_builder->nb_normals = *(DWORD*)ptr;
1125 nb_faces_normals = *(DWORD*)(ptr + sizeof(DWORD) + mesh_builder->nb_normals * sizeof(D3DVECTOR));
1126
1127 TRACE("MeshNormals: nb_normals = %Iu, nb_faces_normals = %ld\n", mesh_builder->nb_normals, nb_faces_normals);
1128 if (nb_faces_normals != mesh_builder->nb_faces)
1129 WARN("nb_face_normals (%ld) != nb_faces (%ld)\n", nb_faces_normals, mesh_builder->nb_faces);
1130
1131 if (!d3drm_array_reserve((void **)&mesh_builder->normals, &mesh_builder->normals_size,
1132 mesh_builder->nb_normals, sizeof(*mesh_builder->normals)))
1133 {
1134 hr = E_OUTOFMEMORY;
1135 goto end;
1136 }
1137 memcpy(mesh_builder->normals, ptr + sizeof(DWORD), mesh_builder->nb_normals * sizeof(D3DVECTOR));
1138
1139 faces_normal_idx_size = size - (2 * sizeof(DWORD) + mesh_builder->nb_normals * sizeof(D3DVECTOR));
1140 faces_normal_idx_ptr = faces_normal_idx_data = malloc(faces_normal_idx_size);
1141 memcpy(faces_normal_idx_data, ptr + sizeof(DWORD) + mesh_builder->nb_normals * sizeof(D3DVECTOR)
1142 + sizeof(DWORD), faces_normal_idx_size);
1143 }
1144 else if (IsEqualGUID(guid, &TID_D3DRMMeshTextureCoords))
1145 {
1146 hr = IDirectXFileData_GetData(pData2, NULL, &size, (void**)&ptr);
1147 if (hr != DXFILE_OK)
1148 goto end;
1149
1150 mesh_builder->nb_coords2d = *(DWORD*)ptr;
1151
1152 TRACE("MeshTextureCoords: nb_coords2d = %ld\n", mesh_builder->nb_coords2d);
1153
1154 mesh_builder->pCoords2d = calloc(mesh_builder->nb_coords2d, sizeof(*mesh_builder->pCoords2d));
1155 memcpy(mesh_builder->pCoords2d, ptr + sizeof(DWORD), mesh_builder->nb_coords2d * sizeof(*mesh_builder->pCoords2d));
1156 }
1157 else if (IsEqualGUID(guid, &TID_D3DRMMeshMaterialList))
1158 {
1160 DWORD nb_face_indices;
1161 DWORD data_size;
1162 IDirectXFileObject *child;
1163 DWORD i = 0;
1164 float* values;
1165 struct d3drm_texture *texture_object;
1166
1167 TRACE("Process MeshMaterialList\n");
1168
1169 hr = IDirectXFileData_GetData(pData2, NULL, &size, (void**)&ptr);
1170 if (hr != DXFILE_OK)
1171 goto end;
1172
1173 nb_materials = *(DWORD*)ptr;
1174 nb_face_indices = *(DWORD*)(ptr + sizeof(DWORD));
1175 data_size = 2 * sizeof(DWORD) + nb_face_indices * sizeof(DWORD);
1176
1177 TRACE("nMaterials = %lu, nFaceIndexes = %lu\n", nb_materials, nb_face_indices);
1178
1179 if (size != data_size)
1180 WARN("Returned size %lu does not match expected one %lu\n", size, data_size);
1181
1182 if (!(mesh_builder->material_indices = calloc(nb_face_indices,
1183 sizeof(*mesh_builder->material_indices))))
1184 goto end;
1185 memcpy(mesh_builder->material_indices, ptr + 2 * sizeof(DWORD),
1186 nb_face_indices * sizeof(*mesh_builder->material_indices));
1187
1188 if (!(mesh_builder->materials = calloc(nb_materials, sizeof(*mesh_builder->materials))))
1189 {
1190 free(mesh_builder->material_indices);
1191 goto end;
1192 }
1193 mesh_builder->nb_materials = nb_materials;
1194
1195 while (SUCCEEDED(hr = IDirectXFileData_GetNextObject(pData2, &child)) && (i < nb_materials))
1196 {
1197 IDirectXFileData *data;
1198 IDirectXFileDataReference *reference;
1199 IDirectXFileObject *material_child;
1200 struct d3drm_material *object;
1201
1202 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileData, (void **)&data);
1203 if (FAILED(hr))
1204 {
1205 hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileDataReference, (void **)&reference);
1207 if (FAILED(hr))
1208 goto end;
1209
1212 if (FAILED(hr))
1213 goto end;
1214 }
1215 else
1216 {
1218 }
1219
1220 hr = d3drm_material_create(&object, mesh_builder->d3drm);
1221 if (FAILED(hr))
1222 {
1224 goto end;
1225 }
1226 mesh_builder->materials[i].material = &object->IDirect3DRMMaterial2_iface;
1227
1228 hr = IDirectXFileData_GetData(data, NULL, &size, (void**)&ptr);
1229 if (hr != DXFILE_OK)
1230 {
1232 goto end;
1233 }
1234
1235 if (size != 44)
1236 WARN("Material size %lu does not match expected one %u\n", size, 44);
1237
1238 values = (float*)ptr;
1239
1240 d3drm_set_color(&mesh_builder->materials[i].color, values[0], values[1], values[2], values[3]);
1241
1242 IDirect3DRMMaterial2_SetAmbient(mesh_builder->materials[i].material, values[0], values [1], values[2]); /* Alpha ignored */
1243 IDirect3DRMMaterial2_SetPower(mesh_builder->materials[i].material, values[4]);
1244 IDirect3DRMMaterial2_SetSpecular(mesh_builder->materials[i].material, values[5], values[6], values[7]);
1245 IDirect3DRMMaterial2_SetEmissive(mesh_builder->materials[i].material, values[8], values[9], values[10]);
1246
1247 mesh_builder->materials[i].texture = NULL;
1248
1249 hr = IDirectXFileData_GetNextObject(data, &material_child);
1250 if (hr == S_OK)
1251 {
1252 IDirectXFileData *data;
1253 char **filename;
1254
1255 if (FAILED(hr = IDirectXFileObject_QueryInterface(material_child,
1256 &IID_IDirectXFileData, (void **)&data)))
1257 {
1258 IDirectXFileDataReference *reference;
1259
1261 &IID_IDirectXFileDataReference, (void **)&reference)))
1262 {
1265 }
1266 }
1267 IDirectXFileObject_Release(material_child);
1268 if (FAILED(hr))
1269 goto end;
1270
1272 if (hr != DXFILE_OK)
1273 goto end;
1274 if (!IsEqualGUID(guid, &TID_D3DRMTextureFilename))
1275 {
1276 WARN("Not a texture filename\n");
1277 goto end;
1278 }
1279
1280 size = 4;
1282 if (SUCCEEDED(hr))
1283 {
1284 if (load_texture_proc)
1285 {
1286 IDirect3DRMTexture *texture;
1287
1288 hr = load_texture_proc(*filename, arg, &texture);
1289 if (SUCCEEDED(hr))
1290 {
1291 hr = IDirect3DTexture_QueryInterface(texture, &IID_IDirect3DRMTexture3,
1292 (void **)&mesh_builder->materials[i].texture);
1294 }
1295 }
1296 else
1297 {
1298 HANDLE file;
1299
1300 /* If the texture file is not found, no texture is associated with the material */
1303 {
1305 if (FAILED(hr = d3drm_texture_create(&texture_object, NULL)))
1306 {
1308 goto end;
1309 }
1310 mesh_builder->materials[i].texture = &texture_object->IDirect3DRMTexture3_iface;
1311 }
1312 }
1313 }
1315 }
1316 else if (hr != DXFILEERR_NOMOREOBJECTS)
1317 {
1318 goto end;
1319 }
1320 hr = S_OK;
1321
1323 i++;
1324 }
1325 if (hr == S_OK)
1326 {
1328 WARN("Found more sub-objects than expected\n");
1329 }
1330 else if (hr != DXFILEERR_NOMOREOBJECTS)
1331 {
1332 goto end;
1333 }
1334 hr = S_OK;
1335 }
1336 else
1337 {
1338 FIXME("Unknown GUID %s, ignoring...\n", debugstr_guid(guid));
1339 }
1340
1342 pData2 = NULL;
1343 }
1344
1345 if (!mesh_builder->nb_normals)
1346 {
1347 /* Allocate normals, one per vertex */
1348 if (!d3drm_array_reserve((void **)&mesh_builder->normals, &mesh_builder->normals_size,
1349 mesh_builder->nb_vertices, sizeof(*mesh_builder->normals)))
1350 goto end;
1351 memset(mesh_builder->normals, 0, mesh_builder->nb_vertices * sizeof(*mesh_builder->normals));
1352 }
1353
1354 for (i = 0; i < mesh_builder->nb_faces; i++)
1355 {
1356 DWORD j;
1357 DWORD nb_face_indexes;
1358 D3DVECTOR face_normal;
1359
1360 if (faces_vertex_idx_size < sizeof(DWORD))
1361 WARN("Not enough data to read number of indices of face %ld\n", i);
1362
1363 nb_face_indexes = *(faces_data_ptr + faces_data_size++) = *(faces_vertex_idx_ptr++);
1364 faces_vertex_idx_size--;
1365 if (faces_normal_idx_data && (*(faces_normal_idx_ptr++) != nb_face_indexes))
1366 WARN("Faces indices number mismatch\n");
1367
1368 if (faces_vertex_idx_size < (nb_face_indexes * sizeof(DWORD)))
1369 WARN("Not enough data to read all indices of face %ld\n", i);
1370
1371 if (!mesh_builder->nb_normals)
1372 {
1373 /* Compute face normal */
1374 if (nb_face_indexes > 2
1375 && faces_vertex_idx_ptr[0] < mesh_builder->nb_vertices
1376 && faces_vertex_idx_ptr[1] < mesh_builder->nb_vertices
1377 && faces_vertex_idx_ptr[2] < mesh_builder->nb_vertices)
1378 {
1379 D3DVECTOR a, b;
1380
1381 D3DRMVectorSubtract(&a, &mesh_builder->vertices[faces_vertex_idx_ptr[2]], &mesh_builder->vertices[faces_vertex_idx_ptr[1]]);
1382 D3DRMVectorSubtract(&b, &mesh_builder->vertices[faces_vertex_idx_ptr[0]], &mesh_builder->vertices[faces_vertex_idx_ptr[1]]);
1383 D3DRMVectorCrossProduct(&face_normal, &a, &b);
1384 D3DRMVectorNormalize(&face_normal);
1385 }
1386 else
1387 {
1388 face_normal.x = 0.0f;
1389 face_normal.y = 0.0f;
1390 face_normal.z = 0.0f;
1391 }
1392 }
1393
1394 for (j = 0; j < nb_face_indexes; j++)
1395 {
1396 /* Copy vertex index */
1397 *(faces_data_ptr + faces_data_size++) = *faces_vertex_idx_ptr;
1398 /* Copy normal index */
1399 if (mesh_builder->nb_normals)
1400 {
1401 /* Read from x file */
1402 *(faces_data_ptr + faces_data_size++) = *(faces_normal_idx_ptr++);
1403 }
1404 else
1405 {
1406 DWORD vertex_idx = *faces_vertex_idx_ptr;
1407 if (vertex_idx >= mesh_builder->nb_vertices)
1408 {
1409 WARN("Found vertex index %lu but only %Iu vertices available => use index 0\n", vertex_idx,
1410 mesh_builder->nb_vertices);
1411 vertex_idx = 0;
1412 }
1413 *(faces_data_ptr + faces_data_size++) = vertex_idx;
1414 /* Add face normal to vertex normal */
1415 D3DRMVectorAdd(&mesh_builder->normals[vertex_idx], &mesh_builder->normals[vertex_idx], &face_normal);
1416 }
1417 faces_vertex_idx_ptr++;
1418 }
1419 faces_vertex_idx_size -= nb_face_indexes;
1420 }
1421
1422 /* Last DWORD must be 0 */
1423 *(faces_data_ptr + faces_data_size++) = 0;
1424
1425 /* Set size (in number of DWORD) of all faces data */
1426 mesh_builder->face_data_size = faces_data_size;
1427
1428 if (!mesh_builder->nb_normals)
1429 {
1430 /* Normalize all normals */
1431 for (i = 0; i < mesh_builder->nb_vertices; i++)
1432 {
1434 }
1435 mesh_builder->nb_normals = mesh_builder->nb_vertices;
1436 }
1437
1438 /* If there is no texture coordinates, generate default texture coordinates (0.0f, 0.0f) for each vertex */
1439 if (!mesh_builder->pCoords2d)
1440 {
1441 mesh_builder->nb_coords2d = mesh_builder->nb_vertices;
1442 mesh_builder->pCoords2d = calloc(mesh_builder->nb_coords2d, sizeof(*mesh_builder->pCoords2d));
1443 for (i = 0; i < mesh_builder->nb_coords2d; ++i)
1444 {
1445 mesh_builder->pCoords2d[i].u = 0.0f;
1446 mesh_builder->pCoords2d[i].v = 0.0f;
1447 }
1448 }
1449
1450 TRACE("Mesh data loaded successfully\n");
1451
1452 ret = D3DRM_OK;
1453
1454end:
1455
1456 free(faces_normal_idx_data);
1457 free(faces_vertex_idx_data);
1458
1459 return ret;
1460}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
struct _D3DVECTOR D3DVECTOR
#define IDirect3DTexture_QueryInterface(p, a, b)
Definition: d3d.h:584
#define IDirect3DTexture_Release(p)
Definition: d3d.h:586
#define D3DRMERR_BADOBJECT
Definition: d3drm.h:487
HRESULT d3drm_texture_create(struct d3drm_texture **texture, IDirect3DRM *d3drm)
Definition: texture.c:1460
HRESULT d3drm_material_create(struct d3drm_material **material, IDirect3DRM *d3drm)
Definition: material.c:279
#define IDirect3DRMMeshBuilder3_SetName(p, a)
Definition: d3drmobj.h:2933
#define IDirect3DRMMaterial2_SetPower(p, a)
Definition: d3drmobj.h:3743
#define IDirect3DRMMaterial2_SetAmbient(p, a, b, c)
Definition: d3drmobj.h:3749
#define IDirect3DRMMaterial2_SetEmissive(p, a, b, c)
Definition: d3drmobj.h:3745
#define IDirect3DRMMaterial2_SetSpecular(p, a, b, c)
Definition: d3drmobj.h:3744
D3DVECTOR *WINAPI D3DRMVectorNormalize(D3DVECTOR *u)
Definition: math.c:196
D3DVECTOR *WINAPI D3DRMVectorAdd(D3DVECTOR *d, D3DVECTOR *s1, D3DVECTOR *s2)
Definition: math.c:141
D3DVECTOR *WINAPI D3DRMVectorCrossProduct(D3DVECTOR *d, D3DVECTOR *s1, D3DVECTOR *s2)
Definition: math.c:167
D3DVECTOR *WINAPI D3DRMVectorSubtract(D3DVECTOR *d, D3DVECTOR *s1, D3DVECTOR *s2)
Definition: math.c:154
#define CloseHandle
Definition: compat.h:739
#define OPEN_EXISTING
Definition: compat.h:775
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:740
#define GENERIC_READ
Definition: compat.h:135
#define FILE_SHARE_READ
Definition: compat.h:136
GUID guid
Definition: version.c:147
return ret
Definition: mutex.c:147
#define IDirectXFileObject_Release(p)
Definition: dxfile.h:160
#define IDirectXFileDataReference_Release(p)
Definition: dxfile.h:212
#define IDirectXFileData_GetType(p, a)
Definition: dxfile.h:191
#define DXFILE_OK
Definition: dxfile.h:268
#define IDirectXFileData_GetName(p, a, b)
Definition: dxfile.h:187
#define IDirectXFileData_GetData(p, a, b, c)
Definition: dxfile.h:190
#define IDirectXFileObject_QueryInterface(p, a, b)
Definition: dxfile.h:158
#define DXFILEERR_NOMOREOBJECTS
Definition: dxfile.h:291
#define IDirectXFileDataReference_Resolve(p, a)
Definition: dxfile.h:217
#define IDirectXFileData_GetNextObject(p, a)
Definition: dxfile.h:192
#define IDirectXFileData_Release(p)
Definition: dxfile.h:185
GLuint GLuint end
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint reference
Definition: glext.h:11729
GLboolean GLenum GLenum GLvoid * values
Definition: glext.h:5666
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
const char * filename
Definition: ioapi.h:137
#define a
Definition: ke_i.h:78
#define b
Definition: ke_i.h:79
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_a
Definition: kernel32.h:31
BOOL d3drm_array_reserve(void **elements, SIZE_T *capacity, SIZE_T element_count, SIZE_T element_size)
Definition: meshbuilder.c:260
static struct d3drm_mesh_builder * impl_from_IDirect3DRMMeshBuilder3(IDirect3DRMMeshBuilder3 *iface)
Definition: meshbuilder.c:297
static PVOID ptr
Definition: dispmode.c:27
static HWND child
Definition: cursoricon.c:298
#define DWORD
Definition: nt_native.h:44
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
IDirect3DRMTexture3 IDirect3DRMTexture3_iface
Definition: d3drm_private.h:60
Definition: fci.c:123
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
unsigned char BYTE
Definition: xxhash.c:193

Referenced by d3drm_mesh_builder3_Load(), and load_data().

◆ unsafe_impl_from_IDirect3DRMDevice3()

struct d3drm_device * unsafe_impl_from_IDirect3DRMDevice3 ( IDirect3DRMDevice3 *  iface)

Definition at line 1647 of file device.c.

1648{
1649 if (!iface)
1650 return NULL;
1651 assert(iface->lpVtbl == &d3drm_device3_vtbl);
1652
1653 return impl_from_IDirect3DRMDevice3(iface);
1654}
static struct d3drm_device * impl_from_IDirect3DRMDevice3(IDirect3DRMDevice3 *iface)
Definition: device.c:35
#define assert(_expr)
Definition: assert.h:32

Referenced by d3drm_viewport2_Init().

◆ unsafe_impl_from_IDirect3DRMFrame()

struct d3drm_frame * unsafe_impl_from_IDirect3DRMFrame ( IDirect3DRMFrame *  iface)

Definition at line 3120 of file frame.c.

3121{
3122 if (!iface)
3123 return NULL;
3124 assert(iface->lpVtbl == &d3drm_frame1_vtbl);
3125
3126 return impl_from_IDirect3DRMFrame(iface);
3127}
static struct d3drm_frame * impl_from_IDirect3DRMFrame(IDirect3DRMFrame *iface)
Definition: frame.c:58

Referenced by d3drm_frame1_AddChild(), d3drm_frame1_DeleteChild(), d3drm_viewport1_Init(), and d3drm_viewport1_SetCamera().

◆ unsafe_impl_from_IDirect3DRMFrame3()

struct d3drm_frame * unsafe_impl_from_IDirect3DRMFrame3 ( IDirect3DRMFrame3 *  iface)

Definition at line 3111 of file frame.c.

3112{
3113 if (!iface)
3114 return NULL;
3115 assert(iface->lpVtbl == &d3drm_frame3_vtbl);
3116
3117 return impl_from_IDirect3DRMFrame3(iface);
3118}
static struct d3drm_frame * impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
Definition: frame.c:68

Referenced by d3drm_frame3_AddChild(), d3drm_frame3_DeleteChild(), d3drm_viewport1_GetCamera(), and d3drm_viewport2_SetCamera().

Variable Documentation

◆ templates