Главная страница
    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.043 c
15-1171987815
Andy BitOff
2007-02-20 19:10
2007.03.18
Вот вам последствия прецедента


15-1172240850
Steep
2007-02-23 17:27
2007.03.18
dll


15-1172095241
ProgRAMmer Dimonych
2007-02-22 01:00
2007.03.18
Извините за наглость, но


2-1172494560
Магедон
2007-02-26 15:56
2007.03.18
Как изменить иконку на ассоциированном расширении?


8-1152792575
Leshka_t
2006-07-13 16:09
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский