40 IDirect3DRMFrameArray* pChildFrames;
41 IDirect3DRMFrame* pChildFrame =
NULL;
45 for (
int i = 0; i < (int) pChildFrames->GetSize(); i++) {
46 result =
ResultVal(pChildFrames->GetElement(i, &pChildFrame));
52 refCount = pChildFrame->Release();
53 assert(refCount >= 1);
56 refCount = pChildFrames->Release();
57 assert(refCount == 0);
60 assert(refCount == 0);
69 IDirect3DRM2* pDevice,
70 IDirect3DRMViewport* pViewport,
71 IDirect3DRMFrame2* pCamera
75 assert(pViewportAppData);
78 assert(!pViewport->GetAppData());
82 assert(
reinterpret_cast<ViewportAppData*
>(pViewport->GetAppData()) == pViewportAppData);
90 delete pViewportAppData;
91 pViewport->SetAppData(0);
99 IDirect3DRMFrame* pFrame,
100 IDirect3DRMFrame* pCamera,
101 IDirect3DRMFrame* pLightFrame
108 result =
ResultVal(pFrame->DeleteChild(pCamera));
110 assert((pCamera->AddRef(), pCamera->Release()) > 0);
112 result =
ResultVal(pFrame->DeleteChild(pLightFrame));
129 assert(pViewportAppData);
139 delete pViewportAppData;
145 IDirect3DRMViewport* pViewport,
149 int groupsToPickFromCount,
150 const Group**& rppPickedGroups,
151 int& rPickedGroupCount
166 assert(pViewport->GetAppData());
167 return reinterpret_cast<ViewportAppData*
>(pViewport->GetAppData())->m_pLightFrame;
174 return reinterpret_cast<void*
>(&m_data);
183 return ResultVal(pLightFrame->AddChild(
const_cast<IDirect3DRMFrame*
>(pLight)));
211 return ResultVal(pLightFrame->DeleteChild(
const_cast<IDirect3DRMFrame*
>(pLight)));
239 pViewportAppData =
reinterpret_cast<ViewportAppData*
>(pViewport->GetAppData());
240 assert(pViewportAppData);
248 pViewportAppData->
m_pCamera =
const_cast<IDirect3DRMFrame2*
>(pCamera);
251 return ResultVal(pViewport->SetCamera(
const_cast<IDirect3DRMFrame2*
>(pCamera)));
278 return ResultVal(pViewport->SetProjection(projectionType));
292 IDirect3DRMViewport* pViewport,
293 float frontClippingDistance,
294 float backClippingDistance,
300 result =
ResultVal(pViewport->SetFront(frontClippingDistance));
302 result =
ResultVal(pViewport->SetBack(backClippingDistance));
305 result =
ResultVal(pViewport->SetField(field));
317 return ViewSetFrustrum(m_data, frontClippingDistance, backClippingDistance, degrees);
326 assert(pViewportAppData);
353 assert(pViewportAppData);
388 IDirect3DRMFrame* pFrame,
389 IDirect3DRMFrame* pCamera,
390 IDirect3DRMFrame* pLightFrame,
392 float backgroundGreen,
400 result =
ResultVal(pFrame->SetSceneBackgroundRGB(backgroundRed, backgroundGreen, backgroundBlue));
404 result =
ResultVal(pFrame->AddChild(pCamera));
408 result =
ResultVal(pFrame->AddChild(pLightFrame));
424 pViewportAppData =
reinterpret_cast<ViewportAppData*
>(pViewport->GetAppData());
425 assert(pViewportAppData);
450 result =
ResultVal(pViewport->Render(
const_cast<IDirect3DRMFrame2*
>(pGroup)));
477 IDirect3DRMViewport* pViewport,
484 return ResultVal(pViewport->ForceUpdate(x, y, x + width - 1, y + height - 1));
501 int groupsToPickFromCount,
502 const Group**& rppPickedGroups,
503 int& rPickedGroupCount
513 groupsToPickFromCount,
524 const Group** ppGroupsToPickFrom,
525 int groupsToPickFromCount,
526 const Group**& rppPickedGroups,
527 int& rPickedGroupCount
535 reinterpret_cast<const GroupImpl**
>(ppGroupsToPickFrom),
536 groupsToPickFromCount,
550 result =
ResultVal(pViewport->Transform(&d3dRMScreen, pD3DRMWorld));
553 screen[0] = d3dRMScreen.
x;
554 screen[1] = d3dRMScreen.
y;
555 screen[2] = d3dRMScreen.
z;
556 screen[3] = d3dRMScreen.
w;
576 d3dScreen.
x = screen[0];
577 d3dScreen.
y = screen[1];
578 d3dScreen.
z = screen[2];
579 d3dScreen.
w = screen[3];
582 result =
ResultVal(pViewport->InverseTransform(&d3dRMWorld, &d3dScreen));
585 world[0] = d3dRMWorld.
x;
586 world[1] = d3dRMWorld.
y;
587 world[2] = d3dRMWorld.
z;
[AI] Implementation of Tgl::Camera, wraps a Direct3DRMFrame2 and provides transformation management [...
const CameraDataType & ImplementationData() const
Retrieves camera pointer (const) [AI].
[AI] Implementation of Tgl::Group, wraps a Direct3DRMFrame2 and provides scene graph and transformati...
const GroupDataType & ImplementationData() const
Gets internal group/frame pointer, const [AI].
[AI] Implementation of Tgl::Light, wraps a Direct3DRMFrame2 and color data [AI]
const LightDataType & ImplementationData() const
Retrieves light pointer (const) [AI].
Result Add(const Light *) override
Adds a light to this view [AI].
static Result ViewportCreateAppData(IDirect3DRM2 *, IDirect3DRMViewport *, IDirect3DRMFrame2 *)
Associates user app data with a viewport/frame [AI].
void * ImplementationDataPtr() override
Returns Direct3DRMViewport implementation pointer [AI].
Result Render(const Group *) override
Renders the provided scene/group [AI].
Result GetBackgroundColor(float *r, float *g, float *b) override
Gets the background color [AI].
Result SetFrustrum(float frontClippingDistance, float backClippingDistance, float degrees) override
Sets the view frustum parameters [AI].
Result Pick(unsigned long x, unsigned long y, const Group **ppGroupsToPickFrom, int groupsToPickFromCount, const Group **&rppPickedGroups, int &rPickedGroupCount) override
Picks objects in the view by screen coordinate [AI].
Result SetBackgroundColor(float r, float g, float b) override
Sets background color [AI].
IDirect3DRMViewport * ViewDataType
[AI] Internal pointer to Direct3DRMViewport [AI]
Result TransformWorldToScreen(const float world[3], float screen[4]) override
Converts a world coordinate to screen space [AI].
Result SetCamera(const Camera *) override
Sets the active camera for this view [AI].
Result Clear() override
Clears the view [AI].
Result ForceUpdate(unsigned long x, unsigned long y, unsigned long width, unsigned long height) override
Forces an update/redraw of specified rectangle [AI].
Result Remove(const Light *) override
Removes a light from this view [AI].
Result SetProjection(ProjectionType) override
Sets the camera projection type (perspective/orthographic) [AI].
Result TransformScreenToWorld(const float screen[4], float world[3]) override
Converts screen coordinates to world space [AI].
[AI] Represents a viewpoint in the 3D scene.
[AI] Scene graph node for parental transforms/color/material/texture; can hold meshes or other groups...
[AI] Represents a source of lighting in the 3D scene.
enum _D3DRMPROJECTIONTYPE D3DRMPROJECTIONTYPE
#define DECOMP_SIZE_ASSERT(T, S)
LPVOID LPD3DRM_APPDATA
[AI] Application data type varies by DirectX version [AI]
#define NULL
[AI] Null pointer value (C/C++ semantics).
void ViewportDestroyCallback(IDirect3DRMObject *, void *)
[AI] Forward declaration for Direct3DRMTexture interface [AI]
Result ResultVal(HRESULT result)
Returns a Tgl Result value for HRESULT [AI].
D3DRMRENDERQUALITY Translate(ShadingModel tglShadingModel)
Converts Tgl shading model enum to D3DRM enum [AI].
int Succeeded(Result result)
[AI] Returns whether a Tgl::Result indicates success.
ProjectionType
[AI] Projection modes for camera/view transforms.
Result
[AI] Result type used throughout the Tgl API to report operation success or failure.
@ Success
[AI] Operation succeeded. [AI]
@ Error
[AI] Operation failed. [AI]
double DegreesToRadians(double degrees)
[AI] Converts an angle from degrees to radians.
ViewportAppData(IDirect3DRM2 *pRenderer)
IDirect3DRMFrame2 * m_pLightFrame
float m_backgroundColorRed
IDirect3DRMFrame2 * m_pLastRenderedFrame
float m_backgroundColorGreen
IDirect3DRMFrame2 * m_pCamera
float m_backgroundColorBlue
IDirect3DRMFrame * ViewportGetLightFrame(IDirect3DRMViewport *pViewport)
Result ViewPrepareFrameForRender(IDirect3DRMFrame *pFrame, IDirect3DRMFrame *pCamera, IDirect3DRMFrame *pLightFrame, float backgroundRed, float backgroundGreen, float backgroundBlue)
Result ViewSetProjection(IDirect3DRMViewport *pViewport, ProjectionType type)
Result ViewportPickImpl(IDirect3DRMViewport *pViewport, int x, int y, const GroupImpl **ppGroupsToPickFrom, int groupsToPickFromCount, const Group **&rppPickedGroups, int &rPickedGroupCount)
void ViewportDestroyCallback(IDirect3DRMObject *pObject, void *pArg)
Result ViewSetFrustrum(IDirect3DRMViewport *pViewport, float frontClippingDistance, float backClippingDistance, float degrees)
Result ViewRestoreFrameAfterRender(IDirect3DRMFrame *pFrame, IDirect3DRMFrame *pCamera, IDirect3DRMFrame *pLightFrame)
Result ViewRender(IDirect3DRMViewport *pViewport, const IDirect3DRMFrame2 *pGroup)
Result ViewForceUpdate(IDirect3DRMViewport *pViewport, unsigned long x, unsigned long y, unsigned long width, unsigned long height)
Result ViewSetCamera(IDirect3DRMViewport *pViewport, const IDirect3DRMFrame2 *pCamera)
Result ViewTransformScreenToWorld(IDirect3DRMViewport *pViewport, const float screen[4], float world[3])
Result ViewAddLight(IDirect3DRMViewport *pViewport, const IDirect3DRMFrame *pLight)
ViewportAppData * ViewportGetData(IDirect3DRMViewport *pViewport)
Result ViewGetBackgroundColor(IDirect3DRMViewport *pViewport, float *r, float *g, float *b)
Result ViewClear(IDirect3DRMViewport *pViewport)
Result ViewTransformWorldToScreen(IDirect3DRMViewport *pViewport, const float world[3], float screen[4])
Result ViewRemoveLight(IDirect3DRMViewport *pViewport, const IDirect3DRMFrame *pLight)
Result ViewSetBackgroundColor(IDirect3DRMViewport *pViewport, float r, float g, float b)