mirror of
https://github.com/jmarshall23/CnC_Remastered_Collection.git
synced 2026-08-11 23:50:51 +02:00
ScoreScreen works again, WSA animations are fullscreen, added loading screen.
This commit is contained in:
@@ -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();
|
||||
|
||||
/*
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+12
-1
@@ -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);
|
||||
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);
|
||||
@@ -282,6 +282,7 @@ char const * Map_Selection(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
Sys_SetOverlayImage(NULL);
|
||||
|
||||
Hide_Mouse();
|
||||
|
||||
|
||||
@@ -499,6 +499,8 @@ int Main_Menu(unsigned long )
|
||||
|
||||
static int max_buttons = 7;
|
||||
|
||||
g_loadingPlague = false;
|
||||
|
||||
/*
|
||||
** Button enumerations:
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+22
-22
@@ -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);
|
||||
|
||||
/*
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
#include <iff.h>
|
||||
//#include <mem.h>
|
||||
#include <string.h>
|
||||
#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;
|
||||
}
|
||||
|
||||
+84
-11
@@ -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<Image_t *> 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();
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
Reference in New Issue
Block a user