質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

解決済

1回答

1007閲覧

D3DX10CreateEffectFromFile のエラー分析方法について

GuielNo4

総合スコア88

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

0グッド

0クリップ

投稿2019/05/18 09:47

編集2019/05/18 10:49

経緯

「ゲームつくろー」さんのサンプルをベースにHLSLを学習していたのですが、
http://marupeke296.com/DX10_No2Smp_RenderBillboard.html
このサンプルが動作したので、
三角形ポリゴンの頂点カラーもコードから変更できるようにするため
シェーダファイル を書き換えたところ、
D3DX10CreateEffectFromFile関数にてエラーが発生し、
原因分析でつまずいたためここで質問することにしました。

前提・実現したいこと

D3DX10CreateEffectFromFile が FAILED になる原因を分析する方法を探しています。

発生している問題・エラーメッセージ

D3DX10CreateEffectFromFile がエラーになるのですが、
const char* err = (const char*)pBlob->GetBufferPointer();
でそのエラーの内容を取得できると推測しているのですが、
errが「0」になっているので、今後どのように調べていけばいいでしょうか?

該当のソースコード

.fx ファイルを以下のように書き換えました。

struct VS_INPUT { float3 position : POSITION_IN; float3 color : COLOR; }; struct PS_INPUT { float4 position : SV_POSITION; float3 color : COLOR; }; PS_INPUT VS( VS_INPUT In ) { PS_INPUT Out; Out.position = float4( In.position, 1.0f ); Out.col = In.col; return Out; } float4 PS( PS_INPUT In ) : SV_Target { return float4( In.col, 1.0f ); } // Technique Definition technique10 SimpleRender { pass P0 { SetVertexShader( CompileShader( vs_4_0, VS() ) ); SetGeometryShader( NULL ); SetPixelShader( CompileShader( ps_4_0, PS() ) ); } }

今後の進め方についてアドバイスいただけると助かります。
不足情報等、ご指摘いただけると助かります。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

Visual Studio Community 2015
Version 14.0.25431.01 Update 3
dxdiag -> DirectX 12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

const char* err = (const char*)pBlob->GetBufferPointer();

でそのエラーの内容を取得できる

D3DX10CreateEffectFromFile関数のリファレンスによれば、取得できるようです。

errが「0」になっているので、今後どのように調べていけばいいでしょうか?

実際に Visual Studio 2019 で実行してみたところ、エラーの内容は問題なく取得できました。(ブレークポイントを置いて、デバッガで表示させてみました。)

....fx(12,1): error X3003: redefinition of 'PS_INPUT'

ですが、.fx ファイルを Visual Studio のプロジェクトに追加すれば、.fx ファイルもビルドされるため、このエラーを Visual Studio の出力ウィンドウで見ることができます。(その際、プロジェクトのプロパティページを開き、「構成プロパティ/HLSL コンパイラ/全般」の、「シェーダーの種類」を「エフェクト (/fx)」に、「シェーダーモデル」を「Shader Model 4 (/4_0)」に変更してください。)

以下に、エラーを直したものを置きます。struct PS_INPUTの定義の最後の;の書き忘れと、colorと書くべきところがcolになっていました。

struct VS_INPUT { float3 position : POSITION_IN; float3 color : COLOR; }; struct PS_INPUT { float4 position : SV_POSITION; float3 color : COLOR; }; PS_INPUT VS(VS_INPUT In) { PS_INPUT Out; Out.position = float4(In.position, 1.0f); Out.color = In.color; return Out; } float4 PS(PS_INPUT In) : SV_Target { return float4(In.color, 1.0f); } // Technique Definition technique10 SimpleRender { pass P0 { SetVertexShader(CompileShader(vs_4_0, VS())); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0, PS())); } }

投稿2019/05/18 11:25

alphya

総合スコア124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GuielNo4

2019/05/18 11:51

ご指摘いただいた箇所の修正でエラーが発生しなくなりました。 アドバイスありがとうございました。 エラー内容をすぐ確認できるほうがよいので、2019 に移行したいと思います。ありがとうございました。
alphya

2019/05/18 11:55

いえいえ、お役に立てて幸いです。 エラーの内容は、2015 でも確認できます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問