diff --git a/code/REDALERT/CONQUER.CPP b/code/REDALERT/CONQUER.CPP index d2ca0b7..99527e8 100644 --- a/code/REDALERT/CONQUER.CPP +++ b/code/REDALERT/CONQUER.CPP @@ -1638,6 +1638,13 @@ void Color_Cycle(void) *=============================================================================================*/ void Call_Back(void) { + if (g_loadingPlague) { + Hide_Mouse(); + Load_Title_Screen("LOADING.PCX", &HidPage, NULL); + //Fancy_Text_Print(TXT_STAND_BY, (ScreenWidth / 2), (ScreenHeight / 2), &ColorRemaps[PCOLOR_DIALOG_BLUE], TBLACK, TPF_CENTER | TPF_TEXT | TPF_DROPSHADOW); + Show_Mouse(); + } + Device_Present(); /* diff --git a/code/REDALERT/FUNCTION.H b/code/REDALERT/FUNCTION.H index b226903..8ba3b12 100644 --- a/code/REDALERT/FUNCTION.H +++ b/code/REDALERT/FUNCTION.H @@ -1191,8 +1191,13 @@ const char* Buildings_FindHDTexture(const char* shapeFileName, int shapeNum, int int Units_GetNumFramesForTile(const char* shapeFileName, int shapeNum); const char* Units_FindHDTexture(const char* shapeFileName, int shapeNum, int frameNum); +struct Image_t; +void Sys_SetOverlayImage(Image_t* image); + extern bool g_inMainMenu; extern KeyNumType g_globalKeyNumType; extern int g_globalKeyFlags; extern float animFrameNum; + +extern bool g_loadingPlague; #endif \ No newline at end of file diff --git a/code/REDALERT/INIT.CPP b/code/REDALERT/INIT.CPP index 9ec0c7f..9146244 100644 --- a/code/REDALERT/INIT.CPP +++ b/code/REDALERT/INIT.CPP @@ -95,6 +95,8 @@ RemapControlType SidebarScheme; extern bool bNoMovies; #endif +bool g_loadingPlague = false; + /**************************************** ** Function prototypes for this module ** *****************************************/ @@ -388,15 +390,12 @@ bool Init_Game(int , char * []) ** If not automatically launching into the intro, then display the title ** page while the bulk data is cached. */ - if (!Special.IsFromInstall) { - Load_Title_Page(true); - - Hide_Mouse(); - Fancy_Text_Print(TXT_STAND_BY, 160*RESFACTOR, 120*RESFACTOR, &ColorRemaps[PCOLOR_DIALOG_BLUE], TBLACK, TPF_CENTER|TPF_TEXT|TPF_DROPSHADOW); - Show_Mouse(); - - CCPalette.Set(FADE_PALETTE_SLOW); + if (!Special.IsFromInstall) { +// jmarshall + g_loadingPlague = true; + //CCPalette.Set(FADE_PALETTE_SLOW); Call_Back(); +// jmarshall end } /* diff --git a/code/REDALERT/Image.h b/code/REDALERT/Image.h index 0c5e78b..35534ef 100644 --- a/code/REDALERT/Image.h +++ b/code/REDALERT/Image.h @@ -24,20 +24,31 @@ struct Image_t { bool perFrameRenderDimen; int numFrames; void* IconMapPtr; + uint8_t* ScratchBuffer; }; __forceinline Image_t::Image_t() { IconMapPtr = NULL; numAnimFrames = 0; + ScratchBuffer = NULL; perFrameRenderDimen = false; memset(HouseImages, 0, sizeof(HouseImages)); } __forceinline Image_t::~Image_t() { + if (ScratchBuffer) { + delete ScratchBuffer; + ScratchBuffer = NULL; + } } Image_t* Image_LoadImage(const char* name, bool loadAnims = false, bool loadHouseColor = false); Image_t* Image_CreateImageFrom8Bit(const char* name, int Width, int Height, unsigned char* data, unsigned char *remap = NULL); Image_t* Find_Image(const char* name); void Image_Add8BitImage(Image_t* image, int HouseId, int ShapeID, int Width, int Height, unsigned char* data, unsigned char* remap); -bool Image_Add32BitImage(const char* name, Image_t* image, int HouseId, int ShapeID, int frameId); \ No newline at end of file +bool Image_Add32BitImage(const char* name, Image_t* image, int HouseId, int ShapeID, int frameId); + +Image_t* Image_CreateBlankImage(const char* name, int width, int height); +void Image_UploadRaw(Image_t* image, uint8_t* data, bool paletteRebuild, uint8_t *palette); + +void Sys_SetOverlayImage(Image_t* image); \ No newline at end of file diff --git a/code/REDALERT/MAPSEL.CPP b/code/REDALERT/MAPSEL.CPP index 023382b..e439c3a 100644 --- a/code/REDALERT/MAPSEL.CPP +++ b/code/REDALERT/MAPSEL.CPP @@ -282,6 +282,7 @@ char const * Map_Selection(void) } } } + Sys_SetOverlayImage(NULL); Hide_Mouse(); diff --git a/code/REDALERT/MENUS.CPP b/code/REDALERT/MENUS.CPP index 7b534d0..a292a87 100644 --- a/code/REDALERT/MENUS.CPP +++ b/code/REDALERT/MENUS.CPP @@ -499,6 +499,8 @@ int Main_Menu(unsigned long ) static int max_buttons = 7; + g_loadingPlague = false; + /* ** Button enumerations: */ diff --git a/code/REDALERT/NEWBLIT.CPP b/code/REDALERT/NEWBLIT.CPP index 08610f9..52633cd 100644 --- a/code/REDALERT/NEWBLIT.CPP +++ b/code/REDALERT/NEWBLIT.CPP @@ -45,7 +45,9 @@ void GL_FillRect(int color, int x, int y, int width, int height) { void GL_DrawText(int color, int x, int y, char* text) { ImVec2 pos(x, y); - color = g_ColorXlat[color % 15]; + if (color == 0 || color == 160) { // This is a hack! + color = g_ColorXlat[color % 15]; + } float r = backbuffer_palette[(color * 3) + 0] / 255.0f; float g = backbuffer_palette[(color * 3) + 1] / 255.0f; float b = backbuffer_palette[(color * 3) + 2] / 255.0f; diff --git a/code/REDALERT/SCENARIO.CPP b/code/REDALERT/SCENARIO.CPP index 79d37cd..40551ba 100644 --- a/code/REDALERT/SCENARIO.CPP +++ b/code/REDALERT/SCENARIO.CPP @@ -321,10 +321,13 @@ bool Start_Scenario(char * name, bool briefing) { //BG Theme.Queue_Song(THEME_QUIET); Console_Printf("Start_Scenario: %s\n", name); + g_loadingPlague = true; + Call_Back(); Theme.Stop(); IsTanyaDead = SaveTanya; if (!Read_Scenario(name)) { + g_loadingPlague = false; Console_Printf("Failed to load scenario!\n"); return(false); } @@ -391,6 +394,8 @@ bool Start_Scenario(char * name, bool briefing) Play_Movie(Scen.BriefMovie); } // jmarshall end + g_loadingPlague = false; + /* ** If there's no briefing movie, restate the mission at the beginning. */ @@ -949,8 +954,11 @@ void Do_Win(void) }; Speak(VOX_ACCOMPLISHED); while (CountDownTimer || Is_Speaking()) { +// jmarshall + Fancy_Text_Print(TXT_SCENARIO_WON, (SeenBuff.Get_Width() / 2), 90 * RESFACTOR, &ColorRemaps[PCOLOR_RED], TBLACK, TPF_CENTER | TPF_VCR | TPF_USE_GRAD_PAL | TPF_DROPSHADOW); Call_Back(); - Device_Present(); +// Device_Present(); +// jmarshall end } } diff --git a/code/REDALERT/SCORE.CPP b/code/REDALERT/SCORE.CPP index ea2a50c..6d2204c 100644 --- a/code/REDALERT/SCORE.CPP +++ b/code/REDALERT/SCORE.CPP @@ -243,10 +243,10 @@ void ScorePrintClass::Update(void) Set_Font_Palette(PrimaryPalette); localstr[0]=((char *)DataPtr)[Stage-1]; HidPage.Print(localstr, pos-6*RESFACTOR, YPos, TBLACK, TBLACK); - HidPage.Blit(SeenPage, pos-6*RESFACTOR, YPos-1*RESFACTOR, pos-6*RESFACTOR, YPos-1*RESFACTOR, 7*RESFACTOR, 8*RESFACTOR); + //HidPage.Blit(SeenPage, pos-6*RESFACTOR, YPos-1*RESFACTOR, pos-6*RESFACTOR, YPos-1*RESFACTOR, 7*RESFACTOR, 8*RESFACTOR); #ifdef WIN32 - HidPage.Blit(*PseudoSeenBuff, pos-6*RESFACTOR, YPos-1*RESFACTOR, pos-6*RESFACTOR, YPos-1*RESFACTOR, 7*RESFACTOR, 8*RESFACTOR); - PseudoSeenBuff->Print(localstr, pos-6*RESFACTOR, YPos, TBLACK, TBLACK); + //HidPage.Blit(*PseudoSeenBuff, pos-6*RESFACTOR, YPos-1*RESFACTOR, pos-6*RESFACTOR, YPos-1*RESFACTOR, 7*RESFACTOR, 8*RESFACTOR); + //PseudoSeenBuff->Print(localstr, pos-6*RESFACTOR, YPos, TBLACK, TBLACK); #endif } if (((char *)DataPtr)[Stage]) { @@ -307,9 +307,9 @@ void ScoreScaleClass::Update(void) if (ScoreObjs[i]==this) ScoreObjs[i] = 0; } HidPage.Print((char *)DataPtr, XPos, YPos, TBLACK, TBLACK); - HidPage.Blit(SeenPage, XPos, YPos, XPos, YPos, 6*RESFACTOR, 6*RESFACTOR); + //HidPage.Blit(SeenPage, XPos, YPos, XPos, YPos, 6*RESFACTOR, 6*RESFACTOR); #ifdef WIN32 - HidPage.Blit(*PseudoSeenBuff, XPos, YPos, XPos, YPos, 6*RESFACTOR, 6*RESFACTOR); + //HidPage.Blit(*PseudoSeenBuff, XPos, YPos, XPos, YPos, 6*RESFACTOR, 6*RESFACTOR); #endif delete this; return; @@ -448,8 +448,8 @@ void ScoreClass::Presentation(void) #ifdef WIN32 Load_Title_Screen(ScreenNames[house], &HidPage, (unsigned char *)ScorePalette.Get_Data()); Increase_Palette_Luminance ((unsigned char*)ScorePalette.Get_Data(), 30, 30, 30, 63); - HidPage.Blit(SeenPage); - HidPage.Blit(*PseudoSeenBuff); + //HidPage.Blit(SeenPage); + //HidPage.Blit(*PseudoSeenBuff); #else Animate_Frame(anim, HidPage, 1); HidPage.Blit(SeenPage); @@ -943,7 +943,7 @@ void ScoreClass::Do_Nod_Buildings_Graph(void) /* ** Print the # of buildings on the hidpage so we only need to do it once */ - SeenPage.Blit(HidPage); + //SeenPage.Blit(HidPage); Set_Logic_Page(HidPage); Call_Back_Delay(30); Set_Font_Palette(_redpal); @@ -956,7 +956,7 @@ void ScoreClass::Do_Nod_Buildings_Graph(void) */ int i; for (i=0; i<98; i++) { - HidPage.Blit(HidPage, BUILDING_X, BUILDING_Y, 0, 0, 320-BUILDING_X, 48); + //HidPage.Blit(HidPage, BUILDING_X, BUILDING_Y, 0, 0, 320-BUILDING_X, 48); shapenum = 0; // no damage if (i >= 60) { shapenum = Extract_Shape_Count(factptr) - 2; // some damage @@ -1003,7 +1003,7 @@ void ScoreClass::Do_Nod_Buildings_Graph(void) i+32, 40, WINDOW_MAIN, SHAPE_FADING|SHAPE_CENTER|SHAPE_WIN_REL|SHAPE_GHOST, ColorRemaps[PCOLOR_RED].RemapTable, DisplayClass::UnitShadow); - HidPage.Blit(SeenPage, 0, 0, BUILDING_X, BUILDING_Y, 320-BUILDING_X, 48); + //HidPage.Blit(SeenPage, 0, 0, BUILDING_X, BUILDING_Y, 320-BUILDING_X, 48); /*BG if (!Keyboard->Check()) */ Call_Back_Delay(1); } @@ -1096,9 +1096,9 @@ void ScoreClass::Do_GDI_Graph(void const * yellowptr, void const * redptr, int g #endif CC_Draw_Shape(yellowptr, i, xpos*RESFACTOR, ypos*RESFACTOR, WINDOW_MAIN, SHAPE_WIN_REL, 0, 0); } else { - HidPage.Blit(SeenPage, 0, 0, xpos*RESFACTOR, ypos*RESFACTOR, (3+gdikilled)*RESFACTOR, 8*RESFACTOR); + //HidPage.Blit(SeenPage, 0, 0, xpos*RESFACTOR, ypos*RESFACTOR, (3+gdikilled)*RESFACTOR, 8*RESFACTOR); #ifdef WIN32 - HidPage.Blit(*PseudoSeenBuff, 0, 0, xpos*RESFACTOR, ypos*RESFACTOR, (3+gdikilled)*RESFACTOR, 8*RESFACTOR); + //HidPage.Blit(*PseudoSeenBuff, 0, 0, xpos*RESFACTOR, ypos*RESFACTOR, (3+gdikilled)*RESFACTOR, 8*RESFACTOR); #endif } @@ -1135,9 +1135,9 @@ void ScoreClass::Do_GDI_Graph(void const * yellowptr, void const * redptr, int g #endif CC_Draw_Shape(redptr, i, xpos*RESFACTOR, (ypos+12)*RESFACTOR, WINDOW_MAIN, SHAPE_WIN_REL, 0, 0); } else { - HidPage.Blit(SeenPage, 0, 0, xpos*RESFACTOR, (ypos+12)*RESFACTOR, (3+nodkilled)*RESFACTOR, 8*RESFACTOR); + //HidPage.Blit(SeenPage, 0, 0, xpos*RESFACTOR, (ypos+12)*RESFACTOR, (3+nodkilled)*RESFACTOR, 8*RESFACTOR); #ifdef WIN32 - HidPage.Blit(*PseudoSeenBuff, 0, 0, xpos*RESFACTOR, (ypos+12)*RESFACTOR, (3+nodkilled)*RESFACTOR, 8*RESFACTOR); + //HidPage.Blit(*PseudoSeenBuff, 0, 0, xpos*RESFACTOR, (ypos+12)*RESFACTOR, (3+nodkilled)*RESFACTOR, 8*RESFACTOR); #endif } @@ -1215,7 +1215,7 @@ void ScoreClass::Do_Nod_Casualties_Graph(void) ** Draw the infantrymen and pause briefly before running the graph */ Draw_InfantryMen(); - HidPage.Blit(SeenPage, 0, 0, BARGRAPH_X, CASUALTY_Y, 320-BARGRAPH_X, 34); + //HidPage.Blit(SeenPage, 0, 0, BARGRAPH_X, CASUALTY_Y, 320-BARGRAPH_X, 34); Call_Back_Delay(40); for (i = 1; i <= maxval; i++) { @@ -1223,7 +1223,7 @@ void ScoreClass::Do_Nod_Casualties_Graph(void) for (int index = 0; index < 3; index++) { Draw_InfantryMen(); Draw_Bar_Graphs(i, nodkilled, gdikilled); - HidPage.Blit(SeenPage, 0, 0, BARGRAPH_X, CASUALTY_Y, 320-BARGRAPH_X, 34); + //HidPage.Blit(SeenPage, 0, 0, BARGRAPH_X, CASUALTY_Y, 320-BARGRAPH_X, 34); Set_Font_Palette(_redpal); Count_Up_Print("%d", (i*NKilled) / maxval, NKilled, SCORETEXT_X+64, CASUALTY_Y + 2); @@ -1261,7 +1261,7 @@ void ScoreClass::Do_Nod_Casualties_Graph(void) Draw_InfantryMen(); } Draw_Bar_Graphs(maxval, nodkilled, gdikilled); - HidPage.Blit(SeenPage, 0, 0, BARGRAPH_X, CASUALTY_Y, 320-BARGRAPH_X, 34); + //HidPage.Blit(SeenPage, 0, 0, BARGRAPH_X, CASUALTY_Y, 320-BARGRAPH_X, 34); Call_Back_Delay(1); } } @@ -1416,14 +1416,14 @@ void ScoreClass::Input_Name(char str[], int xpos, int ypos, char const pal[]) /* ** Ready the hidpage so it can restore background under zoomed letters */ - SeenPage.Blit(HidPage); + //SeenPage.Blit(HidPage); /* ** Put a copy of the high score area on a spare area of the hidpage, so ** we can use it to restore the letter's background instead of filling ** with black. */ - HidPage.Blit(HidPage, 0, 100*RESFACTOR, 0, 0, 100*RESFACTOR, 100*RESFACTOR); + //HidPage.Blit(HidPage, 0, 100*RESFACTOR, 0, 0, 100*RESFACTOR, 100*RESFACTOR); // jmarshall - temp disable high school writing. // do { //// jmarshall @@ -1504,9 +1504,9 @@ void Animate_Cursor(int pos, int ypos) // If they moved the cursor, erase old one and force state=0, to make green draw right away if (pos != _lastpos) { - HidPage.Blit(SeenPage, (HALLFAME_X + (_lastpos*6))*RESFACTOR, ypos-100*RESFACTOR, (HALLFAME_X + (_lastpos*6))*RESFACTOR, ypos, 6*RESFACTOR, 1*RESFACTOR); + //HidPage.Blit(SeenPage, (HALLFAME_X + (_lastpos*6))*RESFACTOR, ypos-100*RESFACTOR, (HALLFAME_X + (_lastpos*6))*RESFACTOR, ypos, 6*RESFACTOR, 1*RESFACTOR); #ifdef WIN32 - HidPage.Blit(*PseudoSeenBuff, (HALLFAME_X + (_lastpos*6))*RESFACTOR, ypos-100*RESFACTOR, (HALLFAME_X + (_lastpos*6))*RESFACTOR, ypos, 6*RESFACTOR, 1*RESFACTOR); + //HidPage.Blit(*PseudoSeenBuff, (HALLFAME_X + (_lastpos*6))*RESFACTOR, ypos-100*RESFACTOR, (HALLFAME_X + (_lastpos*6))*RESFACTOR, ypos, 6*RESFACTOR, 1*RESFACTOR); #endif _lastpos = pos; _state = 0; @@ -1549,7 +1549,7 @@ void Draw_InfantryMen() /* ** First restore the background */ - HidPage.Blit(HidPage, BARGRAPH_X, CASUALTY_Y, 0, 0, 320-BARGRAPH_X, 34); + //HidPage.Blit(HidPage, BARGRAPH_X, CASUALTY_Y, 0, 0, 320-BARGRAPH_X, 34); Set_Logic_Page(HidPage); /* diff --git a/code/REDALERT/WIN32LIB/WSA.CPP b/code/REDALERT/WIN32LIB/WSA.CPP index 3dcc2f9..1f67ca9 100644 --- a/code/REDALERT/WIN32LIB/WSA.CPP +++ b/code/REDALERT/WIN32LIB/WSA.CPP @@ -68,6 +68,7 @@ #include //#include #include +#include "../Image.h" // // WSA animation header allocation type. @@ -92,8 +93,9 @@ #define TO_VIEWPORT 0x0 #define TO_PAGE 0x02 - - +static Image_t* wsa_hardware_image = NULL; +uint8_t* wsa_palette; +extern int ScreenWidth, ScreenHeight; typedef struct { unsigned short current_frame; @@ -177,7 +179,7 @@ void * __cdecl Open_Animation(char const *file_name, char *user_buffer, long use char *target_buffer; char *delta_buffer, *delta_back; SysAnimHeaderType *sys_header; - WSA_FileHeaderType file_header; + WSA_FileHeaderType file_header; /*======================================================================*/ /* Open the file to get the header information */ @@ -248,6 +250,12 @@ void * __cdecl Open_Animation(char const *file_name, char *user_buffer, long use target_buffer_size = (unsigned long) file_header.pixel_width * file_header.pixel_height; } + if (wsa_hardware_image == NULL) { + wsa_hardware_image = Image_CreateBlankImage("wsa", file_header.pixel_width, file_header.pixel_height); + } + Sys_SetOverlayImage(wsa_hardware_image); + wsa_palette = palette; + // NOTE:"THIS IS A BAD THING. SINCE sizeof(SysAnimHeaderType) CHANGED, THE ANIMATE.EXE // UTILITY DID NOT KNOW I UPDATED IT, IT ADDS IT TO largest_frame_size BEFORE SAVING // IT TO THE FILE. THIS MEANS I HAVE TO ADD THESE charS ON NOW FOR IT TO WORK. @@ -489,7 +497,9 @@ BOOL __cdecl Animate_Frame(void *handle, GraphicViewPortClass& view, if (view.Lock()!=TRUE) return (FALSE); // Decide if we are going to a page or a viewport (part of a buffer). - dest_width = view.Get_Width() + view.Get_XAdd() + view.Get_Pitch(); +// jmarshall + dest_width = wsa_hardware_image->width;//view.Get_Width() + view.Get_XAdd() + view.Get_Pitch(); +// jmarshall end // // adjust x_pixel and y_pixel by system pixel_x and pixel_y respectively. @@ -636,6 +646,8 @@ BOOL __cdecl Animate_Frame(void *handle, GraphicViewPortClass& view, #endif } + Image_UploadRaw(wsa_hardware_image, (uint8_t *)view.Get_Offset(), true, wsa_palette); + view.Unlock(); return TRUE; } diff --git a/code/REDALERT/WINSTUB.CPP b/code/REDALERT/WINSTUB.CPP index 1a77d5c..f05bc40 100644 --- a/code/REDALERT/WINSTUB.CPP +++ b/code/REDALERT/WINSTUB.CPP @@ -94,6 +94,12 @@ void Show_OldFrameBuffer(bool show) { memset(backbuffer_data_raw, 0, ScreenWidth * ScreenHeight * 4); } +Image_t* overlay_image = NULL; + +void Sys_SetOverlayImage(Image_t* image) { + overlay_image = image; +} + std::vector loaded_images; unsigned char* Draw_Dropsample(const unsigned char* in, int inwidth, int inheight, int outwidth, int outheight); @@ -259,6 +265,69 @@ static bool Image_loadHDImage(Image_t *image, const char* name, int houseid, int return true; } +Image_t* Image_CreateBlankImage(const char* name, int width, int height) { + int64_t hash = generateHashValue(name, strlen(name)); + + int image_table_size = loaded_images.size(); + if (image_table_size > 0) + { + Image_t** image_table = &loaded_images[0]; + + // Check to see if the image is already loaded. + for (int i = 0; i < image_table_size; i++) { + if (image_table[i]->namehash == hash) { + return image_table[i]; + } + } + } + Image_t* image = new Image_t(); + + + GLuint texture; + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + + + strcpy(image->name, name); + + image->HouseImages[0].image[0][0] = texture; + image->namehash = hash; + image->renderwidth[0] = image->width = width; + image->renderheight[0] = image->height = height; + + loaded_images.push_back(image); + return image; +} + +void Image_UploadRaw(Image_t* image, uint8_t* data, bool paletteRebuild, uint8_t* palette) { + if (image->ScratchBuffer == NULL && paletteRebuild) { + image->ScratchBuffer = new uint8_t[image->width * image->height * 4]; + } + + if (paletteRebuild) { + for (int i = 0; i < image->width * image->height; i++) { + unsigned char c = data[i]; + + unsigned char r = palette[(c * 3) + 0] << 2; + unsigned char g = palette[(c * 3) + 1] << 2; + unsigned char b = palette[(c * 3) + 2] << 2; + + image->ScratchBuffer[(i * 4) + 0] = r; + image->ScratchBuffer[(i * 4) + 1] = g; + image->ScratchBuffer[(i * 4) + 2] = b; + image->ScratchBuffer[(i * 4) + 3] = 255; + } + } + + glBindTexture(GL_TEXTURE_2D, image->HouseImages[0].image[0][0]); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->ScratchBuffer); +} + Image_t* Image_LoadImage(const char* name, bool loadAnims, bool loadHouseColor) { int64_t hash = generateHashValue(name, strlen(name)); @@ -489,6 +558,9 @@ void ImGui_NewFrame(void) { } void Device_Present(void) { + if (overlay_image) { + GL_RenderImage(overlay_image, 0, 0, ScreenWidth, ScreenHeight); + } // Rasterize the palette. //for (int i = 0; i < ScreenWidth * ScreenHeight; i++) { @@ -497,23 +569,24 @@ void Device_Present(void) { // backbuffer_data[(i * 4) + 2] = backbuffer_palette[(backbuffer_data_raw[i] * 3) + 2]; // backbuffer_data[(i * 4) + 3] = 255; //} - glBindTexture(GL_TEXTURE_2D, backbuffer_texture); - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ScreenWidth, ScreenHeight, GL_RGBA, GL_UNSIGNED_BYTE, backbuffer_data_raw); + //glBindTexture(GL_TEXTURE_2D, backbuffer_texture); + //glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ScreenWidth, ScreenHeight, GL_RGBA, GL_UNSIGNED_BYTE, backbuffer_data_raw); bool ScreenActive; ImGuiStyle& style = ImGui::GetStyle(); style.FramePadding = ImVec2(0, 0); ImGui::SetNextWindowSize(ImVec2(ScreenWidth, ScreenHeight)); ImGui::SetNextWindowPos(ImVec2(0, 0)); - ImGui::Begin("RenderWindow", &ScreenActive, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoMouseInputs); - if (show_oldframebuffer) - { - ImVec2 desktopSize(ScreenWidth, ScreenHeight); - ImGui::Image((ImTextureID)backbuffer_texture, desktopSize); - } - - ImGui::End(); - +// jmarshall - I'm removing this because we don't render the legacy buffer anymore. + //ImGui::Begin("RenderWindow", &ScreenActive, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoMouseInputs); + // if (show_oldframebuffer) + // { + // ImVec2 desktopSize(ScreenWidth, ScreenHeight); + // ImGui::Image((ImTextureID)backbuffer_texture, desktopSize); + // } + // + //ImGui::End(); +// jmarshall end if (Imgui_Dialog_Function) { Imgui_Dialog_Function(); diff --git a/ui/loading.png b/ui/loading.png new file mode 100644 index 0000000..aaaae25 Binary files /dev/null and b/ui/loading.png differ