#pragma comment(lib,"d3d11.lib")
#pragma comment(lib,"d3dx11.lib")
#include <d3dx11.h>
//定数定義
#define WINDOW_WIDTH 320 //ウィンドウ幅
#define WINDOW_HEIGHT 240 //ウィンドウ高さ
//グローバル変数
HWND hWnd=NULL;
ID3D11Device* Device = NULL;
ID3D11DeviceContext* DeviceContext=NULL;
IDXGISwapChain* SwapChain = NULL;
ID3D11RenderTargetView* RenderTargetView = NULL;
//ダイレクト3Dの初期化関数
HRESULT InitD3D(HWND hWnd)
{
// デバイスとスワップチェーンの作成
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory( &sd, sizeof(sd) );
sd.BufferCount = 1; //バックバッファの数
sd.BufferDesc.Width = WINDOW_WIDTH; //バッファの幅
sd.BufferDesc.Height = WINDOW_HEIGHT; //バッファの高さ
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //バッファのフォーマット
sd.BufferDesc.RefreshRate.Numerator = 60; //リフレッシュレート
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.OutputWindow = hWnd;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.Windowed = TRUE;
D3D_FEATURE_LEVEL FeatureLevel = D3D_FEATURE_LEVEL_11_0;
if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_REFERENCE, NULL,0,
&FeatureLevel,1,
D3D11_SDK_VERSION, &sd, &SwapChain, &Device ,NULL,&DeviceContext) ) )
{
return FALSE;
}
//レンダーターゲットビューの作成
ID3D11Texture2D *BackBuffer;
SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ),(LPVOID*)&BackBuffer);
Device->CreateRenderTargetView( BackBuffer, NULL, &RenderTargetView );
BackBuffer->Release();
DeviceContext->OMSetRenderTargets(1, &RenderTargetView,NULL);
//ビューポートの設定
D3D11_VIEWPORT vp;
vp.Width = WINDOW_WIDTH;
vp.Height = WINDOW_HEIGHT;
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0f;
vp.TopLeftX = 0;
vp.TopLeftY = 0;
DeviceContext->RSSetViewports( 1, &vp );
return S_OK;
}
//レンダリング
VOID Render()
{
float ClearColor[4] = {1,1,1,1 }; // クリア色作成 RGBAの順
DeviceContext->ClearRenderTargetView( RenderTargetView, ClearColor );//画面クリア
SwapChain->Present( 0, 0 );//画面更新(バックバッファをフロントバッファに)
}
//終了時解放処理
VOID Cleanup()
{
SwapChain->Release();
RenderTargetView->Release();
DeviceContext->Release();
Device->Release();
}
//メッセージプロシージャ
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY://終了時
Cleanup();
PostQuitMessage(0);
break;
}
return DefWindowProc (hWnd, msg, wParam, lParam);
}
//メイン関数
INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)
{
//ウインドウクラスの登録
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
L"Window1", NULL };
RegisterClassEx( &wc );
//タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定
RECT rect;
SetRect(&rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
rect.right=rect.right-rect.left;
rect.bottom=rect.bottom-rect.top;
rect.top=0;
rect.left=0;
//ウインドウの生成
hWnd = CreateWindow( L"Window1", L"Hello DirectX11 World !!",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom,
NULL, NULL, wc.hInstance, NULL );
MSG msg;
ZeroMemory(&msg,sizeof(msg));
//Direct3D初期化
if(SUCCEEDED(InitD3D(hWnd)))
{
//ウインドウ表示
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
while(msg.message!=WM_QUIT)
{
if( PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
}
//終了
return 0;
}
DirectX11でエラーがでる
DirectX11でエラーがでる
VC C++2010で以下のようなサンプルコードをデバックするとエラーが出てしまいます。
出力のエラーは次の通りです。
何か設定のし忘れなどがあるのでしょうか?
Re: DirectX11でエラーがでる
ウチのハードディスクを覗いてみたところ、d3dx~はDirectX SDKに入ってました。
Windows SDK(単体,Visual C++ 2010 Express付属とも)には入ってませんでした。
Windows SDK(単体,Visual C++ 2010 Express付属とも)には入ってませんでした。
Re: DirectX11でエラーがでる
インクルードディレクトリの設定はしていますか? ちなみにこいつは、VC++2010からプロジェクトを作るだびに個別に設定するようになりました。
設定方法は、ソリューションエクスプローラからプロジェクトを右クリック、プロパティを開き、「構成プロパティ」の「VC++ディレクトリ」をクリック。その中の「インクルード ディレクトリ」を編集し、
$(DXSDK_DIR)Include
と入力するか、駄目ならばDirectX SDKのフォルダ内の"Include"というディレクトリを見つけ、その絶対パスを入力します。
設定方法は、ソリューションエクスプローラからプロジェクトを右クリック、プロパティを開き、「構成プロパティ」の「VC++ディレクトリ」をクリック。その中の「インクルード ディレクトリ」を編集し、
$(DXSDK_DIR)Include
と入力するか、駄目ならばDirectX SDKのフォルダ内の"Include"というディレクトリを見つけ、その絶対パスを入力します。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】
Re: DirectX11でエラーがでる
$(DXSDK_DIR)Includeと入力できません。SUE さんが書きました:インクルードディレクトリの設定はしていますか? ちなみにこいつは、VC++2010からプロジェクトを作るだびに個別に設定するようになりました。
設定方法は、ソリューションエクスプローラからプロジェクトを右クリック、プロパティを開き、「構成プロパティ」の「VC++ディレクトリ」をクリック。その中の「インクルード ディレクトリ」を編集し、
$(DXSDK_DIR)Include
と入力するか、駄目ならばDirectX SDKのフォルダ内の"Include"というディレクトリを見つけ、その絶対パスを入力します。
またDirectX SDKのフォルダの場所もわかりません
Re: DirectX11でエラーがでる
入力するときは、右上にある、ファイルが光っているようなアイコンをクリックして新しい行を作ります。
DirectX SDKの場所はインストール中に必ず表示されているはずなのですが。C:のProgram Filesにあります。
もしインストールしていないということであれば、そのサンプルの出典となった文章を読み返してください。多分SDKのインストール方法については載っているはずです。
DirectX SDKの場所はインストール中に必ず表示されているはずなのですが。C:のProgram Filesにあります。
もしインストールしていないということであれば、そのサンプルの出典となった文章を読み返してください。多分SDKのインストール方法については載っているはずです。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】
Re: DirectX11でエラーがでる
2010からはプロパティシートで設定するように変更されました。SUE さんが書きました:インクルードディレクトリの設定はしていますか? ちなみにこいつは、VC++2010からプロジェクトを作るだびに個別に設定するようになりました。
プロパティマネージャーでMicrosoft.Cpp.Win32.userに対して設定すればユーザー設定として記録され、個別に設定する必要は無くなります。
Expressでプロパティマネージャーを表示するには上級者用の設定にする必要があったと思います。
プロジェクト個別に設定するときはVC++ディレクトリは変更できませんので、以下の項目を設定してください。
- C/C++→全般→追加のインクルードディレクトリ
- リンカー→全般→追加のライブラリディレクトリディレクトリ
Re: DirectX11でエラーがでる
プロパティマネージャーの設定のやり方と下の「個別に設定するとき」を詳しくお教えくださいISLe さんが書きました:2010からはプロパティシートで設定するように変更されました。SUE さんが書きました:インクルードディレクトリの設定はしていますか? ちなみにこいつは、VC++2010からプロジェクトを作るだびに個別に設定するようになりました。
プロパティマネージャーでMicrosoft.Cpp.Win32.userに対して設定すればユーザー設定として記録され、個別に設定する必要は無くなります。
Expressでプロパティマネージャーを表示するには上級者用の設定にする必要があったと思います。
プロジェクト個別に設定するときはVC++ディレクトリは変更できませんので、以下の項目を設定してください。
- C/C++→全般→追加のインクルードディレクトリ
- リンカー→全般→追加のライブラリディレクトリディレクトリ
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectX11でエラーがでる
そもそも最新のDirectXSDKはインストールされていますか?
あと最大の問題は開発機はWindows7でDirectX11対応のビデオカードはお持ちですか?
あと最大の問題は開発機はWindows7でDirectX11対応のビデオカードはお持ちですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DirectX11でエラーがでる
「と」、というより、どちらの方法でも出来ますよ、という意味です(ですよね?)。cc さんが書きました:プロパティマネージャーの設定のやり方と下の「個別に設定するとき」を詳しくお教えください
もし無料版であるExpress Editionを使っているのなら、僕が書いた手順の「VC++ディレクトリ」のところを「C/C++→全般」に置き換えるだけです。
有料版を使っているのならプロパティマネージャーから楽に設定できる(らしい)ですが、その方法でやりたいならISLeさんに教わってください。
オフトピック
これでずっと上手くやって来たのに若干間違いだったとは・・・
オフトピック
ていうか「だびに」が何度も引用されてなんか恥ずかしい。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】
Re: DirectX11でエラーがでる
まずは訂正させてください。cc さんが書きました:プロパティマネージャーの設定のやり方と下の「個別に設定するとき」を詳しくお教えください
プロジェクト個別でVC++ディレクトリを使うこともできました。
DirectX SDKがインストールされていることが前提ですが、よろしいでしょうか。
【プロパティマネージャーでユーザー設定する方法】 Expressでも有効です。
- Win32プロジェクトを開く。
- メニュー『表示(V)』→『プロパティ マネージャー(P)』を選択。
※Expressでは上級者用の設定にしておく必要あり - プロパティ マネージャーのツリーを展開して、Microsoft.Cpp.Win32.userにフォーカスし、メニュー『表示(V)』→『プロパティ ページ(Y)』を選択。
※構成ごとに表示されるが共通なのでひとつ変更すれば良い - 『VC++ ディレクトリ』→『インクルード ディレクトリ』または『C/C++』→『全般』→『追加のインクルード ディレクトリ』のプルダウンから『<編集...>』を選択。
※どちらか一方だけで良い - 『新しい行』ボタンを押し、
$(DXSDK_DIR)Include
と入力、『OK』ボタンを押す。 - 『VC++ ディレクトリ』→『ライブラリ ディレクトリ』または『リンカー』→『全般』→『追加のライブラリ ディレクトリ』のプルダウンから『<編集...>』を選択。
※どちらか一方だけで良い - 『新しい行』ボタンを押し、
$(DXSDK_DIR)Lib\x86
と入力、『OK』ボタンを押す。 - 『OK』ボタンを押す。
【プロジェクトに対して個別に設定する方法】
- Win32プロジェクトを開く。
- ソリューション エクスプローラーでプロジェクト名にフォーカスし、メニュー『表示(V)』→『プロパティ ページ(Y)』を選択。
(追記)
プロジェクトにまだC/C++ソースファイルが追加されてないとプロパティページのC/C++カテゴリが表示されないので、VC++ディレクトリに設定するほうが良いかもしれません。
そのあたりはお好みで。
(さらに追記)
ウチはExpressなので、有償版Visual Studio 2010だと画面の構成などが異なるかもしれません。
Re: DirectX11でエラーがでる
>6.『VC++ ディレクトリ』→『ライブラリ ディレクトリ』または『リンカー』→『全般』→『追加のライブラリ ディレクトリ』のプルダウンから『<編集...>』を選択。
>※どちらか一方だけで良い
>7.『新しい行』ボタンを押し、
>$(DXSDK_DIR)Lib\x86
>と入力、『OK』ボタンを押す。
これの入力ができません。
またその状態でデバックしてみると以下のようなエラーが出ます。
>※どちらか一方だけで良い
>7.『新しい行』ボタンを押し、
>$(DXSDK_DIR)Lib\x86
>と入力、『OK』ボタンを押す。
これの入力ができません。
またその状態でデバックしてみると以下のようなエラーが出ます。
Re: DirectX11でエラーがでる
「入力ができません」だけではどうなっているのかさっぱり分からないのですが…。cc さんが書きました:>6.『VC++ ディレクトリ』→『ライブラリ ディレクトリ』または『リンカー』→『全般』→『追加のライブラリ ディレクトリ』のプルダウンから『<編集...>』を選択。
>※どちらか一方だけで良い
>7.『新しい行』ボタンを押し、
>$(DXSDK_DIR)Lib\x86
>と入力、『OK』ボタンを押す。
これの入力ができません。
- プロパティページを開くことができない。
- プロパティページに該当する項目がない。
- プルダウンできない。
- プルダウンに『<編集...>』の項目がない。
- プルダウンの『<編集...>』の項目を選んでも編集ダイアログが出ない。
- 編集ダイアログに『新しい行』ボタンが無い。
- 編集ダイアログの『新しい行』ボタンを押しても新しい行を入力する状態にならない。
- 編集ダイアログの『新しい行』ボタンを押して新しい行を入力しても消えてしまう。
- 編集ダイアログの『OK』ボタンを押しても反映されない。
まさかと思いますが、\が入力できないというだけのことではないですよね。
Re: DirectX11でエラーがでる
ところで、
ビルド
との区別がついていないように見えるのは私だけでしょうか。
デバッグ(バグ取り)というのは、ビルドが成功して実行ファイルは作成できるが、思った通りに動かない、
という状況で行なうことであって、今の質問者さんの状況はそこまでたどり着けていない、と思うのです。
デバック(英語のつづりはdebugだから、デバッグの方が適切のような気がする)とcc さんが書きました:VC C++2010で以下のようなサンプルコードをデバックするとエラーが出てしまいます。
ビルド
との区別がついていないように見えるのは私だけでしょうか。
デバッグ(バグ取り)というのは、ビルドが成功して実行ファイルは作成できるが、思った通りに動かない、
という状況で行なうことであって、今の質問者さんの状況はそこまでたどり着けていない、と思うのです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: DirectX11でエラーがでる
以下の症状のどれですか?cc さんが書きました:>8.編集ダイアログの『新しい行』ボタンを押して新しい行を入力しても消えてしまう。
新しい行に入力しても警報音が出て何も入力できません
- 『新しい行』ボタンを押していないので入力枠が出現していない。
- 『新しい行』ボタンを押しても入力枠が出現しない。
- 入力枠が出現しているがキー入力を受け付けない。
- 入力枠が出現するが入力しようとすると消えてしまう。
インクルードディレクトリは設定できているようなので、同じ操作をしてるはずなんですけどね。
『新しい行』ボタンを押しても入力枠が出現しなくなっているならば、ウィンドウズを再起動すると改善されるかもしれません。
Re: DirectX11でエラーがでる
どういう訳か入力できるようになって正常に動作するようになりました、ありがとうございました。ISLe さんが書きました:以下の症状のどれですか?cc さんが書きました:>8.編集ダイアログの『新しい行』ボタンを押して新しい行を入力しても消えてしまう。
新しい行に入力しても警報音が出て何も入力できませんあと何がありますかね…。
- 『新しい行』ボタンを押していないので入力枠が出現していない。
- 『新しい行』ボタンを押しても入力枠が出現しない。
- 入力枠が出現しているがキー入力を受け付けない。
- 入力枠が出現するが入力しようとすると消えてしまう。
インクルードディレクトリは設定できているようなので、同じ操作をしてるはずなんですけどね。
『新しい行』ボタンを押しても入力枠が出現しなくなっているならば、ウィンドウズを再起動すると改善されるかもしれません。
しかしDirectX11が使用できるように設定して、以下のようなコードをデバックなしで実行しようとすると
エラーが出てしまいます。
1>------ ビルド開始: プロジェクト: directx, 構成: Debug Win32 ------
1> test.cpp
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>C:\Users\ユーザーネーム\Documents\Visual Studio 2010\Projects\directx\Debug\directx.exe : fatal error LNK1120: 外部参照 1 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectX11でエラーがでる
プロジェクトがWinMainを要求するウィンドウアプリ用なのに入力したプログラムがC言語のコンソール用のプログラムだからです。
WinMainが無いよと言うエラーが出ていますね。
printfなどが使いたい場合は、Win32コンソールアプリケーションを選んでプロジェクトを作成して下さい。
WinMainが無いよと言うエラーが出ていますね。
printfなどが使いたい場合は、Win32コンソールアプリケーションを選んでプロジェクトを作成して下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DirectX11でエラーがでる
ではDirectX11を使って文字列を表示するにはどの様なコードを書けばよいのですか?softya(ソフト屋) さんが書きました:プロジェクトがWinMainを要求するウィンドウアプリ用なのに入力したプログラムがC言語のコンソール用のプログラムだからです。
WinMainが無いよと言うエラーが出ていますね。
printfなどが使いたい場合は、Win32コンソールアプリケーションを選んでプロジェクトを作成して下さい。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectX11でエラーがでる
DirectX9ならともかく、DirectX11だとさっぱり分かりません。
「DX9簡易フォントテンプレート」
http://www.geocities.jp/neo_ku_ron/HP_N ... XFont.html
少なくとも簡単には表示できないと思います。
参考。Direcx10の場合。
「その5 DirectX10版高速フォント表示」
http://marupeke296.com/DX10_No5_FontTexture.html
「DX9簡易フォントテンプレート」
http://www.geocities.jp/neo_ku_ron/HP_N ... XFont.html
少なくとも簡単には表示できないと思います。
参考。Direcx10の場合。
「その5 DirectX10版高速フォント表示」
http://marupeke296.com/DX10_No5_FontTexture.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DirectX11でエラーがでる
逆に質問します。cc さんが書きました:ではDirectX11を使って文字列を表示するにはどの様なコードを書けばよいのですか?
質問者さんはDirectX11を使ってどこにどのような文字を表示したいのですか?
printf("表示\n");
で文字を表示するのにDirectXは必要ありません。
DirectX11で文字を表示する方法はいくつもあります。
そのすべてを説明しようとすれば技術書が一冊できるほどの内容です。
なので質問します。
質問者さんはDirectX11を使ってどこにどのような文字を表示したいのですか?
Re: DirectX11でエラーがでる
こんな言い方で申し訳ありませんが、このトピックの最初に書いた普通のウィンドウを作るコードを書いてISLe さんが書きました:逆に質問します。cc さんが書きました:ではDirectX11を使って文字列を表示するにはどの様なコードを書けばよいのですか?
質問者さんはDirectX11を使ってどこにどのような文字を表示したいのですか?
printf("表示\n");
で文字を表示するのにDirectXは必要ありません。
DirectX11で文字を表示する方法はいくつもあります。
そのすべてを説明しようとすれば技術書が一冊できるほどの内容です。
なので質問します。
質問者さんはDirectX11を使ってどこにどのような文字を表示したいのですか?
そのウィンドウの中に普通に文字列を表示したいのです。
>printf("表示\n");
>で文字を表示するのにDirectXは必要ありません。
ところがDirectX11が使えるように設定した環境ではprintfは使えないのですよね?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectX11でエラーがでる
DirectXで使うウィンドウはグラフィックを表示するウィンドウですが、printfで表示するウィンドウはコンソールウィンドウです。
グラフィックを表示するウィンドウ以外に2つめのウィンドウとしてAllocConsole()でコンソールウィンドウを作成すれば、そちらにprintfは可能ですがそんな事をしたいのでしょうか?
[追記]私の書いたDirectx9と10のリンク先は読んでもらえました?
グラフィックを表示するウィンドウ以外に2つめのウィンドウとしてAllocConsole()でコンソールウィンドウを作成すれば、そちらにprintfは可能ですがそんな事をしたいのでしょうか?
[追記]私の書いたDirectx9と10のリンク先は読んでもらえました?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DirectX11でエラーがでる
いいえ違います。softya(ソフト屋) さんが書きました:DirectXで使うウィンドウはグラフィックを表示するウィンドウですが、printfで表示するウィンドウはコンソールウィンドウです。
グラフィックを表示するウィンドウ以外に2つめのウィンドウとしてAllocConsole()でコンソールウィンドウを作成すれば、そちらにprintfは可能ですがそんな事をしたいのでしょうか?
[追記]私の書いたDirectx9と10のリンク先は読んでもらえました?
printfを使うのではなくて、DirectXの機能を使って文字列を表示したいのです
リンク先の方法がそれですか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectX11でエラーがでる
DirectX11はいろいろ変わっているみたいなので出来る保証はありません。cc さんが書きました:いいえ違います。softya(ソフト屋) さんが書きました:DirectXで使うウィンドウはグラフィックを表示するウィンドウですが、printfで表示するウィンドウはコンソールウィンドウです。
グラフィックを表示するウィンドウ以外に2つめのウィンドウとしてAllocConsole()でコンソールウィンドウを作成すれば、そちらにprintfは可能ですがそんな事をしたいのでしょうか?
[追記]私の書いたDirectx9と10のリンク先は読んでもらえました?
printfを使うのではなくて、DirectXの機能を使って文字列を表示したいのです
リンク先の方法がそれですか?
あとISLeさんの言う色々ある方法の一つに過ぎません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectX11でエラーがでる
調べて見ましてが、DirectX11だとDirectWriteを使うのが真っ当なやり方のようです。
[補足]これがccさんの聞きたいひねりのない普通にの方法に当たるかと思います。ただし、printfのような簡単なものは存在しません。それがグラフィック・マルチメディアAPIであるDirectXの与えられた役割だからです。文字表示したいならコンソールやWin32APIを使えば良いのですから。
MSDNのDirectWriteサンプル。
「DirectWrite の "Hello World" サンプル (Windows)」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
[補足]これがccさんの聞きたいひねりのない普通にの方法に当たるかと思います。ただし、printfのような簡単なものは存在しません。それがグラフィック・マルチメディアAPIであるDirectXの与えられた役割だからです。文字表示したいならコンソールやWin32APIを使えば良いのですから。
MSDNのDirectWriteサンプル。
「DirectWrite の "Hello World" サンプル (Windows)」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DirectX11でエラーがでる
「普通に」とはどこにどのような文字列を表示することなのですか?cc さんが書きました:こんな言い方で申し訳ありませんが、このトピックの最初に書いた普通のウィンドウを作るコードを書いて
そのウィンドウの中に普通に文字列を表示したいのです。
ウィンドウに文字列を描画する方法に『普通』が無いのでお聞きしているのですが。
ちなみにGDI関連のWin32 APIを使ってもウィンドウに文字列を表示することができます。
GDIを使うコードに比べたらこのトピックの最初に書かれたコードはかなり特殊なウィンドウを作るコードです。
DirectX11を使わなければならない理由があるわけですよね。
DirectWriteは特定のデバイスに依存しないので、GDIやDirect2DやDirect3Dなどと自由に組み合わせて使うことができます。
DirectWriteを使わなくても文字列を描画することはできます。
D3DX11からは文字列描画機能が無くなってしまいましたけどね。
いずれにせよ目的に応じて使い分ける必要があります。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectX11でエラーがでる
ここのフォーラムルールなのですが、どう解決したか書いていただけますでしょうか。cc さんが書きました:わざわざ引っ張りださせていただきありがとうございました!
ソースコードを貼るのもルールなのですが、サンプルのままなら省略は可能です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DirectX11でエラーがでる
DirectXの機能を使って文字列を表示させるサンプルコードが発見できましたのでsoftya(ソフト屋) さんが書きました:ここのフォーラムルールなのですが、どう解決したか書いていただけますでしょうか。cc さんが書きました:わざわざ引っ張りださせていただきありがとうございました!
ソースコードを貼るのもルールなのですが、サンプルのままなら省略は可能です。
Re: DirectX11でエラーがでる
DirectWriteとDirect2Dのサンプルで目的を達成できたのですか。
Direct3Dじゃなくて良かったんですかね。
そう言えばWindowsSDKに統合されてDirectXという名称が無くなるようなので、いまのうちにDirectWriteとかDirect2DとかDirect3Dとかはっきり対象を示すようにしていったほうが良いかもしれません。
Direct3Dじゃなくて良かったんですかね。
そう言えばWindowsSDKに統合されてDirectXという名称が無くなるようなので、いまのうちにDirectWriteとかDirect2DとかDirect3Dとかはっきり対象を示すようにしていったほうが良いかもしれません。