Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Вниз

Проблема с Direct3D приложением   Найти похожие ветки 

 
Verstak ©   (2006-07-06 23:50) [0]

Набираю примитивнейший пример из книги DirectX 9.The Definitive Guide. и возникает исключение EAccessViolation. Скорее всего из-за строки D3DDevice.UpdateSurface(Surface,nil,BackBufferSurface,nil); Это же, если мне не изменяет память, один из примеров в папке Tutorials  в DirectX SDK 9. Я просто перевел с С на Delphi. Использую перевод SDK  с http://www.clootie.ru/. По идее ошибка Dereferences a nil (Delphi) or NULL (C++) pointer, но где?

unit Unit1;

interface

uses
 Windows, Messages, Winerror, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Direct3D9, D3DX9;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   function InitD3D(Window : HWND): HRESULT;
   procedure Render;
   procedure Cleanup;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 OurDirect3Dobject : IDirect3D9 = nil;
 D3DDevice : IDirect3DDevice9 = nil;
 Surface : IDirect3DSurface9 = nil;
 BackBufferSurface : IDirect3DSurface9 = nil;

implementation

{$R *.dfm}
function TForm1.InitD3D(Window : HWND):HRESULT;
var
 DeviceParameters : D3DPRESENT_PARAMETERS;
begin
 OurDirect3DObject:=nil;
 OurDirect3DObject:=Direct3DCreate9(D3D_SDK_VERSION);

 if (OurDirect3DObject=nil) then Result:=E_FAIL;

 ZeroMemory(@DeviceParameters,SizeOf(DeviceParameters));

 DeviceParameters.Windowed:=true;
 DeviceParameters.SwapEffect:=D3DSWAPEFFECT_DISCARD;
 DeviceParameters.BackBufferFormat:=D3DFMT_UNKNOWN;
 DeviceParameters.EnableAutoDepthStencil:=true;
 DeviceParameters.AutoDepthStencilFormat:=D3DFMT_D16;

 if (Failed(OurDirect3DObject.CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,Window, D3DCREATE_SOFTWARE_VERTEXPROCESSING,@DeviceParameters,D3DDevice))) then Result:=E_FAIL;

 Result:=S_OK;

end;

procedure TForm1.Cleanup;
begin
 if(Surface <> nil) then Surface:=nil;
 if(BackBufferSurface <> nil) then Surface:=nil;
 if(D3DDevice <> nil) then D3DDevice:=nil;
 if(OurDirect3DObject <> nil) then OurDirect3DObject:=nil;
end;

procedure TForm1.Render;
var
 Info : D3DXIMAGE_INFO;
begin
 if  D3DDevice=nil then Exit;
 D3DDevice.Clear(0,nil,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,127,0),1.0,0);

 D3DXGetImageInfoFromFile("dx5_logo.bmp",Info);
 D3DDevice.CreateOffscreenPlainSurface(Info.Width,Info.Height,Info.Format,D3DPOOL _SYSTEMMEM,Surface,nil);
 D3DXLoadSurfaceFromFile(Surface,nil,nil,"dx5_logo.bmp",nil,D3DX_FILTER_NONE,0,ni l);
 D3DDevice.GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,BackBufferSurface);

 D3DDevice.BeginScene;
 // place rendering code here

 D3DDevice.UpdateSurface(Surface,nil,BackBufferSurface,nil);
 D3DDevice.EndScene;

 D3DDevice.Present(nil,nil,0,nil);
end;

procedure TForm1.FormCreate(Sender: TObject);

begin
 if Failed(Form1.InitD3D(Form1.Handle)) then Application.Terminate;

end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 Render;
 ValidateRect(Form1.Handle,nil);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Form1.Cleanup;
end;

end.


 
Verstak ©   (2006-07-07 18:51) [1]

Проблема в строке D3DDevice.CreateOffscreenPlainSurface(Info.Width,Info.Height,Info.Format,D3DPOOL  _SYSTEMMEM,Surface,nil);

Surface после него равна nil, а DXGetErrorString9() выдает
D3DERR_INVALIDCALL
The method call is invalid. For example, a method"s parameter may not be a valid pointer.- что и следовало ожидать. Но почему?


 
Cash ©   (2006-07-16 22:46) [2]

Чё-ет вы, товарищь, не туда забрались... :\
Info.Format чему равен?
Зачем тебе D3DPOOL_SYSTEMMEM? Тыж его толком и не поюзаешь!

Invalid Call у тебя явно из за Info.Format вылез.
И, так, на будущее, в справне по DirectX 9.0b сказано, что Managed и
System пулы этим вызовом не поддерживаются. Надо юзать Default пул и
пересоздавать его после каждой потери девайса.



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.041 c
8-1152770379
Officeman
2006-07-13 09:59
2007.03.18
gif в bmp (ищу утилиту)


15-1172065846
Pazitron_Brain
2007-02-21 16:50
2007.03.18
Мать


1-1169383647
raqy.style
2007-01-21 15:47
2007.03.18
Word и Delphi


15-1172127207
DrDe
2007-02-22 09:53
2007.03.18
3GP


15-1171808273
Зм1й
2007-02-18 17:17
2007.03.18
Древовидный стиль кода





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский