|
From: <dv...@us...> - 2008-04-30 03:32:08
|
Revision: 216
http://dunelegacy.svn.sourceforge.net/dunelegacy/?rev=216&view=rev
Author: dvalin
Date: 2008-04-29 20:32:05 -0700 (Tue, 29 Apr 2008)
Log Message:
-----------
add spinlocks for palettes (something's busted though :/)
Modified Paths:
--------------
branches/dunks/include/DataCache.h
branches/dunks/src/Application.cpp
branches/dunks/src/DataCache.cpp
Modified: branches/dunks/include/DataCache.h
===================================================================
--- branches/dunks/include/DataCache.h 2008-04-30 03:22:55 UTC (rev 215)
+++ branches/dunks/include/DataCache.h 2008-04-30 03:32:05 UTC (rev 216)
@@ -23,7 +23,7 @@
#define NUM_MAPCHOICEPIECES 28
#define NUM_MAPCHOICEARROWS 9
class Animation;
-
+//class SDL_Palette;
//! \enum MUSICTYPE
/*! Types of music available in the game*/
typedef enum { MUSIC_ATTACK, /*!<Played when at least one of player's units was hit. */
@@ -34,6 +34,13 @@
MUSIC_RANDOM /*!<Player used key combination to change current music. */
} MUSICTYPE;
+typedef enum {
+ INTRO_PAL,
+ BENE_PAL,
+ IBM_PAL,
+ WESTWOOD_PAL,
+ NUM_PALETTES
+} Palette_enum;
// ObjPics
typedef enum {
@@ -411,6 +418,8 @@
void addAnimation(Animation_enum ID, Animation* animation, double frameRate = 0);
void addSoundChunk(Sound_enum ID, Mix_Chunk* tmp);
void addMusic(MUSICTYPE musicType, std::string filename, uint16_t trackNum);
+ void addPalette(Palette_enum palette, std::string paletteFile);
+ SDL_Palette* getPalette(Palette_enum palette);
Mix_Chunk* addMusic(MUSICTYPE musicType, uint16_t ID);
ImagePtr getObjPic(ObjPic_enum ID, HOUSETYPE house = HOUSE_HARKONNEN);
ImagePtr getGuiPic(GuiPic_enum ID, HOUSETYPE house = HOUSE_HARKONNEN);
@@ -430,6 +439,7 @@
remapped_images m_guiImg;
remapped_music m_music;
std::vector<songFile> songFiles[MUSIC_RANDOM];
+ SDL_Palette* m_palette[NUM_PALETTES];
Mix_Chunk* getChunkFromFile(std::string fileName);
Mix_Chunk* concat2Chunks(Mix_Chunk* sound1, Mix_Chunk* sound2);
Modified: branches/dunks/src/Application.cpp
===================================================================
--- branches/dunks/src/Application.cpp 2008-04-30 03:22:55 UTC (rev 215)
+++ branches/dunks/src/Application.cpp 2008-04-30 03:32:05 UTC (rev 216)
@@ -204,13 +204,8 @@
void Application::SetPalette()
{
- int len;
- unsigned char* data = ResMan::Instance()->readFile("INTRO:INTRO.PAL", &len);
+ SDL_Palette * pal = DataCache::Instance()->getPalette(INTRO_PAL);
- Palettefile tmp (data, len);
-
- SDL_Palette * pal = tmp.getPalette();
-
//This fixes white wheels. Is palette broken or sth??
pal->colors[205].r = 109;
@@ -308,16 +303,8 @@
SetPalette();
- int len;
-
- unsigned char * data;
+ m_cursor.reset(DataCache::Instance()->getGuiPic(UI_MouseCursor).get()); //mouse.getPicture(0));
- data = ResMan::Instance()->readFile("DUNE:MOUSE.SHP", &len);
-
- Shpfile mouse (data, len);
-
- m_cursor.reset(mouse.getPicture(0));
-
fprintf(stdout, "starting sound...\n");
SoundPlayerClass* soundPlayer = new SoundPlayerClass();
Modified: branches/dunks/src/DataCache.cpp
===================================================================
--- branches/dunks/src/DataCache.cpp 2008-04-30 03:22:55 UTC (rev 215)
+++ branches/dunks/src/DataCache.cpp 2008-04-30 03:32:05 UTC (rev 216)
@@ -4,8 +4,12 @@
#include <string>
#include <iostream>
-DataCache::DataCache() {}
+DataCache::DataCache() {
+ for(uint8_t i = 0; i < NUM_PALETTES; i++)
+ m_palette[i] = NULL;
+}
+
void DataCache::Init(){
for (uint8_t i=0; i< NUM_HOUSES; i++)
{
@@ -21,13 +25,19 @@
uint8_t *data, *mapdata;
+ addPalette(INTRO_PAL, "INTRO:INTRO.PAL");
+ // FIXME: Something seems to be fscked up with this palette, the Bene Gesserit
+ // mentat ends up looking a bit unhealthy greenish, needs to be corrected!
+ addPalette(BENE_PAL, "DUNE:BENE.PAL");
+ // For some reason things crashes if we fetch the palette and use it here.. :/
+ data = ResMan::Instance()->readFile("DUNE:BENE.PAL", &len);
+ Palettefile tmp (data, len);
+ SDL_Palette * pal = tmp.getPalette();
- // FIXM: Something seems to be fscked up with this palette, the Bene Gesserit
- // mentat ends up looking a bit unhealthy greenish, needs to be corrected!
- data = ResMan::Instance()->readFile("DUNE:BENE.PAL", &len);
- Palettefile tmp (data, len);
- SDL_Palette * pal = tmp.getPalette();
-
+ addPalette(IBM_PAL, "DUNE:IBM.PAL");
+ addPalette(WESTWOOD_PAL, "INTRO:WESTWOOD.PAL");
+
+
//LOADING FILES
data = ResMan::Instance()->readFile("DUNE:UNITS.SHP", &len);
ShpfilePtr units(new Shpfile(data, len));
@@ -53,7 +63,7 @@
data = ResMan::Instance()->readFile("DUNE:MENSHPO.SHP", &len);
ShpfilePtr menshpo(new Shpfile(data, len));
data = ResMan::Instance()->readFile("DUNE:MENSHPM.SHP", &len);
- ShpfilePtr menshpm(new Shpfile(data, len, pal));
+ ShpfilePtr menshpm(new Shpfile(data, len, getPalette(BENE_PAL)));
data = ResMan::Instance()->readFile("ENGLISH:CHOAM.ENG", &len);
ShpfilePtr choam(new Shpfile(data, len));
data = ResMan::Instance()->readFile("ENGLISH:BTTN.ENG", &len);
@@ -71,7 +81,7 @@
data = ResMan::Instance()->readFile("DUNE:MENTATH.CPS", &len);
CpsfilePtr mentath (new Cpsfile(data, len));
data = ResMan::Instance()->readFile("DUNE:MENTATM.CPS", &len);
- CpsfilePtr mentatm (new Cpsfile(data, len, pal));
+ CpsfilePtr mentatm (new Cpsfile(data, len, getPalette(BENE_PAL)));
data = ResMan::Instance()->readFile("ENGLISH:MENTAT.ENG", &len);
ShpfilePtr mentat (new Shpfile(data, len));
@@ -395,6 +405,10 @@
addSoundChunk(Intro_Wind_2bp, getChunkFromFile("INTROVOC:WIND2BP.VOC"));
addSoundChunk(Intro_Your, getChunkFromFile("INTROVOC:YOUR.VOC"));
+ BriefingStrings[0] = new Stringfile("ENGLISH:TEXTA.ENG");
+ BriefingStrings[1] = new Stringfile("ENGLISH:TEXTO.ENG");
+ BriefingStrings[2] = new Stringfile("ENGLISH:TEXTH.ENG");
+
addMusic(MUSIC_INTRO, "SOUND:DUNE0.ADL", 2);
addMusic(MUSIC_LOSE, "SOUND:DUNE1.ADL", 3);
addMusic(MUSIC_PEACE, "SOUND:DUNE2.ADL", 6);
@@ -413,13 +427,34 @@
addMusic(MUSIC_PEACE, "SOUND:DUNE19.ADL", 4);
addMusic(MUSIC_WIN, "SOUND:DUNE20.ADL", 2);
- BriefingStrings[0] = new Stringfile("ENGLISH:TEXTA.ENG");
- BriefingStrings[1] = new Stringfile("ENGLISH:TEXTO.ENG");
- BriefingStrings[2] = new Stringfile("ENGLISH:TEXTH.ENG");
delete data;
}
+void DataCache::addPalette(Palette_enum palette, std::string paletteFile)
+{
+ int len;
+ uint8_t * data = ResMan::Instance()->readFile(paletteFile, &len);
+ Palettefile tmp (data, len);
+
+ SDL_Palette * pal = tmp.getPalette();
+ m_palette[palette] = pal;
+}
+
+SDL_Palette* DataCache::getPalette(Palette_enum palette)
+{
+ SDL_Palette* pal;
+#ifdef THREADS
+ spinlock:
+#endif
+ pal = m_palette[palette];
+#ifdef THREADS
+ if(pal == NULL)
+ goto spinlock;
+#endif
+ return pal;
+}
+
void DataCache::addObjPic(ObjPic_enum ID, Image * tmp, HOUSETYPE house) {
m_objImg[house]->insert(std::pair<ObjPic_enum, ImagePtr>(ID,
@@ -437,7 +472,7 @@
images::iterator iter;
#ifdef THREADS
spinlock:
-#endif
+#endif
iter = m_objImg[house]->find(ID);
if (iter != m_objImg[house]->end())
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|