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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2012, 12:04   #11
sarkolk
Новичок
Джуниор
 
Регистрация: 20.08.2012
Сообщений: 15
По умолчанию

Он состоит из двух файлов
1. dxfunc.h

#ifndef _DXFUNC_H_
#define _DXFUNC_H_

#include "d3d9.h"
#include "d3dx9.h"

// Функция инициализации Direct3D
HRESULT DX3DInit (IDirect3D9 **ppiD3D9,
IDirect3DDevice9 **ppiD3DDevice9,
HWND hWnd,
DWORD iWight,
DWORD iHeight,
BOOL bFullScreen
);
#endif

2. dxfunc.cpp

#include "dxfunc.h"

// Функция инициализации Direct3D
HRESULT DX3DInit (IDirect3D9 **ppiD3D9, IDirect3DDevice9 **ppiD3DDevice9, HWND hWnd, DWORD iWight, DWORD iHeight, BOOL bFullScreen)

{

// Инициализация
if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
return E_FAIL;

//Заполняем основные параметры
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));

d3dpp.BackBufferWidth = iWight;
d3dpp.BackBufferHeight = iHeight;

// Запрос на отображение в полноэкранном режиме
int iRes;
if (!bFullScreen)
iRes = MessageBox(hWnd, "Use fullscreen mode?",
"Screen", MB_YESNO | MB_ICONQUESTION);
else
iRes = IDYES;

if(iRes == IDYES)
{
//////////////////////////////////
// Полноэкранный режим
//////////////////////////////////
// Установка параметров полноэкранного режима
d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;
d3dpp.Windowed = FALSE;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
}
else
{
//////////////////////////////////
// Оконный режим
//////////////////////////////////
RECT wndRect;
RECT clientRect;
GetWindowRect(hWnd, &wndRect);
GetClientRect(hWnd, &clientRect);

int iWinWight = iWight + (wndRect.right - wndRect.left) -
(clientRect.right - clientRect.left);
int iWinHeight = iHeight + (wndRect.bottom - wndRect.top) -
(clientRect.bottom - clientRect.top);

MoveWindow(hWnd, wndRect.left, wndRect.top,
iWinWight, iWinHeight, TRUE);

// Получить формат пиксела
D3DDISPLAYMODE d3ddm;
(*ppiD3D9) -> GetAdapterDisplayMode(D3DADAPTER_DE FAULT, &d3ddm);

// Установка параметров
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = TRUE;
}

// Создать 3D - устройство
DWORD Flags = D3DCREATE_MIXED_VERTEXPROCESSING |
D3DCREATE_MULTITHREADED;

HRESULT hRes;
if (FAILED(hRes = (*ppiD3D9) -> CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, hWnd, Flags,
&d3dpp, ppiD3DDevice9)))
return hRes;

// Установить перспективу
float Aspect = (float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight;

D3DXMATRIX matProjection;
D3DXMatrixPerspectiveFovLH(&matProj ection, D3DX_PI / 4.0f,
Aspect, 10.0f, 1000.0f);
(*ppiD3DDevice9) -> SetTransform(D3DTS_PROJECTION, &matProjection);

return S_OK;

}
sarkolk вне форума Ответить с цитированием
Старый 21.08.2012, 12:08   #12
sarkolk
Новичок
Джуниор
 
Регистрация: 20.08.2012
Сообщений: 15
По умолчанию

Этот пример без буквы L , перед текстом в скобках,но если добавить букву L то начинаются ошибки которые я написал в первом посте
sarkolk вне форума Ответить с цитированием
Старый 21.08.2012, 12:20   #13
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не играет никакой роли.
Кончено не играет никакой роли... В одном случае вызывается main, в другом случае WinMain... а так без разницы. Опа, в ошибках как раз WinMain не находится... с чего бы это...
waleri вне форума Ответить с цитированием
Старый 21.08.2012, 12:20   #14
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну и где в вашем примере функция WinMain?
waleri вне форума Ответить с цитированием
Старый 21.08.2012, 12:35   #15
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
В одном случае вызывается main, в другом случае WinMain... а так без разницы.
Не велика беда...

Цитата:
Опа, в ошибках как раз WinMain не находится...
Опа, а проблема оказалась не в типе проекта как думали, а в том, что у ТС вообще нет главной функции.

Проблема с ВинМейн известна, а вот почему не нашли либы от директа интересней.
p51x вне форума Ответить с цитированием
Старый 21.08.2012, 13:42   #16
sarkolk
Новичок
Джуниор
 
Регистрация: 20.08.2012
Сообщений: 15
По умолчанию

Создаю WinMain пишет что он перегружен,почему вы не нашли либы от директа? они в файле dxfunc.h написаны
sarkolk вне форума Ответить с цитированием
Старый 21.08.2012, 14:03   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

либки там не прописаны.
не путайте инклюды и lib файлы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.08.2012, 14:19   #18
sarkolk
Новичок
Джуниор
 
Регистрация: 20.08.2012
Сообщений: 15
По умолчанию

dxfunc.h

#ifndef _DXFUNC_H_
#define _DXFUNC_H_

#pragma comment (lib, "d3dx9.lib")
#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "dinput8.lib")
#pragma comment (lib, "DXGuid.lib")


#include <d3dx9core.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <d3dx9tex.h>



// Функция инициализации Direct3D
HRESULT DX3DInit (IDirect3D9 **ppiD3D9,
IDirect3DDevice9 **ppiD3DDevice9,
HWND hWnd,
DWORD iWight,
DWORD iHeight,
BOOL bFullScreen
);
#endif

dxfunc.cpp

#include "dxfunc.h"

int WINAPI WinMain( HINSTANCE hInstance, // дескриптор текущего экземпляра окна
HINSTANCE hPrevInstance,// дескриптор предыдущего экземпляра окна
LPSTR lpCmdLine, // указатель на командную строку
int nCmdShow // показывает состояние окна
);

// Функция инициализации Direct3D
HRESULT DX3DInit (IDirect3D9 **ppiD3D9, IDirect3DDevice9 **ppiD3DDevice9, HWND hWnd, DWORD iWight, DWORD iHeight, BOOL bFullScreen)

{

// Инициализация
if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
return E_FAIL;

//Заполняем основные параметры
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));

d3dpp.BackBufferWidth = iWight;
d3dpp.BackBufferHeight = iHeight;

// Запрос на отображение в полноэкранном режиме
int iRes;
if (!bFullScreen)
iRes = MessageBox(hWnd, L"Use fullscreen mode?",
L"Screen", MB_YESNO | MB_ICONQUESTION);
else
iRes = IDYES;

if(iRes == IDYES)
{
//////////////////////////////////
// Полноэкранный режим
//////////////////////////////////
// Установка параметров полноэкранного режима
d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;
d3dpp.Windowed = FALSE;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
}
else
{
//////////////////////////////////
// Оконный режим
//////////////////////////////////
RECT wndRect;
RECT clientRect;
GetWindowRect(hWnd, &wndRect);
GetClientRect(hWnd, &clientRect);

int iWinWight = iWight + (wndRect.right - wndRect.left) -
(clientRect.right - clientRect.left);
int iWinHeight = iHeight + (wndRect.bottom - wndRect.top) -
(clientRect.bottom - clientRect.top);

MoveWindow(hWnd, wndRect.left, wndRect.top,
iWinWight, iWinHeight, TRUE);

// Получить формат пиксела
D3DDISPLAYMODE d3ddm;
(*ppiD3D9) -> GetAdapterDisplayMode(D3DADAPTER_DE FAULT, &d3ddm);

// Установка параметров
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = TRUE;
}

// Создать 3D - устройство
DWORD Flags = D3DCREATE_MIXED_VERTEXPROCESSING |
D3DCREATE_MULTITHREADED;

HRESULT hRes;
if (FAILED(hRes = (*ppiD3D9) -> CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, hWnd, Flags,
&d3dpp, ppiD3DDevice9)))
return hRes;

// Установить перспективу
float Aspect = (float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight;

D3DXMATRIX matProjection;
D3DXMatrixPerspectiveFovLH(&matProj ection, D3DX_PI / 4.0f,
Aspect, 10.0f, 1000.0f);
(*ppiD3DDevice9) -> SetTransform(D3DTS_PROJECTION, &matProjection);

return S_OK;

}
sarkolk вне форума Ответить с цитированием
Старый 21.08.2012, 14:20   #19
sarkolk
Новичок
Джуниор
 
Регистрация: 20.08.2012
Сообщений: 15
По умолчанию

всё равно ничего не работает
sarkolk вне форума Ответить с цитированием
Старый 21.08.2012, 14:35   #20
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Прототип WinMain вы указали, где сама функция?
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибки при компиляции программ на с++/с Эдуард на связи Помощь студентам 1 05.04.2012 10:30
Синтаксические ошибки при компиляции Ker_33rus Visual C++ 2 07.11.2011 13:24
Ошибки при компиляции Tinny Общие вопросы C/C++ 7 30.06.2011 10:00
Ошибки при компиляции vader2 Общие вопросы Delphi 11 29.09.2010 16:33
ошибки при компиляции |{ot Общие вопросы Delphi 14 02.08.2008 01:20