X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fgpu-gles%2FgpuTexture.c;h=2f96482ae8435e87073f7d48ee3cb3b6c7b772e2;hp=f057951b7f2608beb6929c0e5b02fd2fa3ce00b4;hb=8a55ebcc07d4f860633db8c77bb9e16bcfa03313;hpb=677ea10304049d6f7aae48317fe32cfea060d209 diff --git a/plugins/gpu-gles/gpuTexture.c b/plugins/gpu-gles/gpuTexture.c index f057951b..2f96482a 100644 --- a/plugins/gpu-gles/gpuTexture.c +++ b/plugins/gpu-gles/gpuTexture.c @@ -67,14 +67,6 @@ #define _IN_TEXTURE -#ifdef _WINDOWS -#include "stdafx.h" - -#include "externals.h" -#include "texture.h" -#include "gpu.h" -#include "prim.h" -#else #include "gpuStdafx.h" #include "gpuDraw.h" @@ -83,7 +75,7 @@ #include "gpuTexture.h" #include "gpuPlugin.h" #include "gpuPrim.h" -#endif + #define CLUTCHK 0x00060000 #define CLUTSHIFT 17 @@ -98,11 +90,7 @@ GLuint gTexFrameName=0; int iTexGarbageCollection=1; unsigned long dwTexPageComp=0; int iVRamSize=0; -#ifdef _WINDOWS -int iClampType=GL_CLAMP; -#else int iClampType=GL_CLAMP_TO_EDGE; -#endif int iFilter = GL_LINEAR; void (*LoadSubTexFn) (int,int,short,short); unsigned long (*PalTexturedColourFn) (unsigned long); @@ -166,10 +154,6 @@ unsigned short (*PTCF[2]) (unsigned short); // texture cache implementation //////////////////////////////////////////////////////////////////////// -#ifdef _WINDOWS -#pragma pack(1) -#endif - // "texture window" cache entry typedef struct textureWndCacheEntryTag @@ -195,9 +179,6 @@ typedef struct textureSubCacheEntryTagS unsigned char Opaque; } textureSubCacheEntryS; -#ifdef _WINDOWS -#pragma pack() -#endif //--------------------------------------------- @@ -491,6 +472,9 @@ void CheckTextureMemory(void) return; } +#if 1 + iSortTexCnt=MAXSORTTEX; +#else // below vram detector supposedly crashes some drivers iTSize=256; p=(char *)malloc(iTSize*iTSize*4); @@ -527,6 +511,7 @@ void CheckTextureMemory(void) else iSortTexCnt=iCnt-3+min(1,0); // place for menu&texwnd if(iSortTexCnt<8) iSortTexCnt=8; +#endif } //////////////////////////////////////////////////////////////////////// @@ -589,6 +574,7 @@ void CleanupTextureStore() int i,j;textureWndCacheEntry * tsx; //----------------------------------------------------// glBindTexture(GL_TEXTURE_2D,0); + glError(); //----------------------------------------------------// free(texturepart); // free tex part texturepart=0; @@ -603,34 +589,41 @@ void CleanupTextureStore() { if(tsx->texname) // -> some tex? glDeleteTextures(1,&tsx->texname); // --> delete it + glError(); } iMaxTexWnds=0; // no more tex wnds //----------------------------------------------------// if(gTexMovieName!=0) // some movie tex? glDeleteTextures(1, &gTexMovieName); // -> delete it + glError(); gTexMovieName=0; // no more movie tex //----------------------------------------------------// if(gTexFrameName!=0) // some 15bit framebuffer tex? glDeleteTextures(1, &gTexFrameName); // -> delete it + glError(); gTexFrameName=0; // no more movie tex //----------------------------------------------------// if(gTexBlurName!=0) // some 15bit framebuffer tex? glDeleteTextures(1, &gTexBlurName); // -> delete it + glError(); gTexBlurName=0; // no more movie tex //----------------------------------------------------// for(i=0;i<3;i++) // -> loop for(j=0;j clean mem + pscSubtexStore[i][j]=0; } for(i=0;i tex used ? { glDeleteTextures(1,&uiStexturePage[i]); + glError(); uiStexturePage[i]=0; // --> delete it } free(pxSsubtexLeft[i]); // -> clean mem + pxSsubtexLeft[i]=0; } //----------------------------------------------------// } @@ -648,7 +641,7 @@ void ResetTextureArea(BOOL bDelTex) dwTexPageComp=0; //----------------------------------------------------// - if(bDelTex) {glBindTexture(GL_TEXTURE_2D,0);gTexName=0;} + if(bDelTex) {glBindTexture(GL_TEXTURE_2D,0); glError();gTexName=0;} //----------------------------------------------------// tsx=wcWndtexStore; for(i=0;iused=0; if(bDelTex && tsx->texname) { - glDeleteTextures(1,&tsx->texname); + glDeleteTextures(1,&tsx->texname); glError(); tsx->texname=0; } } @@ -678,7 +671,7 @@ void ResetTextureArea(BOOL bDelTex) lu=pxSsubtexLeft[i]; lu->l=0; if(bDelTex && uiStexturePage[i]) - {glDeleteTextures(1,&uiStexturePage[i]);uiStexturePage[i]=0;} + {glDeleteTextures(1,&uiStexturePage[i]); glError();uiStexturePage[i]=0;} } } @@ -900,21 +893,25 @@ void DefineTextureWnd(void) { if(gTexName==0) glGenTextures(1, &gTexName); - + glError(); glBindTexture(GL_TEXTURE_2D, gTexName); - + glError(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - + glError(); { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); + glError(); } glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, TWin.Position.x1, TWin.Position.y1, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturepart); + glError(); + //LOGE("DefineTextureWnd x:%d y:%d",TWin.Position.x1,TWin.Position.y1); + } //////////////////////////////////////////////////////////////////////// @@ -1657,21 +1654,23 @@ void DefinePalTextureWnd(void) { if(gTexName==0) glGenTextures(1, &gTexName); - + glError(); glBindTexture(GL_TEXTURE_2D, gTexName); - + glError(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - + glError(); { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); } - + glError(); glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, TWin.Position.x1, TWin.Position.y1, 0, GL_RGBA, GL_UNSIGNED_BYTE,texturepart); + glError(); + //LOGE("DefinePalTextureWnd x:%d y:%d",TWin.Position.x1,TWin.Position.y1); } /////////////////////////////////////////////////////// @@ -1918,31 +1917,32 @@ void DefinePackedTextureMovie(void) { if(gTexMovieName==0) { - glGenTextures(1, &gTexMovieName); + glEnable(GL_TEXTURE_2D); + glGenTextures(1, &gTexMovieName); glError(); gTexName=gTexMovieName; - glBindTexture(GL_TEXTURE_2D, gTexName); + glBindTexture(GL_TEXTURE_2D, gTexName); glError(); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); glError(); if(!bUseFastMdec) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glError(); } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); glError(); } glTexImage2D(GL_TEXTURE_2D, 0, //giWantedRGBA, GL_RGBA, - 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturepart); + 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturepart); glError(); } else { - gTexName=gTexMovieName;glBindTexture(GL_TEXTURE_2D, gTexName); + gTexName=gTexMovieName;glBindTexture(GL_TEXTURE_2D, gTexName); glError(); } glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, @@ -1950,7 +1950,9 @@ void DefinePackedTextureMovie(void) (xrMovieArea.y1-xrMovieArea.y0), GL_RGBA, GL_UNSIGNED_SHORT, - texturepart); + texturepart); glError(); + //LOGE("DefinePackedTextureMovie x:%d y:%d",(xrMovieArea.x1-xrMovieArea.x0),(xrMovieArea.y1-xrMovieArea.y0)); + } //////////////////////////////////////////////////////////////////////// @@ -1959,35 +1961,36 @@ void DefineTextureMovie(void) { if(gTexMovieName==0) { - glGenTextures(1, &gTexMovieName); + glGenTextures(1, &gTexMovieName); glError(); gTexName=gTexMovieName; - glBindTexture(GL_TEXTURE_2D, gTexName); + glBindTexture(GL_TEXTURE_2D, gTexName); glError(); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); glError(); if(!bUseFastMdec) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glError(); } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); glError(); } - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturepart); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturepart); glError(); } else { - gTexName=gTexMovieName;glBindTexture(GL_TEXTURE_2D, gTexName); + gTexName=gTexMovieName;glBindTexture(GL_TEXTURE_2D, gTexName); glError(); } glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, (xrMovieArea.x1-xrMovieArea.x0), (xrMovieArea.y1-xrMovieArea.y0), - GL_RGBA, GL_UNSIGNED_BYTE, texturepart); + GL_RGBA, GL_UNSIGNED_BYTE, texturepart); glError(); + //LOGE("DefineTextureMovie x:%d y:%d",(xrMovieArea.x1-xrMovieArea.x0),(xrMovieArea.y1-xrMovieArea.y0)); } //////////////////////////////////////////////////////////////////////// @@ -2241,14 +2244,14 @@ GLuint BlackFake15BitTexture(void) { if(!gTexFrameName) { - glGenTextures(1, &gTexFrameName); + glGenTextures(1, &gTexFrameName); glError(); gTexName=gTexFrameName; - glBindTexture(GL_TEXTURE_2D, gTexName); + glBindTexture(GL_TEXTURE_2D, gTexName); glError(); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); glError(); { unsigned long * ta=(unsigned long *)texturepart; @@ -2256,14 +2259,15 @@ GLuint BlackFake15BitTexture(void) for(x1=0;x1<=4;x1++) *ta++=0xff000000; } - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturepart); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturepart); glError(); + } else { gTexName=gTexFrameName; - glBindTexture(GL_TEXTURE_2D, gTexName); + glBindTexture(GL_TEXTURE_2D, gTexName); glError(); } - + //LOGE("BlackFake15BitTexture x:%d y:%d",4,4); ubOpaqueDraw=0; return (GLuint)gTexName; @@ -2334,18 +2338,18 @@ GLuint Fake15BitTexture(void) if(iResX>640 || iResY>480) iFTex=1024; else iFTex=512; - glGenTextures(1, &gTexFrameName); + glGenTextures(1, &gTexFrameName); glError(); gTexName=gTexFrameName; - glBindTexture(GL_TEXTURE_2D, gTexName); + glBindTexture(GL_TEXTURE_2D, gTexName); glError(); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); glError(); p=(char *)malloc(iFTex*iFTex*4); memset(p,0,iFTex*iFTex*4); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, iFTex, iFTex, 0, GL_RGBA, GL_UNSIGNED_BYTE, p); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, iFTex, iFTex, 0, GL_RGBA, GL_UNSIGNED_BYTE, p); glError(); free(p); glGetError(); @@ -2353,9 +2357,9 @@ GLuint Fake15BitTexture(void) else { gTexName=gTexFrameName; - glBindTexture(GL_TEXTURE_2D, gTexName); + glBindTexture(GL_TEXTURE_2D, gTexName); glError(); } - + //LOGE("Fake15BitTexture x:%d y:%d",iFTex,iFTex); x1+=PreviousPSXDisplay.Range.x0; y1+=PreviousPSXDisplay.Range.y0; @@ -2427,14 +2431,14 @@ GLuint Fake15BitTexture(void) iYAdjust, rSrc.left+rRatioRect.left, iResY-rSrc.bottom-rRatioRect.top, - x1,y1); + x1,y1); glError(); if(glGetError()) { char * p=(char *)malloc(iFTex*iFTex*4); memset(p,0,iFTex*iFTex*4); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, iFTex, iFTex, - GL_RGBA, GL_UNSIGNED_BYTE, p); + GL_RGBA, GL_UNSIGNED_BYTE, p); glError(); free(p); } @@ -3433,29 +3437,30 @@ void DefineSubTextureSortHiRes(void) if(!gTexName) { - glGenTextures(1, &gTexName); - glBindTexture(GL_TEXTURE_2D, gTexName); + glGenTextures(1, &gTexName); glError(); + glBindTexture(GL_TEXTURE_2D, gTexName); glError(); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); glError(); if(iFilterType) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glError(); } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); glError(); } - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturebuffer); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturebuffer); glError(); } - else glBindTexture(GL_TEXTURE_2D, gTexName); + else glBindTexture(GL_TEXTURE_2D, gTexName); glError(); glTexSubImage2D(GL_TEXTURE_2D, 0, XTexS<<1, YTexS<<1, DXTexS<<1, DYTexS<<1, - GL_RGBA, GL_UNSIGNED_BYTE, texturebuffer); + GL_RGBA, GL_UNSIGNED_BYTE, texturebuffer); glError(); + //LOGE("DefineSubTextureSortHiRes x:%d y:%d",XTexS<<1,YTexS<<1); } ///////////////////////////////////////////////////////////////////////////// @@ -3465,29 +3470,30 @@ void DefineSubTextureSort(void) if(!gTexName) { - glGenTextures(1, &gTexName); - glBindTexture(GL_TEXTURE_2D, gTexName); + glGenTextures(1, &gTexName); glError(); + glBindTexture(GL_TEXTURE_2D, gTexName); glError(); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, iClampType); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, iClampType); glError(); if(iFilterType) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glError(); } else { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, iFilter); glError(); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); glError(); } - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0,GL_RGBA, GL_UNSIGNED_BYTE, texturepart); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0,GL_RGBA, GL_UNSIGNED_BYTE, texturepart); glError(); } - else glBindTexture(GL_TEXTURE_2D, gTexName); + else glBindTexture(GL_TEXTURE_2D, gTexName); glError(); glTexSubImage2D(GL_TEXTURE_2D, 0, XTexS, YTexS, DXTexS, DYTexS, - GL_RGBA, GL_UNSIGNED_BYTE, texturepart); + GL_RGBA, GL_UNSIGNED_BYTE, texturepart); glError(); + //LOGE("DefineSubTextureSort x:%d y:%d w:%d h:%d",XTexS,YTexS,DXTexS,DYTexS); } /////////////////////////////////////////////////////////////////////////////