鬱だ氏のう DirectX (Part 3)
レス数が950を超えています。1000を超えると書き込みができなくなります。
初心者用相談室では扱わないような少し高度な話題も受け持つ。
■旧スレ(プログラム板)
http://piza.2ch.net/tech/kako/966/966655286.html (Part 1)
http://pc.2ch.net/test/read.cgi/tech/997101556/ (Part 2)
MSとかNVidiaのはXフォーマット用のクラスで中みえないし
個人HPでもあんまり解説してないですよね〜
海外のエンジン集めたHPとかならあるんだろうけど、逆にありすぎてわからん
(質もわかりにくいし
頂点フォーマットが複数ある場合、頂点バッファではなく、
floatの配列に突っ込んで描画すんのかなぁ?
0883名前は開発中のものです。
02/03/07 17:58ID:???俺も同じ現象が出てたよ。VC5 SP3。
>>881氏 の通りにやって動かしたよ。
俺がちゃんとした解決策を知ったのはOpenGLで書く決心がついてからだった… タイミング悪すぎ。
0884_
02/03/07 19:13ID:???意味よくわからんのだが、普通にソートするだけじゃダメ?
どーいうデーター構造&GPUを考えるとVRAMorSYSTEMメモリの使い分けとかどうすんのかなぁ、と
あと並び替えの基準とする座標って、三角形の3頂点のどれかでいいの?
それとも、重心とか別に求めた座標使わないと駄目?
0886名前は開発中のものです。
02/03/07 20:20ID:M+bebc/Hメッシュの重心じゃ駄目かに?
つーか普通半透明ポリゴンのソートって言えばメッシュ単位だろ?
流石にポリゴン1枚1枚でソートはしないと思うぞ。
結局ドロープリミテブに渡して描画して貰うんだから
意味ないじゃん。
つか、人体とか入り組んだ形状だとメッシュ単位だとおかしくなるでしょ?
人体のパーツ(BONE)毎にソートすればいいけど、それでも接続部分でおかしくなりそう
間違ってる?
0888名前は開発中のものです。
02/03/07 21:26ID:???半透明以外の部分が極まってくると、半透明部分は屈折とかやりたくなるのよ。
そうすると入り組んだ形状がどうしようもなくて、結局半透明は使わないで
くださいという結論になる。窓ガラス以外の半透明禁止!
0889名前は開発中のものです。
02/03/07 23:10ID:mRevsoRyそしたら全面鏡張りの部屋になたよ。
0891名前は開発中のものです。
02/03/08 23:49ID:kqtc4bt/DirectDraw7 でフルスクリーンにした途端、指定したウィンドウの縦サイズが
画面高さ - (多分)タスクバーの高さ に固定されてしまいます。
画面の下側をクリックするとデスクトップのアイコン等がいじれてしまうのですが、どうしたらいいでしょうか?
0892名前は開発中のものです。
02/03/08 23:52ID:???環境プリーズ
0893891
02/03/09 00:04ID:FSCavH5A書き忘れました^^
Win2k sp2
VisualC++6.0
DirectX8.1
で、DirectDraw7 です。よろしくおえがいします。
0894名前は開発中のものです。
02/03/09 00:11ID:heeM/QyX0895891
02/03/09 00:26ID:FSCavH5ASetDisplayMode をしないときは正常サイズなので
SetDisplayMode が何かをしているのだと思うのですが…。
変更するだけならまだしも、変更後、再変更不可能なのです。
どうしたらいいでしょうか?
0896名前は開発中のものです。
02/03/09 00:59ID:???ビデオカードは?
とりあえずはビデオカードのドライバ入れなおしてみたら?
0897名前は開発中のものです。
02/03/09 01:25ID:???ソース出せるなら、関係しそうな部分だけでも出してみ。
0898895
02/03/09 11:50ID:ixeDcFTnSetCooperativeLevel で、ウィンドウの子ウィンドウを渡していたのですが、そのせいで、親ウィンドウのサイズが
親ウィンドウが画面サイズいっぱいになった時の子ウィンドウの大きさ
になっていたみたいです(タイトルバーとボーダーの分をタスクバーの高さと勘違いしていました)
で、結局、何がしたくて、困っている問題は何かなのですが
したいこと
ウィンドウのクライアント領域のサイズを画面サイズにして、
フルスクリーン時には画面の左上にクライアント領域の左上がくるように、
通常のウィンドウ時は普通のウィンドウとして扱いたい。
困っている事
協調レベルのセットと解像度変更をすると、ウィンドウのサイズ(非クライアント領域も含めたサイズ)
が、解像度と同じに設定されてしまって変更できない。
(マウスイベントを拾いたいので、フルスクリーン時に画面いっぱいのクライアント領域にすることが必須なのです)
>>896
Millenium G400 なのですが…。ドライバはおかしくなさそうです。
>>897
ちょっと質問の内容変更しましたが、やっぱりソース必要でしょうか?
これはなんとかなるでしょうか?よろしくお願いします。
0899名前は開発中のものです。
02/03/09 15:02ID:???フルスクリーンモード時
親ウィンドウの非クライアント領域で発生したメッセージ捕まえて、子ウィンドウの
クライアント領域で発生したメッセージに変換する。
で良いんじゃないの? 非クライアント領域で発生したメッセージを、クライアント
領域へのメッセージに変換するのは、WM_NCHITTEST に対して HITCLIENT 返
せば OK。
0900898
02/03/10 13:14ID:0/yRfR5Sわ〜!望んでいた事ができそうです〜〜!!ありがとうございます〜〜!!
あと、 HITCLIENT ではなくて HTCLIENT ですよね?
あと、ウィンドウの左上とクライアント領域の左上の差をできるだけ実行時の
コストがかからないで取得する方法ってあるでしょうか?
0901900
02/03/10 14:10ID:0/yRfR5Sもっといい方法はありますか?
POINT ptClient;
ptClient.x = 0;
ptClient.y = 0;
::ClientToScreen(hWnd, &ptClient);
RECT rcWindow;
::GetWindowRect(hWnd, &rcWindow);
x = LOWORD(lParam) + (ptClient.x - rcWindow.left);
y = HIWORD(lParam) + (ptClient.y - rcWindow.top);
0902名前は開発中のものです。
02/03/10 15:04ID:???そこまでいくと DirectX の質問じゃないだろ。プログラム技術板の Win32 API スレ
で聞いたほうが良いぞ。
0903名前は開発中のものです。
02/03/10 16:15ID:???合わせてスプライトが伸縮してしまうんですが、どうしたらいいんでしょうか?
0904名前は開発中のものです。
02/03/10 16:38ID:zRtP+ORA転送元の範囲を固定でなく、windowのリサイズにあわせてやればok
0905901
02/03/11 00:18ID:nAiYUbSfたしかにそうですね。とりあえずうまく逝ってるのでこれで我慢します。
で新たに質問なのですが
Flipしようとすると DDERR_NOTFLIPPABLE が返ってきます。
フルスクリーンですし、サーフェイス作成時に
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
と指定していて、ぶら下がってるサーフェイスもちゃんと取得できています。
Flipの引数は(NULL, DDFLIP_WAIT)でやっています。
ビデオボードは Millenium G400
DirectX8.1 で DirectDraw7 を使っています。
なぜなのかさっぱりわかりません、どういった理由が考えられるでしょう?
よろしくお願いします。
0906名前は開発中のものです。
02/03/11 00:23ID:sZq/vYAUDDBLT_WAITを指定しているんですが、
Blt後のGetBltStatusがDDERR_WASSTILLDRAWINGを
返します。
なんで描画が終わるまで待っててくれないんでしょう。
0907905
02/03/11 13:52ID:iNy4rQum#include <windows.h>
#include <ddraw.h>
char szClassName[] = "Windblow-Window";
LPDIRECTDRAWSURFACE7 pSurfPrim = NULL;
LPDIRECTDRAWSURFACE7 pSurfBack = NULL;
LPDIRECTDRAW7 pDD7 = NULL;
LRESULT CALLBACK InitialWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch (msg){
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return ::DefWindowProc(hWnd, msg, wParam, lParam);
}
int WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow){
HWND hWnd = NULL;
bool bFullScreen = true;
WNDCLASSEX wndClass;
ZeroMemory(&wndClass, sizeof(wndClass));
wndClass.cbSize = sizeof (wndClass);
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = InitialWndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hIconSm = NULL;
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wndClass.lpszClassName = szClassName;
wndClass.lpszMenuName = NULL;
if (!::RegisterClassEx(&wndClass)) {
return 1;
}
DWORD windowStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
DWORD windowStyleEx = WS_EX_DLGMODALFRAME;
RECT rcClient;
::SetRect ( &rcClient, 0, 0, 640, 480);
::AdjustWindowRectEx ( &rcClient, windowStyle, FALSE, windowStyleEx);
続く
0908905
02/03/11 13:53ID:iNy4rQumif ( !hWnd) {
return 1;
}
HRESULT ret;
ret = DirectDrawCreateEx( NULL, (void**)&pDD7, IID_IDirectDraw7, NULL);
if ( ret != DD_OK) {
MessageBox(NULL, (LPCSTR)"DirectDraw 初期化に失敗しました", (LPCSTR)"エラー", MB_OK);
}
int ddsclFlags = bFullScreen ? (DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN):(DDSCL_NORMAL);
ret = pDD7->SetCooperativeLevel( hWnd, ddsclFlags);
if ( DD_OK != ret) {
MessageBox(NULL, (LPCSTR)"協調レベル設定に失敗しました", (LPCSTR)"エラー", MB_OK);
}
::ShowWindow( hWnd, SW_SHOW);
::UpdateWindow( hWnd);
if ( bFullScreen) {
if ( DD_OK != pDD7->SetDisplayMode ( 640, 480, 24, 0, 0)){
MessageBox(NULL, (LPCSTR)"解像度変更に失敗しました", (LPCSTR)"エラー", MB_OK);
}
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
if (DD_OK != pDD7->CreateSurface( &ddsd, &pSurfPrim, NULL)) {
MessageBox(NULL, (LPCSTR)"プライマリサーフェイスの作成に失敗しました", (LPCSTR)"エラー", MB_OK);
exit(1);
}
DDSCAPS2 ddsCaps;
ZeroMemory(&ddsCaps, sizeof(ddsCaps));
ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
if (DD_OK != pSurfPrim->GetAttachedSurface(&ddsCaps, &pSurfPrim)) {
MessageBox(NULL, (LPCSTR)"バックサーフェイスの取得に失敗しました", (LPCSTR)"エラー", MB_OK);
exit(1);
}
}else{
続く
0909905
02/03/11 13:54ID:iNy4rQumZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
if ( DD_OK != pDD7->CreateSurface(&ddsd, &pSurfPrim, NULL)) {
MessageBox(NULL, (LPCSTR)"プライマリサーフェイスの作成に失敗しました", (LPCSTR)"エラー", MB_OK);
exit(1);
}
}
LPDIRECTDRAWSURFACE7 pChip;
DDSURFACEDESC2 ddsd2;
ZeroMemory(&ddsd2, sizeof(ddsd2));
ddsd2.dwSize = sizeof(ddsd2);
ddsd2.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd2.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd2.dwWidth = 32;
ddsd2.dwHeight = 32;
if (DD_OK != pDD7->CreateSurface( &ddsd2, &pChip, NULL)){
MessageBox(NULL, (LPCSTR)"オフスクリーンサーフェイスの作成に失敗しました", (LPCSTR)"エラー", MB_OK);
exit(1);
}
続く
0910905
02/03/11 13:54ID:iNy4rQumcase DD_OK:
break;
case DDERR_GENERIC:
::SetWindowText(hWnd, "DDERR_GENERIC");
break;
case DDERR_INVALIDOBJECT:
::SetWindowText(hWnd, "DDERR_INVALIDOBJECT");
break;
case DDERR_INVALIDPARAMS:
::SetWindowText(hWnd, "DDERR_INVALIDPARAMS");
break;
case DDERR_NOFLIPHW:
::SetWindowText(hWnd, "DDERR_NOFLIPHW");
break;
case DDERR_NOTFLIPPABLE:
::SetWindowText(hWnd, "DDERR_NOTFLIPPABLE");
break;
case DDERR_SURFACEBUSY:
::SetWindowText(hWnd, "DDERR_SURFACEBUSY");
break;
case DDERR_SURFACELOST:
::SetWindowText(hWnd, "DDERR_SURFACELOST");
break;
case DDERR_UNSUPPORTED:
::SetWindowText(hWnd, "DDERR_UNSUPPORTED");
break;
case DDERR_WASSTILLDRAWING:
::SetWindowText(hWnd, "DDERR_WASSTILLDRAWING");
break;
default:
::SetWindowText(hWnd, "不明なエラー");
break;
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
以上です。いったいどこを間違えているのでしょう?
0911名前は開発中のものです。
02/03/11 15:29ID:???問題の個所くらい書け。
0912名前は開発中のものです。
02/03/11 15:35ID:MdXhYgnAWaitForVerticalBlank() を挟んでみたら?
で、便乗質問なんだけど、WaitForVerticalBlank()って描画ループの間に挟まないとダメみたいなんだけど、どうよ?
俺はDirectDrawの初期化の時なんかに一度だけ呼び出せば良いと思ってた。
0913名前は開発中のものです。
02/03/11 15:55ID:???まずSDKのサンプルでも同じか確認してくれ。
ビデオカード依存なら他の環境ではでなさそうだし。
0914名前は開発中のものです。
02/03/11 15:58ID:MdXhYgnAどうやらループ毎に呼び出すのが正解らしい。
サンプルはDX7のヤツなんだが、WormHoleのやつしか使ってなかった。ただしメインループ内で使ってたな。
これは小言だが、***_FAITとかって信用できん。。これもビデオカード依存かも。
0915905
02/03/11 16:14ID:NNQaCTInお騒がせしました。ほんとにスレタイトル通りって感じです。
0917906
02/03/11 23:35ID:s9ACuIQkありがとうございます。
プログラムとしてはGetBltStatusを見て描画が終わるまで
ループさせているので動作に問題はないのですが、
ちょっと気になったので質問してみました。
やっぱりこのフラグ信用できないんだ・・・。
0918名前は開発中のものです。
02/03/12 21:32ID:nri+3Ey/それとも昔ながらの構造体+関数?
0919名前は開発中のものです。
02/03/12 21:42ID:???モジュールの概念は知っとるけ?あと、externやstaticの使い方は?
つーか、classの使い方を覚えるよりも、コッチを先に覚えるべし。
0920名前は開発中のものです。
02/03/12 22:08ID:nri+3Ey/うん、一応は。
Class化するかどうかは好みの問題?
0921名前は開発中のものです。
02/03/12 23:55ID:???そんなことは聞いてません
0922
02/03/13 00:35ID:XCyICkzDコンソールとか、c++の動作がキモイ環境ならC Only
0923名前は開発中のものです。
02/03/13 00:44ID:cmWHcEPhC++禁止、ランタイムのmalloc禁止は当然だろ。
市販ゲームでハード依存なんて問題外だからDirectX禁止。
0924名前は開発中のものです。
02/03/13 00:46ID:???ネタは sage てな。
0925名前は開発中のものです。
02/03/13 13:31ID:???C++ と malloc と DirectX が苦手なんですね。
0926名前は開発中のものです。
02/03/13 16:55ID:???なんとかしてください
0927名前は開発中のものです。
02/03/13 17:08ID:???Platform SDKのDirectX 8.1 SDKプレビュー版をアンインストールしたら
DirectX 8.1 SDKがツールもサンプルも動かなくなって
インストールもアンインストールもできなくなってしまいました。
Windows Installer Clean Upも効かないでやんの。
結局、Win2kからクリーンインストールし直したぞよ。
みんなも気をつけてね。
0928名前は開発中のものです。
02/03/13 18:24ID:???つーかWindows自体ハード依存してるから全ての市販ゲームは禁止な罠
0929名前は開発中のものです。
02/03/13 19:44ID:dMh5H0pu実際は自分でクラスまがいな設計にしちまうんだろ?
0930名前は開発中のものです。
02/03/13 21:14ID:???0931名前は開発中のものです。
02/03/13 21:31ID:???0932名前は開発中のものです。
02/03/13 21:44ID:e1uF0puM0933名前は開発中のものです。
02/03/13 22:14ID:???0934名前は開発中のものです。
02/03/13 22:34ID:???ハード依存の意味がわかってるのかと小一時間(略
0935名前は開発中のものです。
02/03/13 22:46ID:5XPBpgUYleft=0, top=0, right=639, bottom=479
は 全部で639ピクセル x 679ピクセル ですか?
それとも 640ピクセル x 680ピクセル ですか?
0936名前は開発中のものです。
02/03/13 22:57ID:???冷静に読み直せ。どっちも違う。
0937名前は開発中のものです。
02/03/13 23:05ID:???0938名前は開発中のものです。
02/03/13 23:14ID:???そのくらいわかって答えてやれよ
0939935
02/03/13 23:51ID:TK/wJ18X結局どっちなのでしょうか?
0940名前は開発中のものです。
02/03/13 23:53ID:???479
0941名前は開発中のものです。
02/03/13 23:55ID:???DirectX7のドキュメントには書いているんだけどな。Bltの項目を読め!
つーか、そのくらいプログラム組んで比べれば分かるだろうよ?
0942935
02/03/14 00:08ID:oILUKkp9ありがとうございます。
>>941
この扱い方って通常の RECT の扱い方と違いませんか?
実際試してみて、自分の中で結論は出ていたんですけど、
おっちょこちょいなので、やっぱりどこかでミスしてるのかなぁ?と
不安になったので人に聞いてみたかったんです。
とりあえずあっていたのでよかったです。ありがとうございます。
0943名前は開発中のものです。
02/03/14 00:29ID:???メール欄見れ。
0944名前は開発中のものです。
02/03/14 00:37ID:???0945名前は開発中のものです。
02/03/15 12:49ID:jZhmWUKmお願いします!
0946親切な人
02/03/15 12:55ID:???ヤフーオークションで、凄い人気商品、発見!!!
「高性能ビデオスタビライザー」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA
ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0947名前は開発中のものです。
02/03/15 13:02ID:???0948最新話題☆
02/03/15 13:59ID:A6GWIkAI0949名前は開発中のものです。
02/03/15 14:21ID:???春厨
>946
ジサクジエン
>947
白痴
>948
ブラクラ
0950名前は開発中のものです。
02/03/15 14:59ID:???ジサクジエン
0951名前は開発中のものです。
02/03/15 15:33ID:???そして次スレよろ。
0952名前は開発中のものです。
02/03/15 15:46ID:88FAG1SZ既に語られているかもしれませんが
お教えください。
MS.NETを目前とした現在、
Win32APIは今更勉強する価値のないものでしょうか
MS.NETではWin32とは異なったプログラミングを行う
と聞きました。調べれば十分わかるのかもしれませんが
よろしかったらお願いします、。
0953名前は開発中のものです。
02/03/15 16:31ID:???0954名前は開発中のものです。
02/03/15 19:06ID:???俺たちこの1000カキコの間何やってたんだ?
0955名前は開発中のものです。
02/03/15 19:47ID:???MS.NETつかわなければ問題ないやん。
0956名前は開発中のものです。
02/03/15 20:35ID:oaVmmDUZ0957名前は開発中のものです。
02/03/15 21:06ID:???何をどうしようとして互換性がないと言われているの?
0958名前は開発中のものです。
02/03/16 13:10ID:tKG1AKPEいや、そんな低レベルな話じゃなくって
0959名前は開発中のものです。
02/03/16 13:18ID:???.NETに移行するにしても、ある時期を境にスパっと切り替わるんじゃなくて、
何年もかけて徐々に移行すると思われ。
両方やらざるをえないでしょ。
0960名前は開発中のものです。
02/03/16 13:54ID:hFa2PiANです
0961名前は開発中のものです。
02/03/16 14:44ID:dCR4FV9TDirectX はこれからも COM ですか?
0962名前は開発中のものです。
02/03/16 14:47ID:iDfRnZYaちょっと疑問。
DirectXは低レベルレイヤーだからこそ、あの性能と互換性が実現できる訳で
.NETのような高位のレイヤーで同じようなものを作るのは大変だと思う。
仮にMac用の.NETがリリースされたとして、フォースフィードバックなジョイスティックとか
同じようにサポート出来るのかってことだね。
で、結局は妥協案として.NETで動くDirectXを作るって形になると思う。
.NETのくせにWindows専用と本末転倒になりかねないけど。
現在Direct3Dとかって.NETで動かせるの?DXforVBなら動いたりする?
0963名前は開発中のものです。
02/03/16 14:53ID:???貴殿、.NET SDKのサンプル見てみたか?
0964名前は開発中のものです。
02/03/16 14:57ID:iDfRnZYa俺も過去そう思ってATLとかCOMとか勉強したけど
あんまり意味なかったような気がする・・。
結局COMってね、まずVBありきなシステムなのよ。
C++プログラマからみれば蛇足とも思えるシステムが
VB利用時の為にCOMとして定義して付け加えられてる。
C++でハイパフォーマンスなゲームってカテゴリには、
COMの出番はまったくないと言っていい。
0965名前は開発中のものです。
02/03/16 15:02ID:iDfRnZYaDirectShowのサンプル一つで、DirectXの全てだとを語っていいの?
いや、俺はまだ全然未着手なので純粋な質問なのだが。
馬鹿ハケーン
DirectXがVersion上がっても互換性が保たれるのはCOMのおかげだろ
0967名前は開発中のものです。
02/03/16 15:26ID:???> 結局COMってね、まずVBありきなシステムなのよ。
はつみみです。
0968名前は開発中のものです。
02/03/16 16:22ID:e3Kf3/j6COMの再利用性ってのは
例えばIDirect3D8インターフェイスから
QueryInterfaceによってIDirect3D7インターフェイスを取得できる。
こういうことを言うのよ。
各バージョン専用のDLLがあって、各バージョン専用のライブラリファイルをリンクしなきゃならないんなら
別にCOMじゃなくても良い気がするけど。
0969名前は開発中のものです。
02/03/16 16:41ID:???> COMの再利用性ってのは
それが違うと思うが。
インターフェースとデータを分離することで、ライブラリ側の内部構造を変えても
(たとえばメンバ変数を増やしても)外からは変更が見えない点が、拡張性には
重要。
> 別にCOMじゃなくても良い気がするけど。
C++ Only で構わないなら、まぁ、そうだよね。インターフェースの変換も、要は
C++ の dynamic_cast の言語非依存な仕組みだし。
ただ C++ で問題になるのは、バイナリ標準が確立していないこと、なんだよね。
0970名前は開発中のものです。
02/03/16 16:44ID:???DLLにしとけば、内部変更できるわけだし
0971名前は開発中のものです。
02/03/16 16:51ID:???> DLLにしとけば、内部変更できるわけだし
そうでもない。
一番ありがちなのは、C++ でクラスをエクスポートするときに、DLL のバージョンによって
インスタンスのサイズが異なる点。C++ だとプライベート変数を一つ増やしただけでインス
タンスのサイズが変わってしまうので、外部公開インターフェースが同じでも問題になりう
る。(この悪夢は DLL Hell として知られている)
もちろん素の C++ でもブリッジパターンを使って内部実装を隠蔽してしまえば、こういった
問題は避けられるんだが、そのあたりを強制して、名前の修飾規約や例外処理のバイナリ
標準を決めたものが COM。
(それ以外にもモニカやら何やら重要な概念はいくつかあるんだが、DirectX に限って
言えば、あまり関係ないから忘れて良い)
0973名前は開発中のものです。
02/03/16 17:44ID:nuC9fmEM>>968の再利用性って言葉は誤っていたとは思うけど
>>968の内容が否定されるのは納得がいかん。
COMってのは、貴方の言うようにCoClassをバージョンアップさせつつも
公開するインターフェイスの定義は変えずに、新たな定義を持ったインターフェイスを追加していく仕様だからこそ
互換性が保たれるんじゃん。
つまりDirectXが上記のような正当なCOMの使い方をしていれば、>>968のような
使い方が可能なはずだよ。
>インターフェースとデータを分離することで、ライブラリ側の内部構造を変えても
>(たとえばメンバ変数を増やしても)外からは変更が見えない点が、拡張性には
>重要。
DirectXでコレが実現出来ているなら、Direct3D5でも
SIMDサポートやHWTLサポートが可能になって良いはず。
0974名前は開発中のものです。
02/03/16 17:48ID:nuC9fmEM>>971で言われてるような
DLLのくだらない部分を意識する事が無くなるので
その点は良いかも。
0975名前は開発中のものです。
02/03/16 18:13ID:???>SIMDサポートやHWTLサポートが可能になって良いはず。
意味ないじゃん…
百歩譲っても WHTL前提としないコードをWHTL使って動かしたってトラブルの元にしかならん
0976名前は開発中のものです。
02/03/16 18:19ID:???> 公開するインターフェイスの定義は変えずに、新たな定義を持ったインターフェイスを
> 追加していく仕様
言いたい事は分からんでもないが、誤解を招きやすい書き方だよなぁ。慌てずに、良く整理
してから書き込んでくれ。
0977名前は開発中のものです。
02/03/16 18:50ID:nuC9fmEMいや、つまんないツッコミはいいから
反論があるならそれを書き込んでくれ、負けず嫌い君達。w
0978名前は開発中のものです。
02/03/16 18:58ID:???俺の書きたいことは 969, 971 で書いた。
それに対して反論が 973 で来てたわけだが、一部、日本語として意味不明
なので確認したわけ。で、どうなの?
0979名前は開発中のものです。
02/03/16 18:59ID:???勝ち負けを競ってたのか。
Q 価値って何ですか?
A はつみみです。
0980名前は開発中のものです。
02/03/16 19:02ID:???うわ、、お前と話す気失せました。
何?君は俺と罵り合いをしたい訳?
俺はそんなの不毛なんでイヤですわ、他の奴捜してください。
もうちょと大人になりなよ。w
0981名前は開発中のものです。
02/03/16 19:04ID:???いやだからさ、「論」を書けよ「論」をさ。
君にそんなレス貰ってもしょうがないのよ。
レス数が950を超えています。1000を超えると書き込みができなくなります。