initialisation of direct3d and glew are in their respective engine, now. minor formatting
SVN revision: 34913
This commit is contained in:
parent
3e4997c06a
commit
8124d72e75
|
@ -7,101 +7,6 @@
|
||||||
static HWND window;
|
static HWND window;
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
|
|
||||||
static int
|
|
||||||
_direct3d_init (HWND window,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
LPDIRECT3D9 *object,
|
|
||||||
LPDIRECT3DDEVICE9 *device,
|
|
||||||
LPD3DXSPRITE *sprite,
|
|
||||||
LPDIRECT3DTEXTURE9 *texture,
|
|
||||||
int *depth)
|
|
||||||
{
|
|
||||||
D3DPRESENT_PARAMETERS pp;
|
|
||||||
D3DDISPLAYMODE dm;
|
|
||||||
D3DSURFACE_DESC sd;
|
|
||||||
D3DCAPS9 caps;
|
|
||||||
DWORD flag;
|
|
||||||
|
|
||||||
*object = Direct3DCreate9 (D3D_SDK_VERSION);
|
|
||||||
if (!*object)
|
|
||||||
goto no_object;
|
|
||||||
|
|
||||||
if (FAILED ((*object)->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, &dm)))
|
|
||||||
goto no_device;
|
|
||||||
|
|
||||||
if (FAILED ((*object)->GetDeviceCaps (D3DADAPTER_DEFAULT,
|
|
||||||
D3DDEVTYPE_HAL,
|
|
||||||
&caps)))
|
|
||||||
goto no_device;
|
|
||||||
|
|
||||||
flag = (caps.VertexProcessingCaps != 0)
|
|
||||||
? D3DCREATE_HARDWARE_VERTEXPROCESSING
|
|
||||||
: D3DCREATE_SOFTWARE_VERTEXPROCESSING;
|
|
||||||
|
|
||||||
ZeroMemory(&pp, sizeof(pp));
|
|
||||||
pp.BackBufferWidth = width;
|
|
||||||
pp.BackBufferHeight = height;
|
|
||||||
pp.BackBufferFormat = dm.Format;
|
|
||||||
pp.BackBufferCount = 1;
|
|
||||||
pp.MultiSampleType = D3DMULTISAMPLE_NONE;
|
|
||||||
pp.MultiSampleQuality = 0;
|
|
||||||
pp.SwapEffect = D3DSWAPEFFECT_FLIP;
|
|
||||||
pp.hDeviceWindow = window;
|
|
||||||
pp.Windowed = TRUE;
|
|
||||||
pp.EnableAutoDepthStencil = FALSE;
|
|
||||||
pp.FullScreen_RefreshRateInHz = 0;
|
|
||||||
pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
|
|
||||||
|
|
||||||
if (FAILED((*object)->CreateDevice (D3DADAPTER_DEFAULT,
|
|
||||||
D3DDEVTYPE_HAL,
|
|
||||||
window,
|
|
||||||
flag,
|
|
||||||
&pp,
|
|
||||||
device)))
|
|
||||||
goto no_device;
|
|
||||||
|
|
||||||
if (FAILED (D3DXCreateSprite (*device, sprite)))
|
|
||||||
goto no_sprite;
|
|
||||||
|
|
||||||
if (FAILED ((*device)->CreateTexture (width, height, 1,
|
|
||||||
D3DUSAGE_DYNAMIC,
|
|
||||||
dm.Format,
|
|
||||||
D3DPOOL_DEFAULT,
|
|
||||||
texture, NULL)))
|
|
||||||
goto no_texture;
|
|
||||||
|
|
||||||
if (FAILED ((*texture)->GetLevelDesc (0, &sd)))
|
|
||||||
goto no_level_desc;
|
|
||||||
|
|
||||||
switch (sd.Format) {
|
|
||||||
case D3DFMT_A8R8G8B8:
|
|
||||||
case D3DFMT_X8R8G8B8:
|
|
||||||
*depth = 32;
|
|
||||||
break;
|
|
||||||
case D3DFMT_R5G6B5:
|
|
||||||
*depth = 16;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto no_level_desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
no_level_desc:
|
|
||||||
(*texture)->Release ();
|
|
||||||
no_texture:
|
|
||||||
(*sprite)->Release ();
|
|
||||||
no_sprite:
|
|
||||||
(*device)->Release ();
|
|
||||||
no_device:
|
|
||||||
(*object)->Release ();
|
|
||||||
no_object:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static LRESULT CALLBACK
|
static LRESULT CALLBACK
|
||||||
MainWndProc(HWND hwnd,
|
MainWndProc(HWND hwnd,
|
||||||
UINT uMsg,
|
UINT uMsg,
|
||||||
|
@ -123,11 +28,11 @@ MainWndProc(HWND hwnd,
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
|
|
||||||
hdc = BeginPaint (window, &ps);
|
hdc = BeginPaint (window, &ps);
|
||||||
EndPaint(window, &ps);
|
|
||||||
evas_damage_rectangle_add(evas,
|
evas_damage_rectangle_add(evas,
|
||||||
ps.rcPaint.left, ps.rcPaint.top,
|
ps.rcPaint.left, ps.rcPaint.top,
|
||||||
ps.rcPaint.right - ps.rcPaint.left,
|
ps.rcPaint.right - ps.rcPaint.left,
|
||||||
ps.rcPaint.bottom - ps.rcPaint.top);
|
ps.rcPaint.bottom - ps.rcPaint.top);
|
||||||
|
EndPaint(window, &ps);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case WM_SIZING:
|
case WM_SIZING:
|
||||||
|
@ -265,12 +170,9 @@ engine_direct3d_args(int argc, char **argv)
|
||||||
{
|
{
|
||||||
WNDCLASS wc;
|
WNDCLASS wc;
|
||||||
RECT rect;
|
RECT rect;
|
||||||
HINSTANCE hinstance;
|
HINSTANCE instance;
|
||||||
|
HDC dc;
|
||||||
MSG msg;
|
MSG msg;
|
||||||
LPDIRECT3D9 object;
|
|
||||||
LPDIRECT3DDEVICE9 device;
|
|
||||||
LPD3DXSPRITE sprite;
|
|
||||||
LPDIRECT3DTEXTURE9 texture;
|
|
||||||
Evas_Engine_Info_Direct3D *einfo;
|
Evas_Engine_Info_Direct3D *einfo;
|
||||||
int depth;
|
int depth;
|
||||||
int i;
|
int i;
|
||||||
|
@ -286,20 +188,22 @@ engine_direct3d_args(int argc, char **argv)
|
||||||
}
|
}
|
||||||
if (!ok) return 0;
|
if (!ok) return 0;
|
||||||
|
|
||||||
hinstance = GetModuleHandle(0);
|
instance = GetModuleHandle(NULL);
|
||||||
|
if (!instance) return 0;
|
||||||
|
|
||||||
wc.style = 0;
|
wc.style = 0;
|
||||||
wc.lpfnWndProc = MainWndProc;
|
wc.lpfnWndProc = MainWndProc;
|
||||||
wc.cbClsExtra = 0;
|
wc.cbClsExtra = 0;
|
||||||
wc.cbWndExtra = 0;
|
wc.cbWndExtra = 0;
|
||||||
wc.hInstance = hinstance;
|
wc.hInstance = instance;
|
||||||
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
|
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
|
||||||
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
|
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
|
||||||
wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
|
wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
|
||||||
wc.lpszMenuName = NULL;
|
wc.lpszMenuName = NULL;
|
||||||
wc.lpszClassName = "Evas_Direct3D_Test";
|
wc.lpszClassName = "Evas_Direct3D_Test";
|
||||||
|
|
||||||
if(!RegisterClass(&wc)) return EXIT_FAILURE;
|
if(!RegisterClass(&wc))
|
||||||
|
goto free_library;
|
||||||
|
|
||||||
rect.left = 0;
|
rect.left = 0;
|
||||||
rect.top = 0;
|
rect.top = 0;
|
||||||
|
@ -313,39 +217,44 @@ engine_direct3d_args(int argc, char **argv)
|
||||||
WS_OVERLAPPEDWINDOW | WS_SIZEBOX,
|
WS_OVERLAPPEDWINDOW | WS_SIZEBOX,
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT,
|
CW_USEDEFAULT, CW_USEDEFAULT,
|
||||||
rect.right - rect.left, rect.bottom - rect.top,
|
rect.right - rect.left, rect.bottom - rect.top,
|
||||||
NULL, NULL, hinstance, NULL);
|
NULL, NULL, instance, NULL);
|
||||||
if (!window) return EXIT_FAILURE;
|
if (!window)
|
||||||
|
goto unregister_class;
|
||||||
|
|
||||||
if (!_direct3d_init(window, win_w, win_h,
|
dc = GetDC(NULL);
|
||||||
&object,
|
if (!dc)
|
||||||
&device,
|
goto destroy_window;
|
||||||
&sprite,
|
|
||||||
&texture,
|
depth = GetDeviceCaps(dc, BITSPIXEL);
|
||||||
&depth))
|
ReleaseDC(NULL, dc);
|
||||||
return 0;
|
|
||||||
|
|
||||||
evas_output_method_set(evas, evas_render_method_lookup("direct3d"));
|
evas_output_method_set(evas, evas_render_method_lookup("direct3d"));
|
||||||
einfo = (Evas_Engine_Info_Direct3D *)evas_engine_info_get(evas);
|
einfo = (Evas_Engine_Info_Direct3D *)evas_engine_info_get(evas);
|
||||||
if (!einfo)
|
if (!einfo)
|
||||||
{
|
{
|
||||||
printf("Evas does not support the Direct3D Engine\n");
|
fprintf(stderr, "Evas does not support the Direct3D Engine\n");
|
||||||
return 0;
|
goto destroy_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
einfo->info.window = window;
|
einfo->info.window = window;
|
||||||
einfo->info.object = object;
|
|
||||||
einfo->info.device = device;
|
|
||||||
einfo->info.sprite = sprite;
|
|
||||||
einfo->info.texture = texture;
|
|
||||||
einfo->info.depth = depth;
|
einfo->info.depth = depth;
|
||||||
einfo->info.rotation = 0;
|
einfo->info.rotation = 0;
|
||||||
evas_engine_info_set(evas, (Evas_Engine_Info *) einfo);
|
evas_engine_info_set(evas, (Evas_Engine_Info *)einfo);
|
||||||
|
|
||||||
/* the second parameter is ignored, as it's the first call of ShowWindow */
|
/* the second parameter is ignored, as it's the first call of ShowWindow */
|
||||||
ShowWindow(window, SW_SHOWDEFAULT);
|
ShowWindow(window, SW_SHOWDEFAULT);
|
||||||
UpdateWindow(window);
|
UpdateWindow(window);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
destroy_window:
|
||||||
|
DestroyWindow(window);
|
||||||
|
unregister_class:
|
||||||
|
UnregisterClass("Evas_Direct3D_Test", instance);
|
||||||
|
free_library:
|
||||||
|
FreeLibrary(instance);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -364,6 +273,3 @@ engine_direct3d_loop(void)
|
||||||
|
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -8,46 +8,6 @@
|
||||||
|
|
||||||
static HWND window;
|
static HWND window;
|
||||||
|
|
||||||
static int
|
|
||||||
_opengl_init (HWND w,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
HDC *dc,
|
|
||||||
int *depth)
|
|
||||||
{
|
|
||||||
PIXELFORMATDESCRIPTOR pfd;
|
|
||||||
int format;
|
|
||||||
|
|
||||||
*dc = GetDC (w);
|
|
||||||
if (!*dc)
|
|
||||||
goto no_dc;
|
|
||||||
|
|
||||||
ZeroMemory (&pfd, sizeof (pfd));
|
|
||||||
pfd.nSize = sizeof (pfd);
|
|
||||||
pfd.nVersion = 1;
|
|
||||||
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
|
|
||||||
pfd.iPixelType = PFD_TYPE_RGBA;
|
|
||||||
pfd.cColorBits = 24;
|
|
||||||
pfd.cDepthBits = 32;
|
|
||||||
pfd.iLayerType = PFD_MAIN_PLANE;
|
|
||||||
|
|
||||||
format = ChoosePixelFormat (*dc, &pfd);
|
|
||||||
if (!format)
|
|
||||||
goto no_format;
|
|
||||||
|
|
||||||
SetPixelFormat (*dc, format, &pfd);
|
|
||||||
|
|
||||||
*depth = 32;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
no_format:
|
|
||||||
ReleaseDC (w, *dc);
|
|
||||||
no_dc:
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static LRESULT CALLBACK
|
static LRESULT CALLBACK
|
||||||
MainWndProc(HWND hwnd,
|
MainWndProc(HWND hwnd,
|
||||||
UINT uMsg,
|
UINT uMsg,
|
||||||
|
@ -258,20 +218,6 @@ engine_gl_glew_args(int argc, char **argv)
|
||||||
NULL, NULL, hinstance, NULL);
|
NULL, NULL, hinstance, NULL);
|
||||||
if (!window) return 0;
|
if (!window) return 0;
|
||||||
|
|
||||||
if (!_opengl_init(window, win_w, win_h,
|
|
||||||
&dc,
|
|
||||||
&depth))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (GLEW_VERSION_2_0)
|
|
||||||
{
|
|
||||||
printf ("pas 2.0\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf ("2.0 !!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
ShowWindow(window, SW_SHOWDEFAULT);
|
ShowWindow(window, SW_SHOWDEFAULT);
|
||||||
UpdateWindow(window);
|
UpdateWindow(window);
|
||||||
|
|
||||||
|
@ -284,7 +230,6 @@ engine_gl_glew_args(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
einfo->info.window = window;
|
einfo->info.window = window;
|
||||||
einfo->info.dc = dc;
|
|
||||||
einfo->info.depth = depth;
|
einfo->info.depth = depth;
|
||||||
evas_engine_info_set(evas, (Evas_Engine_Info *) einfo);
|
evas_engine_info_set(evas, (Evas_Engine_Info *) einfo);
|
||||||
|
|
||||||
|
|
|
@ -189,7 +189,7 @@ engine_software_ddraw_args(int argc, char **argv)
|
||||||
}
|
}
|
||||||
if (!ok) return 0;
|
if (!ok) return 0;
|
||||||
|
|
||||||
instance = GetModuleHandle(0);
|
instance = GetModuleHandle(NULL);
|
||||||
if (!instance) return 0;
|
if (!instance) return 0;
|
||||||
|
|
||||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||||
|
@ -197,8 +197,8 @@ engine_software_ddraw_args(int argc, char **argv)
|
||||||
wc.cbClsExtra = 0;
|
wc.cbClsExtra = 0;
|
||||||
wc.cbWndExtra = 0;
|
wc.cbWndExtra = 0;
|
||||||
wc.hInstance = instance;
|
wc.hInstance = instance;
|
||||||
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
|
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
||||||
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||||
wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
|
wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
|
||||||
wc.lpszMenuName = NULL;
|
wc.lpszMenuName = NULL;
|
||||||
wc.lpszClassName = "Evas_Software_DDraw_Test";
|
wc.lpszClassName = "Evas_Software_DDraw_Test";
|
||||||
|
|
Loading…
Reference in New Issue