Changeset 7038

Show
Ignore:
Timestamp:
02/22/08 19:06:51 (5 years ago)
Author:
mosa
Message:

lang/c/GSD:
Added API (CheckApiVersion?)
複数のプロセスからの初期化を禁止
InitTexture?()を呼び出したときに以前のテクスチャが残ることがあるのを修正

Location:
lang/c/GSD/trunk
Files:
1 added
6 modified

Legend:

Unmodified
Added
Removed
  • lang/c/GSD/trunk/common.h

    r6959 r7038  
    2626 
    2727#define MUTEX_SETTINGS  "gsd_mutex" 
     28#define MUTEX_MULTI     "gsd_mutex_multi" 
    2829#define SHARED_SETTINGS "gsd_settings" 
    2930#define SHARED_PIXELS   "gsd_pixels" 
  • lang/c/GSD/trunk/gsd.def

    r6959 r7038  
    44 
    55EXPORTS 
    6         GSD_DataLock                    @1 
    7         GSD_DataUnlock                  @2 
    8         GSD_DelTexture                  @3 
    9         GSD_Finalize                    @4 
    10         GSD_GetApiVersion               @5 
    11         GSD_GetLastUpdate               @6 
    12         GSD_GetMaxTextureNum    @7 
    13         GSD_GetMaxTextureSize   @8 
    14         GSD_GetTexture                  @9 
    15         GSD_GetVersion                  @10 
    16         GSD_InitTexture                 @11 
    17         GSD_Initialize                  @12 
    18         GSD_SetFpsAlign                 @13 
    19         GSD_SetFpsLimit                 @14 
    20         GSD_SetTexture                  @15 
    21         GSD_SetTimerOrg                 @16 
    22         GSD_ShowFps                             @17 
    23         GSD_UpdateOnActive              @18 
     6        GSD_CheckApiVersion             @1 
     7        GSD_DataLock                    @2 
     8        GSD_DataUnlock                  @3 
     9        GSD_DelTexture                  @4 
     10        GSD_Finalize                    @5 
     11        GSD_GetApiVersion               @6 
     12        GSD_GetLastUpdate               @7 
     13        GSD_GetMaxTextureNum    @8 
     14        GSD_GetMaxTextureSize   @9 
     15        GSD_GetTexture                  @10 
     16        GSD_GetVersion                  @11 
     17        GSD_InitTexture                 @12 
     18        GSD_Initialize                  @13 
     19        GSD_SetFpsAlign                 @14 
     20        GSD_SetFpsLimit                 @15 
     21        GSD_SetTexture                  @16 
     22        GSD_SetTimerOrg                 @17 
     23        GSD_ShowFps                             @18 
     24        GSD_UpdateOnActive              @19 
  • lang/c/GSD/trunk/gsd.h

    r6959 r7038  
    66#endif 
    77 
    8 #define GSD_APIVER 0x00010001 
     8#define GSD_APIVER 0x00020001 
    99 
    1010struct GSD_TextureInfo 
    1111{ 
    12         BOOL active;    // �\�����邩�ۂ� (TRUE�AFALSE) 
    13         DWORD texSize;  // �e�N�X�`���̃T�C�Y�A2�ׂ̂����Ȃ����Ȃ��� (�s�N�Z���P�� 0�Ȃ��N�X�`���폜 
     12        BOOL active;    // �e�N�X�`��������邩�ۂ� (TRUE�AFALSE) 
     13        DWORD texSize;  // �e�N�X�`���̃T�C�Y�AGSD_InitTexture() �Ŏw�肵���l�Ɠ����łȂ����Ȃ��� 
    1414        int x, y;       // �e�N�X�`���̈ʒu (align�̒l�ɂ��Ċ�ʒu���ς�) 
    15         DWORD color;    // ���F (�ʏ��� 0xffffffff) 
     15        DWORD color;    // ���F (�ʏ��s�����̔� 0xffffffff) 
    1616        DWORD align;    // �e�N�X�`���̔z�u (DT_LEFT�ADT_CENTER�ADT_RIGHT�ADT_TOP�ADT_VCENTER�ADT_BOTTOM) 
    17         BYTE *data;     // �ݒ��ݕύX��������ULL 
     17        BYTE *data;     // �e�N�X�`����[�����o�b�t�@ �ݒ��ݕύX��������ULL 
    1818}; 
    1919 
     
    2525DWORD WINAPI GSD_GetVersion(); 
    2626DWORD WINAPI GSD_GetApiVersion(); 
    27 BOOL WINAPI GSD_InitTexture(const DWORD *size, int num); 
     27BOOL WINAPI GSD_CheckApiVersion(DWORD ver); 
     28BOOL WINAPI GSD_InitTexture(const DWORD *texSize, int num); 
    2829BOOL WINAPI GSD_SetTexture(int index, const struct GSD_TextureInfo *info); 
    2930BOOL WINAPI GSD_GetTexture(int index, struct GSD_TextureInfo *info); 
     
    3940#ifdef __cplusplus 
    4041} 
     42 
     43class GSD_DataLocker 
     44{ 
     45public: 
     46        GSD_DataLocker() 
     47        { 
     48                GSD_DataLock(); 
     49        } 
     50 
     51        ~GSD_DataLocker() 
     52        { 
     53                GSD_DataUnlock(); 
     54        } 
     55}; 
     56 
    4157#endif 
    4258 
  • lang/c/GSD/trunk/hook.cpp

    r6959 r7038  
    270270        lo = new sLocal; 
    271271 
     272        if(lo->mutexMulti.isAlreadyExists()) 
     273        { 
     274                delete lo; 
     275                lo = NULL; 
     276 
     277                return FALSE; 
     278        } 
     279 
    272280        GetOffsetD3D9(&n1); 
    273281        GetOffsetD3D8(&n2); 
     
    367375//----------------------------------------------------------------------------- 
    368376 
    369 BOOL WINAPI GSD_InitTexture(const DWORD *size, int num) 
     377BOOL WINAPI GSD_CheckApiVersion(DWORD ver) 
     378{ 
     379        WORD hi, lo, hi2, lo2; 
     380 
     381        hi = HIWORD(GSD_APIVER); 
     382        lo = LOWORD(GSD_APIVER); 
     383 
     384        hi2 = HIWORD(ver); 
     385        lo2 = LOWORD(ver); 
     386 
     387        if(hi != hi2) 
     388                return FALSE; 
     389 
     390        if(lo < lo2) 
     391                return FALSE; 
     392 
     393        return TRUE; 
     394} 
     395 
     396//-----------------------------------------------------------------------------  
     397BOOL WINAPI GSD_InitTexture(const DWORD *texSize, int num) 
    370398{ 
    371399        int i; 
     
    376404                return FALSE; 
    377405 
    378         if(!size || num < 1) 
     406        if(!texSize || num < 1) 
    379407                return FALSE; 
    380408 
    381409        lo->offsets[0] = 0; 
    382         lo->sizes[0] = size[0]; 
     410        lo->texSizes[0] = texSize[0]; 
    383411 
    384412        for(i=1; i<num; i++) 
    385413        { 
    386                 lo->offsets[i] = lo->offsets[i-1] + size[i-1]; 
    387                 lo->sizes[i] = size[i]; 
     414                lo->offsets[i] = lo->offsets[i-1] + texSize[i-1]*texSize[i-1]*4;        // 32bit 
     415                lo->texSizes[i] = texSize[i]; 
    388416        } 
    389417 
     
    391419        { 
    392420                lo->offsets[i] = 0; 
    393                 lo->sizes[i] = 0; 
     421                lo->texSizes[i] = 0; 
     422 
     423                lo->settings->texInfo[i].texSize = 0; 
    394424        } 
    395425 
    396426        total = 0; 
    397427        for(i=0; i<num; i++) 
    398                 total += size[i]; 
     428                total += texSize[i]*texSize[i]*4;       // 32bit 
    399429 
    400430        lo->settings->pixelsRevision++; 
     
    424454                return FALSE; 
    425455 
    426         if(!info || index >= MAX_TEXNUM) 
     456        if(!info || index < 0 || index >= MAX_TEXNUM) 
    427457                return FALSE; 
    428458 
     
    431461 
    432462        if(!lo->smPixels.getData() && info->data) 
     463                return FALSE; 
     464 
     465        if(lo->texSizes[index] != info->texSize) 
    433466                return FALSE; 
    434467 
     
    442475        if(info->data) 
    443476        { 
     477                BYTE *p; 
     478 
    444479                lo->settings->texInfo[index].offset = lo->offsets[index]; 
    445480                lo->settings->texInfo[index].revision++; 
    446481 
    447                 memcpy(lo->smPixels.getData() + lo->offsets[index], info->data, lo->sizes[index]); 
     482                p = (BYTE*)lo->smPixels.getData() + lo->offsets[index]; 
     483                if(info->data != p) 
     484                        memcpy(p, info->data, lo->texSizes[index]*lo->texSizes[index]*4);       // 32bit 
    448485        } 
    449486 
     
    458495                return FALSE; 
    459496 
    460         if(!info || index >= MAX_TEXNUM) 
    461                 return FALSE; 
    462  
    463         if(index >= lo->maxIndex && info->data) 
    464                 return FALSE; 
    465  
    466         if(!lo->smPixels.getData() && info->data) 
     497        if(!info || index < 0 || index >= MAX_TEXNUM) 
    467498                return FALSE; 
    468499 
     
    472503        info->x = lo->settings->texInfo[index].x; 
    473504        info->y = lo->settings->texInfo[index].y; 
    474         info->texSize = lo->settings->texInfo[index].texSize; 
    475  
    476         if(info->data) 
    477                 memcpy(info->data, lo->smPixels.getData() + lo->offsets[index], lo->sizes[index]); 
     505        info->texSize = lo->texSizes[index]; 
     506 
     507        if(index < lo->maxIndex && lo->smPixels.getData()) 
     508        { 
     509                info->data = (BYTE*)lo->smPixels.getData() + lo->offsets[index]; 
     510        } 
     511        else 
     512        { 
     513                info->data = NULL; 
     514        } 
    478515 
    479516        return TRUE; 
     
    487524                return; 
    488525 
    489         if(index >= MAX_TEXNUM) 
     526        if(index < 0 || index >= MAX_TEXNUM) 
    490527                return; 
    491528 
  • lang/c/GSD/trunk/hook.h

    r6959 r7038  
    2323{ 
    2424        CMutex mutexSettings; 
     25        CMutex mutexMulti; 
    2526        CSharedMemory smSettings; 
    2627        CSharedMemory smPixels; 
    2728 
    2829        DWORD offsets[MAX_TEXNUM]; 
    29         DWORD sizes[MAX_TEXNUM]; 
     30        DWORD texSizes[MAX_TEXNUM]; 
    3031        int maxTextureSize; 
    3132        int maxIndex; 
     
    3435 
    3536        sLocal() : 
    36                 mutexSettings(MUTEX_SETTINGS) 
     37                mutexSettings(MUTEX_SETTINGS), 
     38                mutexMulti(MUTEX_MULTI) 
    3739        { 
    3840                int i; 
     
    4749                { 
    4850                        offsets[i] = 0; 
    49                         sizes[i] = 0; 
     51                        texSizes[i] = 0; 
    5052                } 
    5153        } 
  • lang/c/GSD/trunk/resource.rc

    r6959 r7038  
    5555 
    5656VS_VERSION_INFO VERSIONINFO 
    57  FILEVERSION 0,7,1,0 
     57 FILEVERSION 0,7,2,0 
    5858 PRODUCTVERSION 0,0,0,0 
    5959 FILEFLAGSMASK 0x3fL 
     
    7474            VALUE "CompanyName", " \0" 
    7575            VALUE "FileDescription", "GSD\0" 
    76             VALUE "FileVersion", "0, 7, 1, 0\0" 
     76            VALUE "FileVersion", "0, 7, 2, 0\0" 
    7777            VALUE "InternalName", "\0" 
    7878            VALUE "LegalCopyright", "Copyright (C) 2008 ��e5bW6vDOJ.\0"