Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi中的CreateVertexDeclaration错误_Delphi_Directx_Directx 9 - Fatal编程技术网

Delphi中的CreateVertexDeclaration错误

Delphi中的CreateVertexDeclaration错误,delphi,directx,directx-9,Delphi,Directx,Directx 9,我有一些简单的声明: uses ... Winapi.Direct3D9, Winapi.DXTypes, Winapi.D3DX9, var g_pVertexDeclaration: IDirect3DVertexDeclaration9 = nil; const decl: array [0 .. 4] of TD3DVertexElement9 = ( (Stream: 0; Offset: 0; _Type: D3DDECLTYPE_FLOAT3; Method:

我有一些简单的声明:

uses ...
  Winapi.Direct3D9, Winapi.DXTypes, Winapi.D3DX9,

var
  g_pVertexDeclaration: IDirect3DVertexDeclaration9 = nil;
const
  decl: array [0 .. 4] of TD3DVertexElement9 = (
    (Stream: 0; Offset: 0; _Type: D3DDECLTYPE_FLOAT3; Method: D3DDECLMETHOD_DEFAULT;
    Usage: D3DDECLUSAGE_POSITION; UsageIndex: 0),
    (Stream: 0; Offset: 3 * sizeof(single); _Type: D3DDECLTYPE_FLOAT3; Method: D3DDECLMETHOD_DEFAULT;
    Usage: D3DDECLUSAGE_NORMAL; UsageIndex: 0),
    (Stream: 0; Offset: 6 * sizeof(single); _Type: D3DDECLTYPE_FLOAT2; Method: D3DDECLMETHOD_DEFAULT;
    Usage: D3DDECLUSAGE_TEXCOORD; UsageIndex: 0),
    (Stream: 0; Offset: 8 * sizeof(single); _Type: D3DDECLTYPE_FLOAT2; Method: D3DDECLMETHOD_DEFAULT;
    Usage: D3DDECLUSAGE_TEXCOORD; UsageIndex: 0),
    (Stream: $FF; Offset: 0; _Type: D3DDECLTYPE_UNUSED; Method: TD3DDeclMethod(0);
    Usage: TD3DDeclUsage(0); UsageIndex: 0) //({D3DDECL_END})
    );
用于记录错误的函数

function CheckDxError(e: dword): boolean;
begin
  if Failed(e) then begin
    raise Exception.Create(format('dx error %d: %s, %s', [(e shr 16) and $7FFF, DXGetErrorString9(e),
      DXGetErrorDescription9(e)]));
    exit(false);
  end;
  result := true;
end;
我有
dx错误0:E_失败,在

  CheckDxError(m_pd3dDevice.CreateVertexDeclaration(@decl, g_pVertexDeclaration));
DirectX 9、设备等在调用之前初始化(代码在没有着色器的情况下工作,我试图研究着色器),使用decl数组(只有第一个位置和D3DDECL_结尾)时,代码中没有错误。但是我的顶点着色器包含4个输入值,使用DirectX SDK中的fxc.exe编译时没有错误

struct VSInput
{
    float3 Pos : POSITION;
    float3 Normal : NORMAL;
    float2 TexcoordUV : TEXCOORD0;
    float2 TexcoordST : TEXCOORD1;
};

发生此错误的原因以及如何避免?

您的第二个
TEXCOORD
需要将
UsageIndex
设置为
1

的文档包含以下内容:

D3DDECLUSAGE_TEXCOORD

纹理坐标数据。使用D3DDECLUSAGE_TEXCOORD,n指定 固定函数顶点处理和像素中的纹理坐标 ps_3_0之前的着色器。这些可用于传递用户定义的数据

n
的值是使用索引,如果您希望有多个相同使用的顶点元素,则需要为它们提供不同的使用索引。

再次感谢:)DirectX文档像马赛克一样分开,出现了一个未确定的错误
根本没有帮助。