Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация D3D с форматом пикселя A8R8G8B8, Почему-то не проходит нормально 
V
    Опции темы
Beltar
Дата 27.12.2006, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: нет
Всего: 7



Я полный новичек в DirectX. Пробую инициализировать такой функцией.

Код

function DXInit(var D3D:IDirect3D9;var Device:IDirect3DDevice9;Wnd:THandle;
  Width,Height:Integer;FullScreen:Boolean):Boolean;
var
  D3DPP:TD3DPresentParameters;
  WndRect,ClientRect:TRect;
  Flags:DWord;
  hRes:HResult;
  D3DDM:TD3DDisplayMode;
  Aspect:Double;
  MatProjection:TD3DMatrix;
begin
Result:=false;
D3D:=Direct3DCreate9(D3D_SDK_Version);
if D3D=nil then exit;
ZeroMemory(@D3DPP,SizeOf(D3DPP));
D3DPP.BackBufferWidth:=Width;
D3DPP.BackBufferHeight:=Height;
if FullScreen then
  begin
  //Полноэкранный режим
  D3DPP.BackBufferFormat:=D3DFMT_R5G6B5;//Хочу сюда A8R8G8B8
  D3DPP.SwapEffect:=D3DSwapEffect_Flip;
  D3DPP.Windowed:=false;
  D3DPP.FullScreen_RefreshRateInHz:=D3DPresent_Rate_Default;
  D3DPP.PresentationInterval:=D3DPresent_Interval_Default;
  end
              else
  begin
  //Оконный режим
  //Skip сюда не заходит
  end;

Flags:=D3DCreate_Mixed_VertexProcessing;

//Создание устройства

hRes:=D3D.CreateDevice(D3DAdapter_Default,D3DDevType_HAL,Wnd,Flags,@D3DPP,Device);
if Failed(hRes) then exit;
Aspect:=D3DPP.BackBufferWidth/D3DPP.BackBufferHeight;
D3DXMatrixPerspectiveFovLH(&MatProjection,D3DX_PI/4,Aspect,0.1,1000);
Device.SetTransform(D3DTS_Projection,&MatProjection);
//Отключение освещения
Device.SetRenderState(D3DRS_Lighting,DWord(False));
Result:=true;

end;



На моем Radeon 9600 инициализация в 16 бит проходит нормально. Хочу инициализировать в 32 бита, и в итоге получаю, что уголок программы отрисован на таскбаре и все висит, через 3 веселых клавиши привожу систему в чувство и пробую перекл на свою прогу, но вижу только форму с крестиком на все заказанные 1024х768. Что самое интересное интересно в 800х600 инициализируется с любым пиксельным форматом.
VCL никак не используется, создание окна на WinAPI.

Кто виноват и что делать?

Это сообщение отредактировал(а) Beltar - 27.12.2006, 00:21


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
arilou
Дата 27.12.2006, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Beltar, видеопамяти не хватает?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Bitter
Дата 27.12.2006, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



Я тут попробовал... Инициализирую 8-й DX: во всех режимах работает ок. Кое что подправил, так как 8-й чуть по другому хавает параметры. Разрешение рабочего стола 1024х768х32х75.

Код

function DXInit(var D3D:IDirect3D8;var Device:IDirect3DDevice8;Wnd:THandle;
  Width,Height:Integer;FullScreen:Boolean):Boolean; // В заголовке изменил 9 на 8
var
  D3DPP:TD3DPresent_Parameters;  // Тут подправил
  WndRect,ClientRect:TRect;
  Flags:DWord;
  hRes:HResult;
  D3DDM:TD3DDisplayMode;
  Aspect:Double;
  MatProjection:TD3DMatrix;
begin
Result:=false;
D3D:=Direct3DCreate8(D3D_SDK_Version); // 9 на 8
if D3D=nil then exit;
ZeroMemory(@D3DPP,SizeOf(D3DPP));
D3DPP.BackBufferWidth:=Width;
D3DPP.BackBufferHeight:=Height;
if FullScreen then
  begin
  D3DPP.BackBufferFormat:=D3DFMT_A8R8G8B8;
  D3DPP.SwapEffect:=D3DSwapEffect_Flip;
  D3DPP.Windowed:=false;
  D3DPP.FullScreen_RefreshRateInHz:=D3DPresent_Rate_Default;
  //D3DPP.PresentationInterval:=D3DPresent_Interval_Default;
  end
              else
  begin
  end;

Flags:=D3DCreate_Mixed_VertexProcessing;

hRes:=D3D.CreateDevice(D3DAdapter_Default,D3DDevType_HAL,Wnd,Flags,D3DPP,Device);
if Failed(hRes) then exit;
Aspect:=D3DPP.BackBufferWidth/D3DPP.BackBufferHeight;
//D3DXMatrixPerspectiveFovLH(&MatProjection,D3DX_PI/4,Aspect,0.1,1000);
//Device.SetTransform(D3DTS_Projection,&MatProjection);

Device.SetRenderState(D3DRS_Lighting,DWord(False));
Result:=true;
end;



Я пользовался VCL формой, но с 9-м у меня тоже глюки. Не зависает, но сквозь окно мигают все значки на раб. столе. Попробуй 8-й.
PM MAIL ICQ Skype   Вверх
Beltar
Дата 27.12.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: нет
Всего: 7



Цитата

 видеопамяти не хватает


Ну, чтобы на 128-метровой карте видеопамять кончилась еще на стадии инициализации еще надо постараться.

Цитата

Кое что подправил, так как 8-й чуть по другому хавает параметры.


Это-то как раз и плохо, что в разных версия у функций разные списки параметров. Сильно затрудняет жизнь, если юзать что-то старое. smile


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
arilou
Дата 29.12.2006, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Цитата(Beltar @  27.12.2006,  20:25 Найти цитируемый пост)
Ну, чтобы на 128-метровой карте видеопамять кончилась еще на стадии инициализации еще надо постараться.

Уж очень по симптомам было похоже


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Beltar
Дата 1.1.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: нет
Всего: 7



Заменил в прорисовке
D3DDevice.Clear(0,nil,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,100),1.0,0);
на
D3DDevice.Clear(0,nil,D3DCLEAR_TARGET,D3DCOLOR_ARGB($FF,0,0,100),1.0,0);

Виснуть перестало, правда это никак не объясняет почему в 800х600 не подвисало.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.