9.03.2010

OpenGL ES 筆記 - III

from : http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es


原來的OpenGL 包涵很多none-effecicent api,OpenGL ES 把所有none-effiicienct api 都拿掉了。

Config

EGLConfig 是要告訴 OpenGL 目前這個hardware platform surface 的 rendering format。
使用 eglGetConfigs( ) 可以取出目前這個platform 所有 support 的 rendering format。

要決定 config 有很多複雜的動作:

詢問目前 platform support 的 config 有哪些。
設定目前要用的config

config 是由一堆 attrib 組成,EGL 用一維 array 來代表:分別是
{attrib1,value1,attrib2,value2...EGL_NONE};

Attrib

EGL_BUFFER_SIZE
Color buffer depth (bit 數)
= RED_SIZE + GREEN_SIZE + BLUE_SIZE + ALPHA_SIZE



輸入Vertex array 與 繪圖

畫圖的動作分成兩部份:
  • 將 定義 Vertext Point 的 Array 丟進 OpenGL
  • 要 OpenGL 以 XXX 的順序畫圖
所以需要提供兩種資料:
  • Vertex point array
  • Vertex Draw Sequence
第一個資料用 glVertexPointers( ) function 來送入 OpenGL。
第二個資料用 glDrawElements( ) 時傳入。
void glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);其中 size 是每一個 vertex 的 coordinate number -- 就是一個Vertex 需要幾筆資料來表示。因為是3維座標,所以寫 3 (default 是 4).

void glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);其中 indices 就是繪出的順序。
indices 的內容通常是:{0,4,1,0,9,4,9,5,4}這是說,先由點 0,4,1 畫出一個三角形,再用點 0,9,4 話一個,然後是點 9,5,4 的三角形。

OpenGL ES 筆記 - II

一樣,ref http://blog.jayway.com


OpenGL ES 採用 右手直角座標 -- 也就是說
右手方向是 X
上方是Y
背後是 Z

而初始的 view 位置就是在 0.0.0
Transformation 就是把要描繪的物體在座標軸上轉換,有以下的轉換動作:
  1. Translate 平移
  2. Rotate 旋轉
  3. Scale 放大/縮小
以上的動作都有一function 可以作,參數分別是對 x, y ,z 軸的參數,其中 Rotate 的參數單位是 degree。


OpenGL ES 筆記

一堆opengl 的筆記。
ref:
http://wiki.forum.nokia.com/
http://blog.jayway.com/


OpenGL 的繪圖步驟:
  1. 取得 display --- 就是 pc monitor,或是手機的 lcd panel.
  2. initialize EGL
  3. 選一個 config/mode
  4. create一個 context
  5. create一個 用來繪圖的 surface
  6. enable 剛剛create的 context
OpenGL ES 繪圖基本元素(Primitives)
  1. Vertex ( Vertices) : 最小的基本繪圖單位,就是兩線交會的點。(point)
    Vertex 在 OpenGL ES 中被用作描繪3D model 的元素,也被用來指定 camera , light 的位置。
  2. Edge : 連接兩個 Vertex 的直線
  3. Face : 由三個 Vertex 包成的三角形區域。
    當要定義一個face 時,他的三個vertex 的順序是很重要的,vertex 順序被用來判定face 的正面和背面(右手定則?)。有時候,可以指定只 render 正面,好節省時間。
定義一個多邊形 (Polygon)
多邊型的每個面要被拆解成一個一個的三角型,然後把每個三角形的端點(vertex) 寫出來就可以。

所以寫出來,會是一個array:
{
-1.0f, 1.0f, 0.0f, // 0 Top Left
-1.0f, -1.0f, 0.0f, // 1 Bottom Left
1.0f, -1.0f, 0.0f, // 2 Bottom Right
1.0f, 1.0f, 0.0f // 3. Top Right
}


把 vortex 訂出來後,還需要一個資料,告訴OpenGL 哪幾點構成一個 triangle,這個資料叫 indices:
{
0,1,2, // 第一個triangle 由 vertex 0.1.2 構成
0,2,3
};
OpenGL ES 描繪的方式 (render primitive)
剛剛 OpenGL ES 的 primitives 定義 "描述物體的基本元素",現在要講得是如何把這些 "描述" 畫出來。
  1. GL_POINTS : 只描出 定義的點
  2. GL_LINE_STRIP : 依順序描出點之間的線
  3. GL_LINE_LOOP : 和 GL_LINE_STRIP 一樣,但是再加一條 : 最後一點到第一點的線
  4. GL_LINES : 兩兩描出一線
  5. GL_TRIANGLES : 每三點描出一triangle
  6. GL_TRIANGLE_STRIP :有點難,就是每三點描出一triangle外,再包圍起來。
  7. GL_TRIANGLE_FAN : 一樣,有點難,每三點描出一 triangle外,再用扇形圍起來。
所以一般常用的rendering primitives 是 GL_TRIANGLES

8.23.2010

抱怨:PANASONIC DVD 錄放影機 一過保就壞了

去年 5 月底買的 PANASONIC DVD 錄放影機 DMR ES15,5200。
結果保固一年一過就壞了,而且是壞在最貴的雷射頭。修理1900。 超過原價的 1/3 。

這樣的設計功力應該才是最厲害的...剛好過保固就壞。


L 提供的: http://se.sunfar.com.tw/promo/9908/05.htm 順發延長保固 -- 就像 apple care, IBM, Dell 一樣,可以加買保固。

8.12.2010

Modify DDCAPS for CE 6.0

DDCAPS 是 platform builder 提供,偵測 platform 支援 directdraw 的程度。
但是 CE 6.0 後,DirectDraw interface 大幅改變,所以這個 code 就不能用了。要修改後才行。

修改後的 code:

Index: ddcaps.c
===================================================================
--- ddcaps.c (revision 23142)
+++ ddcaps.c (working copy)
@@ -74,7 +74,7 @@
LPDWORD caps;
LPCAPSDEFSTYPE defs;

-} gCaps[10];
+} gCaps[12];

struct
{
@@ -102,131 +102,83 @@
LPDIRECTDRAW lpDD; // DirectDraw object

// Map caps bits to readable strings
-CAPSDEFSTYPE ddCapsDefs[MAX_BOXES] =
-{
- {TEXT("3D"), DDCAPS_3D},
- {TEXT("ALIGNBOUNDARYDEST"), DDCAPS_ALIGNBOUNDARYDEST},
- {TEXT("ALIGNSIZEDEST"), DDCAPS_ALIGNSIZEDEST},
- {TEXT("ALIGNBOUNDARYSRC"), DDCAPS_ALIGNBOUNDARYSRC},
- {TEXT("ALIGNSIZESRC"), DDCAPS_ALIGNSIZESRC},
- {TEXT("ALIGNSTRIDE"), DDCAPS_ALIGNSTRIDE},
- {TEXT("BLT"), DDCAPS_BLT},
- {TEXT("BLTQUEUE"), DDCAPS_BLTQUEUE},
- {TEXT("BLTFOURCC"), DDCAPS_BLTFOURCC},
- {TEXT("BLTSTRETCH"), DDCAPS_BLTSTRETCH},
- {TEXT("GDI"), DDCAPS_GDI},
- {TEXT("OVERLAY"), DDCAPS_OVERLAY},
- {TEXT("OVERLAYCANTCLIP"), DDCAPS_OVERLAYCANTCLIP},
- {TEXT("OVERLAYFOURCC"), DDCAPS_OVERLAYFOURCC},
- {TEXT("OVERLAYSTRETCH"), DDCAPS_OVERLAYSTRETCH},
- {TEXT("PALETTE"), DDCAPS_PALETTE},
- {TEXT("PALETTEVSYNC"), DDCAPS_PALETTEVSYNC},
- {TEXT("READSCANLINE"), DDCAPS_READSCANLINE},
- {TEXT("STEREOVIEW"), DDCAPS_STEREOVIEW},
- {TEXT("VBI"), DDCAPS_VBI},
- {TEXT("ZBLTS"), DDCAPS_ZBLTS},
- {TEXT("ZOVERLAYS"), DDCAPS_ZOVERLAYS},
- {TEXT("COLORKEY"), DDCAPS_COLORKEY},
- {TEXT("ALPHA"), DDCAPS_ALPHA},
- {TEXT("CKEYHWASSIST"), DDCAPS_COLORKEYHWASSIST},
- {TEXT("NOHARDWARE"), DDCAPS_NOHARDWARE},
- {TEXT("BLTCOLORFILL"), DDCAPS_BLTCOLORFILL},
- {TEXT("BANKSWITCHED"), DDCAPS_BANKSWITCHED},
- {TEXT("BLTDEPTHFILL"), DDCAPS_BLTDEPTHFILL},
- {TEXT("CANCLIP"), DDCAPS_CANCLIP},
- {TEXT("CANCLIPSTRETCHED"), DDCAPS_CANCLIPSTRETCHED},
-};

+
CAPSDEFSTYPE CKeyCapsDefs[MAX_BOXES] =
{
- {TEXT("DESTBLT"), DDCKEYCAPS_DESTBLT},
- {TEXT("DESTBLTCLRSPACE"), DDCKEYCAPS_DESTBLTCLRSPACE},
+ {TEXT("BOTHBLT"), DDCKEYCAPS_BOTHBLT},
+ {TEXT("DESTBLT"), DDCKEYCAPS_DESTBLT },
+ {TEXT("DESTBLTCLRSPACE"), DDCKEYCAPS_DESTBLTCLRSPACE },
{TEXT("DESTBLTCLRSPACEYUV"), DDCKEYCAPS_DESTBLTCLRSPACEYUV},
- {TEXT("DESTBLTYUV"), DDCKEYCAPS_DESTBLTYUV},
- {TEXT("DESTOVERLAY"), DDCKEYCAPS_DESTOVERLAY},
- {TEXT("DESTOVERLAYCLRSPACE"), DDCKEYCAPS_DESTOVERLAYCLRSPACE},
- {TEXT("DESTOVERLAYCLRSPACEYUV"), DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV},
- {TEXT("DESTOVERLAYONEACTIVE"), DDCKEYCAPS_DESTOVERLAYONEACTIVE},
- {TEXT("DESTOVERLAYYUV"), DDCKEYCAPS_DESTOVERLAYYUV},
- {TEXT("SRCBLT"), DDCKEYCAPS_SRCBLT},
+ {TEXT("SRCBLT"), DDCKEYCAPS_SRCBLT },
{TEXT("SRCBLTCLRSPACE"), DDCKEYCAPS_SRCBLTCLRSPACE},
- {TEXT("SRCBLTCLRSPACEYUV"), DDCKEYCAPS_SRCBLTCLRSPACEYUV},
- {TEXT("SRCBLTYUV"), DDCKEYCAPS_SRCBLTYUV},
- {TEXT("SRCOVERLAY"), DDCKEYCAPS_SRCOVERLAY},
- {TEXT("SRCOVERLAYCLRSPACE"), DDCKEYCAPS_SRCOVERLAYCLRSPACE},
- {TEXT("SRCOVERLAYCLRSPACEYUV"), DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV},
- {TEXT("SRCOVERLAYONEACTIVE"), DDCKEYCAPS_SRCOVERLAYONEACTIVE},
- {TEXT("SRCOVERLAYYUV"), DDCKEYCAPS_SRCOVERLAYYUV}
+ {TEXT("SRCBLTCLRSPACEYUV"), DDCKEYCAPS_SRCBLTCLRSPACEYUV },
};

-CAPSDEFSTYPE FXCapsDefs[MAX_BOXES] =
-{
- { TEXT("BLTARITHSTRETCHY"), DDFXCAPS_BLTARITHSTRETCHY },
- { TEXT("BLTARITHSTRETCHYN"), DDFXCAPS_BLTARITHSTRETCHYN },
- { TEXT("BLTMIRRORLEFTRIGHT"), DDFXCAPS_BLTMIRRORLEFTRIGHT },
- { TEXT("BLTMIRRORUPDOWN"), DDFXCAPS_BLTMIRRORUPDOWN },
- { TEXT("BLTROTATION"), DDFXCAPS_BLTROTATION },
- { TEXT("BLTROTATION90"), DDFXCAPS_BLTROTATION90 },
- { TEXT("BLTSHRINKX"), DDFXCAPS_BLTSHRINKX },
- { TEXT("BLTSHRINKXN"), DDFXCAPS_BLTSHRINKXN },
- { TEXT("BLTSHRINKY"), DDFXCAPS_BLTSHRINKY },
- { TEXT("BLTSHRINKYN"), DDFXCAPS_BLTSHRINKYN },
- { TEXT("BLTSTRETCHX"), DDFXCAPS_BLTSTRETCHX },
- { TEXT("BLTSTRETCHXN"), DDFXCAPS_BLTSTRETCHXN },
- { TEXT("BLTSTRETCHY"), DDFXCAPS_BLTSTRETCHY },
- { TEXT("BLTSTRETCHYN"), DDFXCAPS_BLTSTRETCHYN },
- { TEXT("OVERLAYARITHSTRETCHY"), DDFXCAPS_OVERLAYARITHSTRETCHY },
- { TEXT("OVERLAYARITHSTRETCHYN"), DDFXCAPS_OVERLAYARITHSTRETCHYN },
- { TEXT("OVERLAYSHRINKX"), DDFXCAPS_OVERLAYSHRINKX },
- { TEXT("OVERLAYSHRINKXN"), DDFXCAPS_OVERLAYSHRINKXN },
- { TEXT("OVERLAYSHRINKY"), DDFXCAPS_OVERLAYSHRINKY },
- { TEXT("OVERLAYSHRINKYN"), DDFXCAPS_OVERLAYSHRINKYN },
- { TEXT("OVERLAYSTRETCHX"), DDFXCAPS_OVERLAYSTRETCHX },
- { TEXT("OVERLAYSTRETCHXN"), DDFXCAPS_OVERLAYSTRETCHXN },
- { TEXT("OVERLAYSTRETCHY"), DDFXCAPS_OVERLAYSTRETCHY },
- { TEXT("OVERLAYSTRETCHYN"), DDFXCAPS_OVERLAYSTRETCHYN },
- { TEXT("OVERLAYMIRRORLEFTRIGHT"), DDFXCAPS_OVERLAYMIRRORLEFTRIGHT },
- { TEXT("OVERLAYMIRRORUPDOWN"), DDFXCAPS_OVERLAYMIRRORUPDOWN },
-};
-
CAPSDEFSTYPE PalCapsDefs[MAX_BOXES] =
{
- {TEXT("1BIT"), DDPCAPS_1BIT},
- {TEXT("2BIT"), DDPCAPS_2BIT},
- {TEXT("4BIT"), DDPCAPS_4BIT},
- {TEXT("8BITENTRIES"), DDPCAPS_8BITENTRIES},
- {TEXT("8BIT"), DDPCAPS_8BIT},
- {TEXT("ALLOW256"), DDPCAPS_ALLOW256},
- {TEXT("INITIALIZE"), DDPCAPS_INITIALIZE},
+ {TEXT("ALPHA"), DDPCAPS_ALPHA},
{TEXT("PRIMARYSURFACE"), DDPCAPS_PRIMARYSURFACE},
- {TEXT("PRIMARYSURFACELEFT"), DDPCAPS_PRIMARYSURFACELEFT},
- {TEXT("VSYNC"), DDPCAPS_VSYNC}
-};
+ };

-CAPSDEFSTYPE SurfCapsDefs[MAX_BOXES] =
+CAPSDEFSTYPE BltCapsDefs[MAX_BOXES] =
{
- {TEXT("3DDEVICE"), DDSCAPS_3DDEVICE},
- {TEXT("ALPHA"), DDSCAPS_ALPHA},
- {TEXT("BACKBUFFER"), DDSCAPS_BACKBUFFER},
- {TEXT("COMPLEX"), DDSCAPS_COMPLEX},
- {TEXT("FLIP"), DDSCAPS_FLIP},
- {TEXT("FRONTBUFFER"), DDSCAPS_FRONTBUFFER},
- {TEXT("MIPMAP"), DDSCAPS_MIPMAP},
- {TEXT("OFFSCREENPLAIN"), DDSCAPS_OFFSCREENPLAIN},
- {TEXT("OVERLAY"), DDSCAPS_OVERLAY},
- {TEXT("PALETTE"), DDSCAPS_PALETTE},
- {TEXT("PRIMARYSURFACE"), DDSCAPS_PRIMARYSURFACE},
- {TEXT("PRIMARYSURFACELEFT"), DDSCAPS_PRIMARYSURFACELEFT},
- {TEXT("SYSTEMMEMORY"), DDSCAPS_SYSTEMMEMORY},
- {TEXT("TEXTURE"), DDSCAPS_TEXTURE},
- {TEXT("VIDEOMEMORY"), DDSCAPS_VIDEOMEMORY},
- {TEXT("VISIBLE"), DDSCAPS_VISIBLE},
- {TEXT("WRITEONLY"), DDSCAPS_WRITEONLY},
- {TEXT("ZBUFFER"), DDSCAPS_ZBUFFER}
-};
+ { TEXT("READSYSMEM"), DDBLTCAPS_READSYSMEM },
+ { TEXT("WRITESYSMEM"), DDBLTCAPS_WRITESYSMEM },
+ { TEXT("FOURCCTORGB"), DDBLTCAPS_FOURCCTORGB },
+ { TEXT("COPYFOURCC"), DDBLTCAPS_COPYFOURCC },
+ { TEXT("FILLFOURCC"), DDBLTCAPS_FILLFOURCC },
+ };

+CAPSDEFSTYPE AlphaCapsDefs[MAX_BOXES] =
+{
+ { TEXT("ALPHAPIXELS"), DDALPHACAPS_ALPHAPIXELS },
+ { TEXT("PREMULT"), DDALPHACAPS_PREMULT },
+ { TEXT("NONPREMULT"), DDALPHACAPS_NONPREMULT },
+ { TEXT("ALPHAFILL"), DDALPHACAPS_ALPHAFILL },
+ { TEXT("ALPHANEG"), DDALPHACAPS_ALPHANEG },
+ };

+CAPSDEFSTYPE OverlayCapsDefs[MAX_BOXES] =
+{
+ {TEXT("FLIP"), DDOVERLAYCAPS_FLIP},
+ {TEXT("FOURCC"), DDOVERLAYCAPS_FOURCC},
+ {TEXT("ZORDER"), DDOVERLAYCAPS_ZORDER},
+ {TEXT("MIRRORLEFTRIGHT"), DDOVERLAYCAPS_MIRRORLEFTRIGHT},
+ {TEXT("MIRRORUPDOWN"), DDOVERLAYCAPS_MIRRORUPDOWN},
+ {TEXT("CKEYSRC"), DDOVERLAYCAPS_CKEYSRC},
+ {TEXT("CKEYSRCCLRSPACE"), DDOVERLAYCAPS_CKEYSRCCLRSPACE},
+ {TEXT("CKEYSRCCLRSPACEYUV"), DDOVERLAYCAPS_CKEYSRCCLRSPACEYUV},
+ {TEXT("CKEYDEST"), DDOVERLAYCAPS_CKEYDEST},
+ {TEXT("CKEYDESTCLRSPACE"), DDOVERLAYCAPS_CKEYDESTCLRSPACE},
+ {TEXT("CKEYDESTCLRSPACEYUV"), DDOVERLAYCAPS_CKEYDESTCLRSPACEYUV},
+ {TEXT("CKEYBOTH"), DDOVERLAYCAPS_CKEYBOTH},
+ {TEXT("ALPHADEST"), DDOVERLAYCAPS_ALPHADEST},
+ {TEXT("ALPHASRC"), DDOVERLAYCAPS_ALPHASRC},
+ {TEXT("ALPHADESTNEG"), DDOVERLAYCAPS_ALPHADESTNEG},
+ {TEXT("ALPHASRCNEG"), DDOVERLAYCAPS_ALPHASRCNEG},
+ {TEXT("ALPHACONSTANT"), DDOVERLAYCAPS_ALPHACONSTANT},
+ {TEXT("ALPHAPREMULT"), DDOVERLAYCAPS_ALPHAPREMULT},
+ {TEXT("ALPHANONPREMULT"), DDOVERLAYCAPS_ALPHANONPREMULT},
+ {TEXT("ALPHAANDKEYDEST"), DDOVERLAYCAPS_ALPHAANDKEYDEST},
+ {TEXT("OVERLAYSUPPORT"), DDOVERLAYCAPS_OVERLAYSUPPORT},
+ };

+ CAPSDEFSTYPE MiscCapsDefs[MAX_BOXES] =
+{
+ {TEXT("READSCANLINE"), DDMISCCAPS_READSCANLINE},
+ {TEXT("READMONITORFREQ"), DDMISCCAPS_READMONITORFREQ},
+ {TEXT("READVBLANKSTATUS"), DDMISCCAPS_READVBLANKSTATUS},
+ {TEXT("FLIPINTERVAL"), DDMISCCAPS_FLIPINTERVAL},
+ {TEXT("FLIPODDEVEN"), DDMISCCAPS_FLIPODDEVEN},
+ {TEXT("FLIPVSYNCWITHVBI"), DDMISCCAPS_FLIPVSYNCWITHVBI},
+ {TEXT("COLORCONTROLOVERLAY"), DDMISCCAPS_COLORCONTROLOVERLAY},
+ {TEXT("COLORCONTROLPRIMARY"), DDMISCCAPS_COLORCONTROLPRIMARY},
+ {TEXT("GAMMACONTROLOVERLAY"), DDMISCCAPS_GAMMACONTROLOVERLAY},
+ {TEXT("GAMMACONTROLPRIMARY"), DDMISCCAPS_GAMMACONTROLPRIMARY}
+ };
+
+
//*------------------------------------------------------------------------
//| Dlg_OnCommand
//*------------------------------------------------------------------------
@@ -254,14 +206,16 @@
int i;
TCHAR szTitle[256];
static TCHAR *rgszCaps[] = {
- TEXT("Direct Draw Caps Bits"),
TEXT("Direct Draw Color Key Caps Bits"),
- TEXT("Direct Draw FX Caps Bits"),
TEXT("Direct Draw Palette Caps Bits"),
- TEXT("Direct Draw Surface Caps Bits")};
+ TEXT("Direct Draw Blt Caps Bits"),
+ TEXT("Direct Draw Alpha Caps Bits"),
+ TEXT("Direct Draw Overlay Caps Bits"),
+ TEXT("Direct Draw Misc Caps Bits")
+ };

- wsprintf(szTitle, TEXT("%s (%s)"), rgszCaps[Which%5],
- (Which < 5) ? TEXT("HAL") : TEXT("HEL"));
+ wsprintf(szTitle, TEXT("%s (%s)"), rgszCaps[Which%6],
+ (Which < 6) ? TEXT("HAL") : TEXT("HEL"));
SetWindowText(hwnd, szTitle);

ShowWindow(GetDlgItem(hwnd, IDC_RESTORE), SW_HIDE);
@@ -285,11 +239,8 @@
return TRUE;
}

-//*------------------------------------------------------------------------
-//| ddCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-ddCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+CKeyCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

@@ -306,11 +257,8 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| CKeyCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-CKeyCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+PalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

@@ -327,15 +275,12 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| SurfCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-SurfCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+BltCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 4;
+ Which = 2;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -348,15 +293,12 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| FXCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-FXCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+AlphaCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 2;
+ Which = 3;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -370,15 +312,12 @@
}


-//*------------------------------------------------------------------------
-//| PalCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-PalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+OverlayCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 3;
+ Which = 4;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -391,12 +330,8 @@
return (fProcessed);
}

-
-//*------------------------------------------------------------------------
-//| HELddCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-HELddCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+MiscCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

@@ -413,9 +348,7 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| HELCKeyCapsDlg_Proc
-//*------------------------------------------------------------------------
+
BOOL CALLBACK
HELCKeyCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
@@ -434,15 +367,12 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| HELSurfCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-HELSurfCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+HELPalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 9;
+ Which = 7;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -455,15 +385,12 @@
return (fProcessed);
}

-//*------------------------------------------------------------------------
-//| HELFXCapsDlg_Proc
-//*------------------------------------------------------------------------
BOOL CALLBACK
-HELFXCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+HELBltCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 7;
+ Which = 8;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -476,16 +403,31 @@
return (fProcessed);
}

+BOOL CALLBACK
+HELAlphaCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ BOOL fProcessed = TRUE;

-//*------------------------------------------------------------------------
-//| HELPalCapsDlg_Proc
-//*------------------------------------------------------------------------
+ Which = 9;
+ switch (uMsg)
+ {
+ HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
+ HANDLE_MSG(hDlg, WM_COMMAND, Dlg_OnCommand);
+
+ default:
+ fProcessed = FALSE;
+ break;
+ }
+ return (fProcessed);
+}
+
+
BOOL CALLBACK
-HELPalCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+HELOverlayCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;

- Which = 8;
+ Which = 10;
switch (uMsg)
{
HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
@@ -498,7 +440,24 @@
return (fProcessed);
}

+BOOL CALLBACK
+HELMiscCapsDlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ BOOL fProcessed = TRUE;

+ Which = 11;
+ switch (uMsg)
+ {
+ HANDLE_MSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
+ HANDLE_MSG(hDlg, WM_COMMAND, Dlg_OnCommand);
+
+ default:
+ fProcessed = FALSE;
+ break;
+ }
+ return (fProcessed);
+}
+
//*------------------------------------------------------------------------
//| DDEnumCallback
//*------------------------------------------------------------------------
@@ -539,7 +498,7 @@
//*------------------------------------------------------------------------
static int gCurMode = 0;

-DWORD DDAPI
+DWORD CALLBACK
EnumModesCallback(LPDDSURFACEDESC pddsd, LPVOID context)
{
Modes[ModeCnt].dwWidth = pddsd->dwWidth;
@@ -568,6 +527,8 @@
//| nCmdShow - Integer value specifying how to start app.,
//| (Iconic [7] or Normal [1,5])
//*------------------------------------------------------------------------
+typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEX)(LPDDENUMCALLBACKEX lpCallback, LPVOID lpContext, DWORD dwFlags);
+
int WINAPI
WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
@@ -586,22 +547,22 @@

// You need to do a GetModuleHandle and GetProcAddress in order to get the
// DirectDrawEnumerateEx
- hDDrawDLL = GetModuleHandle(TEXT("DDRAW"));
+ hDDrawDLL = LoadLibrary(TEXT("DDRAW.dll"));
if (!hDDrawDLL)
{
OutputDebugString(TEXT("LoadLibrary() failed - ddcaps: Can't list display modes"));
return (-1);
}
pDirectDrawEnumerateEx = (LPDIRECTDRAWENUMERATEEX )
- GetProcAddress(hDDrawDLL,TEXT("DirectDrawEnumerateExW"));
+ GetProcAddress(hDDrawDLL,TEXT("DirectDrawEnumerateEx"));

if (pDirectDrawEnumerateEx)
pDirectDrawEnumerateEx( DDEnumCallbackEx, (LPVOID) NULL,
DDENUM_ATTACHEDSECONDARYDEVICES |
- DDENUM_DETACHEDSECONDARYDEVICES |
- DDENUM_NONDISPLAYDEVICES);
+ DDENUM_DETACHEDSECONDARYDEVICES
+ );
else // Old DirectDraw, so do it the old way
- DirectDrawEnumerate(DDEnumCallback, NULL);
+ MessageBox(NULL,TEXT("EnumerateEx Call Fail"),TEXT("Error"),MB_OK);

ddrval = DirectDrawCreate(gpSelectedDriverGUID, &lpDD, NULL);
if (ddrval != DD_OK)
@@ -635,35 +596,41 @@

lpDD->lpVtbl->GetCaps(lpDD, &ddcapsHAL, &ddcapsHEL);

- gCaps[0].caps = &(ddcapsHAL.dwCaps);
- gCaps[0].defs = ddCapsDefs;
+ gCaps[0].caps = &(ddcapsHAL.dwCKeyCaps);
+ gCaps[0].defs = CKeyCapsDefs;

- gCaps[1].caps = &(ddcapsHAL.dwCKeyCaps);
- gCaps[1].defs = CKeyCapsDefs;
+ gCaps[1].caps = &(ddcapsHAL.dwPalCaps);
+ gCaps[1].defs = PalCapsDefs;

- gCaps[2].caps = &(ddcapsHAL.dwFXCaps);
- gCaps[2].defs = FXCapsDefs;
+ gCaps[2].caps = &(ddcapsHAL.dwBltCaps);
+ gCaps[2].defs = BltCapsDefs;

- gCaps[3].caps = &(ddcapsHAL.dwPalCaps);
- gCaps[3].defs = PalCapsDefs;
+ gCaps[3].caps = &(ddcapsHAL.dwAlphaCaps);
+ gCaps[3].defs = AlphaCapsDefs;

- gCaps[4].caps = &(ddcapsHAL.ddsCaps.dwCaps);
- gCaps[4].defs = SurfCapsDefs;
+ gCaps[4].caps = &(ddcapsHAL.dwOverlayCaps);
+ gCaps[4].defs = OverlayCapsDefs;

- gCaps[5].caps = &(ddcapsHEL.dwCaps);
- gCaps[5].defs = ddCapsDefs;
+ gCaps[5].caps = &(ddcapsHAL.dwMiscCaps);
+ gCaps[5].defs = MiscCapsDefs;

gCaps[6].caps = &(ddcapsHEL.dwCKeyCaps);
gCaps[6].defs = CKeyCapsDefs;

- gCaps[7].caps = &(ddcapsHEL.dwFXCaps);
- gCaps[7].defs = FXCapsDefs;
+ gCaps[7].caps = &(ddcapsHEL.dwPalCaps);
+ gCaps[7].defs = PalCapsDefs;

- gCaps[8].caps = &(ddcapsHEL.dwPalCaps);
- gCaps[8].defs = PalCapsDefs;
+ gCaps[8].caps = &(ddcapsHEL.dwBltCaps);
+ gCaps[8].defs = BltCapsDefs;

- gCaps[9].caps = &(ddcapsHEL.ddsCaps.dwCaps);
- gCaps[9].defs = SurfCapsDefs;
+ gCaps[9].caps = &(ddcapsHEL.dwAlphaCaps);
+ gCaps[9].defs = AlphaCapsDefs;
+
+ gCaps[10].caps = &(ddcapsHEL.dwOverlayCaps);
+ gCaps[10].defs = OverlayCapsDefs;
+
+ gCaps[11].caps = &(ddcapsHEL.dwMiscCaps);
+ gCaps[11].defs = MiscCapsDefs;
}


@@ -794,56 +761,63 @@
DialogBox(ghInstance, TEXT("About"), hWnd, (DLGPROC)AboutDlgProc);
break;

- case ID_VIEW_DRIVERCAPS:
- CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, ddCapsDlg_Proc);
- break;
-
+
case ID_VIEW_DRIVERCOLORKEYCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL, CKeyCapsDlg_Proc);
break;

- case ID_VIEW_DRIVERFXCAPS:
+ case ID_VIEW_DRIVERPALETTECAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, FXCapsDlg_Proc);
+ NULL, PalCapsDlg_Proc);
break;

- case ID_VIEW_DRIVERPALETTECAPS:
+ case ID_VIEW_DRIVERBLTCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, PalCapsDlg_Proc);
+ NULL, BltCapsDlg_Proc);
break;

- case ID_VIEW_DRIVERSURFACECAPS:
+ case ID_VIEW_DRIVERALPHACAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, SurfCapsDlg_Proc);
+ NULL, AlphaCapsDlg_Proc);
break;

- case ID_VIEW_HELCAPS:
+ case ID_VIEW_DRIVEROVERLAYCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, HELddCapsDlg_Proc);
+ NULL, OverlayCapsDlg_Proc);
break;
+
+ case ID_VIEW_DRIVERMISCCAPS:
+ CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
+ NULL, OverlayCapsDlg_Proc);
+ break;

+//----------------
case ID_VIEW_HELCOLORKEYCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL, HELCKeyCapsDlg_Proc);
break;

- case ID_VIEW_HELFXCAPS:
- CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, HELFXCapsDlg_Proc);
- break;
-
case ID_VIEW_HELPALETTECAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL, HELPalCapsDlg_Proc);
break;
-
- case ID_VIEW_HELSURFACECAPS:
+ case ID_VIEW_HELBLTCAPS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
- NULL, HELSurfCapsDlg_Proc);
+ NULL, HELBltCapsDlg_Proc);
break;
-
+ case ID_VIEW_HELALPHACAPS:
+ CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
+ NULL, HELAlphaCapsDlg_Proc);
+ break;
+ case ID_VIEW_HELOVERLAYCAPS:
+ CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
+ NULL, HELOverlayCapsDlg_Proc);
+ break;
+ case ID_VIEW_HELMISCCAPS:
+ CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DIALOG1),
+ NULL, HELMiscCapsDlg_Proc);
+ break;
case ID_PRINTF_LISTBOX:
if (HIWORD(wParam) == LBN_DBLCLK)
{
@@ -852,18 +826,18 @@
if (sel < (UINT)ModeCnt)
{
ddrval = lpDD->lpVtbl->SetCooperativeLevel(lpDD,
- hWnd,
- DDSCL_EXCLUSIVE |
- DDSCL_NOWINDOWCHANGES |
+ hWnd,
+ DDSCL_NORMAL |
DDSCL_FULLSCREEN);
if (ddrval == DD_OK)
{
ddrval = lpDD->lpVtbl->SetDisplayMode(lpDD,
- Modes[sel].dwWidth,
- Modes[sel].dwHeight,
- Modes[sel].dwBPP);
+ Modes[sel].dwWidth,
+ Modes[sel].dwHeight,
+ Modes[sel].dwBPP,0,0);
ddrval = lpDD->lpVtbl->SetCooperativeLevel(lpDD,
- hWnd, DDSCL_NORMAL);
+ hWnd,
+ DDSCL_NORMAL);
}
}
}
Index: ddcaps.rc
===================================================================
--- ddcaps.rc (revision 23142)
+++ ddcaps.rc (working copy)
@@ -66,19 +66,21 @@
END
POPUP "&Driver"
BEGIN
- MENUITEM "Driver &Caps", ID_VIEW_DRIVERCAPS
MENUITEM "Driver C&olor Key Caps", ID_VIEW_DRIVERCOLORKEYCAPS
- MENUITEM "Driver &FX Caps", ID_VIEW_DRIVERFXCAPS
MENUITEM "Driver &Palette Caps", ID_VIEW_DRIVERPALETTECAPS
- MENUITEM "Driver &Surface Caps", ID_VIEW_DRIVERSURFACECAPS
+ MENUITEM "Driver &Blt Caps", ID_VIEW_DRIVERBLTCAPS
+ MENUITEM "Driver &Alpha Caps", ID_VIEW_DRIVERALPHACAPS
+ MENUITEM "Driver &Overlay Caps", ID_VIEW_DRIVEROVERLAYCAPS
+ MENUITEM "Driver &Misc Caps", ID_VIEW_DRIVERMISCCAPS
END
POPUP "&HEL"
BEGIN
- MENUITEM "HEL &Caps", ID_VIEW_HELCAPS
MENUITEM "HEL C&olor Key Caps", ID_VIEW_HELCOLORKEYCAPS
- MENUITEM "HEL &FX Caps", ID_VIEW_HELFXCAPS
MENUITEM "HEL &Palette Caps", ID_VIEW_HELPALETTECAPS
- MENUITEM "HEL &Surface Caps", ID_VIEW_HELSURFACECAPS
+ MENUITEM "HEL &Blt Caps", ID_VIEW_HELBLTCAPS
+ MENUITEM "HEL &Alpha Caps", ID_VIEW_HELALPHACAPS
+ MENUITEM "HEL &Overlay Caps", ID_VIEW_HELOVERLAYCAPS
+ MENUITEM "HEL &Misc Caps", ID_VIEW_HELMISCCAPS
END
END

@@ -228,7 +230,7 @@
BEGIN
DEFPUSHBUTTON "&OK",IDOK,132,58,50,14
LTEXT "DirectDraw Caps Viewer for Windows CE",-1,15,14,165,8
- LTEXT "Copyright ?1995-2003 Microsoft Corporation",-1,15,28,
+ LTEXT "Copyright ?1995-2003 Microsoft Corporation",-1,15,28,
165,8
LTEXT "Version",-1,15,42,24,8
LTEXT "1.0",-1,40,42,66,8
Index: lbprintf.c
===================================================================
--- lbprintf.c (revision 23142)
+++ lbprintf.c (working copy)
@@ -49,102 +49,8 @@
//
// Error string table
//
-static ERRLIST elErrors[] =
-{
- { DD_OK ,TEXT("DD_OK") },
- { DDERR_ALREADYINITIALIZED ,TEXT("DDERR_ALREADYINITIALIZED")},
- { DDERR_CANNOTATTACHSURFACE ,TEXT("DDERR_CANNOTATTACHSURFACE")},
- { DDERR_CANNOTDETACHSURFACE ,TEXT("DDERR_CANNOTDETACHSURFACE")},
- { DDERR_CURRENTLYNOTAVAIL ,TEXT("DDERR_CURRENTLYNOTAVAIL")},
- { DDERR_EXCEPTION ,TEXT("DDERR_EXCEPTION")},
- { DDERR_GENERIC ,TEXT("DDERR_GENERIC")},
- { DDERR_HEIGHTALIGN ,TEXT("DDERR_HEIGHTALIGN")},
- { DDERR_INCOMPATIBLEPRIMARY ,TEXT("DDERR_INCOMPATIBLEPRIMARY")},
- { DDERR_INVALIDCAPS ,TEXT("DDERR_INVALIDCAPS")},
- { DDERR_INVALIDCLIPLIST ,TEXT("DDERR_INVALIDCLIPLIST")},
- { DDERR_INVALIDMODE ,TEXT("DDERR_INVALIDMODE")},
- { DDERR_INVALIDOBJECT ,TEXT("DDERR_INVALIDOBJECT")},
- { DDERR_INVALIDPARAMS ,TEXT("DDERR_INVALIDPARAMS")},
- { DDERR_INVALIDPIXELFORMAT ,TEXT("DDERR_INVALIDPIXELFORMAT")},
- { DDERR_INVALIDRECT ,TEXT("DDERR_INVALIDRECT")},
- { DDERR_LOCKEDSURFACES ,TEXT("DDERR_LOCKEDSURFACES")},
- { DDERR_NO3D ,TEXT("DDERR_NO3D")},
- { DDERR_NOALPHAHW ,TEXT("DDERR_NOALPHAHW")},
- { DDERR_NOCLIPLIST ,TEXT("DDERR_NOCLIPLIST")},
- { DDERR_NOCOLORCONVHW ,TEXT("DDERR_NOCOLORCONVHW")},
- { DDERR_NOCOOPERATIVELEVELSET ,TEXT("DDERR_NOCOOPERATIVELEVELSET")},
- { DDERR_NOCOLORKEY ,TEXT("DDERR_NOCOLORKEY")},
- { DDERR_NOCOLORKEYHW ,TEXT("DDERR_NOCOLORKEYHW")},
- { DDERR_NOEXCLUSIVEMODE ,TEXT("DDERR_NOEXCLUSIVEMODE")},
- { DDERR_NOFLIPHW ,TEXT("DDERR_NOFLIPHW")},
- { DDERR_NOGDI ,TEXT("DDERR_NOGDI")},
- { DDERR_NOMIRRORHW ,TEXT("DDERR_NOMIRRORHW")},
- { DDERR_NOTFOUND ,TEXT("DDERR_NOTFOUND")},
- { DDERR_NOOVERLAYHW ,TEXT("DDERR_NOOVERLAYHW")},
- { DDERR_NORASTEROPHW ,TEXT("DDERR_NORASTEROPHW")},
- { DDERR_NOROTATIONHW ,TEXT("DDERR_NOROTATIONHW")},
- { DDERR_NOSTRETCHHW ,TEXT("DDERR_NOSTRETCHHW")},
- { DDERR_NOT4BITCOLOR ,TEXT("DDERR_NOT4BITCOLOR")},
- { DDERR_NOT4BITCOLORINDEX ,TEXT("DDERR_NOT4BITCOLORINDEX")},
- { DDERR_NOT8BITCOLOR ,TEXT("DDERR_NOT8BITCOLOR")},
- { DDERR_NOTEXTUREHW ,TEXT("DDERR_NOTEXTUREHW")},
- { DDERR_NOVSYNCHW ,TEXT("DDERR_NOVSYNCHW")},
- { DDERR_NOZBUFFERHW ,TEXT("DDERR_NOZBUFFERHW")},
- { DDERR_NOZOVERLAYHW ,TEXT("DDERR_NOZOVERLAYHW")},
- { DDERR_OUTOFCAPS ,TEXT("DDERR_OUTOFCAPS")},
- { DDERR_OUTOFMEMORY ,TEXT("DDERR_OUTOFMEMORY")},
- { DDERR_OUTOFVIDEOMEMORY ,TEXT("DDERR_OUTOFVIDEOMEMORY")},
- { DDERR_OVERLAYCANTCLIP ,TEXT("DDERR_OVERLAYCANTCLIP")},
- { DDERR_OVERLAYCOLORKEYONLYONEACTIVE,TEXT("DDERR_OVERLAYCOLORKEYONLYONEACTIVE")},
- { DDERR_PALETTEBUSY ,TEXT("DDERR_PALETTEBUSY")},
- { DDERR_COLORKEYNOTSET ,TEXT("DDERR_COLORKEYNOTSET")},
- { DDERR_SURFACEALREADYATTACHED ,TEXT("DDERR_SURFACEALREADYATTACHED")},
- { DDERR_SURFACEALREADYDEPENDENT ,TEXT("DDERR_SURFACEALREADYDEPENDENT")},
- { DDERR_SURFACEBUSY ,TEXT("DDERR_SURFACEBUSY")},
- { DDERR_SURFACEISOBSCURED ,TEXT("DDERR_SURFACEISOBSCURED")},
- { DDERR_SURFACELOST ,TEXT("DDERR_SURFACELOST")},
- { DDERR_SURFACENOTATTACHED ,TEXT("DDERR_SURFACENOTATTACHED")},
- { DDERR_TOOBIGHEIGHT ,TEXT("DDERR_TOOBIGHEIGHT")},
- { DDERR_TOOBIGSIZE ,TEXT("DDERR_TOOBIGSIZE")},
- { DDERR_TOOBIGWIDTH ,TEXT("DDERR_TOOBIGWIDTH")},
- { DDERR_UNSUPPORTED ,TEXT("DDERR_UNSUPPORTED")},
- { DDERR_UNSUPPORTEDFORMAT ,TEXT("DDERR_UNSUPPORTEDFORMAT")},
- { DDERR_UNSUPPORTEDMASK ,TEXT("DDERR_UNSUPPORTEDMASK")},
- { DDERR_VERTICALBLANKINPROGRESS ,TEXT("DDERR_VERTICALBLANKINPROGRESS")},
- { DDERR_WASSTILLDRAWING ,TEXT("DDERR_WASSTILLDRAWING")},
- { DDERR_XALIGN ,TEXT("DDERR_XALIGN")},
- { DDERR_INVALIDDIRECTDRAWGUID ,TEXT("DDERR_INVALIDDIRECTDRAWGUID")},
- { DDERR_DIRECTDRAWALREADYCREATED ,TEXT("DDERR_DIRECTDRAWALREADYCREATED")},
- { DDERR_NODIRECTDRAWHW ,TEXT("DDERR_NODIRECTDRAWHW")},
- { DDERR_PRIMARYSURFACEALREADYEXISTS ,TEXT("DDERR_PRIMARYSURFACEALREADYEXISTS")},
- { DDERR_NOEMULATION ,TEXT("DDERR_NOEMULATION")},
- { DDERR_REGIONTOOSMALL ,TEXT("DDERR_REGIONTOOSMALL")},
- { DDERR_CLIPPERISUSINGHWND ,TEXT("DDERR_CLIPERISUSINGHWND")},
- { DDERR_NOCLIPPERATTACHED ,TEXT("DDERR_NOCLIPPERATTACHED")},
- { DDERR_NOHWND ,TEXT("DDERR_NOHWND")},
- { DDERR_HWNDSUBCLASSED ,TEXT("DDERR_HWNDSUBCLASSED")},
- { DDERR_HWNDALREADYSET ,TEXT("DDERR_HWNDALREADYSET")},
- { DDERR_NOPALETTEATTACHED ,TEXT("DDERR_NOPALETTEATTACHED")},
- { DDERR_NOPALETTEHW ,TEXT("DDERR_NOPALETTEHW")},
- { DDERR_BLTFASTCANTCLIP ,TEXT("DDERR_BLTFASTCANTCLIP")},
- { DDERR_NOBLTHW ,TEXT("DDERR_NOBLTHW")},
- { DDERR_NODDROPSHW ,TEXT("DDERR_NODDROPSHW")},
- { DDERR_OVERLAYNOTVISIBLE ,TEXT("DDERR_OVERLAYNOTVISIBLE")},
- { DDERR_NOOVERLAYDEST ,TEXT("DDERR_NOOVERLAYDEST")},
- { DDERR_INVALIDPOSITION ,TEXT("DDERR_INVALIDPOSITION")},
- { DDERR_NOTAOVERLAYSURFACE ,TEXT("DDERR_NOTAOVERLAYSURFACE")},
- { DDERR_EXCLUSIVEMODEALREADYSET ,TEXT("DDERR_EXCLUSIVEMODEALREADYSET")},
- { DDERR_NOTFLIPPABLE ,TEXT("DDERR_NOTFLIPPABLE")},
- { DDERR_CANTDUPLICATE ,TEXT("DDERR_CANTDUPLICATE")},
- { DDERR_NOTLOCKED ,TEXT("DDERR_NOTLOCKED")},
- { DDERR_CANTCREATEDC ,TEXT("DDERR_CANTCREATEDC")},
- { DDERR_NODC ,TEXT("DDERR_NODC")},
- { DDERR_WRONGMODE ,TEXT("DDERR_WRONGMODE")},
- { DDERR_IMPLICITLYCREATED ,TEXT("DDERR_IMPLICITLYCREATED")},
-};


-
HWND LBCreate( HWND hWnd, HINSTANCE hInst, DWORD pos, BOOL debug )
{
hWndListBox = CreateWindow(
@@ -198,28 +104,3 @@
}


-static LPTSTR getErrorString( HRESULT ddrval )
-{
- int i;
-
- for( i=0;i<sizeof( elErrors )/sizeof( elErrors[0] );i++ )
- {
- if( ddrval == elErrors[i].rval )
- {
- return elErrors[i].str;
- }
- }
-
- return TEXT("Unknown Error Code");
-}
-
-
-void __cdecl LBPrintfRC( HRESULT ddrval, LPTSTR fmt, ... )
-{
- TCHAR buff[512];
-
- wvsprintf( buff, fmt, (LPVOID)(&fmt+1) );
-
- LBPrintf( TEXT("%s, rc=%ld (0x%08lx:%s)"), buff, LOWORD( ddrval ),
- ddrval, getErrorString( ddrval ) );
-}
Index: resource.h
===================================================================
--- resource.h (revision 23142)
+++ resource.h (working copy)
@@ -70,16 +70,19 @@
#define IDC_COMBO_DRIVERS 1035
#define ID_FILE_RESTORE 40001
#define ID_FILE_EXIT 40002
-#define ID_VIEW_DRIVERCAPS 40003
-#define ID_VIEW_DRIVERCOLORKEYCAPS 40004
-#define ID_VIEW_DRIVERFXCAPS 40005
-#define ID_VIEW_DRIVERPALETTECAPS 40006
-#define ID_VIEW_DRIVERSURFACECAPS 40007
-#define ID_VIEW_HELCAPS 40008
+#define ID_VIEW_DRIVERCOLORKEYCAPS 40003
+#define ID_VIEW_DRIVERPALETTECAPS 40004
+#define ID_VIEW_DRIVERBLTCAPS 40005
+#define ID_VIEW_DRIVERALPHACAPS 40006
+#define ID_VIEW_DRIVEROVERLAYCAPS 40007
+#define ID_VIEW_DRIVERMISCCAPS 40008
#define ID_VIEW_HELCOLORKEYCAPS 40009
-#define ID_VIEW_HELFXCAPS 40010
-#define ID_VIEW_HELPALETTECAPS 40011
-#define ID_VIEW_HELSURFACECAPS 40012
+#define ID_VIEW_HELPALETTECAPS 40010
+#define ID_VIEW_HELBLTCAPS 40011
+#define ID_VIEW_HELALPHACAPS 40012
+#define ID_VIEW_HELOVERLAYCAPS 40013
+#define ID_VIEW_HELMISCCAPS 40014
+
#define IDC_STATIC -1

// Next default values for new objects


source 所在位置是 C:\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\DXMISC\DDCAPS

build ddcaps 的 command 是:
sysgen -p directx ddcaps
因為 ddcaps 是在 public 下的 directx 目錄,所以 -p 後面要寫 directx ,意思是(path = directx)。
project name 就是 ddcaps.

DirectDraw Capability in CE 6.0

要知道系統哪些 DirectDraw Function 是 hardware support,哪些是用 software emulate,
可以用 IDirectDraw::GetCaps 來取得 ddraw capability 列表:
HRESULT GetCaps(
LPDDCAPS lpDDDriverCaps,
LPDDCAPS lpDDEmulCaps
);

傳進去的兩個 argument 都是用來取出 capability 的 structure pointer,結構完全一樣,一個是 hardware support list,一個是 software emulation list
  • lpDDDriverCaps : hardware
  • lpDDEmulCaps : software
Support List structure 的definition 是 DDCAPS:

typedef struct _DDCAPS {
DWORD dwSize;
DWORD dwCKeyCaps;
DWORD dwPalCaps;
DWORD dwBltCaps;
DWORD dwAlphaCaps;
DWORD dwOverlayCaps;
DWORD dwVidMemTotal;
DWORD dwVidMemFree;
DWORD dwVidMemStride;
DWORD dwMaxVisibleOverlays;
DWORD dwCurrVisibleOverlays;
DWORD dwNumFourCCCodes;
DWORD dwAlignBoundarySrc;
DWORD dwAlignSizeSrc;
DWORD dwAlignBoundaryDest;
DWORD dwAlignSizeDest;
DWORD dwRops[DD_ROP_SPACE];
DWORD dwMinOverlayStretch;
DWORD dwMaxOverlayStretch;
DWORD dwMiscCaps;
} DDCAPS,FAR *LPDDCAPS;

每個 DWORD的每個 bit 都代表一個 function,宣告在 ddraw.h (C:\WINCE600\PUBLIC\COMMON\SDK\INC\ddraw.h)

platform builder public folder 附有一個 DDCAPS 的 sample program,可以列出 platform ddraw hardware/software support .
很悲慘的是,ddcaps structure 在 CE 6.0 大幅修改,所以DDCAPS sample code 在 6.0 不能 build 了!!
看這一篇: DirectDraw Migration.




我做了修改: Modify DDCAPS for CE 6.0

8.11.2010

CListBox : ListBox control in WTL

WTL 也包裝了一些 common control,例如 ListBox,名稱叫 CListBox, 在 atlctrls.h.

像 前面的 example : http://realchecko.blogspot.com/2010/05/win32-listbox-control.html
改用 WTL 來寫,就是:
#pragma once
#define WINVER 0x0600

#include <atlbase.h>
#include <atlapp.h>
#include <atlwin.h>
#include <atlctrls.h>

#include "resource.h"

class CMainDialog : public CDialogImpl<CMainDialog>
{
public:
enum {IDD = IDD_DIALOG1 };
int addi;
CListBox list;


BEGIN_MSG_MAP(CMainDialog)
MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
COMMAND_ID_HANDLER(IDC_BTNADD,OnBtnAdd)
END_MSG_MAP()

LRESULT OnInitDialog(UINT,WPARAM,LPARAM,BOOL&)
{
addi=0;
RETAILMSG(1,(TEXT("OnInitDialog\r\n")));
list.Attach(GetDlgItem(IDC_LIST1));
return TRUE;
}


LRESULT OnCancel(WORD,WORD wID,HWND,BOOL&)
{
::PostQuitMessage(wID);
return 0;
}

LRESULT OnBtnAdd(WORD,WORD wID,HWND,BOOL& hHandled)
{
TCHAR outmsg[10];
swprintf(outmsg,_T("%d"),addi++);
list.AddString(outmsg);
int cnt = list.GetCount();
if(cnt>30)
list.DeleteString(0);
cnt = list.GetCount();
if(cnt>=14)
list.SetTopIndex(cnt-14);
RETAILMSG(1,(TEXT("Button Add\r\n")));
return TRUE;
}

};

CAppModule _Module;

int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE,LPTSTR lpstrCmdLine,int nCmdShow)
{
HRESULT hRes = ::CoInitializeEx(NULL,COINIT_MULTITHREADED);
::DefWindowProc(NULL,0,0,0L);
AtlInitCommonControls(NULL);
hRes = _Module.Init(NULL,hInstance);

CMainDialog dlgMain;
hRes = dlgMain.DoModal();
::CoUninitialize();

return hRes;
}

可以看到,大概是用 Attach( GetDlgItem(IDC_LIST1)) 把 WTL class: CListBox 和 ListBox control 建立關係。

相關的說明: http://www.cchsu.com/arthur/prg_bg5/wtl3.htm