1
我遇到的問題是從directx加載我的effect.fx。當我進入我的應用程序時,我的ID3D10Effect * m_pDefaultEffect;指針保持空白。地址保持在0x000000處無法檢索effect.fx文件
下面是我的代碼
#pragma once
#include "stdafx.h"
#include "resource.h"
#include "d3d10.h"
#include "d3dx10.h"
#include "dinput.h"
#define MAX_LOADSTRING 100
class RenderEngine {
protected:
RECT m_screenRect;
//direct3d Members
ID3D10Device *m_pDevice; // The IDirect3DDevice10
// interface
ID3D10Texture2D *m_pBackBuffer; // Pointer to the back buffer
ID3D10RenderTargetView *m_pRenderTargetView; // Pointer to render target view
IDXGISwapChain *m_pSwapChain; // Pointer to the swap chain
RECT m_rcScreenRect; // The dimensions of the screen
ID3D10Texture2D *m_pDepthStencilBuffer;
ID3D10DepthStencilState *m_pDepthStencilState;
ID3D10DepthStencilView *m_pDepthStencilView;
//transformation matrixs
D3DXMATRIX g_mtxWorld;
D3DXMATRIX g_mtxView;
D3DXMATRIX g_mtxProj;
//Effect members
ID3D10Effect *m_pDefaultEffect;
ID3D10EffectTechnique *m_pDefaultTechnique;
ID3DX10Font *m_pFont; // The font used for rendering text
// Sprites used to hold font characters
ID3DX10Sprite *m_pFontSprite;
ATOM RegisterEngineClass();
void DoFrame(float);
bool LoadEffects();
public:
static HINSTANCE m_hInst;
HWND m_hWnd;
int m_nCmdShow;
TCHAR m_szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR m_szWindowClass[MAX_LOADSTRING]; // the main window class name
void DrawTextString(int x, int y, D3DXCOLOR color, const TCHAR *strOutput);
//static functions
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
bool InitWindow();
bool InitDirectX();
bool InitInstance();
int Run();
void ShutDown();
RenderEngine()
{
m_screenRect.right = 800;
m_screenRect.bottom = 600;
}
};
下面
是實現
bool RenderEngine::LoadEffects()
{
HRESULT hr;
ID3D10Blob *pErrors = 0;
// Create the default rendering effect
LPCWSTR effectFilename = L"effect.fx";
hr = D3DX10CreateEffectFromFile(effectFilename, NULL, NULL,
"fx_4_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, m_pDevice, NULL, NULL, &m_pDefaultEffect,
&pErrors, NULL);
if(pErrors)// at this point, m_pDefaultEffect is still empty but pErrors returns data which means there is
{//errors
return false; //ends here
}
//m_pDefaultTechnique = m_pDefaultEffect->GetTechniqueByName("DefaultTechnique");
return true;
}
我的DirectX設備不工作。 我effect.fx文件是在同一文件夾作爲我的解決方案文件(的.cpp文件和頭文件)
[編輯]
我試圖把effect.fx在與可執行文件相同的文件夾
我一直在搞亂一些其他的代碼,我有工作。我不知道這一點,但似乎.fx文件的佈局可以影響我是否成功上傳文件。所以,我提供我的效果代碼以及
matrix g_mtxWorld;
matrix g_mtxView;
matrix g_mtxProj;
#define MAX_LIGHTS 10 // Ensure this is the same as the C++ value
int4 g_viLightStatus;
float4 g_vLightColors[MAX_LIGHTS];
float4 g_vLightDirections[MAX_LIGHTS];
struct VS_INPUT
{
float3 vPosition : POSITION;
float3 vNormal : NORMAL;
float4 vColor : COLOR0;
float2 vTexCoords : TEXCOORD;
};
struct VS_OUTPUT
{
float4 vPosition : SV_POSITION;
float3 vNormal : NORMAL;
float4 vColor : COLOR0;
};
VS_OUTPUT DefaultVS(VS_INPUT dataIn)
{
VS_OUTPUT result;
float4 vPos = float4(dataIn.vPosition, 1.0f);
float4 vFinalPos = mul(vPos, g_mtxWorld);
vFinalPos = mul(vFinalPos, g_mtxView);
vFinalPos = mul(vFinalPos, g_mtxProj);
result.vPosition = vFinalPos;
result.vNormal = float3(0,0,0);
result.vColor = float4(1,0,0,0);
return result;
}
float4 DefaultPS(VS_OUTPUT dataIn) : SV_Target
{
return dataIn.vColor;
}
technique10 DefaultTechnique
{
pass Pass0
{
SetGeometryShader(NULL);
SetVertexShader(CompileShader(vs_4_0, VS()));
SetPixelShader(CompileShader(ps_4_0, PS()));
}
}
Effect.fx與二進制文件位於同一文件夾中嗎? – 2010-05-23 23:51:14
如果你的意思是exe文件。不,這不對。 – numerical25 2010-05-24 00:01:08
您是否在調用「D3DX10CreateEffectFromFile」後檢查了「hr」的值?它給出的錯誤代碼是什麼? – Jujjuru 2010-05-24 00:44:58