From 387c75e16db2ddc5e90e353367180b55f72bb0c8 Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Thu, 9 Apr 2009 13:31:07 +0000 Subject: [PATCH] Erwan -Improved JGE texture loading, improved Wagic cache - Jge small changes in mp3 methods --- JGE/include/JRenderer.h | 13 +- JGE/include/JSoundSystem.h | 4 +- JGE/include/JTypes.h | 7 +- JGE/lib/win/jge.lib | Bin 1646328 -> 1725998 bytes JGE/libhgetools.a | Bin 34460 -> 0 bytes JGE/src/JGfx.cpp | 185 +++++++++++++++++++-------- JGE/src/JMP3.cpp | 6 +- JGE/src/JSfx.cpp | 7 +- JGE/src/JSprite.cpp | 1 + JGE/src/JTTFont.cpp | 2 +- JGE/src/win/JRenderer_Win.cpp | 12 +- JGE/src/win/JSoundSystem_Win.cpp | 25 +--- projects/mtg/include/TexturesCache.h | 2 +- projects/mtg/src/TexturesCache.cpp | 5 +- 14 files changed, 177 insertions(+), 92 deletions(-) delete mode 100644 JGE/libhgetools.a diff --git a/JGE/include/JRenderer.h b/JGE/include/JRenderer.h index f8f3da14e..7d148f162 100644 --- a/JGE/include/JRenderer.h +++ b/JGE/include/JRenderer.h @@ -124,7 +124,7 @@ public: /// @param mode - Choose to put texture in VRAM (PSP only). /// ////////////////////////////////////////////////////////////////////////// - JTexture* LoadTexture(const char* filename, int mode = 0); + JTexture* LoadTexture(const char* filename, int mode = 0, int textureFormat = TEXTURE_FORMAT); ////////////////////////////////////////////////////////////////////////// /// Create texture from memory on the fly. @@ -527,10 +527,10 @@ private: bool mVRAM; }; - void LoadJPG(TextureInfo &textureInfo, const char *filename, int mode = 0); - void LoadPNG(TextureInfo &textureInfo, const char *filename, int mode = 0); - void LoadGIF(TextureInfo &textureInfo, const char *filename, int mode = 0); - int image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode = 0); + void LoadJPG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT); + void LoadPNG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT); + void LoadGIF(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT); + int image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode = 0, int TextureFormat = TEXTURE_FORMAT); static JRenderer* mInstance; @@ -547,6 +547,9 @@ private: PIXEL_TYPE* mVRAM; int mCurrentTex; int mCurrentBlend; + int mCurrentTextureFormat; + + int PixelSize(int textureMode); #endif diff --git a/JGE/include/JSoundSystem.h b/JGE/include/JSoundSystem.h index 67e8a1907..5167132c7 100644 --- a/JGE/include/JSoundSystem.h +++ b/JGE/include/JSoundSystem.h @@ -48,6 +48,7 @@ public: JMusic(); ~JMusic(); void Update(); + int getPlayTime(); #if defined (WIN32) || defined (LINUX) FSOUND_SAMPLE *mTrack; // MP3 needed to be of "sample" type for FMOD, FMUSIC_MODULE is for MODs @@ -173,6 +174,7 @@ public: ////////////////////////////////////////////////////////////////////////// void SetVolume(int volume); + int mChannel; protected: JSoundSystem(); ~JSoundSystem(); @@ -189,7 +191,7 @@ private: #endif int mVolume; - int mChannel; + static JSoundSystem* mInstance; diff --git a/JGE/include/JTypes.h b/JGE/include/JTypes.h index 91849cd3b..0a4225851 100644 --- a/JGE/include/JTypes.h +++ b/JGE/include/JTypes.h @@ -143,7 +143,10 @@ typedef uint32_t u32; PSP_CTRL_NOTE = 0x800000 } PspCtrlButtons; - + #define TEXTURE_FORMAT 0 + #define GU_PSM_8888 0 + #define GU_PSM_5551 0 + #define GU_PSM_4444 0 #define PIXEL_TYPE DWORD #else // PSP @@ -327,7 +330,7 @@ public: #if defined (WIN32) || defined (LINUX) GLuint mTexId; #else - + int mTextureFormat; int mTexId; bool mInVideoRAM; PIXEL_TYPE* mBits; diff --git a/JGE/lib/win/jge.lib b/JGE/lib/win/jge.lib index 2f812c78fc0a7feaca393a2361004829b895a60d..500f8ab70ae5d895859bb992e4df7a7cae33ff8b 100644 GIT binary patch delta 85582 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 PzyW8h`^f0X__zNb`sTzl delta 48237 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%0DS zTbYI!GVQ#?titdhl-l$R$uAo z&%fuqd*^>)-u*H6y`dANd%f7Z=MVC0JQ00jR$r{??z#Kttb1U#C82o<-#2TjEkUEq z2=eavjk4+6?7h(XyyE#Z%L!)!w|;1Dhrp$2n*W{Ro9~`|KhJu3HVpShz7X!4vp@Pk zNc8OYEHTfgU#5VW>3`ie0{*utJQh%~g8v5ecJFu2>7NSyoTdZzO;n}3xWK86sI8RX zKY*9+wHZyobxio~_tie?)e#8C%Tw;E`;ycPok{$(m=G`VUy2t$Emq~8&ldt* zadPj)i+&1S5J|Y(Hh?TwCEIp@>%@pb?9R!FjC`TNHtPP0#IHCUm@0M4}!ZkxDJaED9`w0*~pUkCO6c7Oey*%vGN&j+p z6z~(BeDID}AYV6hIc4CxfZyZb`L+m0sK|AMiT`}O=p^IU@p;KDQtHtV?7ARM>JRc% z#6sx4?NWGu0y@E3LVaFt z{2x5M6h7g2Q<;~HC!PKyQ}-l_e&*Z0DR|88oq`wJ15@z09hriMOdIvU$yVXN`pC;b z-F0i+)^F9F@c#{bH4mSQf_@5q#*gQ5R}1DS(O;RTK-I&I;KBT)_$>wTe_Vj;U9ezY z68)bC@j$&>_JaV2xA?yT9?VCgpGD&c<{jY|<~0`4>tB=vPWb!4gE>g_SLMa4OD4xC1gj0IGdk{F`?2#v&@c&eRf3*OAsQ{N)mYb*h2-oI6^qyD?tSa&)tNMA~$y!^nGJAbfL;ae% z`Wu?oTy1oS)-C#PcD}WT7hm(irt8);`te&mg0&Upq^xaNGm#Dh4U+F@-L%7Y?rd%G zUOCHa5*2H=wX{u`tX$i=+06~=w>DOpcr5H~zUMVjsc-!clnabOKrho+lg3Aw%MSW* z$cLjoe404LKj*_2eVAmvi0}p0K|$0vR?8V*Wi#@!AZcFrp~lq+18PE$ z@U)LF_wgzp&-l1(Q$*hg6#pim__z7-+ZB#2${h*^zM^n80ZAqj@n0uM`lCL6%7-uc zu$e`Bgj>5dpwgcbPP*rS%I|rF17&xp@G?LAj354*A1<30$x#jzpGKhM*dz%5o0X36 z4nKZK;qNvZ6=ZYsx{t4A0#W!TLBhLzTx)@%tIQ4o^#<4x;mCDVIIvVUFiX&<5378b z5lo{u!KJL{1(&f=0Tx}v`T|%CJgM+9>QV4w$}4yY`V?dn^tvF6-3SwY5%x4OU@;KG z2=^_jGQkz_7oO6qCcSUa^x3W$+3qZE%60GHh&ow(?uD|1Fhh5gbT`+ zrx^IM=q_h1C`f%U)w=0j8z1m~(G#`^ul$mVC%;O;ReVPv2wj}XR&SY=0*ismfy%#9 z@Cw?4U=?q52|_>QL%oR>VG}p%mCj-^)PN->X2?Upbo})nBzB_17eL3FQ!cFXa}b zKJEZYKixp-XRpF9MQ?&D;4eu1y($R3HaDV=0!1GKN}owV>TkIq_17SX{(69_ueCtc zSF^&YukC{9;dVjj_xgAODEF=44=V&`k*|-p`1tmTex->mTexId) + if (mCurrentTextureFormat != quad->mTex->mTextureFormat){ + mCurrentTextureFormat = quad->mTex->mTextureFormat; + sceGuTexMode(mCurrentTextureFormat, 0, 0, mSwizzle); + } + + if (mCurrentTex != quad->mTex->mTexId) { sceGuTexImage(0, quad->mTex->mTexWidth, quad->mTex->mTexHeight, quad->mTex->mTexWidth, quad->mTex->mBits); mCurrentTex = quad->mTex->mTexId; @@ -580,6 +587,8 @@ void JRenderer::RenderQuad(JQuad* quad, float xo, float yo, float angle, float x mCurrentBlend = quad->mBlend; } + + //float destWidth = quad->mWidth*quad->mScaleX; float destHeight = quad->mHeight*yScale; float x = xo - quad->mHotSpotX*xScale; @@ -736,6 +745,11 @@ void JRenderer::RenderQuad(JQuad* quad, float xo, float yo, float angle, float x void JRenderer::RenderQuad(JQuad* quad, VertexColor* points) { + if (mCurrentTextureFormat != quad->mTex->mTextureFormat){ + mCurrentTextureFormat = quad->mTex->mTextureFormat; + sceGuTexMode(mCurrentTextureFormat, 0, 0, mSwizzle); + } + if (mCurrentTex != quad->mTex->mTexId) { sceGuTexImage(0, quad->mTex->mTexWidth, quad->mTex->mTexHeight, quad->mTex->mTexWidth, quad->mTex->mBits); @@ -748,6 +762,8 @@ void JRenderer::RenderQuad(JQuad* quad, VertexColor* points) mCurrentBlend = quad->mBlend; } + + // allocate memory on the current display list for temporary storage // in order to rotate, we use 4 vertices this time struct Vertex* vertices = (struct Vertex*)sceGuGetMemory(4 * sizeof(struct Vertex)); @@ -978,7 +994,21 @@ static void jpeg_mem_src(j_decompress_ptr cinfo, u8 *mem, int len) } -void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode) +int JRenderer::PixelSize(int textureMode){ + switch (textureMode) { + case PSP_DISPLAY_PIXEL_FORMAT_565: + return 2; + case PSP_DISPLAY_PIXEL_FORMAT_5551: + return 2; + case PSP_DISPLAY_PIXEL_FORMAT_4444: + return 2; + case PSP_DISPLAY_PIXEL_FORMAT_8888: + return 4; + } + return PIXEL_SIZE; +} + +void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode, int textureMode) { textureInfo.mBits = NULL; char filenamenew[4096]; @@ -992,9 +1022,13 @@ void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; - u8 *rgbadata, *scanline, *p, *q; + u8 *scanline, *p; + u16 *rgbadata16, *q16, *bits16; + u32 *rgbadata32, *q32, *bits32; int rawsize, i; - + int pixelSize = PixelSize(textureMode); + bits16 = NULL; + bits32 = NULL; FILE * fp = fopen(filenamenew, "rb"); if (fp==NULL) @@ -1020,40 +1054,53 @@ void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode int tw = getNextPower2(cinfo.output_width); int th = getNextPower2(cinfo.output_height); - PIXEL_TYPE* bits = NULL; + bool videoRAMUsed = false; - int size = tw * th * sizeof(PIXEL_TYPE); + int size = tw * th * pixelSize; if (useVideoRAM)// && (mCurrentPointer+size)<0x200000) { //bits = (PIXEL_TYPE*) (0x04000000+0x40000000+mCurrentPointer); //mCurrentPointer += size; - bits = (PIXEL_TYPE*)valloc(size); + if (pixelSize == 2){ + bits16 = (u16*)valloc(size); + }else{ + bits32 = (u32*)valloc(size); + } videoRAMUsed = true; } //else - if (bits == NULL) + if (bits16 == NULL && bits32 == NULL) { videoRAMUsed = false; - bits = (PIXEL_TYPE*) memalign(16, size); + if (pixelSize == 2){ + bits16 = (u16*)memalign(16, size); + }else{ + bits32 = (u32*)memalign(16, size); + } } - rgbadata = (u8 *)bits; - + //rgbadata = (u8 *)bits; + rgbadata16 = bits16; + rgbadata32 = bits32; if (mSwizzle) { - rgbadata = (u8 *) memalign(16, size); - - if(!rgbadata) + //rgbadata = (u8 *) memalign(16, size); + if (rgbadata16) rgbadata16 = (u16*) memalign(16, size); + if (rgbadata32) rgbadata32 = (u32*) memalign(16, size); + if(!rgbadata16 && !rgbadata32) { jpeg_destroy_decompress(&cinfo); - if (videoRAMUsed) + if (videoRAMUsed){ //mCurrentPointer -= size; - vfree(bits); - else - free (bits); + if (bits16) vfree(bits16); + if (bits32) vfree(bits32); + }else{ + if (bits16) free(bits16); + if (bits32) free(bits32); + } return; } } @@ -1063,36 +1110,67 @@ void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode { jpeg_destroy_decompress(&cinfo); - if (videoRAMUsed) - //mCurrentPointer -= size; - vfree(bits); - else - free (bits); - - if (mSwizzle) - if (rgbadata) - free(rgbadata); - + if (videoRAMUsed){ + if (bits16) vfree(bits16); + if (bits32) vfree(bits32); + }else{ + if (bits16) free(bits16); + if (bits32) free(bits32); + } + if (mSwizzle){ + if (rgbadata16) + free(rgbadata16); + if (rgbadata32) + free(rgbadata32); + } return; } - u8* currRow = rgbadata; + u16 * currRow16 = rgbadata16; + u32 * currRow32 = rgbadata32; + u16 color16; + u32 color32; while(cinfo.output_scanline < cinfo.output_height) { p = scanline; jpeg_read_scanlines(&cinfo, &scanline, 1); - q = currRow; - for(i=0; i<(int)cinfo.output_width; i++) - { - q[0] = p[0]; - q[1] = p[1]; - q[2] = p[2]; - q[3] = 255; + q16 = currRow16; + q32 = currRow32; + for(i=0; i<(int)cinfo.output_width; i++){ + int a = 255; + int r = p[0]; + int g = p[1]; + int b = p[2]; + switch (textureMode) { + case PSP_DISPLAY_PIXEL_FORMAT_565: + color16 = (r >> 3) | ((g >> 2) << 5) | ((b >> 3) << 11); + *(q16) = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_5551: + color16 = (r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10) | ((a >> 7) << 15); + *(q16) = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_4444: + color16 = (r >> 4) | ((g >> 4) << 4) | ((b >> 4) << 8) | ((a >> 4) << 12); + *(q16) = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_8888: + color32 = r | (g << 8) | (b << 16) | (a << 24); + *(q32) = color32; + break; + } + //q[0] = p[0]; + //q[1] = p[1]; + //q[2] = p[2]; + //q[3] = 255; - p+=3; q+=4; + p+=3; + if (q16) q16+=1; + if (q32) q32+=1; } - currRow += tw*4; + if (currRow32) currRow32+= tw; + if (currRow16) currRow16+= tw; } free(scanline); @@ -1103,13 +1181,20 @@ void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode if (mSwizzle) { - swizzle_fast((u8*)bits, (const u8*)rgbadata, tw*sizeof(PIXEL_TYPE), th/*cinfo.output_height*/); - free (rgbadata); + if (rgbadata16){ + swizzle_fast((u8*)bits16, (const u8*)rgbadata16, tw*pixelSize, th/*cinfo.output_height*/); + free (rgbadata16); + } + if (rgbadata32){ + swizzle_fast((u8*)bits32, (const u8*)rgbadata32, tw*pixelSize, th/*cinfo.output_height*/); + free (rgbadata32); + } } - textureInfo.mBits = (u8 *)bits; + if (bits16) textureInfo.mBits = (u8 *)bits16; + else textureInfo.mBits = (u8 *)bits32; textureInfo.mWidth = cinfo.output_width; textureInfo.mHeight = cinfo.output_height; textureInfo.mTexWidth = tw; @@ -1121,18 +1206,18 @@ void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode } -JTexture* JRenderer::LoadTexture(const char* filename, int mode) +JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureMode) { TextureInfo textureInfo; textureInfo.mVRAM = false; textureInfo.mBits = NULL; if (strstr(filename, ".jpg")!=NULL || strstr(filename, ".JPG")!=NULL) - LoadJPG(textureInfo, filename, mode); + LoadJPG(textureInfo, filename, mode, textureMode); else if(strstr(filename, ".gif")!=NULL || strstr(filename, ".GIF")!=NULL) - LoadGIF(textureInfo,filename, mode); + LoadGIF(textureInfo,filename, mode, textureMode); else - LoadPNG(textureInfo, filename, mode); + LoadPNG(textureInfo, filename, mode, textureMode); if (textureInfo.mBits == NULL) return NULL; @@ -1146,7 +1231,7 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode) mImageFilter->ProcessImage((PIXEL_TYPE*)textureInfo.mBits, textureInfo.mWidth, textureInfo.mHeight); tex->mTexId = mTexCounter++; - + tex->mTextureFormat = textureMode; tex->mWidth = textureInfo.mWidth; tex->mHeight = textureInfo.mHeight; tex->mTexWidth = textureInfo.mTexWidth; @@ -1174,7 +1259,7 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode) // http://svn.ps2dev.org/filedetails.php?repname=psp&path=/trunk/libpng/screenshot/main.c&rev=0&sc=0 // Load PNG as texture //------------------------------------------------------------------------------------------------ -void JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode) +void JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode, int textureMode) { textureInfo.mBits = NULL; @@ -1342,7 +1427,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode ////////////////////////////////////////////////////////////////////////// /// GIF Support -int JRenderer::image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode) +int JRenderer::image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode, int textureMode) { bool useVideoRAM = (mode == TEX_TYPE_USE_VRAM); // pixel ** image_data=NULL; @@ -1544,7 +1629,7 @@ int image_gif_read(GifFileType * ft, GifByteType * buf, int size) } -void JRenderer::LoadGIF(TextureInfo &textureInfo, const char *filename, int mode) +void JRenderer::LoadGIF(TextureInfo &textureInfo, const char *filename, int mode, int textureMode) { textureInfo.mBits = NULL; //bool useVideoRAM = (mode == TEX_TYPE_USE_VRAM); diff --git a/JGE/src/JMP3.cpp b/JGE/src/JMP3.cpp index dda1ba645..87730043b 100644 --- a/JGE/src/JMP3.cpp +++ b/JGE/src/JMP3.cpp @@ -196,7 +196,7 @@ bool JMP3::update() { // Output m_samplesPlayed += sceAudioSRCOutputBlocking(m_volume, tempBuffer); - m_playTime = (m_samplingRate > 0) ? (m_samplesPlayed / m_samplingRate) : 0; + m_playTime = (m_samplingRate > 0) ? (m_samplesPlayed / (m_samplingRate/1000)) : 0; } } @@ -225,9 +225,9 @@ int JMP3::playTime() const { } int JMP3::playTimeMinutes() { - return m_playTime / 60; + return (m_playTime / 1000) / 60; } int JMP3::playTimeSeconds() { - return m_playTime % 60; + return (m_playTime/1000) % 60; } diff --git a/JGE/src/JSfx.cpp b/JGE/src/JSfx.cpp index 16b26cd6a..06087b9dd 100644 --- a/JGE/src/JSfx.cpp +++ b/JGE/src/JSfx.cpp @@ -28,7 +28,12 @@ JMusic::~JMusic() } void JMusic::Update(){ - //if (mTrack) mTrack->update(); + +} + +int JMusic::getPlayTime(){ + if (mTrack) return mTrack->playTime(); + return 0; } JSample::JSample() diff --git a/JGE/src/JSprite.cpp b/JGE/src/JSprite.cpp index 9d44d5f38..e2a40cc87 100644 --- a/JGE/src/JSprite.cpp +++ b/JGE/src/JSprite.cpp @@ -119,6 +119,7 @@ void JSprite::Update(float dt) } } + } diff --git a/JGE/src/JTTFont.cpp b/JGE/src/JTTFont.cpp index 64094e756..bff50c381 100644 --- a/JGE/src/JTTFont.cpp +++ b/JGE/src/JTTFont.cpp @@ -38,7 +38,7 @@ extern void SwizzlePlot(u8* out, PIXEL_TYPE color, int i, int j, unsigned int wi JTTFont::JTTFont(int cacheImageSize) { - mColor = 0xffffffff; + mColor = ARGB(255,255,255,255); mAngle = 0.0; mLibrary = 0; mFace = 0; diff --git a/JGE/src/win/JRenderer_Win.cpp b/JGE/src/win/JRenderer_Win.cpp index db6baaf95..27cb86189 100644 --- a/JGE/src/win/JRenderer_Win.cpp +++ b/JGE/src/win/JRenderer_Win.cpp @@ -599,7 +599,7 @@ static void jpeg_mem_src(j_decompress_ptr cinfo, byte *mem, int len) LoadJPG ============== */ -void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode) +void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode, int TextureFormat) { @@ -746,7 +746,7 @@ static void PNGCustomReadDataFn(png_structp png_ptr, png_bytep data, png_size_t } -JTexture* JRenderer::LoadTexture(const char* filename, int mode) +JTexture* JRenderer::LoadTexture(const char* filename, int mode, int TextureFormat) { TextureInfo textureInfo; @@ -835,7 +835,7 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode) return tex; } -void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode) +void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode, int TextureFormat) { //TextureInfo* textureInfo = new TextureInfo; @@ -1030,7 +1030,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode ////////////////////////////////////////////////////////////////////////// /// GIF Support -int JRenderer::image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode) +int JRenderer::image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode, int TextureFormat) { // pixel ** image_data=NULL; @@ -1172,7 +1172,7 @@ int image_gif_read(GifFileType * ft, GifByteType * buf, int size) } -void JRenderer::LoadGIF(TextureInfo &textureInfo, const char *filename, int mode) +void JRenderer::LoadGIF(TextureInfo &textureInfo, const char *filename, int mode, int TextureFormat) { ///* //FILE * fp = fopen(filename, "rb"); @@ -1294,7 +1294,7 @@ void JRenderer::Enable2D() glMatrixMode (GL_PROJECTION); // Select The Projection Matrix glLoadIdentity (); // Reset The Projection Matrix - gluOrtho2D(0.0f, SCREEN_WIDTH_F, 0.0f, SCREEN_HEIGHT_F-1.0f); + gluOrtho2D(0.0f, SCREEN_WIDTH_F, 0.0f, SCREEN_HEIGHT_F); glMatrixMode (GL_MODELVIEW); // Select The Modelview Matrix glLoadIdentity (); // Reset The Modelview Matrix diff --git a/JGE/src/win/JSoundSystem_Win.cpp b/JGE/src/win/JSoundSystem_Win.cpp index 423b934d4..c11df794c 100644 --- a/JGE/src/win/JSoundSystem_Win.cpp +++ b/JGE/src/win/JSoundSystem_Win.cpp @@ -18,10 +18,14 @@ ////////////////////////////////////////////////////////////////////////// JMusic::JMusic() { - } void JMusic::Update(){ + +} + +int JMusic::getPlayTime(){ + return FSOUND_GetCurrentPosition(JSoundSystem::GetInstance()->mChannel)/44.1; //todo more generic, here it's only 44kHz } JMusic::~JMusic() @@ -151,11 +155,6 @@ JMusic *JSoundSystem::LoadMusic(const char *fileName) void JSoundSystem::PlayMusic(JMusic *music, bool looping) { - // if (music && music->mTrack) - // { - // FMUSIC_SetLooping(music->mTrack, (looping?1:0)); - // FMUSIC_PlaySong(music->mTrack); - // } if (music && music->mTrack) { @@ -212,20 +211,6 @@ JSample *JSoundSystem::LoadSample(const char *fileName) } -// void JSoundSystem::FreeSample(JSample *sample) -// { -// if (sample) -// { -// if (sample->mSample) -// FSOUND_Sample_Free(sample->mSample); -// -// //delete sample; -// //sample = NULL; -// } -// -// } - - void JSoundSystem::PlaySample(JSample *sample) { if (sample && sample->mSample) diff --git a/projects/mtg/include/TexturesCache.h b/projects/mtg/include/TexturesCache.h index 4a5d02e28..0d260389e 100644 --- a/projects/mtg/include/TexturesCache.h +++ b/projects/mtg/include/TexturesCache.h @@ -2,7 +2,7 @@ #define _TEXTURES_CACHE_H #define MAX_CACHE_OBJECTS 100 -#define CACHE_SIZE_PIXELS 1000000 +#define CACHE_SIZE_PIXELS 6000000 #define CACHE_CARD 1 #define CACHE_THUMB 2 diff --git a/projects/mtg/src/TexturesCache.cpp b/projects/mtg/src/TexturesCache.cpp index 13c47e552..f7a37ab2d 100644 --- a/projects/mtg/src/TexturesCache.cpp +++ b/projects/mtg/src/TexturesCache.cpp @@ -72,12 +72,13 @@ int TexturesCache::cleanup(){ JQuad * TexturesCache::getQuad(MTGCard * card, int type){ int cache_id = getCacheById(card->getId(), type); if (cache_id == -1){ - fprintf(stderr, "not found %d %i\n", card->getId(), type); + //Not found in the cache, we have to load the file and put it in the cache if (cleanup()){ cache_id = nb_textures; cache[cache_id] = NEW CardTexture(card, type); totalsize+= cache[cache_id]->nbpixels; + fprintf(stderr, "Total Size of cache in pixels: %i\n", totalsize); nb_textures++; } } @@ -105,7 +106,7 @@ CardTexture::CardTexture(MTGCard * card, int _type): type(_type){ OutputDebugString(filename); #endif if (fileExists(filename)) - tex = JRenderer::GetInstance()->LoadTexture(filename, false); + tex = JRenderer::GetInstance()->LoadTexture(filename, false,GU_PSM_5551); if (tex){ quad = NEW JQuad(tex, 0.0f, 0.0f, tex->mWidth, tex->mHeight); nbpixels = tex->mTexHeight * tex->mTexWidth;