--- np2/macosx/scrnmng.cpp 2003/10/16 17:59:38 1.1.1.1 +++ np2/macosx/scrnmng.cpp 2003/10/19 14:48:07 1.3 @@ -12,13 +12,41 @@ typedef struct { } _QDRAW, *QDRAW; +#ifdef NP2GCC +#define macosx_only +#endif + static _QDRAW qdraw; -static GDHandle hgd; -static GWorldPtr gwp; static SCRNSURF scrnsurf; +#if !defined(macosx_only) +static GWorldPtr gwp; +static GDHandle hgd; +#endif -#ifdef NP2GCC -#define macosx_only +#if defined(macosx_only) +#if defined(SUPPORT_16BPP) +UINT16 scrnmng_makepal16(RGB32 pal32) { +//win9xのをちょこっと改造(tk800) + RGB32 pal; + + pal.d = pal32.d & 0xF8F8F8; + return((UINT16)((pal.p.g << 2) + + (pal.p.r << 7) + (pal.p.b >> 3))); +} +#else +UINT16 scrnmng_makepal16(RGB32 pal32) { + return(0); +} +#endif + +//ディスプレイの色深度を返す(tk800) +int scrnmng_getbpp(void) { + return(CGDisplayBitsPerPixel(kCGDirectMainDisplay)); +} +#else +int scrnmng_getbpp(void) { + return(32); +} #endif void scrnmng_initialize(void) { @@ -30,12 +58,11 @@ BOOL scrnmng_create(BYTE scrnmode) { qd = &qdraw; SetRect(&qd->rect, 0, 0, 640, 480); -#if defined(macosx_only) +#if defined(macosx_only) //GWorldの代わりに直接ウィンドウバッファを設定(tk800) GrafPtr dstport; dstport = GetWindowPort(hWndMain); if (dstport) { - LockPortBits(dstport);//こうしないと描画位置がおかしくなる qd->pm = GetPortPixMap(dstport); qd->exist = TRUE; qd->hWnd = hWndMain; @@ -64,9 +91,6 @@ void scrnmng_destroy(void) { qd->exist = FALSE; DisposeGWorld(qd->gw); } -#if defined(macosx_only) - UnlockPortBits(GetWindowPort(hWndMain)); -#endif } void scrnmng_setwidth(int posx, int width) { @@ -89,15 +113,7 @@ void scrnmng_setheight(int posy, int hei const SCRNSURF *scrnmng_surflock(void) { QDRAW qd; - GDHandle hgd; - GWorldPtr gwp; -#if 0 && defined(macosx_only) -//色深度が32ビットじゃないときはさようなら(tk800) - if (CGDisplayBitsPerPixel(kCGDirectMainDisplay)!=32) { - return(NULL); - } -#endif qd = &qdraw; if (!qd->exist) { return(NULL); @@ -105,17 +121,22 @@ const SCRNSURF *scrnmng_surflock(void) { #if defined(macosx_only) //描画位置をウィンドウバーの下に設定(tk800) + LockPortBits(GetWindowPort(hWndMain));//こうしないと描画位置がおかしくなる(tk800) LockPixels(qd->pm); - scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + +640*4*22; + long rowbyte = GetPixRowBytes(qd->pm); + scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm) + rowbyte*22; + scrnsurf.xalign = rowbyte/640; + scrnsurf.yalign = rowbyte; + scrnsurf.bpp = rowbyte/640 * 8; #else GetGWorld(&gwp, &hgd); LockPixels(qd->pm); SetGWorld(qd->gw, NULL); scrnsurf.ptr = (BYTE *)GetPixBaseAddr(qd->pm); -#endif scrnsurf.xalign = 4; scrnsurf.yalign = ((*qd->pm)->rowBytes) & 0x3fff; +#endif scrnsurf.width = 640; scrnsurf.height = 400; scrnsurf.extend = 0; @@ -134,8 +155,8 @@ void scrnmng_surfunlock(const SCRNSURF * GrafPtr dstport; dstport = GetWindowPort(hWndMain); QDAddRectToDirtyRegion(dstport, &qd->rect); - QDFlushPortBuffer(dstport, NULL); UnlockPixels(qd->pm); + UnlockPortBits(dstport); #else #if TARGET_API_MAC_CARBON @@ -169,4 +190,3 @@ void scrnmng_surfunlock(const SCRNSURF * #endif } } -