Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2009, 21:27   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Проблема с DirectX

В общем что случилось: я начал изучать DirectX под Delphi и установил все dll'ки и библиотеки. Все работало нормально. И вот, в один день, перестали запускаться некоторые программы (ни скомпилированные, ни из исходника). Обнаружил, что все проблемные проги имели в коде функцию LoadMesh из библиотеки ddfunc. Там используется X'овская функция D3DXLoadMeshFromX из d3dx9_27.dll. Хотя эта библиотека у меня есть, но раз и .exe-файлы не запускаются, то дело в ней? Вот на всякий случай коды этих функций:
Код:
d3dx9MicrosoftDLL = 'd3dx9_27.dll';
d3dx9dll = d3dx9MicrosoftDLL;
d3dx9meshDLL   = d3dx9dll;

function D3DXLoadMeshFromX(
  pFilename: PChar;
  Options: DWord;
  pD3DDevice: IDirect3DDevice9;
  ppAdjacency, ppMaterials, ppEffectInstances: PID3DXBuffer;
  pNumMaterials: PDWORD;
  out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadMeshFromXA';
{$EXTERNALSYM D3DXLoadMeshFromX}

function LoadMesh(filename:String;
    ppiD3DDevice9:IDirect3DDevice9;
    var ppMesh:ID3DXMesh;
    var pMeshTextures: PAIDirect3DTexture9;
    texturefilename: String;
    var pMeshMaterials: PAD3DMATERIAL9):DWORD;
var
 pD3DXMtrlBuffer: ID3DXBUFFER;
 dwNumMaterials: DWORD;
 d3dxMaterials: PAD3DXMATERIAL;
 i:Integer;
begin
 D3DXLoadMeshFromX(PWChar(filename), D3DXMESH_SYSTEMMEM, ppiD3DDevice9,
       nil, @pD3DXMtrlBuffer, nil, @dwNumMaterials, ppMesh);

 d3dxMaterials := pD3DXMtrlBuffer.GetBufferPointer();

 // Инициализируем материалы и текстуры
 GetMem(pMeshMaterials, SizeOf(TD3DMATERIAL9)*dwNumMaterials);
 GetMem(pMeshTextures, SizeOf(IDIRECT3DTEXTURE9)*dwNumMaterials);

 for i:=0 to dwNumMaterials-1 do
  begin
   // Копируем материал
   pMeshMaterials[i] := d3dxMaterials[i].MatD3D;

  // Создаем текстуру
   if (FAILED(D3DXCreateTextureFromFile(ppiD3DDevice9,
         PWChar(d3dxMaterials[i].pTextureFilename), pMeshTextures[i]))=true) then
    if (FAILED(D3DXCreateTextureFromFile(ppiD3DDevice9,
             PWChar(texturefilename), pMeshTextures[i]))) then
     pMeshTextures[i] := nil;
  end;
 Result:=dwNumMaterials;
end;
Может библиотека как-то не зарегистрирована, или что то другое??
Помогите, а то я только заинтересовался 3D-графикой
k1r1ch вне форума Ответить с цитированием
Старый 18.09.2009, 13:18   #2
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Восклицание

Если что, вот скрин с ошибкой, которая возникает при запуске проги:

А вот моя версия dll-файла:
[url=http://dl.getdropbox.com/u/1278190/d3dx9_27.zip]
Помогите!

Последний раз редактировалось k1r1ch; 18.09.2009 в 13:21.
k1r1ch вне форума Ответить с цитированием
Старый 18.09.2009, 13:20   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Игры ставил?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 18.09.2009, 13:22   #4
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Нет! Просто вдруг в один день перестали проги запускаться(
k1r1ch вне форума Ответить с цитированием
Старый 18.09.2009, 13:28   #5
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Восклицание

Опа! Попробовал ставить точки прерывания, оказалось что ошибка на строке:
Код:
var 
 pD3DXMtrlBuffer: ID3DXBUFFER;
 d3dxMaterials: PAD3DXMATERIAL;

 d3dxMaterials := pD3DXMtrlBuffer.GetBufferPointer();
Что тут неправильного? Ведь работало же!

P.S.: Ну раз никто не знает, сам буду разбираться

Последний раз редактировалось k1r1ch; 18.09.2009 в 16:47.
k1r1ch вне форума Ответить с цитированием
Старый 18.09.2009, 17:41   #6
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Счастье

Все, сам разобрался! Просто надо было использовать D3DXLoadMeshFromXW, которая работает с WideChar!
k1r1ch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DirectX и С++ mrandrey Общие вопросы C/C++ 2 24.08.2009 14:46
С++ и DirectX Элодар Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 22.02.2009 00:23
DirectX Doom4eg Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.08.2008 13:08
DirectX на masm32 Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 10.03.2008 23:05
Компонент DirectX masterprog Компоненты Delphi 2 29.12.2007 11:54