CDxDirectView Class Reference

#include <DxDirectView.h>

Inheritance diagram for CDxDirectView:
Inheritance graph
[legend]
Collaboration diagram for CDxDirectView:
Collaboration graph
[legend]

List of all members.

Public Member Functions

virtual void InitObject (void)
virtual void ExecRender (void)
virtual BOOL SetNewSurface (int ovsbpos=0)
virtual void OnDraw (CDC *pDC)
virtual void OnInitialUpdate ()
virtual void AssertValid () const
virtual void Dump (CDumpContext &dc) const

Public Attributes

RECT renderRect

Protected Member Functions

 CDxDirectView ()
virtual ~CDxDirectView ()

Detailed Description

Definition at line 20 of file DxDirectView.h.


Constructor & Destructor Documentation

CDxDirectView (  )  [protected]

Definition at line 18 of file DxDirectView.cpp.

00019 {
00020 }

~CDxDirectView (  )  [protected, virtual]

Definition at line 24 of file DxDirectView.cpp.

00025 {
00026 }


Member Function Documentation

void AssertValid (  )  const [virtual]

Reimplemented from CExView.

Definition at line 49 of file DxDirectView.cpp.

00050 {
00051     CDxBaseView::AssertValid();
00052 }

void Dump ( CDumpContext &  dc  )  const [virtual]

Reimplemented from CExView.

Definition at line 56 of file DxDirectView.cpp.

00057 {
00058     CDxBaseView::Dump(dc);
00059 }

void ExecRender ( void   )  [virtual]

Reimplemented from CDxBaseView.

Definition at line 278 of file DxDirectView.cpp.

References CDxBaseView::d3dParam, IDS_STR_FAIL_CLR_WND, IDS_STR_FAIL_RESTR_DX9DEV, IDS_STR_FAIL_TRNS_BAKBUF, CDxBaseView::lpBackBuffer, CDxBaseView::lpD3DDevice, CDxBaseView::lpSurface, CExView::pFrame, and jbxwl::ResetDx9Device().

00279 {
00280     if (isNull(lpD3DDevice)) return;
00281 
00282     HRESULT hr = lpD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255), 1.0f, 0);
00283     if (FAILED(hr)) {
00284         CString mesg;
00285         mesg.LoadString(IDS_STR_FAIL_CLR_WND);
00286         MessageBox(_T("CDxDirectView::ExecRender():\n\n") + mesg);
00287         return;
00288     }
00289 
00290     hr = lpD3DDevice->StretchRect(lpSurface, NULL, lpBackBuffer, NULL, D3DTEXF_NONE);
00291     if (FAILED(hr)) {
00292         CString mesg;
00293         mesg.LoadString(IDS_STR_FAIL_TRNS_BAKBUF);
00294         MessageBox(_T("CDxDirectView::ExecRender():\n\n") + mesg); 
00295         return;
00296     }
00297 
00298     hr = lpD3DDevice->Present(NULL, NULL, NULL, NULL);
00299     if (FAILED(hr)) {
00300         hr = ResetDx9Device(lpD3DDevice, &d3dParam, this);
00301         if (FAILED(hr)) {
00302             DEBUG_INFO("CDxDirectView::ExecRender(): %s (%s)\n", DXGetErrorString(hr), DXGetErrorDescription(hr));
00303             CString mesg;
00304             mesg.LoadString(IDS_STR_FAIL_RESTR_DX9DEV);
00305             MessageBox(_T("CDxDirectView::ExecRender():\n\n") + mesg + _T("\n") + DXGetErrorString(hr));
00306             pFrame->SendMessage(WM_CLOSE);
00307         }
00308         else  ExecRender();
00309     }
00310 }

Here is the call graph for this function:

void InitObject ( void   )  [virtual]

Reimplemented from CDxBaseView.

Definition at line 314 of file DxDirectView.cpp.

References CDxBaseView::bufferSize, CExView::colorMode, jbxwl::Dx9GetBackBuffer(), CExView::hasViewData, IDS_STR_FAIL_REGET_BAKBUF, IDS_STR_FAIL_REGET_SURFACE, IDS_STR_FAIL_RETRNS_SURFACE, CDxBaseView::lpBackBuffer, CDxBaseView::lpD3DDevice, CDxBaseView::lpSurface, CDxDirectView::SetNewSurface(), and CExView::viewData.

00315 {
00316     bufferSize = Dx9GetBackBuffer(lpD3DDevice, &lpBackBuffer);
00317     if (bufferSize.x<0) {
00318         CString mesg;
00319         mesg.LoadString(IDS_STR_FAIL_REGET_BAKBUF);
00320         MessageBox(_T("CDxDirectView::InitObject():\n\n") + mesg);
00321         return;
00322     }
00323 
00324     HRESULT hr;
00325     if (colorMode==GRAPH_COLOR_RGB || colorMode==GRAPH_COLOR_BGR) {
00326         hr = lpD3DDevice->CreateOffscreenPlainSurface(viewData.xsize, viewData.ysize, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &lpSurface, NULL);
00327     }
00328     else if (colorMode==GRAPH_COLOR_ARGB || colorMode==GRAPH_COLOR_RGBA) {
00329         hr = lpD3DDevice->CreateOffscreenPlainSurface(viewData.xsize, viewData.ysize, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpSurface, NULL);
00330     }
00331     else if (colorMode==GRAPH_COLOR_XRGB) {
00332         hr = lpD3DDevice->CreateOffscreenPlainSurface(viewData.xsize, viewData.ysize, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &lpSurface, NULL);
00333     }
00334     else if (colorMode==GRAPH_COLOR_ABGR || colorMode==GRAPH_COLOR_BGRA) {
00335         hr = lpD3DDevice->CreateOffscreenPlainSurface(viewData.xsize, viewData.ysize, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpSurface, NULL);
00336     }
00337     else if (colorMode==GRAPH_COLOR_XBGR) {
00338         hr = lpD3DDevice->CreateOffscreenPlainSurface(viewData.xsize, viewData.ysize, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &lpSurface, NULL);
00339     }
00340     else if (colorMode==GRAPH_COLOR_ARGB16 || colorMode==GRAPH_COLOR_RGBA16) {
00341         hr = lpD3DDevice->CreateOffscreenPlainSurface(viewData.xsize, viewData.ysize, D3DFMT_A4R4G4B4, D3DPOOL_DEFAULT, &lpSurface, NULL);
00342     }
00343     else {  // GRAPH_COLOR_MONO, MONO16, RGB16
00344         hr = lpD3DDevice->CreateOffscreenPlainSurface(viewData.xsize, viewData.ysize, D3DFMT_R5G6B5,   D3DPOOL_DEFAULT, &lpSurface, NULL);
00345     }
00346 
00347     if (FAILED(hr)) {
00348         CString mesg;
00349         mesg.LoadString(IDS_STR_FAIL_REGET_SURFACE);
00350         MessageBox(_T("CDxDirectView::InitObject():\n\n") + mesg);
00351         return;
00352     }
00353 
00354     hasViewData = SetNewSurface(0);
00355     if (!hasViewData) {
00356         CString mesg;
00357         mesg.LoadString(IDS_STR_FAIL_RETRNS_SURFACE);
00358         MessageBox(_T("CDxDirectView::InitObject():\n\n") + mesg);
00359         return;
00360     }
00361     return;
00362 }

Here is the call graph for this function:

void OnDraw ( CDC *  pDC  )  [virtual]

Reimplemented from CExView.

Definition at line 37 of file DxDirectView.cpp.

00038 {
00039     CDocument* pDoc = GetDocument();
00040 
00041     // TODO: 描画コードをここに追加してください.
00042 }

void OnInitialUpdate ( void   )  [virtual]

Reimplemented from CDxBaseView.

Definition at line 68 of file DxDirectView.cpp.

References CDxBaseView::bufferSize, CExView::colorMode, CExFrame::doneErrorMessage, jbxwl::Dx9GetBackBuffer(), CExView::hasViewData, IDS_STR_FAIL_CRT_BAKBUF, IDS_STR_FAIL_CRT_SURFACE, IDS_STR_FAIL_GET_DX9DEV, IDS_STR_FAIL_TRNS_SURFACE, CDxBaseView::InitDevice(), CDxBaseView::lpBackBuffer, CDxBaseView::lpD3DDevice, CDxBaseView::lpSurface, CExView::origXSize, CExView::origYSize, CExView::pFrame, CDxDirectView::renderRect, CDxDirectView::SetNewSurface(), CExView::SetWindowSize(), CExView::sizeXYRate, CExView::viewData, CExView::xsize, and CExView::ysize.

00069 {
00070     // xsize, ysize の4バイト境界の問題は呼び出し側の責任
00071     if (xsize<=0 || ysize<=0) return;
00072 
00073     //
00074     D3DFORMAT format;
00075 
00076     // RGB 8bit/plane
00077     if (colorMode==GRAPH_COLOR_RGB || colorMode==GRAPH_COLOR_BGR) {
00078         viewData.set(xsize, ysize, 1, 24);
00079         format = D3DFMT_X8R8G8B8;
00080     }
00081     // ARGB/RGBA 8bit/plane
00082     else if (colorMode==GRAPH_COLOR_ARGB || colorMode==GRAPH_COLOR_RGBA) {
00083         viewData.set(xsize, ysize, 1, 32);
00084         format = D3DFMT_A8R8G8B8;
00085     }
00086     // XRGB 8bit/plane
00087     else if (colorMode==GRAPH_COLOR_XRGB) {
00088         viewData.set(xsize, ysize, 1, 32);
00089         format = D3DFMT_X8R8G8B8;
00090     }
00091     // ABGR/BGRA 8bit/plane
00092     else if (colorMode==GRAPH_COLOR_ABGR || colorMode==GRAPH_COLOR_BGRA) {
00093         viewData.set(xsize, ysize, 1, 32);
00094         format = D3DFMT_A8R8G8B8;
00095     }
00096     // XBGR 8bit/plane
00097     else if (colorMode==GRAPH_COLOR_XBGR) {
00098         viewData.set(xsize, ysize, 1, 32);
00099         format = D3DFMT_X8R8G8B8;
00100     }
00101     // ARGB16/RGBA16 16bit/plane
00102     else if (colorMode==GRAPH_COLOR_ARGB16 || colorMode==GRAPH_COLOR_RGBA16) {
00103         viewData.set(xsize, ysize, 1, 16);
00104         format = D3DFMT_A4R4G4B4;
00105     }
00106     // RGB16 16bit/plane
00107     else if (colorMode==GRAPH_COLOR_RGB16) {
00108         viewData.set(xsize, ysize, 1, 16);
00109         format = D3DFMT_R5G6B5;
00110     }
00111     // GRAPH_COLOR_MONO, MONO16  8,16bit/plane (MONO16は MONOに変換されて表示される)
00112     else {
00113         viewData.set(xsize, ysize);
00114         format = D3DFMT_R5G6B5;
00115     }
00116     //
00117     origXSize  = xsize;
00118     origYSize  = ysize;
00119     sizeXYRate = (double)ysize/(double)xsize;
00120 
00121     renderRect.top    = 0;
00122     renderRect.left   = 0;
00123     renderRect.right  = xsize;
00124     renderRect.bottom = ysize;
00125 
00126     //
00127     // DX9
00128     //
00129     BOOL rslt = InitDevice(xsize, ysize);
00130     if (!rslt) {
00131         CString mesg;
00132         mesg.LoadString(IDS_STR_FAIL_GET_DX9DEV);
00133         MessageBox(_T("CDxDirectView::OnInitialUpdate():\n\n") + mesg);
00134         pFrame->doneErrorMessage = TRUE;
00135         return;
00136     }
00137 
00138     bufferSize = Dx9GetBackBuffer(lpD3DDevice, &lpBackBuffer);
00139     if (bufferSize.x<0) {
00140         CString mesg;
00141         mesg.LoadString(IDS_STR_FAIL_CRT_BAKBUF);
00142         MessageBox(_T("CDxDirectView::OnInitialUpdate():\n\n") + mesg);
00143         return;
00144     }
00145 
00146     HRESULT hr = lpD3DDevice->CreateOffscreenPlainSurface(xsize, ysize, format, D3DPOOL_DEFAULT, &lpSurface, NULL);
00147     if (FAILED(hr)) { 
00148         CString mesg;
00149         mesg.LoadString(IDS_STR_FAIL_CRT_SURFACE);
00150         MessageBox(_T("CDxDirectView::OnInitialUpdate():\n\n") + mesg);
00151         pFrame->doneErrorMessage = TRUE;
00152         return;
00153     }
00154     
00155     hasViewData = SetNewSurface(0);
00156     if (!hasViewData) {
00157         CString mesg;
00158         mesg.LoadString(IDS_STR_FAIL_TRNS_SURFACE);
00159         MessageBox(_T("CDxDirectView::OnInitialUpdate():\n\n") + mesg); 
00160         pFrame->doneErrorMessage = TRUE;
00161         return;
00162     }
00163     
00164     SetWindowSize(viewData.xsize, viewData.ysize);
00165     return;
00166 }

Here is the call graph for this function:

BOOL SetNewSurface ( int  ovsbpos = 0  )  [virtual]

Reimplemented from CExView.

Definition at line 170 of file DxDirectView.cpp.

References CExView::colorMode, IDS_STR_DLTD_DATA, IDS_STR_ERROR, CDxBaseView::lpSurface, CDxDirectView::renderRect, and CExView::viewData.

Referenced by CDxDirectView::InitObject(), and CDxDirectView::OnInitialUpdate().

00171 {
00172     if (isNull(viewData.grptr)) {
00173         CString mesg, noti;
00174         mesg.LoadString(IDS_STR_DLTD_DATA);
00175         noti.LoadString(IDS_STR_ERROR);
00176         MessageBox(_T("CDxDirectView::SetNewSurface():\n\n") + mesg, noti, MB_OK);
00177         return FALSE;
00178     }
00179 
00180     HRESULT hr;
00181 
00182     // RGB 8bit/plane
00183     if (colorMode==GRAPH_COLOR_RGB) {
00184         int srcpitch = viewData.xsize*3;
00185         ntoh_data(viewData.grptr, viewData.lsize, 3);
00186         hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_R8G8B8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00187     }
00188 
00189     // BGR 8bit/plane
00190     else if (colorMode==GRAPH_COLOR_BGR) {
00191         int srcpitch = viewData.xsize*3;
00192         if (isBigEndian) swap_byte((void*)viewData.grptr, viewData.lsize, 3);
00193         hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_R8G8B8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00194     }
00195 
00196     // XRGB/ARGB 8bit/plane
00197     else if (colorMode==GRAPH_COLOR_XRGB || colorMode==GRAPH_COLOR_ARGB) {
00198         int srcpitch = viewData.xsize*4;
00199         ntoh_data(viewData.grptr, viewData.lsize, 4);
00200         if (colorMode==GRAPH_COLOR_XRGB) {
00201             hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_X8R8G8B8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00202         }
00203         else {
00204             hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_A8R8G8B8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00205         }
00206     }
00207 
00208     // RBGA 8bit/plane
00209     else if (colorMode==GRAPH_COLOR_RGBA) {
00210         int srcpitch = viewData.xsize*4;
00211         if (isBigEndian) swap_byte((void*)viewData.grptr, viewData.lsize, 4);
00212         hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_A8B8G8R8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00213     }
00214 
00215     // XBGR/ABGR 8bit/plane
00216     else if (colorMode==GRAPH_COLOR_XBGR || colorMode==GRAPH_COLOR_ABGR) {
00217         int srcpitch = viewData.xsize*4;
00218         ntoh_data(viewData.grptr, viewData.lsize, 4);
00219         if (colorMode==GRAPH_COLOR_XBGR) {
00220             hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_X8B8G8R8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00221         }
00222         else {
00223             hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_A8B8G8R8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00224         }
00225     }
00226 
00227     // BGRA 8bit/plane
00228     else if (colorMode==GRAPH_COLOR_BGRA) {
00229         int srcpitch = viewData.xsize*4;
00230         if (isBigEndian) swap_byte((void*)viewData.grptr, viewData.lsize, 4);
00231         hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_A8R8G8B8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00232     }
00233 
00234     // RGB16 16bit/plane
00235     else if (colorMode==GRAPH_COLOR_RGB16) {
00236         int srcpitch = viewData.xsize*2;
00237         ntoh_data(viewData.grptr, viewData.lsize, 2);
00238         hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_R5G6B5, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00239     }
00240 
00241     // ARGB16 16bit/plane
00242     else if (colorMode==GRAPH_COLOR_ARGB16) {
00243         int srcpitch = viewData.xsize*2;
00244         ntoh_data(viewData.grptr, viewData.lsize, 2);
00245         hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_A4R4G4B4, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00246     }
00247 
00248     // RGBA16 16bit/plane
00249     else if (colorMode==GRAPH_COLOR_RGBA16) {
00250         int srcpitch = viewData.xsize*2;
00251         ntoh_data(viewData.grptr, viewData.lsize, 2);
00252         // R4G4B4A4 -> A4R4G4B4
00253         for (int i=0; i<viewData.xsize*viewData.ysize*2; i+=2) {
00254             int r = (viewData.grptr[i]  &0xf0)>>4;
00255             int g = (viewData.grptr[i]  &0x0f)<<4;
00256             int b = (viewData.grptr[i+1]&0xf0)>>4;
00257             int a = (viewData.grptr[i+1]&0x0f)<<4;
00258             viewData.grptr[i]   = (uByte)(a + r);
00259             viewData.grptr[i+1] = (uByte)(g + b);
00260         }
00261         hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_A4R4G4B4, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00262     }
00263 
00264     // Monochrome 8,16bit/plane
00265     else if (colorMode==GRAPH_COLOR_MONO || colorMode==GRAPH_COLOR_MONO16) {
00266         // GRAPH_COLOR_MONO16 は 8bitに変換されている
00267         int srcpitch = viewData.xsize;
00268         hr = D3DXLoadSurfaceFromMemory(lpSurface, NULL, NULL, viewData.grptr, D3DFMT_L8, srcpitch, NULL, &renderRect, D3DX_FILTER_NONE, 0);
00269     }
00270 
00271     if (FAILED(hr)) return FALSE;
00272 
00273     return TRUE;
00274 }

Here is the caller graph for this function:


Member Data Documentation

RECT renderRect

Definition at line 29 of file DxDirectView.h.

Referenced by CDxDirectView::OnInitialUpdate(), and CDxDirectView::SetNewSurface().


The documentation for this class was generated from the following files:

Generated on 15 Nov 2023 for JunkBox_Win_Lib by  doxygen 1.6.1