// SDL interface layer for the Build Engine // Use SDL 1.2 or 2.0 from http://www.libsdl.org #include "a.h" #include "build.h" #include "common.h" #include "compat.h" #include "engine_priv.h" #include "palette.h" #include "baselayer.h" #include "mmulti.h" #include "glsurface.h" double g_beforeSwapTime; GameInterface* gi; int myconnectindex, numplayers; int connecthead, connectpoint2[MAXMULTIPLAYERS]; void ImGui_Init_Backend() { //ImGui_ImplSDL2_InitForOpenGL(sdl_window, sdl_context); } void ImGui_Begin_Frame() { //ImGui_ImplOpenGL3_NewFrame(); //ImGui_ImplSDL2_NewFrame(sdl_window); //ImGui::NewFrame(); } int32_t xres=-1, yres=-1, bpp=0, bytesperline, refreshfreq=-1; intptr_t frameplace=0; int32_t lockcount=0; char modechange=1; char offscreenrendering=0; // Calculate ylookup[] and call setvlinebpl() void calc_ylookup(int32_t bpl, int32_t lastyidx) { int32_t i, j = 0; static int32_t ylookupsiz; Bassert(lastyidx <= MAXYDIM); lastyidx++; if (lastyidx > ylookupsiz) { ylookup.Resize(lastyidx); ylookupsiz = lastyidx; } for (i = 0; i <= lastyidx - 4; i += 4) { ylookup[i] = j; ylookup[i + 1] = j + bpl; ylookup[i + 2] = j + (bpl << 1); ylookup[i + 3] = j + (bpl * 3); j += (bpl << 2); } for (; i < lastyidx; i++) { ylookup[i] = j; j += bpl; } setvlinebpl(bpl); } // // begindrawing() -- locks the framebuffer for drawing // void videoBeginDrawing(void) { if (bpp > 8) { if (offscreenrendering) return; frameplace = 0; bytesperline = 0; modechange = 0; return; } // lock the frame if (lockcount++ > 0) return; static intptr_t backupFrameplace = 0; if (inpreparemirror) { //POGO: if we are offscreenrendering and we need to render a mirror // or we are rendering a mirror and we start offscreenrendering, // backup our offscreen target so we can restore it later // (but only allow one level deep, // i.e. no viewscreen showing a camera showing a mirror that reflects the same viewscreen and recursing) if (offscreenrendering) { if (!backupFrameplace) backupFrameplace = frameplace; else if (frameplace != (intptr_t)mirrorBuffer.Data() && frameplace != backupFrameplace) return; } frameplace = (intptr_t)mirrorBuffer.Data(); if (offscreenrendering) return; } else if (offscreenrendering) { if (backupFrameplace) { frameplace = backupFrameplace; backupFrameplace = 0; } return; } else frameplace = (intptr_t)glsurface_getBuffer(); if (modechange) { bytesperline = xdim; calc_ylookup(bytesperline, ydim); modechange=0; } } // // enddrawing() -- unlocks the framebuffer // void videoEndDrawing(void) { if (bpp > 8) { if (!offscreenrendering) frameplace = 0; return; } if (!frameplace) return; if (lockcount > 1) { lockcount--; return; } if (!offscreenrendering) frameplace = 0; if (lockcount == 0) return; lockcount = 0; } auto vsnprintfptr = vsnprintf; // This is an inline in Visual Studio but we need an address for it to satisfy the MinGW compiled libraries.