move around - flatter.
[profile/ivi/evas.git] / src / modules / engines / direct3d / evas_direct3d_main.cpp
1 #include "evas_engine.h"
2
3
4 extern "C" {
5
6 int
7 evas_direct3d_masks_get(Outbuf *buf)
8 {
9    D3DSURFACE_DESC sd;
10
11    if (FAILED(buf->priv.d3d.texture->GetLevelDesc(0, &sd)))
12      return 0;
13
14    switch (sd.Format)
15      {
16      case D3DFMT_A8R8G8B8:
17      case D3DFMT_X8R8G8B8:
18        buf->priv.mask.r = 0x00ff0000;
19        buf->priv.mask.g = 0x0000ff00;
20        buf->priv.mask.b = 0x000000ff;
21        break;
22      case D3DFMT_R5G6B5:
23        buf->priv.mask.r = 0xf800;
24        buf->priv.mask.g = 0x07e0;
25        buf->priv.mask.b = 0x001f;
26        break;
27      default:
28        return 0;
29      }
30
31    return 1;
32 }
33
34 void *
35 evas_direct3d_lock(Outbuf *buf, int *d3d_width, int *d3d_height, int *d3d_pitch)
36 {
37    D3DSURFACE_DESC sd;
38    D3DLOCKED_RECT  d3d_rect;
39
40    /* is that call needed / overkill ? */
41    if (FAILED(buf->priv.d3d.texture->GetLevelDesc(0, &sd)))
42      return NULL;
43
44    if (FAILED(buf->priv.d3d.device->BeginScene()))
45      return NULL;
46   if (FAILED(buf->priv.d3d.sprite->Begin(D3DXSPRITE_DO_NOT_ADDREF_TEXTURE)))
47     {
48        buf->priv.d3d.device->EndScene();
49        return NULL;
50     }
51   if (FAILED(buf->priv.d3d.texture->LockRect(0, &d3d_rect, NULL, D3DLOCK_DISCARD)))
52     {
53        buf->priv.d3d.sprite->End();
54        buf->priv.d3d.device->EndScene();
55        return NULL;
56     }
57
58   *d3d_width = sd.Width;
59   *d3d_height = sd.Height;
60   *d3d_pitch = d3d_rect.Pitch;
61
62   return d3d_rect.pBits;
63 }
64
65 void
66 evas_direct3d_unlock(Outbuf *buf)
67 {
68   if (FAILED(buf->priv.d3d.texture->UnlockRect(0)))
69     return;
70
71   if (FAILED(buf->priv.d3d.sprite->Draw(buf->priv.d3d.texture,
72                                         NULL, NULL, NULL,
73                                         D3DCOLOR_ARGB (255, 255, 255, 255))))
74     return;
75   if (FAILED(buf->priv.d3d.sprite->End()))
76     return;
77
78   if (FAILED(buf->priv.d3d.device->EndScene()))
79     return;
80   if (FAILED(buf->priv.d3d.device->Present(NULL, NULL, NULL, NULL)))
81     return;
82 }
83
84 }